@cartridge/controller 0.13.4 → 0.13.5
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/.turbo/turbo-build$colon$deps.log +39 -19
- package/.turbo/turbo-build.log +38 -18
- package/HEADLESS_MODE.md +113 -0
- package/dist/controller.d.ts +9 -2
- package/dist/errors.d.ts +10 -0
- package/dist/iframe/security.d.ts +10 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1662 -1244
- package/dist/index.js.map +1 -1
- package/dist/node/index.cjs +28 -3
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +11 -1
- package/dist/node/index.d.ts +11 -1
- package/dist/node/index.js +26 -4
- package/dist/node/index.js.map +1 -1
- package/dist/{provider-DSqqvDee.js → provider-NKp7_oNj.js} +134 -116
- package/dist/provider-NKp7_oNj.js.map +1 -0
- package/dist/session/provider.d.ts +1 -0
- package/dist/session.js +13 -10
- package/dist/session.js.map +1 -1
- package/dist/stats.html +1 -1
- package/dist/types.d.ts +20 -1
- package/package.json +4 -3
- package/src/__tests__/asWalletStandard.test.ts +87 -0
- package/src/__tests__/headlessConnectApproval.test.ts +97 -0
- package/src/__tests__/iframeSecurity.test.ts +84 -0
- package/src/__tests__/parseChainId.test.ts +1 -1
- package/src/controller.ts +165 -13
- package/src/errors.ts +30 -0
- package/src/iframe/base.ts +14 -3
- package/src/iframe/keychain.ts +1 -5
- package/src/iframe/security.ts +48 -0
- package/src/index.ts +1 -0
- package/src/session/provider.ts +2 -0
- package/src/types.ts +30 -1
- package/src/utils.ts +2 -2
- package/dist/provider-DSqqvDee.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/account.ts","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/enums.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/createDestructor.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/createLogger.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/getOriginFromSrc.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/errorSerialization.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/connectCallReceiver.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/generateId.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/methodSerialization.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/connectCallSender.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/handleAckMessageFactory.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/handleSynMessageFactory.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/monitorIframeRemoval.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/startConnectionTimeout.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/validateIframeHasSrcOrSrcDoc.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/connectToChild.js","../src/iframe/base.ts","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/_version.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/properties.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/errors.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/data.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/utils.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/_u64.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/sha3.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/crypto/keccak.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/address/address.js","../src/wallets/argent/index.ts","../../../node_modules/.pnpm/mipd@0.0.7_typescript@5.8.3/node_modules/mipd/dist/esm/utils.js","../../../node_modules/.pnpm/mipd@0.0.7_typescript@5.8.3/node_modules/mipd/dist/esm/store.js","../src/wallets/platform.ts","../src/wallets/ethereum-base.ts","../src/wallets/base/index.ts","../src/wallets/metamask/index.ts","../../../node_modules/.pnpm/@scure+base@1.2.5/node_modules/@scure/base/lib/esm/index.js","../../../node_modules/.pnpm/micro-packed@0.7.3/node_modules/micro-packed/lib/esm/index.js","../../../node_modules/.pnpm/micro-sol-signer@0.5.0/node_modules/micro-sol-signer/lib/esm/index.js","../../../node_modules/.pnpm/base-x@5.0.1/node_modules/base-x/src/esm/index.js","../../../node_modules/.pnpm/bs58@6.0.0/node_modules/bs58/src/esm/index.js","../src/utils/solana/index.ts","../src/wallets/phantom/index.ts","../src/wallets/phantom-evm/index.ts","../src/wallets/rabby/index.ts","../src/wallets/braavos/index.ts","../src/wallets/bridge.ts","../src/iframe/keychain.ts","../src/url-validator.ts","../src/controller.ts","../src/lookup.ts","../src/toast/utils.ts","../src/toast/styles.ts","../src/toast/components/close-button.ts","../src/toast/variants/error.ts","../src/toast/variants/transaction.ts","../src/toast/variants/network-switch.ts","../src/toast/variants/achievement.ts","../src/toast/variants/marketplace.ts","../src/toast/variants/quest.ts","../src/toast/components/progress-bar.ts","../src/toast/utils/progress-bar.ts","../src/toast/index.ts","../../../node_modules/.pnpm/@cartridge+presets@https+++codeload.github.com+cartridge-gg+presets+tar.gz+bac9813/node_modules/@cartridge/presets/dist/index.js"],"sourcesContent":["import {\n InvokeFunctionResponse,\n TypedData,\n WalletAccount,\n Call,\n AllowArray,\n} from \"starknet\";\n\nimport {\n ConnectError,\n Keychain,\n KeychainOptions,\n Modal,\n ResponseCodes,\n} from \"./types\";\nimport { AsyncMethodReturns } from \"@cartridge/penpal\";\nimport BaseProvider from \"./provider\";\nimport { toArray } from \"./utils\";\nimport { SIGNATURE } from \"@starknet-io/types-js\";\n\nclass ControllerAccount extends WalletAccount {\n private keychain: AsyncMethodReturns<Keychain>;\n private modal: Modal;\n private options?: KeychainOptions;\n\n constructor(\n provider: BaseProvider,\n rpcUrl: string,\n address: string,\n keychain: AsyncMethodReturns<Keychain>,\n options: KeychainOptions,\n modal: Modal,\n ) {\n super({\n provider: { nodeUrl: rpcUrl },\n walletProvider: provider,\n address,\n });\n\n this.keychain = keychain;\n this.options = options;\n this.modal = modal;\n }\n\n /**\n * Invoke execute function in account contract\n *\n * @param calls the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abis (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n async execute(calls: AllowArray<Call>): Promise<InvokeFunctionResponse> {\n calls = toArray(calls);\n\n return new Promise(async (resolve, reject) => {\n const sessionExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n false,\n this.options?.feeSource,\n );\n\n // Session call succeeded\n if (sessionExecute.code === ResponseCodes.SUCCESS) {\n resolve(sessionExecute as InvokeFunctionResponse);\n return;\n }\n\n // Propagates session txn error back to caller\n if (\n this.options?.propagateSessionErrors &&\n sessionExecute.code !== ResponseCodes.USER_INTERACTION_REQUIRED\n ) {\n reject((sessionExecute as ConnectError).error);\n return;\n }\n\n // Handle errorDisplayMode\n const errorDisplayMode = this.options?.errorDisplayMode || \"modal\";\n const error = (sessionExecute as ConnectError).error;\n\n // Exception: USER_INTERACTION_REQUIRED always shows modal UI\n // (SessionRefreshRequired and ManualExecutionRequired)\n const requiresUI =\n sessionExecute.code === ResponseCodes.USER_INTERACTION_REQUIRED;\n\n // Silent mode - no UI, just reject\n // Exception: USER_INTERACTION_REQUIRED goes to modal\n if (errorDisplayMode === \"silent\" && !requiresUI) {\n console.warn(\n \"[Cartridge Controller] Transaction failed silently:\",\n error,\n );\n reject(error);\n return;\n }\n\n // Notification mode - show clickable toast\n // Exception: USER_INTERACTION_REQUIRED goes directly to modal\n if (errorDisplayMode === \"notification\" && !requiresUI) {\n const { toast } = await import(\"./toast\");\n\n let isHandled = false;\n let dismissFn: (() => void) | undefined;\n\n dismissFn = toast({\n variant: \"error\",\n message: error?.message || \"Transaction failed\",\n duration: 10000,\n onClick: () => {\n // Mark as handled and dismiss toast to prevent duplicate clicks\n isHandled = true;\n if (dismissFn) dismissFn();\n\n // Open modal when notification is clicked\n this.modal.open();\n this.keychain\n .execute(calls, undefined, undefined, true, error)\n .then((manualExecute) => {\n if (manualExecute.code === ResponseCodes.SUCCESS) {\n resolve(manualExecute as InvokeFunctionResponse);\n this.modal.close();\n } else {\n reject((manualExecute as ConnectError).error);\n }\n });\n },\n });\n\n // If toast auto-dismisses without being clicked, reject the promise\n // Set timeout slightly longer than toast duration to allow for completion\n setTimeout(() => {\n if (!isHandled) {\n reject(error);\n }\n }, 10100);\n\n return;\n }\n\n // Default modal mode - existing behavior\n // Session call or Paymaster flow failed.\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n true,\n error,\n );\n\n // Manual call succeeded\n if (manualExecute.code === ResponseCodes.SUCCESS) {\n resolve(manualExecute as InvokeFunctionResponse);\n this.modal.close();\n return;\n }\n\n reject((manualExecute as ConnectError).error);\n return;\n });\n }\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n async signMessage(typedData: TypedData): Promise<SIGNATURE> {\n return new Promise(async (resolve, reject) => {\n const sessionSign = await this.keychain.signMessage(typedData, \"\", true);\n\n // Session sign succeeded\n if (!(\"code\" in sessionSign)) {\n resolve(sessionSign as SIGNATURE);\n return;\n }\n\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualSign = await this.keychain.signMessage(typedData, \"\", false);\n\n if (!(\"code\" in manualSign)) {\n resolve(manualSign as SIGNATURE);\n } else {\n reject((manualSign as ConnectError).error);\n }\n this.modal.close();\n });\n }\n}\n\nexport default ControllerAccount;\n","export var MessageType;\n(function (MessageType) {\n MessageType[\"Call\"] = \"call\";\n MessageType[\"Reply\"] = \"reply\";\n MessageType[\"Syn\"] = \"syn\";\n MessageType[\"SynAck\"] = \"synAck\";\n MessageType[\"Ack\"] = \"ack\";\n})(MessageType || (MessageType = {}));\nexport var Resolution;\n(function (Resolution) {\n Resolution[\"Fulfilled\"] = \"fulfilled\";\n Resolution[\"Rejected\"] = \"rejected\";\n})(Resolution || (Resolution = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[\"ConnectionDestroyed\"] = \"ConnectionDestroyed\";\n ErrorCode[\"ConnectionTimeout\"] = \"ConnectionTimeout\";\n ErrorCode[\"NoIframeSrc\"] = \"NoIframeSrc\";\n})(ErrorCode || (ErrorCode = {}));\nexport var NativeErrorName;\n(function (NativeErrorName) {\n NativeErrorName[\"DataCloneError\"] = \"DataCloneError\";\n})(NativeErrorName || (NativeErrorName = {}));\nexport var NativeEventType;\n(function (NativeEventType) {\n NativeEventType[\"Message\"] = \"message\";\n})(NativeEventType || (NativeEventType = {}));\n","export default (localName, log) => {\n const callbacks = [];\n let destroyed = false;\n return {\n destroy(error) {\n if (!destroyed) {\n destroyed = true;\n log(`${localName}: Destroying connection`);\n callbacks.forEach((callback) => {\n callback(error);\n });\n }\n },\n onDestroy(callback) {\n destroyed ? callback() : callbacks.push(callback);\n },\n };\n};\n","export default (debug) => {\n /**\n * Logs a message if debug is enabled.\n */\n return (...args) => {\n if (debug) {\n console.log('[Penpal]', ...args); // eslint-disable-line no-console\n }\n };\n};\n","const DEFAULT_PORT_BY_PROTOCOL = {\n 'http:': '80',\n 'https:': '443',\n};\nconst URL_REGEX = /^(https?:)?\\/\\/([^/:]+)?(:(\\d+))?/;\nconst opaqueOriginSchemes = ['file:', 'data:'];\n/**\n * Converts a src value into an origin.\n */\nexport default (src) => {\n if (src && opaqueOriginSchemes.find((scheme) => src.startsWith(scheme))) {\n // The origin of the child document is an opaque origin and its\n // serialization is \"null\"\n // https://html.spec.whatwg.org/multipage/origin.html#origin\n return 'null';\n }\n // Note that if src is undefined, then srcdoc is being used instead of src\n // and we can follow this same logic below to get the origin of the parent,\n // which is the origin that we will need to use.\n const location = document.location;\n const regexResult = URL_REGEX.exec(src);\n let protocol;\n let hostname;\n let port;\n if (regexResult) {\n // It's an absolute URL. Use the parsed info.\n // regexResult[1] will be undefined if the URL starts with //\n protocol = regexResult[1] ? regexResult[1] : location.protocol;\n hostname = regexResult[2];\n port = regexResult[4];\n }\n else {\n // It's a relative path. Use the current location's info.\n protocol = location.protocol;\n hostname = location.hostname;\n port = location.port;\n }\n // If the port is the default for the protocol, we don't want to add it to the origin string\n // or it won't match the message's event.origin.\n const portSuffix = port && port !== DEFAULT_PORT_BY_PROTOCOL[protocol] ? `:${port}` : '';\n return `${protocol}//${hostname}${portSuffix}`;\n};\n","/**\n * Converts an error object into a plain object.\n */\nexport const serializeError = ({ name, message, stack, }) => ({\n name,\n message,\n stack,\n});\n/**\n * Converts a plain object into an error object.\n */\nexport const deserializeError = (obj) => {\n const deserializedError = new Error();\n // @ts-ignore\n Object.keys(obj).forEach((key) => (deserializedError[key] = obj[key]));\n return deserializedError;\n};\n","import { serializeError } from './errorSerialization';\nimport { MessageType, NativeEventType, NativeErrorName, Resolution, } from './enums';\n/**\n * Listens for \"call\" messages coming from the remote, executes the corresponding method, and\n * responds with the return value.\n */\nexport default (info, serializedMethods, log) => {\n const { localName, local, remote, originForSending, originForReceiving, } = info;\n let destroyed = false;\n const handleMessageEvent = (event) => {\n if (event.source !== remote || event.data.penpal !== MessageType.Call) {\n return;\n }\n if (originForReceiving !== '*' && event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const callMessage = event.data;\n const { methodName, args, id } = callMessage;\n log(`${localName}: Received ${methodName}() call`);\n const createPromiseHandler = (resolution) => {\n return (returnValue) => {\n log(`${localName}: Sending ${methodName}() reply`);\n if (destroyed) {\n // It's possible to throw an error here, but it would need to be thrown asynchronously\n // and would only be catchable using window.onerror. This is because the consumer\n // is merely returning a value from their method and not calling any function\n // that they could wrap in a try-catch. Even if the consumer were to catch the error,\n // the value of doing so is questionable. Instead, we'll just log a message.\n log(`${localName}: Unable to send ${methodName}() reply due to destroyed connection`);\n return;\n }\n const message = {\n penpal: MessageType.Reply,\n id,\n resolution,\n returnValue,\n };\n if (resolution === Resolution.Rejected &&\n returnValue instanceof Error) {\n message.returnValue = serializeError(returnValue);\n message.returnValueIsError = true;\n }\n try {\n remote.postMessage(message, originForSending);\n }\n catch (err) {\n // If a consumer attempts to send an object that's not cloneable (e.g., window),\n // we want to ensure the receiver's promise gets rejected.\n if (err.name === NativeErrorName.DataCloneError) {\n const errorReplyMessage = {\n penpal: MessageType.Reply,\n id,\n resolution: Resolution.Rejected,\n returnValue: serializeError(err),\n returnValueIsError: true,\n };\n remote.postMessage(errorReplyMessage, originForSending);\n }\n throw err;\n }\n };\n };\n new Promise((resolve) => resolve(serializedMethods[methodName]\n .call(serializedMethods, event.origin)\n .apply(serializedMethods, args))).then(createPromiseHandler(Resolution.Fulfilled), createPromiseHandler(Resolution.Rejected));\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n return () => {\n destroyed = true;\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n };\n};\n","let id = 0;\n/**\n * @return {number} A unique ID (not universally unique)\n */\nexport default () => ++id;\n","const KEY_PATH_DELIMITER = '.';\nconst keyPathToSegments = (keyPath) => keyPath ? keyPath.split(KEY_PATH_DELIMITER) : [];\nconst segmentsToKeyPath = (segments) => segments.join(KEY_PATH_DELIMITER);\nconst createKeyPath = (key, prefix) => {\n const segments = keyPathToSegments(prefix || '');\n segments.push(key);\n return segmentsToKeyPath(segments);\n};\n/**\n * Given a `keyPath`, set it to be `value` on `subject`, creating any intermediate\n * objects along the way.\n *\n * @param {Object} subject The object on which to set value.\n * @param {string} keyPath The key path at which to set value.\n * @param {Object} value The value to store at the given key path.\n * @returns {Object} Updated subject.\n */\nexport const setAtKeyPath = (subject, keyPath, value) => {\n const segments = keyPathToSegments(keyPath);\n segments.reduce((prevSubject, key, idx) => {\n if (typeof prevSubject[key] === 'undefined') {\n prevSubject[key] = {};\n }\n if (idx === segments.length - 1) {\n prevSubject[key] = value;\n }\n return prevSubject[key];\n }, subject);\n return subject;\n};\n/**\n * Given a dictionary of (nested) keys to function, flatten them to a map\n * from key path to function.\n *\n * @param {Object} methods The (potentially nested) object to serialize.\n * @param {string} prefix A string with which to prefix entries. Typically not intended to be used by consumers.\n * @returns {Object} An map from key path in `methods` to functions.\n */\nexport const serializeMethods = (methods, prefix) => {\n const flattenedMethods = {};\n Object.keys(methods).forEach((key) => {\n const value = methods[key];\n const keyPath = createKeyPath(key, prefix);\n if (typeof value === 'object') {\n // Recurse into any nested children.\n Object.assign(flattenedMethods, serializeMethods(value, keyPath));\n }\n if (typeof value === 'function') {\n // If we've found a method, expose it.\n flattenedMethods[keyPath] = value;\n }\n });\n return flattenedMethods;\n};\n/**\n * Given a map of key paths to functions, unpack the key paths to an object.\n *\n * @param {Object} flattenedMethods A map of key paths to functions to unpack.\n * @returns {Object} A (potentially nested) map of functions.\n */\nexport const deserializeMethods = (flattenedMethods) => {\n const methods = {};\n for (const keyPath in flattenedMethods) {\n setAtKeyPath(methods, keyPath, flattenedMethods[keyPath]);\n }\n return methods;\n};\n","import generateId from './generateId';\nimport { deserializeError } from './errorSerialization';\nimport { deserializeMethods } from './methodSerialization';\nimport { ErrorCode, MessageType, NativeEventType, Resolution } from './enums';\n/**\n * Augments an object with methods that match those defined by the remote. When these methods are\n * called, a \"call\" message will be sent to the remote, the remote's corresponding method will be\n * executed, and the method's return value will be returned via a message.\n * @param {Object} callSender Sender object that should be augmented with methods.\n * @param {Object} info Information about the local and remote windows.\n * @param {Array} methodKeyPaths Key paths of methods available to be called on the remote.\n * @param {Promise} destructionPromise A promise resolved when destroy() is called on the penpal\n * connection.\n * @returns {Object} The call sender object with methods that may be called.\n */\nexport default (callSender, info, methodKeyPaths, destroyConnection, log) => {\n const { localName, local, remote, originForSending, originForReceiving, } = info;\n let destroyed = false;\n log(`${localName}: Connecting call sender`);\n const createMethodProxy = (methodName) => {\n return (...args) => {\n log(`${localName}: Sending ${methodName}() call`);\n // This handles the case where the iframe has been removed from the DOM\n // (and therefore its window closed), the consumer has not yet\n // called destroy(), and the user calls a method exposed by\n // the remote. We detect the iframe has been removed and force\n // a destroy() immediately so that the consumer sees the error saying\n // the connection has been destroyed. We wrap this check in a try catch\n // because Edge throws an \"Object expected\" error when accessing\n // contentWindow.closed on a contentWindow from an iframe that's been\n // removed from the DOM.\n let iframeRemoved;\n try {\n if (remote.closed) {\n iframeRemoved = true;\n }\n }\n catch (e) {\n iframeRemoved = true;\n }\n if (iframeRemoved) {\n destroyConnection();\n }\n if (destroyed) {\n const error = new Error(`Unable to send ${methodName}() call due ` + `to destroyed connection`);\n error.code = ErrorCode.ConnectionDestroyed;\n throw error;\n }\n return new Promise((resolve, reject) => {\n const id = generateId();\n const handleMessageEvent = (event) => {\n if (event.source !== remote ||\n event.data.penpal !== MessageType.Reply ||\n event.data.id !== id) {\n return;\n }\n if (originForReceiving !== '*' &&\n event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const replyMessage = event.data;\n log(`${localName}: Received ${methodName}() reply`);\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n let returnValue = replyMessage.returnValue;\n if (replyMessage.returnValueIsError) {\n returnValue = deserializeError(returnValue);\n }\n (replyMessage.resolution === Resolution.Fulfilled ? resolve : reject)(returnValue);\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n const callMessage = {\n penpal: MessageType.Call,\n id,\n methodName,\n args,\n };\n remote.postMessage(callMessage, originForSending);\n });\n };\n };\n // Wrap each method in a proxy which sends it to the corresponding receiver.\n const flattenedMethods = methodKeyPaths.reduce((api, name) => {\n api[name] = createMethodProxy(name);\n return api;\n }, {});\n // Unpack the structure of the provided methods object onto the CallSender, exposing\n // the methods in the same shape they were provided.\n Object.assign(callSender, deserializeMethods(flattenedMethods));\n return () => {\n destroyed = true;\n };\n};\n","import connectCallReceiver from '../connectCallReceiver';\nimport connectCallSender from '../connectCallSender';\n/**\n * Handles an ACK handshake message.\n */\nexport default (serializedMethods, childOrigin, originForSending, destructor, log) => {\n const { destroy, onDestroy } = destructor;\n let destroyCallReceiver;\n let receiverMethodNames;\n // We resolve the promise with the call sender. If the child reconnects\n // (for example, after refreshing or navigating to another page that\n // uses Penpal, we'll update the call sender with methods that match the\n // latest provided by the child.\n const callSender = {};\n return (event) => {\n if (childOrigin !== '*' && event.origin !== childOrigin) {\n log(`Parent: Handshake - Received ACK message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received ACK');\n const info = {\n localName: 'Parent',\n local: window,\n remote: event.source,\n originForSending: originForSending,\n originForReceiving: childOrigin,\n };\n // If the child reconnected, we need to destroy the prior call receiver\n // before setting up a new one.\n if (destroyCallReceiver) {\n destroyCallReceiver();\n }\n destroyCallReceiver = connectCallReceiver(info, serializedMethods, log);\n onDestroy(destroyCallReceiver);\n // If the child reconnected, we need to remove the methods from the\n // previous call receiver off the sender.\n if (receiverMethodNames) {\n receiverMethodNames.forEach((receiverMethodName) => {\n delete callSender[receiverMethodName];\n });\n }\n receiverMethodNames = event.data.methodNames;\n const destroyCallSender = connectCallSender(callSender, info, receiverMethodNames, destroy, log);\n onDestroy(destroyCallSender);\n return callSender;\n };\n};\n","import { MessageType } from '../enums';\n/**\n * Handles a SYN handshake message.\n */\nexport default (log, serializedMethods, childOrigin, originForSending) => {\n return (event) => {\n // Under specific timing circumstances, we can receive an event\n // whose source is null. This seems to happen when the child iframe is\n // removed from the DOM about the same time it has sent the SYN event.\n // https://github.com/Aaronius/penpal/issues/85\n if (!event.source) {\n return;\n }\n if (childOrigin !== '*' && event.origin !== childOrigin) {\n log(`Parent: Handshake - Received SYN message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received SYN, responding with SYN-ACK');\n const synAckMessage = {\n penpal: MessageType.SynAck,\n methodNames: Object.keys(serializedMethods),\n };\n event.source.postMessage(synAckMessage, originForSending);\n };\n};\n","const CHECK_IFRAME_IN_DOC_INTERVAL = 60000;\n/**\n * Monitors for iframe removal and destroys connection if iframe\n * is found to have been removed from DOM. This is to prevent memory\n * leaks when the iframe is removed from the document and the consumer\n * hasn't called destroy(). Without this, event listeners attached to\n * the window would stick around and since the event handlers have a\n * reference to the iframe in their closures, the iframe would stick\n * around too.\n */\nexport default (iframe, destructor) => {\n const { destroy, onDestroy } = destructor;\n const checkIframeInDocIntervalId = setInterval(() => {\n if (!iframe.isConnected) {\n clearInterval(checkIframeInDocIntervalId);\n destroy();\n }\n }, CHECK_IFRAME_IN_DOC_INTERVAL);\n onDestroy(() => {\n clearInterval(checkIframeInDocIntervalId);\n });\n};\n","import { ErrorCode } from './enums';\n/**\n * Starts a timeout and calls the callback with an error\n * if the timeout completes before the stop function is called.\n */\nexport default (timeout, callback) => {\n let timeoutId;\n if (timeout !== undefined) {\n timeoutId = window.setTimeout(() => {\n const error = new Error(`Connection timed out after ${timeout}ms`);\n error.code = ErrorCode.ConnectionTimeout;\n callback(error);\n }, timeout);\n }\n return () => {\n clearTimeout(timeoutId);\n };\n};\n","import { ErrorCode } from '../enums';\nexport default (iframe) => {\n if (!iframe.src && !iframe.srcdoc) {\n const error = new Error('Iframe must have src or srcdoc property defined.');\n error.code = ErrorCode.NoIframeSrc;\n throw error;\n }\n};\n","import { MessageType, NativeEventType } from '../enums';\nimport createDestructor from '../createDestructor';\nimport createLogger from '../createLogger';\nimport getOriginFromSrc from './getOriginFromSrc';\nimport handleAckMessageFactory from './handleAckMessageFactory';\nimport handleSynMessageFactory from './handleSynMessageFactory';\nimport { serializeMethods } from '../methodSerialization';\nimport monitorIframeRemoval from './monitorIframeRemoval';\nimport startConnectionTimeout from '../startConnectionTimeout';\nimport validateIframeHasSrcOrSrcDoc from './validateIframeHasSrcOrSrcDoc';\n/**\n * Attempts to establish communication with an iframe.\n */\nexport default (options) => {\n let { iframe, methods = {}, childOrigin, timeout, debug = false } = options;\n const log = createLogger(debug);\n const destructor = createDestructor('Parent', log);\n const { onDestroy, destroy } = destructor;\n if (!childOrigin) {\n validateIframeHasSrcOrSrcDoc(iframe);\n childOrigin = getOriginFromSrc(iframe.src);\n }\n // If event.origin is \"null\", the remote protocol is file: or data: and we\n // must post messages with \"*\" as targetOrigin when sending messages.\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Using_window.postMessage_in_extensions\n const originForSending = childOrigin === 'null' ? '*' : childOrigin;\n const serializedMethods = serializeMethods(methods);\n const handleSynMessage = handleSynMessageFactory(log, serializedMethods, childOrigin, originForSending);\n const handleAckMessage = handleAckMessageFactory(serializedMethods, childOrigin, originForSending, destructor, log);\n const promise = new Promise((resolve, reject) => {\n const stopConnectionTimeout = startConnectionTimeout(timeout, destroy);\n const handleMessage = (event) => {\n if (event.source !== iframe.contentWindow || !event.data) {\n return;\n }\n if (event.data.penpal === MessageType.Syn) {\n handleSynMessage(event);\n return;\n }\n if (event.data.penpal === MessageType.Ack) {\n const callSender = handleAckMessage(event);\n if (callSender) {\n stopConnectionTimeout();\n resolve(callSender);\n }\n return;\n }\n };\n window.addEventListener(NativeEventType.Message, handleMessage);\n log('Parent: Awaiting handshake');\n monitorIframeRemoval(iframe, destructor);\n onDestroy((error) => {\n window.removeEventListener(NativeEventType.Message, handleMessage);\n if (error) {\n reject(error);\n }\n });\n });\n return {\n promise,\n destroy() {\n // Don't allow consumer to pass an error into destroy.\n destroy();\n },\n };\n};\n","import { AsyncMethodReturns, connectToChild } from \"@cartridge/penpal\";\nimport { Modal } from \"../types\";\n\nexport type IFrameOptions<CallSender> = Omit<\n ConstructorParameters<typeof IFrame>[0],\n \"id\" | \"url\" | \"onConnect\"\n> & {\n url?: string;\n onConnect: (child: AsyncMethodReturns<CallSender>) => void;\n};\n\nexport class IFrame<CallSender extends {}> implements Modal {\n url?: URL;\n private iframe?: HTMLIFrameElement;\n private container?: HTMLDivElement;\n private onClose?: () => void;\n private closeTimeout?: NodeJS.Timeout;\n\n constructor({\n id,\n url,\n onClose,\n onConnect,\n methods = {},\n }: {\n id: string;\n url: URL;\n onClose?: () => void;\n onConnect: (child: AsyncMethodReturns<CallSender>) => void;\n methods?: { [key: string]: (...args: any[]) => void };\n }) {\n if (typeof document === \"undefined\" || typeof window === \"undefined\") {\n return;\n }\n\n this.url = url;\n\n const docHead = document.head;\n\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n meta.id = \"controller-viewport\";\n meta.content =\n \"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, interactive-widget=resizes-content\";\n docHead.appendChild(meta);\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url.toString();\n iframe.id = id;\n iframe.style.border = \"none\";\n iframe.sandbox.add(\"allow-forms\");\n iframe.sandbox.add(\"allow-popups\");\n iframe.sandbox.add(\"allow-popups-to-escape-sandbox\");\n iframe.sandbox.add(\"allow-scripts\");\n iframe.sandbox.add(\"allow-same-origin\");\n iframe.allow =\n \"publickey-credentials-create *; publickey-credentials-get *; clipboard-write; local-network-access *; payment *\";\n iframe.style.scrollbarWidth = \"none\";\n iframe.style.setProperty(\"-ms-overflow-style\", \"none\");\n iframe.style.setProperty(\"-webkit-scrollbar\", \"none\");\n // Enable Storage Access API for the iframe\n // This allows the keychain iframe to request access to its first-party storage\n // when embedded in third-party contexts (other games/apps)\n if (!!document.hasStorageAccess) {\n iframe.sandbox.add(\"allow-storage-access-by-user-activation\");\n }\n\n const container = document.createElement(\"div\");\n container.id = \"controller\";\n container.style.position = \"fixed\";\n container.style.height = \"100%\";\n container.style.width = \"100%\";\n container.style.top = \"0\";\n container.style.left = \"0\";\n container.style.zIndex = \"10000\";\n container.style.backgroundColor = \"rgba(0,0,0,0.6)\";\n container.style.display = \"none\"; // Use display: none to completely hide from password managers\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n container.style.transition = \"opacity 0.2s ease\";\n container.style.opacity = \"0\";\n container.style.pointerEvents = \"auto\";\n container.style.overscrollBehaviorY = \"contain\";\n container.style.scrollbarWidth = \"none\";\n container.style.setProperty(\"-ms-overflow-style\", \"none\");\n container.style.setProperty(\"-webkit-scrollbar\", \"none\");\n container.appendChild(iframe);\n\n // Disables pinch to zoom\n container.addEventListener(\n \"touchstart\",\n (e) => {\n if (e.touches.length > 1) {\n e.preventDefault();\n }\n },\n { passive: false },\n );\n\n container.addEventListener(\n \"touchmove\",\n (e) => {\n if (e.touches.length > 1) {\n e.preventDefault();\n }\n },\n { passive: false },\n );\n\n container.addEventListener(\n \"touchend\",\n (e) => {\n if (e.touches.length > 1) {\n e.preventDefault();\n }\n },\n { passive: false },\n );\n\n this.iframe = iframe;\n this.container = container;\n\n connectToChild<CallSender>({\n iframe: this.iframe,\n methods: {\n close: (_origin: string) => () => this.close(),\n reload: (_origin: string) => () => window.location.reload(),\n ...methods,\n },\n }).promise.then(onConnect);\n\n this.resize();\n window.addEventListener(\"resize\", () => this.resize());\n\n const observer = new MutationObserver(() => {\n if (typeof document === \"undefined\") return;\n const existingController = document.getElementById(\"controller\");\n if (document.body) {\n if (id === \"controller-keychain\" && !existingController) {\n document.body.appendChild(container);\n observer.disconnect();\n }\n }\n });\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n\n const existingController = document.getElementById(\"controller\");\n if (document.body) {\n if (id === \"controller-keychain\" && !existingController) {\n document.body.appendChild(container);\n }\n }\n\n this.onClose = onClose;\n }\n\n open() {\n if (!this.container || typeof document === \"undefined\" || !document.body)\n return;\n\n // Clear any pending close timeout to prevent race condition\n if (this.closeTimeout) {\n clearTimeout(this.closeTimeout);\n this.closeTimeout = undefined;\n }\n\n document.body.style.overflow = \"hidden\";\n\n this.container.style.display = \"flex\";\n // Use requestAnimationFrame to ensure display change is processed before opacity change\n requestAnimationFrame(() => {\n if (this.container) {\n this.container.style.opacity = \"1\";\n }\n });\n }\n\n close() {\n if (!this.container || typeof document === \"undefined\" || !document.body)\n return;\n this.onClose?.();\n\n document.body.style.overflow = \"auto\";\n\n // Start fade-out transition\n this.container.style.opacity = \"0\";\n\n // Set display: none after transition completes (200ms)\n this.closeTimeout = setTimeout(() => {\n if (this.container) {\n this.container.style.display = \"none\";\n }\n this.closeTimeout = undefined;\n }, 200);\n }\n\n sendBackward() {\n if (!this.container) return;\n this.container.style.zIndex = \"9999\";\n }\n\n sendForward() {\n if (!this.container) return;\n this.container.style.zIndex = \"10000\";\n }\n\n private resize() {\n if (!this.iframe || typeof window === \"undefined\") return;\n\n this.iframe.style.userSelect = \"none\";\n\n if (window.innerWidth < 768) {\n this.iframe.style.height = \"100%\";\n this.iframe.style.width = \"100%\";\n this.iframe.style.borderRadius = \"0\";\n return;\n }\n\n this.iframe.style.height = \"600px\";\n this.iframe.style.width = \"432px\";\n this.iframe.style.borderRadius = \"8px\";\n }\n\n isOpen() {\n return this.container?.style.display !== \"none\";\n }\n}\n","/* Do NOT modify this file; see /src.ts/_admin/update-version.ts */\n/**\n * The current version of Ethers.\n */\nexport const version = \"6.13.7\";\n//# sourceMappingURL=_version.js.map","/**\n * Property helper functions.\n *\n * @_subsection api/utils:Properties [about-properties]\n */\nfunction checkType(value, type, name) {\n const types = type.split(\"|\").map(t => t.trim());\n for (let i = 0; i < types.length; i++) {\n switch (type) {\n case \"any\":\n return;\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n if (typeof (value) === type) {\n return;\n }\n }\n }\n const error = new Error(`invalid value for type ${type}`);\n error.code = \"INVALID_ARGUMENT\";\n error.argument = `value.${name}`;\n error.value = value;\n throw error;\n}\n/**\n * Resolves to a new object that is a copy of %%value%%, but with all\n * values resolved.\n */\nexport async function resolveProperties(value) {\n const keys = Object.keys(value);\n const results = await Promise.all(keys.map((k) => Promise.resolve(value[k])));\n return results.reduce((accum, v, index) => {\n accum[keys[index]] = v;\n return accum;\n }, {});\n}\n/**\n * Assigns the %%values%% to %%target%% as read-only values.\n *\n * It %%types%% is specified, the values are checked.\n */\nexport function defineProperties(target, values, types) {\n for (let key in values) {\n let value = values[key];\n const type = (types ? types[key] : null);\n if (type) {\n checkType(value, type, key);\n }\n Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n }\n}\n//# sourceMappingURL=properties.js.map","/**\n * All errors in ethers include properties to ensure they are both\n * human-readable (i.e. ``.message``) and machine-readable (i.e. ``.code``).\n *\n * The [[isError]] function can be used to check the error ``code`` and\n * provide a type guard for the properties present on that error interface.\n *\n * @_section: api/utils/errors:Errors [about-errors]\n */\nimport { version } from \"../_version.js\";\nimport { defineProperties } from \"./properties.js\";\nfunction stringify(value) {\n if (value == null) {\n return \"null\";\n }\n if (Array.isArray(value)) {\n return \"[ \" + (value.map(stringify)).join(\", \") + \" ]\";\n }\n if (value instanceof Uint8Array) {\n const HEX = \"0123456789abcdef\";\n let result = \"0x\";\n for (let i = 0; i < value.length; i++) {\n result += HEX[value[i] >> 4];\n result += HEX[value[i] & 0xf];\n }\n return result;\n }\n if (typeof (value) === \"object\" && typeof (value.toJSON) === \"function\") {\n return stringify(value.toJSON());\n }\n switch (typeof (value)) {\n case \"boolean\":\n case \"symbol\":\n return value.toString();\n case \"bigint\":\n return BigInt(value).toString();\n case \"number\":\n return (value).toString();\n case \"string\":\n return JSON.stringify(value);\n case \"object\": {\n const keys = Object.keys(value);\n keys.sort();\n return \"{ \" + keys.map((k) => `${stringify(k)}: ${stringify(value[k])}`).join(\", \") + \" }\";\n }\n }\n return `[ COULD NOT SERIALIZE ]`;\n}\n/**\n * Returns true if the %%error%% matches an error thrown by ethers\n * that matches the error %%code%%.\n *\n * In TypeScript environments, this can be used to check that %%error%%\n * matches an EthersError type, which means the expected properties will\n * be set.\n *\n * @See [ErrorCodes](api:ErrorCode)\n * @example\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, \"CALL_EXCEPTION\")) {\n * // The Type Guard has validated this object\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\n/**\n * Returns true if %%error%% is a [[CallExceptionError].\n */\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/**\n * Returns a new Error configured to the format ethers emits errors, with\n * the %%message%%, [[api:ErrorCode]] %%code%% and additional properties\n * for the corresponding EthersError.\n *\n * Each error in ethers includes the version of ethers, a\n * machine-readable [[ErrorCode]], and depending on %%code%%, additional\n * required properties. The error message will also include the %%message%%,\n * ethers version, %%code%% and all additional properties, serialized.\n */\nexport function makeError(message, code, info) {\n let shortMessage = message;\n {\n const details = [];\n if (info) {\n if (\"message\" in info || \"code\" in info || \"name\" in info) {\n throw new Error(`value will overwrite populated values: ${stringify(info)}`);\n }\n for (const key in info) {\n if (key === \"shortMessage\") {\n continue;\n }\n const value = (info[key]);\n // try {\n details.push(key + \"=\" + stringify(value));\n // } catch (error: any) {\n // console.log(\"MMM\", error.message);\n // details.push(key + \"=[could not serialize object]\");\n // }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n let error;\n switch (code) {\n case \"INVALID_ARGUMENT\":\n error = new TypeError(message);\n break;\n case \"NUMERIC_FAULT\":\n case \"BUFFER_OVERRUN\":\n error = new RangeError(message);\n break;\n default:\n error = new Error(message);\n }\n defineProperties(error, { code });\n if (info) {\n Object.assign(error, info);\n }\n if (error.shortMessage == null) {\n defineProperties(error, { shortMessage });\n }\n return error;\n}\n/**\n * Throws an EthersError with %%message%%, %%code%% and additional error\n * %%info%% when %%check%% is falsish..\n *\n * @see [[api:makeError]]\n */\nexport function assert(check, message, code, info) {\n if (!check) {\n throw makeError(message, code, info);\n }\n}\n/**\n * A simple helper to simply ensuring provided arguments match expected\n * constraints, throwing if not.\n *\n * In TypeScript environments, the %%check%% has been asserted true, so\n * any further code does not need additional compile-time checks.\n */\nexport function assertArgument(check, message, name, value) {\n assert(check, message, \"INVALID_ARGUMENT\", { argument: name, value: value });\n}\nexport function assertArgumentCount(count, expectedCount, message) {\n if (message == null) {\n message = \"\";\n }\n if (message) {\n message = \": \" + message;\n }\n assert(count >= expectedCount, \"missing argument\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n assert(count <= expectedCount, \"too many arguments\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n}\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\n/**\n * Throws if the normalization %%form%% is not supported.\n */\nexport function assertNormalize(form) {\n assert(_normalizeForms.indexOf(form) >= 0, \"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n}\n/**\n * Many classes use file-scoped values to guard the constructor,\n * making it effectively private. This facilitates that pattern\n * by ensuring the %%givenGaurd%% matches the file-scoped %%guard%%,\n * throwing if not, indicating the %%className%% if provided.\n */\nexport function assertPrivate(givenGuard, guard, className) {\n if (className == null) {\n className = \"\";\n }\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n assert(false, `private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n}\n//# sourceMappingURL=errors.js.map","/**\n * Some data helpers.\n *\n *\n * @_subsection api/utils:Data Helpers [about-data]\n */\nimport { assert, assertArgument } from \"./errors.js\";\nfunction _getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n assertArgument(false, \"invalid BytesLike value\", name || \"value\", value);\n}\n/**\n * Get a typed Uint8Array for %%value%%. If already a Uint8Array\n * the original %%value%% is returned; if a copy is required use\n * [[getBytesCopy]].\n *\n * @see: getBytesCopy\n */\nexport function getBytes(value, name) {\n return _getBytes(value, name, false);\n}\n/**\n * Get a typed Uint8Array for %%value%%, creating a copy if necessary\n * to prevent any modifications of the returned value from being\n * reflected elsewhere.\n *\n * @see: getBytes\n */\nexport function getBytesCopy(value, name) {\n return _getBytes(value, name, true);\n}\n/**\n * Returns true if %%value%% is a valid [[HexString]].\n *\n * If %%length%% is ``true`` or a //number//, it also checks that\n * %%value%% is a valid [[DataHexString]] of %%length%% (if a //number//)\n * bytes of data (e.g. ``0x1234`` is 2 bytes).\n */\nexport function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/**\n * Returns true if %%value%% is a valid representation of arbitrary\n * data (i.e. a valid [[DataHexString]] or a Uint8Array).\n */\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\nconst HexCharacters = \"0123456789abcdef\";\n/**\n * Returns a [[DataHexString]] representation of %%data%%.\n */\nexport function hexlify(data) {\n const bytes = getBytes(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\n/**\n * Returns a [[DataHexString]] by concatenating all values\n * within %%data%%.\n */\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\n/**\n * Returns the length of %%data%%, in bytes.\n */\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return getBytes(data).length;\n}\n/**\n * Returns a [[DataHexString]] by slicing %%data%% from the %%start%%\n * offset to the %%end%% offset.\n *\n * By default %%start%% is 0 and %%end%% is the length of %%data%%.\n */\nexport function dataSlice(data, start, end) {\n const bytes = getBytes(data);\n if (end != null && end > bytes.length) {\n assert(false, \"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\n/**\n * Return the [[DataHexString]] result by stripping all **leading**\n ** zero bytes from %%data%%.\n */\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.startsWith(\"00\")) {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\nfunction zeroPad(data, length, left) {\n const bytes = getBytes(data);\n assert(length >= bytes.length, \"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **left**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **values** are in Solidity\n * (e.g. ``uint128``).\n */\nexport function zeroPadValue(data, length) {\n return zeroPad(data, length, true);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **right**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **bytes** are in Solidity\n * (e.g. ``bytes16``).\n */\nexport function zeroPadBytes(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=data.js.map","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nexport function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nexport function abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexport const byteSwapIfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async () => { };\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nexport class Hash {\n}\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor = createHasher;\nexport const wrapConstructorWithOpts = createOptHasher;\nexport const wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","/**\n * SHA3 (keccak) hash function, based on a new \"Sponge function\" design.\n * Different from older hashes, the internal state is bigger than output size.\n *\n * Check out [FIPS-202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf),\n * [Website](https://keccak.team/keccak.html),\n * [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub).\n *\n * Check out `sha3-addons` module for cSHAKE, k12, and others.\n * @module\n */\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from \"./_u64.js\";\n// prettier-ignore\nimport { abytes, aexists, anumber, aoutput, clean, createHasher, createXOFer, Hash, swap32IfBE, toBytes, u32 } from \"./utils.js\";\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI = [];\nconst SHA3_ROTL = [];\nconst _SHA3_IOTA = [];\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n/** `keccakf1600` internal function, additionally allows to adjust round count. */\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n clean(B);\n}\n/** Keccak sponge function. */\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n this.enableXOF = false;\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n // Can be passed from user as dkLen\n anumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n // 0 < blockLen < 200\n if (!(0 < blockLen && blockLen < 200))\n throw new Error('only keccak-f1600 function is supported');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n clone() {\n return this._cloneInto();\n }\n keccak() {\n swap32IfBE(this.state32);\n keccakP(this.state32, this.rounds);\n swap32IfBE(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { blockLen, state } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n aexists(this, false);\n abytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n clean(this.state);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => createHasher(() => new Keccak(blockLen, suffix, outputLen));\n/** SHA3-224 hash function. */\nexport const sha3_224 = /* @__PURE__ */ (() => gen(0x06, 144, 224 / 8))();\n/** SHA3-256 hash function. Different from keccak-256. */\nexport const sha3_256 = /* @__PURE__ */ (() => gen(0x06, 136, 256 / 8))();\n/** SHA3-384 hash function. */\nexport const sha3_384 = /* @__PURE__ */ (() => gen(0x06, 104, 384 / 8))();\n/** SHA3-512 hash function. */\nexport const sha3_512 = /* @__PURE__ */ (() => gen(0x06, 72, 512 / 8))();\n/** keccak-224 hash function. */\nexport const keccak_224 = /* @__PURE__ */ (() => gen(0x01, 144, 224 / 8))();\n/** keccak-256 hash function. Different from SHA3-256. */\nexport const keccak_256 = /* @__PURE__ */ (() => gen(0x01, 136, 256 / 8))();\n/** keccak-384 hash function. */\nexport const keccak_384 = /* @__PURE__ */ (() => gen(0x01, 104, 384 / 8))();\n/** keccak-512 hash function. */\nexport const keccak_512 = /* @__PURE__ */ (() => gen(0x01, 72, 512 / 8))();\nconst genShake = (suffix, blockLen, outputLen) => createXOFer((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\n/** SHAKE128 XOF with 128-bit security. */\nexport const shake128 = /* @__PURE__ */ (() => genShake(0x1f, 168, 128 / 8))();\n/** SHAKE256 XOF with 256-bit security. */\nexport const shake256 = /* @__PURE__ */ (() => genShake(0x1f, 136, 256 / 8))();\n//# sourceMappingURL=sha3.js.map","/**\n * Cryptographic hashing functions\n *\n * @_subsection: api/crypto:Hash Functions [about-crypto-hashing]\n */\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { getBytes, hexlify } from \"../utils/index.js\";\nlet locked = false;\nconst _keccak256 = function (data) {\n return keccak_256(data);\n};\nlet __keccak256 = _keccak256;\n/**\n * Compute the cryptographic KECCAK256 hash of %%data%%.\n *\n * The %%data%% **must** be a data representation, to compute the\n * hash of UTF-8 data use the [[id]] function.\n *\n * @returns DataHexstring\n * @example:\n * keccak256(\"0x\")\n * //_result:\n *\n * keccak256(\"0x1337\")\n * //_result:\n *\n * keccak256(new Uint8Array([ 0x13, 0x37 ]))\n * //_result:\n *\n * // Strings are assumed to be DataHexString, otherwise it will\n * // throw. To hash UTF-8 data, see the note above.\n * keccak256(\"Hello World\")\n * //_error:\n */\nexport function keccak256(_data) {\n const data = getBytes(_data, \"data\");\n return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function () { locked = true; };\nkeccak256.register = function (func) {\n if (locked) {\n throw new TypeError(\"keccak256 is locked\");\n }\n __keccak256 = func;\n};\nObject.freeze(keccak256);\n//# sourceMappingURL=keccak.js.map","import { keccak256 } from \"../crypto/index.js\";\nimport { getBytes, assertArgument } from \"../utils/index.js\";\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\nfunction getChecksumAddress(address) {\n // if (!isHexString(address, 20)) {\n // logger.throwArgumentError(\"invalid address\", \"address\", address);\n // }\n address = address.toLowerCase();\n const chars = address.substring(2).split(\"\");\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n const hashed = getBytes(keccak256(expanded));\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return \"0x\" + chars.join(\"\");\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nconst ibanLookup = {};\nfor (let i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (let i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = \"0\" + checksum;\n }\n return checksum;\n}\n;\nconst Base36 = (function () {\n ;\n const result = {};\n for (let i = 0; i < 36; i++) {\n const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n result[key] = BigInt(i);\n }\n return result;\n})();\nfunction fromBase36(value) {\n value = value.toLowerCase();\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result = result * BN_36 + Base36[value[i]];\n }\n return result;\n}\n/**\n * Returns a normalized and checksumed address for %%address%%.\n * This accepts non-checksum addresses, checksum addresses and\n * [[getIcapAddress]] formats.\n *\n * The checksum in Ethereum uses the capitalization (upper-case\n * vs lower-case) of the characters within an address to encode\n * its checksum, which offers, on average, a checksum of 15-bits.\n *\n * If %%address%% contains both upper-case and lower-case, it is\n * assumed to already be a checksum address and its checksum is\n * validated, and if the address fails its expected checksum an\n * error is thrown.\n *\n * If you wish the checksum of %%address%% to be ignore, it should\n * be converted to lower-case (i.e. ``.toLowercase()``) before\n * being passed in. This should be a very rare situation though,\n * that you wish to bypass the safegaurds in place to protect\n * against an address that has been incorrectly copied from another\n * source.\n *\n * @example:\n * // Adds the checksum (via upper-casing specific letters)\n * getAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\")\n * //_result:\n *\n * // Converts ICAP address and adds checksum\n * getAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n * //_result:\n *\n * // Throws an error if an address contains mixed case,\n * // but the checksum fails\n * getAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\")\n * //_error:\n */\nexport function getAddress(address) {\n assertArgument(typeof (address) === \"string\", \"invalid address\", \"address\", address);\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (!address.startsWith(\"0x\")) {\n address = \"0x\" + address;\n }\n const result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n assertArgument(!address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) || result === address, \"bad address checksum\", \"address\", address);\n return result;\n }\n // Maybe ICAP? (we only support direct mode)\n if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n assertArgument(address.substring(2, 4) === ibanChecksum(address), \"bad icap checksum\", \"address\", address);\n let result = fromBase36(address.substring(4)).toString(16);\n while (result.length < 40) {\n result = \"0\" + result;\n }\n return getChecksumAddress(\"0x\" + result);\n }\n assertArgument(false, \"invalid address\", \"address\", address);\n}\n/**\n * The [ICAP Address format](link-icap) format is an early checksum\n * format which attempts to be compatible with the banking\n * industry [IBAN format](link-wiki-iban) for bank accounts.\n *\n * It is no longer common or a recommended format.\n *\n * @example:\n * getIcapAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\");\n * //_result:\n *\n * getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n * //_result:\n *\n * // Throws an error if the ICAP checksum is wrong\n * getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK37\");\n * //_error:\n */\nexport function getIcapAddress(address) {\n //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n while (base36.length < 30) {\n base36 = \"0\" + base36;\n }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n//# sourceMappingURL=address.js.map","import { Call, TypedData, StarknetWindowObject } from \"@starknet-io/types-js\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\nexport class ArgentWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"argent\";\n readonly platform: ExternalPlatform = \"starknet\";\n private wallet: StarknetWindowObject | undefined = undefined;\n private account: string | undefined = undefined;\n private connectedAccounts: string[] = [];\n private accountChangeListener: ((accounts?: string[]) => void) | undefined =\n undefined;\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.starknet_argentX;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available\n ? window.starknet_argentX?.version || \"Unknown\"\n : undefined,\n chainId: available ? window.starknet_argentX?.chainId : undefined,\n name: \"Argent\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Argent is not available\");\n }\n\n const wallet = window.starknet_argentX as StarknetWindowObject;\n if (!wallet) {\n throw new Error(\"No wallet found\");\n }\n\n // Request accounts from the wallet\n const accounts = await wallet.request({\n type: \"wallet_requestAccounts\",\n params: { silent_mode: false },\n });\n\n if (!accounts || accounts.length === 0) {\n throw new Error(\"No accounts found\");\n }\n\n this.removeAccountChangeListener();\n\n this.wallet = wallet;\n this.account = accounts[0];\n this.connectedAccounts = accounts;\n this.setupAccountChangeListener();\n return { success: true, wallet: this.type, account: this.account };\n } catch (error) {\n console.error(`Error connecting to Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n getConnectedAccounts(): string[] {\n return this.connectedAccounts;\n }\n\n async signTypedData(data: TypedData): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.wallet) {\n throw new Error(\"Argent is not connected\");\n }\n\n const sig = await this.wallet.request({\n type: \"wallet_signTypedData\",\n params: data,\n });\n\n return { success: true, wallet: this.type, result: sig };\n } catch (error) {\n console.error(`Error signing typed data with Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(calls: Call[]): Promise<ExternalWalletResponse> {\n if (!this.wallet) {\n throw new Error(\"No wallet found\");\n }\n\n try {\n const result = await this.wallet.request({\n type: \"wallet_addInvokeTransaction\",\n params: {\n calls,\n },\n });\n\n return {\n success: true,\n wallet: this.type,\n result,\n };\n } catch (error) {\n console.error(`Error sending transaction with Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async switchChain(chainId: string): Promise<boolean> {\n if (!this.wallet) {\n throw new Error(\"No wallet found\");\n }\n\n const result = await this.wallet.request({\n type: \"wallet_switchStarknetChain\",\n params: {\n chainId,\n },\n });\n\n return result;\n }\n\n async getBalance(\n _tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.wallet) {\n throw new Error(\"Argent is not connected\");\n }\n\n // TODO: Implement balance fetching based on Argent's API\n return {\n success: true,\n wallet: this.type,\n result: \"Implement based on Argent API\",\n };\n } catch (error) {\n console.error(`Error getting balance from Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async waitForTransaction(\n _txHash: string,\n _timeoutMs?: number,\n ): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"waitForTransaction not supported for Argent wallet\",\n };\n }\n\n private setupAccountChangeListener(): void {\n if (!this.wallet) return;\n\n this.accountChangeListener = (accounts: string[] | undefined) => {\n if (accounts && accounts.length > 0) {\n this.account = accounts[0];\n this.connectedAccounts = accounts;\n } else {\n this.account = undefined;\n this.connectedAccounts = [];\n }\n };\n\n // Listen for account changes\n this.wallet.on(\"accountsChanged\", this.accountChangeListener);\n }\n\n private removeAccountChangeListener(): void {\n if (this.wallet && this.accountChangeListener) {\n this.wallet.off(\"accountsChanged\", this.accountChangeListener);\n this.accountChangeListener = undefined;\n }\n }\n\n disconnect(): void {\n this.removeAccountChangeListener();\n this.wallet = undefined;\n this.account = undefined;\n this.connectedAccounts = [];\n }\n}\n","/**\n * Announces an EIP-1193 Provider.\n */\nexport function announceProvider(detail) {\n const event = new CustomEvent('eip6963:announceProvider', { detail: Object.freeze(detail) });\n window.dispatchEvent(event);\n const handler = () => window.dispatchEvent(event);\n window.addEventListener('eip6963:requestProvider', handler);\n return () => window.removeEventListener('eip6963:requestProvider', handler);\n}\n/**\n * Watches for EIP-1193 Providers to be announced.\n */\nexport function requestProviders(listener) {\n if (typeof window === 'undefined')\n return;\n const handler = (event) => listener(event.detail);\n window.addEventListener('eip6963:announceProvider', handler);\n window.dispatchEvent(new CustomEvent('eip6963:requestProvider'));\n return () => window.removeEventListener('eip6963:announceProvider', handler);\n}\n//# sourceMappingURL=utils.js.map","import { requestProviders } from './utils.js';\nexport function createStore() {\n const listeners = new Set();\n let providerDetails = [];\n const request = () => requestProviders((providerDetail) => {\n if (providerDetails.some(({ info }) => info.uuid === providerDetail.info.uuid))\n return;\n providerDetails = [...providerDetails, providerDetail];\n listeners.forEach((listener) => listener(providerDetails, { added: [providerDetail] }));\n });\n let unwatch = request();\n return {\n _listeners() {\n return listeners;\n },\n clear() {\n listeners.forEach((listener) => listener([], { removed: [...providerDetails] }));\n providerDetails = [];\n },\n destroy() {\n this.clear();\n listeners.clear();\n unwatch?.();\n },\n findProvider({ rdns }) {\n return providerDetails.find((providerDetail) => providerDetail.info.rdns === rdns);\n },\n getProviders() {\n return providerDetails;\n },\n reset() {\n this.clear();\n unwatch?.();\n unwatch = request();\n },\n subscribe(listener, { emitImmediately } = {}) {\n listeners.add(listener);\n if (emitImmediately)\n listener(providerDetails, { added: providerDetails });\n return () => listeners.delete(listener);\n },\n };\n}\n//# sourceMappingURL=store.js.map","import { constants, num } from \"starknet\";\nimport type { ExternalPlatform } from \"./types\";\n\nconst PLATFORMS: Record<string, ExternalPlatform> = {\n \"0x1\": \"ethereum\", // ethereum mainnet\n \"0xaa36a7\": \"ethereum\", // ethereum sepolia\n \"0x14a34\": \"base\", // base mainnet\n \"0x2105\": \"base\", // base sepolia\n \"0x66eee\": \"arbitrum\", // arbitrum mainnet\n \"0xa4b1\": \"arbitrum\", // arbitrum sepolia\n \"0xa\": \"optimism\", // op mainnet\n \"0xaa37dc\": \"optimism\", // op sepolia\n [constants.StarknetChainId.SN_MAIN]: \"starknet\",\n [constants.StarknetChainId.SN_SEPOLIA]: \"starknet\",\n};\n\nexport const chainIdToPlatform = (\n chainId: string,\n): ExternalPlatform | undefined => {\n const hex = num.toHex(chainId);\n const platform = PLATFORMS[hex];\n if (!platform) {\n console.warn(`Unknown chain ID: ${hex}`);\n }\n return platform;\n};\n","import { getAddress } from \"ethers/address\";\nimport { createStore, EIP6963ProviderDetail } from \"mipd\";\nimport { isMobile } from \"../utils\";\nimport { chainIdToPlatform } from \"./platform\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"./types\";\n\nexport abstract class EthereumWalletBase implements WalletAdapter {\n abstract readonly type: ExternalWalletType;\n abstract readonly rdns: string;\n abstract readonly displayName: string;\n\n platform: ExternalPlatform | undefined;\n protected account: string | undefined = undefined;\n protected store = createStore();\n protected provider: EIP6963ProviderDetail | undefined;\n protected connectedAccounts: string[] = [];\n\n constructor() {\n this.initializeIfAvailable();\n }\n\n private getProvider(): EIP6963ProviderDetail | undefined {\n if (!this.provider) {\n this.provider = this.store\n .getProviders()\n .find((provider) => provider.info.rdns === this.rdns);\n }\n return this.provider;\n }\n\n private getEthereumProvider(): any {\n const provider = this.getProvider();\n if (provider) {\n return provider.provider;\n }\n\n // Fallback for MetaMask when not announced via EIP-6963\n if (\n this.rdns === \"io.metamask\" &&\n typeof window !== \"undefined\" &&\n (window as any).ethereum?.isMetaMask\n ) {\n return (window as any).ethereum;\n }\n\n return null;\n }\n\n private initializeIfAvailable(): void {\n const provider = this.getProvider();\n if (provider && !this.initialized) {\n this.initialized = true;\n this.initializeProvider();\n }\n }\n\n private initialized = false;\n\n private initializeProvider(): void {\n const provider = this.getProvider();\n if (!provider) return;\n\n provider.provider\n .request({\n method: \"eth_accounts\",\n })\n .then((accounts) => {\n this.connectedAccounts = accounts.map(getAddress);\n if (accounts.length > 0) {\n this.account = getAddress(accounts[0]);\n }\n })\n .catch(console.error);\n\n provider.provider\n .request({\n method: \"eth_chainId\",\n })\n .then((chainId) => {\n this.platform = chainIdToPlatform(chainId);\n })\n .catch(console.error);\n\n provider.provider?.on(\"chainChanged\", (chainId: string) => {\n this.platform = chainIdToPlatform(chainId);\n });\n\n provider.provider?.on(\"accountsChanged\", (accounts: string[]) => {\n if (accounts) {\n this.connectedAccounts = accounts.map((account) => getAddress(account));\n this.account =\n accounts.length > 0 ? getAddress(accounts[0]) : undefined;\n }\n });\n }\n\n isAvailable(): boolean {\n if (isMobile()) {\n return false;\n }\n\n // Check dynamically each time, as the provider might be announced after instantiation\n const provider = this.getProvider();\n\n // Also check for MetaMask via window.ethereum as a fallback for MetaMask specifically\n if (\n !provider &&\n this.rdns === \"io.metamask\" &&\n typeof window !== \"undefined\"\n ) {\n // MetaMask might be available via window.ethereum even if not announced via EIP-6963 yet\n return !!(window as any).ethereum?.isMetaMask;\n }\n\n // Initialize if we just found the provider\n if (provider && !this.initialized) {\n this.initializeIfAvailable();\n }\n\n return typeof window !== \"undefined\" && !!provider;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available ? window.ethereum?.version || \"Unknown\" : undefined,\n chainId: available ? window.ethereum?.chainId : undefined,\n name: this.displayName,\n platform: this.platform,\n connectedAccounts: this.connectedAccounts,\n };\n }\n\n getConnectedAccounts(): string[] {\n return this.connectedAccounts;\n }\n\n async connect(address?: string): Promise<ExternalWalletResponse<any>> {\n if (address && this.connectedAccounts.includes(getAddress(address))) {\n this.account = getAddress(address);\n }\n\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(`${this.displayName} is not available`);\n }\n\n let ethereum: any;\n const provider = this.getProvider();\n\n if (provider) {\n ethereum = provider.provider;\n } else if (\n this.rdns === \"io.metamask\" &&\n (window as any).ethereum?.isMetaMask\n ) {\n // Fallback for MetaMask when not announced via EIP-6963\n ethereum = (window as any).ethereum;\n }\n\n if (!ethereum) {\n throw new Error(`${this.displayName} provider not found`);\n }\n\n const accounts = await ethereum.request({\n method: \"eth_requestAccounts\",\n });\n\n if (accounts && accounts.length > 0) {\n this.account = getAddress(accounts[0]);\n this.connectedAccounts = accounts.map(getAddress);\n\n // If we used the fallback, store the ethereum provider for future use\n if (!provider && this.rdns === \"io.metamask\") {\n // Create a mock EIP6963ProviderDetail for consistency\n this.provider = {\n info: {\n uuid: \"metamask-fallback\",\n name: \"MetaMask\",\n icon: \"data:image/svg+xml;base64,\",\n rdns: \"io.metamask\",\n },\n provider: ethereum,\n } as EIP6963ProviderDetail;\n this.initializeIfAvailable();\n }\n\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to ${this.displayName}:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTransaction(\n transaction: any,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const result = await ethereum.request({\n method: \"eth_sendTransaction\",\n params: [transaction],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(\n `Error signing transaction with ${this.displayName}:`,\n error,\n );\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signMessage(\n message: string | `0x${string}`,\n address?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} provider not found`);\n }\n const result = await ethereum.request({\n method: \"personal_sign\",\n params: [message, address || this.account] as any,\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing message with ${this.displayName}:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTypedData(data: any): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const result = await ethereum.request({\n method: \"eth_signTypedData_v4\",\n params: [this.account, JSON.stringify(data)] as any,\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(\n `Error signing typed data with ${this.displayName}:`,\n error,\n );\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(txn: any): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const result = await ethereum.request({\n method: \"eth_sendTransaction\",\n params: [txn],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(\n `Error sending transaction with ${this.displayName}:`,\n error,\n );\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async switchChain(chainId: string): Promise<boolean> {\n try {\n if (!this.isAvailable()) {\n throw new Error(`${this.displayName} is not available`);\n }\n\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n try {\n await ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId }],\n });\n\n this.platform = chainIdToPlatform(chainId);\n return true;\n } catch (error) {\n if ((error as any).code === 4902) {\n console.warn(`Chain not added to ${this.displayName}`);\n }\n throw error;\n }\n } catch (error) {\n console.error(`Error switching chain for ${this.displayName}:`, error);\n return false;\n }\n }\n\n async getBalance(\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n if (tokenAddress) {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented for ERC20\",\n };\n } else {\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const balance = await ethereum.request({\n method: \"eth_getBalance\",\n params: [this.account, \"latest\"] as any,\n });\n return { success: true, wallet: this.type, result: balance };\n }\n } catch (error) {\n console.error(`Error getting balance from ${this.displayName}:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async waitForTransaction(\n txHash: string,\n timeoutMs: number = 60000,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable()) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const startTime = Date.now();\n const pollInterval = 1000; // 1 second\n\n while (Date.now() - startTime < timeoutMs) {\n const receipt = await ethereum.request({\n method: \"eth_getTransactionReceipt\",\n params: [txHash as `0x${string}`],\n });\n\n if (receipt) {\n return {\n success: true,\n wallet: this.type,\n result: receipt,\n };\n }\n\n // Wait before polling again\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n\n throw new Error(\"Transaction confirmation timed out\");\n } catch (error) {\n console.error(\n `Error waiting for transaction with ${this.displayName}:`,\n error,\n );\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","import { ExternalWalletType } from \"../types\";\nimport { EthereumWalletBase } from \"../ethereum-base\";\n\nexport class BaseWallet extends EthereumWalletBase {\n readonly type: ExternalWalletType = \"base\";\n readonly rdns = \"com.coinbase.wallet\";\n readonly displayName = \"Base Wallet\";\n}\n","import { ExternalWalletType } from \"../types\";\nimport { EthereumWalletBase } from \"../ethereum-base\";\n\nexport class MetaMaskWallet extends EthereumWalletBase {\n readonly type: ExternalWalletType = \"metamask\";\n readonly rdns = \"io.metamask\";\n readonly displayName = \"MetaMask\";\n}\n","/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\nfunction isArrayOf(isString, arr) {\n if (!Array.isArray(arr))\n return false;\n if (arr.length === 0)\n return true;\n if (isString) {\n return arr.every((item) => typeof item === 'string');\n }\n else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\n// no abytes: seems to have 10% slowdown. Why?!\nfunction afn(input) {\n if (typeof input !== 'function')\n throw new Error('function expected');\n return true;\n}\nfunction astr(label, input) {\n if (typeof input !== 'string')\n throw new Error(`${label}: string expected`);\n return true;\n}\nfunction anumber(n) {\n if (!Number.isSafeInteger(n))\n throw new Error(`invalid integer: ${n}`);\n}\nfunction aArr(input) {\n if (!Array.isArray(input))\n throw new Error('array expected');\n}\nfunction astrArr(label, input) {\n if (!isArrayOf(true, input))\n throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label, input) {\n if (!isArrayOf(false, input))\n throw new Error(`${label}: array of numbers expected`);\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain(...args) {\n const id = (a) => a;\n // Wrap call in closure so JIT can inline calls\n const wrap = (a, b) => (c) => a(b(c));\n // Construct chain of args[-1].encode(args[-2].encode([...]))\n const encode = args.map((x) => x.encode).reduceRight(wrap, id);\n // Construct chain of args[0].decode(args[1].decode(...))\n const decode = args.map((x) => x.decode).reduce(wrap, id);\n return { encode, decode };\n}\n/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters) {\n // mapping 1 to \"b\"\n const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n const len = lettersA.length;\n astrArr('alphabet', lettersA);\n // mapping \"b\" to 1\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(`alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`);\n return lettersA[i];\n });\n },\n decode: (input) => {\n aArr(input);\n return input.map((letter) => {\n astr('alphabet.decode', letter);\n const i = indexes.get(letter);\n if (i === undefined)\n throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n },\n };\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = '') {\n astr('join', separator);\n return {\n encode: (from) => {\n astrArr('join.decode', from);\n return from.join(separator);\n },\n decode: (to) => {\n astr('join.decode', to);\n return to.split(separator);\n },\n };\n}\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits, chr = '=') {\n anumber(bits);\n astr('padding', chr);\n return {\n encode(data) {\n astrArr('padding.encode', data);\n while ((data.length * bits) % 8)\n data.push(chr);\n return data;\n },\n decode(input) {\n astrArr('padding.decode', input);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('padding: invalid, string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0)\n throw new Error('padding: invalid, string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize(fn) {\n afn(fn);\n return { encode: (from) => from, decode: (to) => fn(to) };\n}\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data, from, to) {\n // base 1 is impossible\n if (from < 2)\n throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n if (to < 2)\n throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n aArr(data);\n if (!data.length)\n return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data, (d) => {\n anumber(d);\n if (d < 0 || d >= from)\n throw new Error(`invalid integer: ${d}`);\n return d;\n });\n const dlen = digits.length;\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < dlen; i++) {\n const digit = digits[i];\n const fromCarry = from * carry;\n const digitBase = fromCarry + digit;\n if (!Number.isSafeInteger(digitBase) ||\n fromCarry / from !== carry ||\n digitBase - digit !== fromCarry) {\n throw new Error('convertRadix: carry overflow');\n }\n const div = digitBase / to;\n carry = digitBase % to;\n const rounded = Math.floor(div);\n digits[i] = rounded;\n if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done)\n continue;\n else if (!rounded)\n pos = i;\n else\n done = false;\n }\n res.push(carry);\n if (done)\n break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++)\n res.push(0);\n return res.reverse();\n}\nconst gcd = (a, b) => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from, to) => from + (to - gcd(from, to));\nconst powers = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++)\n res.push(2 ** i);\n return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data, from, to, padding) {\n aArr(data);\n if (from <= 0 || from > 32)\n throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32)\n throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`);\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const max = powers[from];\n const mask = powers[to] - 1;\n const res = [];\n for (const n of data) {\n anumber(n);\n if (n >= max)\n throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32)\n throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to)\n res.push(((carry >> (pos - to)) & mask) >>> 0);\n const pow = powers[pos];\n if (pow === undefined)\n throw new Error('invalid carry');\n carry &= pow - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from)\n throw new Error('Excess padding');\n if (!padding && carry > 0)\n throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0)\n res.push(carry >>> 0);\n return res;\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num) {\n anumber(num);\n const _256 = 2 ** 8;\n return {\n encode: (bytes) => {\n if (!isBytes(bytes))\n throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), _256, num);\n },\n decode: (digits) => {\n anumArr('radix.decode', digits);\n return Uint8Array.from(convertRadix(digits, num, _256));\n },\n };\n}\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits, revPadding = false) {\n anumber(bits);\n if (bits <= 0 || bits > 32)\n throw new Error('radix2: bits should be in (0..32]');\n if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n throw new Error('radix2: carry overflow');\n return {\n encode: (bytes) => {\n if (!isBytes(bytes))\n throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits) => {\n anumArr('radix2.decode', digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\nfunction unsafeWrapper(fn) {\n afn(fn);\n return function (...args) {\n try {\n return fn.apply(null, args);\n }\n catch (e) { }\n };\n}\nfunction checksum(len, fn) {\n anumber(len);\n afn(fn);\n return {\n encode(data) {\n if (!isBytes(data))\n throw new Error('checksum.encode: input should be Uint8Array');\n const sum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(sum, data.length);\n return res;\n },\n decode(data) {\n if (!isBytes(data))\n throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const oldChecksum = data.slice(-len);\n const newChecksum = fn(payload).slice(0, len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i])\n throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\n// prettier-ignore\nexport const utils = {\n alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n// RFC 4648 aka RFC 3548\n// ---------------------\n/**\n * base16 encoding from RFC 4648.\n * @example\n * ```js\n * base16.encode(Uint8Array.from([0x12, 0xab]));\n * // => '12AB'\n * ```\n */\nexport const base16 = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\n/**\n * base32 encoding from RFC 4648. Has padding.\n * Use `base32nopad` for unpadded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ===='\n * base32.decode('CKVQ====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32 = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), padding(5), join(''));\n/**\n * base32 encoding from RFC 4648. No padding.\n * Use `base32` for padded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ'\n * base32nopad.decode('CKVQ');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32nopad = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), join(''));\n/**\n * base32 encoding from RFC 4648. Padded. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hexnopad` for unpadded version.\n * @example\n * ```js\n * base32hex.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG===='\n * base32hex.decode('2ALG====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hex = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), padding(5), join(''));\n/**\n * base32 encoding from RFC 4648. No padding. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hex` for padded version.\n * @example\n * ```js\n * base32hexnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG'\n * base32hexnopad.decode('2ALG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hexnopad = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), join(''));\n/**\n * base32 encoding from RFC 4648. Doug Crockford's version.\n * https://www.crockford.com/base32.html\n * @example\n * ```js\n * base32crockford.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ANG'\n * base32crockford.decode('2ANG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32crockford = chain(radix2(5), alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'), join(''), normalize((s) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1')));\n// Built-in base64 conversion https://caniuse.com/mdn-javascript_builtins_uint8array_frombase64\n// TODO: temporarily set to false, trying to understand bugs\n// prettier-ignore\nconst hasBase64Builtin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toBase64 === 'function' &&\n typeof Uint8Array.fromBase64 === 'function')();\n/**\n * base64 from RFC 4648. Padded.\n * Use `base64nopad` for unpadded version.\n * Also check out `base64url`, `base64urlnopad`.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64 = hasBase64Builtin ? {\n encode(b) { abytes(b); return b.toBase64(); },\n decode(s) {\n astr('base64', s);\n return Uint8Array.fromBase64(s, { lastChunkHandling: 'strict' });\n },\n} : chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), padding(6), join(''));\n/**\n * base64 from RFC 4648. No padding.\n * Use `base64` for padded version.\n * @example\n * ```js\n * base64nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64nopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64nopad = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), join(''));\n/**\n * base64 from RFC 4648, using URL-safe alphabet. Padded.\n * Use `base64urlnopad` for unpadded version.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64url.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64url.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64url = hasBase64Builtin ? {\n encode(b) { abytes(b); return b.toBase64({ alphabet: 'base64url' }); },\n decode(s) { astr('base64', s); return Uint8Array.fromBase64(s, { alphabet: 'base64url' }); },\n} : chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), padding(6), join(''));\n/**\n * base64 from RFC 4648, using URL-safe alphabet. No padding.\n * Use `base64url` for padded version.\n * @example\n * ```js\n * base64urlnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64urlnopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64urlnopad = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), join(''));\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc) => chain(radix(58), alphabet(abc), join(''));\n/**\n * base58: base64 without ambigous characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n * @example\n * ```js\n * base58.decode('01abcdef');\n * // => '3UhJW'\n * ```\n */\nexport const base58 = genBase58('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');\n/**\n * base58: flickr version. Check out `base58`.\n */\nexport const base58flickr = genBase58('123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ');\n/**\n * base58: XRP version. Check out `base58`.\n */\nexport const base58xrp = genBase58('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz');\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n/**\n * base58: XMR version. Check out `base58`.\n * Done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n * Block encoding significantly reduces quadratic complexity of base58.\n */\nexport const base58xmr = {\n encode(data) {\n let res = '';\n for (let i = 0; i < data.length; i += 8) {\n const block = data.subarray(i, i + 8);\n res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length], '1');\n }\n return res;\n },\n decode(str) {\n let res = [];\n for (let i = 0; i < str.length; i += 11) {\n const slice = str.slice(i, i + 11);\n const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n const block = base58.decode(slice);\n for (let j = 0; j < block.length - blockLen; j++) {\n if (block[j] !== 0)\n throw new Error('base58xmr: wrong padding');\n }\n res = res.concat(Array.from(block.slice(block.length - blockLen)));\n }\n return Uint8Array.from(res);\n },\n};\n/**\n * Method, which creates base58check encoder.\n * Requires function, calculating sha256.\n */\nexport const createBase58check = (sha256) => chain(checksum(4, (data) => sha256(sha256(data))), base58);\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexport const base58check = createBase58check;\nconst BECH_ALPHABET = chain(alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'), join(''));\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre) {\n const b = pre >> 25;\n let chk = (pre & 0x1ffffff) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if (((b >> i) & 1) === 1)\n chk ^= POLYMOD_GENERATORS[i];\n }\n return chk;\n}\nfunction bechChecksum(prefix, words, encodingConst = 1) {\n const len = prefix.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126)\n throw new Error(`Invalid prefix (${prefix})`);\n chk = bech32Polymod(chk) ^ (c >> 5);\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++)\n chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words)\n chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++)\n chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]], 30, 5, false));\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding) {\n const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n const _words = radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n function encode(prefix, words, limit = 90) {\n astr('bech32.encode prefix', prefix);\n if (isBytes(words))\n words = Array.from(words);\n anumArr('bech32.encode', words);\n const plen = prefix.length;\n if (plen === 0)\n throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n const lowered = prefix.toLowerCase();\n const sum = bechChecksum(lowered, words, ENCODING_CONST);\n return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}`;\n }\n function decode(str, limit = 90) {\n astr('bech32.decode input', str);\n const slen = str.length;\n if (slen < 8 || (limit !== false && slen > limit))\n throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n // don't allow mixed case\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n const sepIndex = lowered.lastIndexOf('1');\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix = lowered.slice(0, sepIndex);\n const data = lowered.slice(sepIndex + 1);\n if (data.length < 6)\n throw new Error('Data must be at least 6 characters long');\n const words = BECH_ALPHABET.decode(data).slice(0, -6);\n const sum = bechChecksum(prefix, words, ENCODING_CONST);\n if (!data.endsWith(sum))\n throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n const decodeUnsafe = unsafeWrapper(decode);\n function decodeToBytes(str) {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n function encodeFromBytes(prefix, bytes) {\n return encode(prefix, toWords(bytes));\n }\n return {\n encode,\n decode,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords,\n };\n}\n/**\n * bech32 from BIP 173. Operates on words.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32 = genBech32('bech32');\n/**\n * bech32m from BIP 350. Operates on words.\n * It was to mitigate `bech32` weaknesses.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32m = genBech32('bech32m');\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * ```js\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n * ```\n */\nexport const utf8 = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\n// prettier-ignore\nconst hasHexBuiltin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toHex === 'function' &&\n typeof Uint8Array.fromHex === 'function')();\n// prettier-ignore\nconst hexBuiltin = {\n encode(data) { abytes(data); return data.toHex(); },\n decode(s) { astr('hex', s); return Uint8Array.fromHex(s); },\n};\n/**\n * hex string decoder. Uses built-in function, when available.\n * @example\n * ```js\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n * ```\n */\nexport const hex = hasHexBuiltin\n ? hexBuiltin\n : chain(radix2(4), alphabet('0123456789abcdef'), join(''), normalize((s) => {\n if (typeof s !== 'string' || s.length % 2 !== 0)\n throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);\n return s.toLowerCase();\n }));\n// prettier-ignore\nconst CODERS = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\nconst coderTypeError = 'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n/** @deprecated */\nexport const bytesToString = (type, bytes) => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (!isBytes(bytes))\n throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\n/** @deprecated */\nexport const str = bytesToString; // as in python, but for bytes only\n/** @deprecated */\nexport const stringToBytes = (type, str) => {\n if (!CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (typeof str !== 'string')\n throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\n/** @deprecated */\nexport const bytes = stringToBytes;\n//# sourceMappingURL=index.js.map","import { hex as baseHex, utf8 } from '@scure/base';\n/**\n * Define complex binary structures using composable primitives.\n * Main ideas:\n * - Encode / decode can be chained, same as in `scure-base`\n * - A complex structure can be created from an array and struct of primitive types\n * - Strings / bytes are arrays with specific optimizations: we can just read bytes directly\n * without creating plain array first and reading each byte separately.\n * - Types are inferred from definition\n * @module\n * @example\n * import * as P from 'micro-packed';\n * const s = P.struct({\n * field1: P.U32BE, // 32-bit unsigned big-endian integer\n * field2: P.string(P.U8), // String with U8 length prefix\n * field3: P.bytes(32), // 32 bytes\n * field4: P.array(P.U16BE, P.struct({ // Array of structs with U16BE length\n * subField1: P.U64BE, // 64-bit unsigned big-endian integer\n * subField2: P.string(10) // 10-byte string\n * }))\n * });\n */\n// TODO: remove dependency on scure-base & inline?\n/*\nExports can be groupped like this:\n\n- Primitive types: P.bytes, P.string, P.hex, P.constant, P.pointer\n- Complex types: P.array, P.struct, P.tuple, P.map, P.tag, P.mappedTag\n- Padding, prefix, magic: P.padLeft, P.padRight, P.prefix, P.magic, P.magicBytes\n- Flags: P.flag, P.flagged, P.optional\n- Wrappers: P.apply, P.wrap, P.lazy\n- Bit fiddling: P.bits, P.bitset\n- utils: P.validate, coders.decimal\n- Debugger\n*/\n/** Shortcut to zero-length (empty) byte array */\nexport const EMPTY = /* @__PURE__ */ new Uint8Array();\n/** Shortcut to one-element (element is 0) byte array */\nexport const NULL = /* @__PURE__ */ new Uint8Array([0]);\n/** Checks if two Uint8Arrays are equal. Not constant-time. */\nfunction equalBytes(a, b) {\n if (a.length !== b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (a[i] !== b[i])\n return false;\n return true;\n}\n/** Checks if the given value is a Uint8Array. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/**\n * Concatenates multiple Uint8Arrays.\n * Engines limit functions to 65K+ arguments.\n * @param arrays Array of Uint8Array elements\n * @returns Concatenated Uint8Array\n */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n if (!isBytes(a))\n throw new Error('Uint8Array expected');\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n/**\n * Creates DataView from Uint8Array\n * @param arr - bytes\n * @returns DataView\n */\nconst createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n/**\n * Checks if the provided value is a plain object, not created from any class or special constructor.\n * Array, Uint8Array and others are not plain objects.\n * @param obj - The value to be checked.\n */\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\nfunction isNum(num) {\n return Number.isSafeInteger(num);\n}\nexport const utils = {\n equalBytes,\n isBytes,\n isCoder,\n checkBounds,\n concatBytes,\n createView,\n isPlainObject,\n};\n// NOTE: we can't have terminator separate function, since it won't know about boundaries\n// E.g. array of U16LE ([1,2,3]) would be [1, 0, 2, 0, 3, 0]\n// But terminator will find array at index '1', which happens to be inside of an element itself\n/**\n * Can be:\n * - Dynamic (CoderType)\n * - Fixed (number)\n * - Terminated (usually zero): Uint8Array with terminator\n * - Field path to field with length (string)\n * - Infinity (null) - decodes until end of buffer\n * Used in:\n * - bytes (string, prefix is implementation of bytes)\n * - array\n */\nconst lengthCoder = (len) => {\n if (len !== null && typeof len !== 'string' && !isCoder(len) && !isBytes(len) && !isNum(len)) {\n throw new Error(`lengthCoder: expected null | number | Uint8Array | CoderType, got ${len} (${typeof len})`);\n }\n return {\n encodeStream(w, value) {\n if (len === null)\n return;\n if (isCoder(len))\n return len.encodeStream(w, value);\n let byteLen;\n if (typeof len === 'number')\n byteLen = len;\n else if (typeof len === 'string')\n byteLen = Path.resolve(w.stack, len);\n if (typeof byteLen === 'bigint')\n byteLen = Number(byteLen);\n if (byteLen === undefined || byteLen !== value)\n throw w.err(`Wrong length: ${byteLen} len=${len} exp=${value} (${typeof value})`);\n },\n decodeStream(r) {\n let byteLen;\n if (isCoder(len))\n byteLen = Number(len.decodeStream(r));\n else if (typeof len === 'number')\n byteLen = len;\n else if (typeof len === 'string')\n byteLen = Path.resolve(r.stack, len);\n if (typeof byteLen === 'bigint')\n byteLen = Number(byteLen);\n if (typeof byteLen !== 'number')\n throw r.err(`Wrong length: ${byteLen}`);\n return byteLen;\n },\n };\n};\n/**\n * Small bitset structure to store position of ranges that have been read.\n * Can be more efficient when internal trees are utilized at the cost of complexity.\n * Needs `O(N/8)` memory for parsing.\n * Purpose: if there are pointers in parsed structure,\n * they can cause read of two distinct ranges:\n * [0-32, 64-128], which means 'pos' is not enough to handle them\n */\nconst Bitset = {\n BITS: 32,\n FULL_MASK: -1 >>> 0, // 1<<32 will overflow\n len: (len) => Math.ceil(len / 32),\n create: (len) => new Uint32Array(Bitset.len(len)),\n clean: (bs) => bs.fill(0),\n debug: (bs) => Array.from(bs).map((i) => (i >>> 0).toString(2).padStart(32, '0')),\n checkLen: (bs, len) => {\n if (Bitset.len(len) === bs.length)\n return;\n throw new Error(`wrong length=${bs.length}. Expected: ${Bitset.len(len)}`);\n },\n chunkLen: (bsLen, pos, len) => {\n if (pos < 0)\n throw new Error(`wrong pos=${pos}`);\n if (pos + len > bsLen)\n throw new Error(`wrong range=${pos}/${len} of ${bsLen}`);\n },\n set: (bs, chunk, value, allowRewrite = true) => {\n if (!allowRewrite && (bs[chunk] & value) !== 0)\n return false;\n bs[chunk] |= value;\n return true;\n },\n pos: (pos, i) => ({\n chunk: Math.floor((pos + i) / 32),\n mask: 1 << (32 - ((pos + i) % 32) - 1),\n }),\n indices: (bs, len, invert = false) => {\n Bitset.checkLen(bs, len);\n const { FULL_MASK, BITS } = Bitset;\n const left = BITS - (len % BITS);\n const lastMask = left ? (FULL_MASK >>> left) << left : FULL_MASK;\n const res = [];\n for (let i = 0; i < bs.length; i++) {\n let c = bs[i];\n if (invert)\n c = ~c; // allows to gen unset elements\n // apply mask to last element, so we won't iterate non-existent items\n if (i === bs.length - 1)\n c &= lastMask;\n if (c === 0)\n continue; // fast-path\n for (let j = 0; j < BITS; j++) {\n const m = 1 << (BITS - j - 1);\n if (c & m)\n res.push(i * BITS + j);\n }\n }\n return res;\n },\n range: (arr) => {\n const res = [];\n let cur;\n for (const i of arr) {\n if (cur === undefined || i !== cur.pos + cur.length)\n res.push((cur = { pos: i, length: 1 }));\n else\n cur.length += 1;\n }\n return res;\n },\n rangeDebug: (bs, len, invert = false) => `[${Bitset.range(Bitset.indices(bs, len, invert))\n .map((i) => `(${i.pos}/${i.length})`)\n .join(', ')}]`,\n setRange: (bs, bsLen, pos, len, allowRewrite = true) => {\n Bitset.chunkLen(bsLen, pos, len);\n const { FULL_MASK, BITS } = Bitset;\n // Try to set range with maximum efficiency:\n // - first chunk is always '0000[1111]' (only right ones)\n // - middle chunks are set to '[1111 1111]' (all ones)\n // - last chunk is always '[1111]0000' (only left ones)\n // - max operations: (N/32) + 2 (first and last)\n const first = pos % BITS ? Math.floor(pos / BITS) : undefined;\n const lastPos = pos + len;\n const last = lastPos % BITS ? Math.floor(lastPos / BITS) : undefined;\n // special case, whole range inside single chunk\n if (first !== undefined && first === last)\n return Bitset.set(bs, first, (FULL_MASK >>> (BITS - len)) << (BITS - len - pos), allowRewrite);\n if (first !== undefined) {\n if (!Bitset.set(bs, first, FULL_MASK >>> pos % BITS, allowRewrite))\n return false; // first chunk\n }\n // middle chunks\n const start = first !== undefined ? first + 1 : pos / BITS;\n const end = last !== undefined ? last : lastPos / BITS;\n for (let i = start; i < end; i++)\n if (!Bitset.set(bs, i, FULL_MASK, allowRewrite))\n return false;\n if (last !== undefined && first !== last)\n if (!Bitset.set(bs, last, FULL_MASK << (BITS - (lastPos % BITS)), allowRewrite))\n return false; // last chunk\n return true;\n },\n};\nconst Path = {\n /**\n * Internal method for handling stack of paths (debug, errors, dynamic fields via path)\n * This is looks ugly (callback), but allows us to force stack cleaning by construction (.pop always after function).\n * Also, this makes impossible:\n * - pushing field when stack is empty\n * - pushing field inside of field (real bug)\n * NOTE: we don't want to do '.pop' on error!\n */\n pushObj: (stack, obj, objFn) => {\n const last = { obj };\n stack.push(last);\n objFn((field, fieldFn) => {\n last.field = field;\n fieldFn();\n last.field = undefined;\n });\n stack.pop();\n },\n path: (stack) => {\n const res = [];\n for (const i of stack)\n if (i.field !== undefined)\n res.push(i.field);\n return res.join('/');\n },\n err: (name, stack, msg) => {\n const err = new Error(`${name}(${Path.path(stack)}): ${typeof msg === 'string' ? msg : msg.message}`);\n if (msg instanceof Error && msg.stack)\n err.stack = msg.stack;\n return err;\n },\n resolve: (stack, path) => {\n const parts = path.split('/');\n const objPath = stack.map((i) => i.obj);\n let i = 0;\n for (; i < parts.length; i++) {\n if (parts[i] === '..')\n objPath.pop();\n else\n break;\n }\n let cur = objPath.pop();\n for (; i < parts.length; i++) {\n if (!cur || cur[parts[i]] === undefined)\n return undefined;\n cur = cur[parts[i]];\n }\n return cur;\n },\n};\n/**\n * Internal structure. Reader class for reading from a byte array.\n * `stack` is internal: for debugger and logging\n * @class Reader\n */\nclass _Reader {\n constructor(data, opts = {}, stack = [], parent = undefined, parentOffset = 0) {\n this.pos = 0;\n this.bitBuf = 0;\n this.bitPos = 0;\n this.data = data;\n this.opts = opts;\n this.stack = stack;\n this.parent = parent;\n this.parentOffset = parentOffset;\n this.view = createView(data);\n }\n /** Internal method for pointers. */\n _enablePointers() {\n if (this.parent)\n return this.parent._enablePointers();\n if (this.bs)\n return;\n this.bs = Bitset.create(this.data.length);\n Bitset.setRange(this.bs, this.data.length, 0, this.pos, this.opts.allowMultipleReads);\n }\n markBytesBS(pos, len) {\n if (this.parent)\n return this.parent.markBytesBS(this.parentOffset + pos, len);\n if (!len)\n return true;\n if (!this.bs)\n return true;\n return Bitset.setRange(this.bs, this.data.length, pos, len, false);\n }\n markBytes(len) {\n const pos = this.pos;\n this.pos += len;\n const res = this.markBytesBS(pos, len);\n if (!this.opts.allowMultipleReads && !res)\n throw this.err(`multiple read pos=${this.pos} len=${len}`);\n return res;\n }\n pushObj(obj, objFn) {\n return Path.pushObj(this.stack, obj, objFn);\n }\n readView(n, fn) {\n if (!Number.isFinite(n))\n throw this.err(`readView: wrong length=${n}`);\n if (this.pos + n > this.data.length)\n throw this.err('readView: Unexpected end of buffer');\n const res = fn(this.view, this.pos);\n this.markBytes(n);\n return res;\n }\n // read bytes by absolute offset\n absBytes(n) {\n if (n > this.data.length)\n throw new Error('Unexpected end of buffer');\n return this.data.subarray(n);\n }\n finish() {\n if (this.opts.allowUnreadBytes)\n return;\n if (this.bitPos) {\n throw this.err(`${this.bitPos} bits left after unpack: ${baseHex.encode(this.data.slice(this.pos))}`);\n }\n if (this.bs && !this.parent) {\n const notRead = Bitset.indices(this.bs, this.data.length, true);\n if (notRead.length) {\n const formatted = Bitset.range(notRead)\n .map(({ pos, length }) => `(${pos}/${length})[${baseHex.encode(this.data.subarray(pos, pos + length))}]`)\n .join(', ');\n throw this.err(`unread byte ranges: ${formatted} (total=${this.data.length})`);\n }\n else\n return; // all bytes read, everything is ok\n }\n // Default: no pointers enabled\n if (!this.isEnd()) {\n throw this.err(`${this.leftBytes} bytes ${this.bitPos} bits left after unpack: ${baseHex.encode(this.data.slice(this.pos))}`);\n }\n }\n // User methods\n err(msg) {\n return Path.err('Reader', this.stack, msg);\n }\n offsetReader(n) {\n if (n > this.data.length)\n throw this.err('offsetReader: Unexpected end of buffer');\n return new _Reader(this.absBytes(n), this.opts, this.stack, this, n);\n }\n bytes(n, peek = false) {\n if (this.bitPos)\n throw this.err('readBytes: bitPos not empty');\n if (!Number.isFinite(n))\n throw this.err(`readBytes: wrong length=${n}`);\n if (this.pos + n > this.data.length)\n throw this.err('readBytes: Unexpected end of buffer');\n const slice = this.data.subarray(this.pos, this.pos + n);\n if (!peek)\n this.markBytes(n);\n return slice;\n }\n byte(peek = false) {\n if (this.bitPos)\n throw this.err('readByte: bitPos not empty');\n if (this.pos + 1 > this.data.length)\n throw this.err('readBytes: Unexpected end of buffer');\n const data = this.data[this.pos];\n if (!peek)\n this.markBytes(1);\n return data;\n }\n get leftBytes() {\n return this.data.length - this.pos;\n }\n get totalBytes() {\n return this.data.length;\n }\n isEnd() {\n return this.pos >= this.data.length && !this.bitPos;\n }\n // bits are read in BE mode (left to right): (0b1000_0000).readBits(1) == 1\n bits(bits) {\n if (bits > 32)\n throw this.err('BitReader: cannot read more than 32 bits in single call');\n let out = 0;\n while (bits) {\n if (!this.bitPos) {\n this.bitBuf = this.byte();\n this.bitPos = 8;\n }\n const take = Math.min(bits, this.bitPos);\n this.bitPos -= take;\n out = (out << take) | ((this.bitBuf >> this.bitPos) & (2 ** take - 1));\n this.bitBuf &= 2 ** this.bitPos - 1;\n bits -= take;\n }\n // Fix signed integers\n return out >>> 0;\n }\n find(needle, pos = this.pos) {\n if (!isBytes(needle))\n throw this.err(`find: needle is not bytes! ${needle}`);\n if (this.bitPos)\n throw this.err('findByte: bitPos not empty');\n if (!needle.length)\n throw this.err(`find: needle is empty`);\n // indexOf should be faster than full equalBytes check\n for (let idx = pos; (idx = this.data.indexOf(needle[0], idx)) !== -1; idx++) {\n if (idx === -1)\n return;\n const leftBytes = this.data.length - idx;\n if (leftBytes < needle.length)\n return;\n if (equalBytes(needle, this.data.subarray(idx, idx + needle.length)))\n return idx;\n }\n return;\n }\n}\n/**\n * Internal structure. Writer class for writing to a byte array.\n * The `stack` argument of constructor is internal, for debugging and logs.\n * @class Writer\n */\nclass _Writer {\n constructor(stack = []) {\n this.pos = 0;\n // We could have a single buffer here and re-alloc it with\n // x1.5-2 size each time it full, but it will be slower:\n // basic/encode bench: 395ns -> 560ns\n this.buffers = [];\n this.ptrs = [];\n this.bitBuf = 0;\n this.bitPos = 0;\n this.viewBuf = new Uint8Array(8);\n this.finished = false;\n this.stack = stack;\n this.view = createView(this.viewBuf);\n }\n pushObj(obj, objFn) {\n return Path.pushObj(this.stack, obj, objFn);\n }\n writeView(len, fn) {\n if (this.finished)\n throw this.err('buffer: finished');\n if (!isNum(len) || len > 8)\n throw new Error(`wrong writeView length=${len}`);\n fn(this.view);\n this.bytes(this.viewBuf.slice(0, len));\n this.viewBuf.fill(0);\n }\n // User methods\n err(msg) {\n if (this.finished)\n throw this.err('buffer: finished');\n return Path.err('Reader', this.stack, msg);\n }\n bytes(b) {\n if (this.finished)\n throw this.err('buffer: finished');\n if (this.bitPos)\n throw this.err('writeBytes: ends with non-empty bit buffer');\n this.buffers.push(b);\n this.pos += b.length;\n }\n byte(b) {\n if (this.finished)\n throw this.err('buffer: finished');\n if (this.bitPos)\n throw this.err('writeByte: ends with non-empty bit buffer');\n this.buffers.push(new Uint8Array([b]));\n this.pos++;\n }\n finish(clean = true) {\n if (this.finished)\n throw this.err('buffer: finished');\n if (this.bitPos)\n throw this.err('buffer: ends with non-empty bit buffer');\n // Can't use concatBytes, because it limits amount of arguments (65K).\n const buffers = this.buffers.concat(this.ptrs.map((i) => i.buffer));\n const sum = buffers.map((b) => b.length).reduce((a, b) => a + b, 0);\n const buf = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < buffers.length; i++) {\n const a = buffers[i];\n buf.set(a, pad);\n pad += a.length;\n }\n for (let pos = this.pos, i = 0; i < this.ptrs.length; i++) {\n const ptr = this.ptrs[i];\n buf.set(ptr.ptr.encode(pos), ptr.pos);\n pos += ptr.buffer.length;\n }\n // Cleanup\n if (clean) {\n // We cannot cleanup buffers here, since it can be static user provided buffer.\n // Only '.byte' and '.bits' create buffer which we can safely clean.\n // for (const b of this.buffers) b.fill(0);\n this.buffers = [];\n for (const p of this.ptrs)\n p.buffer.fill(0);\n this.ptrs = [];\n this.finished = true;\n this.bitBuf = 0;\n }\n return buf;\n }\n bits(value, bits) {\n if (bits > 32)\n throw this.err('writeBits: cannot write more than 32 bits in single call');\n if (value >= 2 ** bits)\n throw this.err(`writeBits: value (${value}) >= 2**bits (${bits})`);\n while (bits) {\n const take = Math.min(bits, 8 - this.bitPos);\n this.bitBuf = (this.bitBuf << take) | (value >> (bits - take));\n this.bitPos += take;\n bits -= take;\n value &= 2 ** bits - 1;\n if (this.bitPos === 8) {\n this.bitPos = 0;\n this.buffers.push(new Uint8Array([this.bitBuf]));\n this.pos++;\n }\n }\n }\n}\n// Immutable LE<->BE\nconst swapEndianness = (b) => Uint8Array.from(b).reverse();\n/** Internal function for checking bit bounds of bigint in signed/unsinged form */\nfunction checkBounds(value, bits, signed) {\n if (signed) {\n // [-(2**(32-1)), 2**(32-1)-1]\n const signBit = 2n ** (bits - 1n);\n if (value < -signBit || value >= signBit)\n throw new Error(`value out of signed bounds. Expected ${-signBit} <= ${value} < ${signBit}`);\n }\n else {\n // [0, 2**32-1]\n if (0n > value || value >= 2n ** bits)\n throw new Error(`value out of unsigned bounds. Expected 0 <= ${value} < ${2n ** bits}`);\n }\n}\nfunction _wrap(inner) {\n return {\n // NOTE: we cannot export validate here, since it is likely mistake.\n encodeStream: inner.encodeStream,\n decodeStream: inner.decodeStream,\n size: inner.size,\n encode: (value) => {\n const w = new _Writer();\n inner.encodeStream(w, value);\n return w.finish();\n },\n decode: (data, opts = {}) => {\n const r = new _Reader(data, opts);\n const res = inner.decodeStream(r);\n r.finish();\n return res;\n },\n };\n}\n/**\n * Validates a value before encoding and after decoding using a provided function.\n * @param inner - The inner CoderType.\n * @param fn - The validation function.\n * @returns CoderType which check value with validation function.\n * @example\n * const val = (n: number) => {\n * if (n > 10) throw new Error(`${n} > 10`);\n * return n;\n * };\n *\n * const RangedInt = P.validate(P.U32LE, val); // Will check if value is <= 10 during encoding and decoding\n */\nexport function validate(inner, fn) {\n if (!isCoder(inner))\n throw new Error(`validate: invalid inner value ${inner}`);\n if (typeof fn !== 'function')\n throw new Error('validate: fn should be function');\n return _wrap({\n size: inner.size,\n encodeStream: (w, value) => {\n let res;\n try {\n res = fn(value);\n }\n catch (e) {\n throw w.err(e);\n }\n inner.encodeStream(w, res);\n },\n decodeStream: (r) => {\n const res = inner.decodeStream(r);\n try {\n return fn(res);\n }\n catch (e) {\n throw r.err(e);\n }\n },\n });\n}\n/**\n * Wraps a stream encoder into a generic encoder and optionally validation function\n * @param {inner} inner BytesCoderStream & { validate?: Validate<T> }.\n * @returns The wrapped CoderType.\n * @example\n * const U8 = P.wrap({\n * encodeStream: (w: Writer, value: number) => w.byte(value),\n * decodeStream: (r: Reader): number => r.byte()\n * });\n * const checkedU8 = P.wrap({\n * encodeStream: (w: Writer, value: number) => w.byte(value),\n * decodeStream: (r: Reader): number => r.byte()\n * validate: (n: number) => {\n * if (n > 10) throw new Error(`${n} > 10`);\n * return n;\n * }\n * });\n */\nexport const wrap = (inner) => {\n const res = _wrap(inner);\n return inner.validate ? validate(res, inner.validate) : res;\n};\nconst isBaseCoder = (elm) => isPlainObject(elm) && typeof elm.decode === 'function' && typeof elm.encode === 'function';\n/**\n * Checks if the given value is a CoderType.\n * @param elm - The value to check.\n * @returns True if the value is a CoderType, false otherwise.\n */\nexport function isCoder(elm) {\n return (isPlainObject(elm) &&\n isBaseCoder(elm) &&\n typeof elm.encodeStream === 'function' &&\n typeof elm.decodeStream === 'function' &&\n (elm.size === undefined || isNum(elm.size)));\n}\n// Coders (like in @scure/base) for common operations\n/**\n * Base coder for working with dictionaries (records, objects, key-value map)\n * Dictionary is dynamic type like: `[key: string, value: any][]`\n * @returns base coder that encodes/decodes between arrays of key-value tuples and dictionaries.\n * @example\n * const dict: P.CoderType<Record<string, number>> = P.apply(\n * P.array(P.U16BE, P.tuple([P.cstring, P.U32LE] as const)),\n * P.coders.dict()\n * );\n */\nfunction dict() {\n return {\n encode: (from) => {\n if (!Array.isArray(from))\n throw new Error('array expected');\n const to = {};\n for (const item of from) {\n if (!Array.isArray(item) || item.length !== 2)\n throw new Error(`array of two elements expected`);\n const name = item[0];\n const value = item[1];\n if (to[name] !== undefined)\n throw new Error(`key(${name}) appears twice in struct`);\n to[name] = value;\n }\n return to;\n },\n decode: (to) => {\n if (!isPlainObject(to))\n throw new Error(`expected plain object, got ${to}`);\n return Object.entries(to);\n },\n };\n}\n/**\n * Safely converts bigint to number.\n * Sometimes pointers / tags use u64 or other big numbers which cannot be represented by number,\n * but we still can use them since real value will be smaller than u32\n */\nconst numberBigint = {\n encode: (from) => {\n if (typeof from !== 'bigint')\n throw new Error(`expected bigint, got ${typeof from}`);\n if (from > BigInt(Number.MAX_SAFE_INTEGER))\n throw new Error(`element bigger than MAX_SAFE_INTEGER=${from}`);\n return Number(from);\n },\n decode: (to) => {\n if (!isNum(to))\n throw new Error('element is not a safe integer');\n return BigInt(to);\n },\n};\n/**\n * Base coder for working with TypeScript enums.\n * @param e - TypeScript enum.\n * @returns base coder that encodes/decodes between numbers and enum keys.\n * @example\n * enum Color { Red, Green, Blue }\n * const colorCoder = P.coders.tsEnum(Color);\n * colorCoder.encode(Color.Red); // 'Red'\n * colorCoder.decode('Green'); // 1\n */\nfunction tsEnum(e) {\n if (!isPlainObject(e))\n throw new Error('plain object expected');\n return {\n encode: (from) => {\n if (!isNum(from) || !(from in e))\n throw new Error(`wrong value ${from}`);\n return e[from];\n },\n decode: (to) => {\n if (typeof to !== 'string')\n throw new Error(`wrong value ${typeof to}`);\n return e[to];\n },\n };\n}\n/**\n * Base coder for working with decimal numbers.\n * @param precision - Number of decimal places.\n * @param round - Round fraction part if bigger than precision (throws error by default)\n * @returns base coder that encodes/decodes between bigints and decimal strings.\n * @example\n * const decimal8 = P.coders.decimal(8);\n * decimal8.encode(630880845n); // '6.30880845'\n * decimal8.decode('6.30880845'); // 630880845n\n */\nfunction decimal(precision, round = false) {\n if (!isNum(precision))\n throw new Error(`decimal/precision: wrong value ${precision}`);\n if (typeof round !== 'boolean')\n throw new Error(`decimal/round: expected boolean, got ${typeof round}`);\n const decimalMask = 10n ** BigInt(precision);\n return {\n encode: (from) => {\n if (typeof from !== 'bigint')\n throw new Error(`expected bigint, got ${typeof from}`);\n let s = (from < 0n ? -from : from).toString(10);\n let sep = s.length - precision;\n if (sep < 0) {\n s = s.padStart(s.length - sep, '0');\n sep = 0;\n }\n let i = s.length - 1;\n for (; i >= sep && s[i] === '0'; i--)\n ;\n let int = s.slice(0, sep);\n let frac = s.slice(sep, i + 1);\n if (!int)\n int = '0';\n if (from < 0n)\n int = '-' + int;\n if (!frac)\n return int;\n return `${int}.${frac}`;\n },\n decode: (to) => {\n if (typeof to !== 'string')\n throw new Error(`expected string, got ${typeof to}`);\n if (to === '-0')\n throw new Error(`negative zero is not allowed`);\n let neg = false;\n if (to.startsWith('-')) {\n neg = true;\n to = to.slice(1);\n }\n if (!/^(0|[1-9]\\d*)(\\.\\d+)?$/.test(to))\n throw new Error(`wrong string value=${to}`);\n let sep = to.indexOf('.');\n sep = sep === -1 ? to.length : sep;\n // split by separator and strip trailing zeros from fraction. always returns [string, string] (.split doesn't).\n const intS = to.slice(0, sep);\n const fracS = to.slice(sep + 1).replace(/0+$/, '');\n const int = BigInt(intS) * decimalMask;\n if (!round && fracS.length > precision) {\n throw new Error(`fractional part cannot be represented with this precision (num=${to}, prec=${precision})`);\n }\n const fracLen = Math.min(fracS.length, precision);\n const frac = BigInt(fracS.slice(0, fracLen)) * 10n ** BigInt(precision - fracLen);\n const value = int + frac;\n return neg ? -value : value;\n },\n };\n}\n/**\n * Combines multiple coders into a single coder, allowing conditional encoding/decoding based on input.\n * Acts as a parser combinator, splitting complex conditional coders into smaller parts.\n *\n * `encode = [Ae, Be]; decode = [Ad, Bd]`\n * ->\n * `match([{encode: Ae, decode: Ad}, {encode: Be; decode: Bd}])`\n *\n * @param lst - Array of coders to match.\n * @returns Combined coder for conditional encoding/decoding.\n */\nfunction match(lst) {\n if (!Array.isArray(lst))\n throw new Error(`expected array, got ${typeof lst}`);\n for (const i of lst)\n if (!isBaseCoder(i))\n throw new Error(`wrong base coder ${i}`);\n return {\n encode: (from) => {\n for (const c of lst) {\n const elm = c.encode(from);\n if (elm !== undefined)\n return elm;\n }\n throw new Error(`match/encode: cannot find match in ${from}`);\n },\n decode: (to) => {\n for (const c of lst) {\n const elm = c.decode(to);\n if (elm !== undefined)\n return elm;\n }\n throw new Error(`match/decode: cannot find match in ${to}`);\n },\n };\n}\n/** Reverses direction of coder */\nconst reverse = (coder) => {\n if (!isBaseCoder(coder))\n throw new Error('BaseCoder expected');\n return { encode: coder.decode, decode: coder.encode };\n};\nexport const coders = { dict, numberBigint, tsEnum, decimal, match, reverse };\n/**\n * CoderType for parsing individual bits.\n * NOTE: Structure should parse whole amount of bytes before it can start parsing byte-level elements.\n * @param len - Number of bits to parse.\n * @returns CoderType representing the parsed bits.\n * @example\n * const s = P.struct({ magic: P.bits(1), version: P.bits(1), tag: P.bits(4), len: P.bits(2) });\n */\nexport const bits = (len) => {\n if (!isNum(len))\n throw new Error(`bits: wrong length ${len} (${typeof len})`);\n return wrap({\n encodeStream: (w, value) => w.bits(value, len),\n decodeStream: (r) => r.bits(len),\n validate: (value) => {\n if (!isNum(value))\n throw new Error(`bits: wrong value ${value}`);\n return value;\n },\n });\n};\n/**\n * CoderType for working with bigint values.\n * Unsized bigint values should be wrapped in a container (e.g., bytes or string).\n *\n * `0n = new Uint8Array([])`\n *\n * `1n = new Uint8Array([1n])`\n *\n * Please open issue, if you need different behavior for zero.\n *\n * @param size - Size of the bigint in bytes.\n * @param le - Whether to use little-endian byte order.\n * @param signed - Whether the bigint is signed.\n * @param sized - Whether the bigint should have a fixed size.\n * @returns CoderType representing the bigint value.\n * @example\n * const U512BE = P.bigint(64, false, true, true); // Define a CoderType for a 512-bit unsigned big-endian integer\n */\nexport const bigint = (size, le = false, signed = false, sized = true) => {\n if (!isNum(size))\n throw new Error(`bigint/size: wrong value ${size}`);\n if (typeof le !== 'boolean')\n throw new Error(`bigint/le: expected boolean, got ${typeof le}`);\n if (typeof signed !== 'boolean')\n throw new Error(`bigint/signed: expected boolean, got ${typeof signed}`);\n if (typeof sized !== 'boolean')\n throw new Error(`bigint/sized: expected boolean, got ${typeof sized}`);\n const bLen = BigInt(size);\n const signBit = 2n ** (8n * bLen - 1n);\n return wrap({\n size: sized ? size : undefined,\n encodeStream: (w, value) => {\n if (signed && value < 0)\n value = value | signBit;\n const b = [];\n for (let i = 0; i < size; i++) {\n b.push(Number(value & 255n));\n value >>= 8n;\n }\n let res = new Uint8Array(b).reverse();\n if (!sized) {\n let pos = 0;\n for (pos = 0; pos < res.length; pos++)\n if (res[pos] !== 0)\n break;\n res = res.subarray(pos); // remove leading zeros\n }\n w.bytes(le ? res.reverse() : res);\n },\n decodeStream: (r) => {\n // TODO: for le we can read until first zero?\n const value = r.bytes(sized ? size : Math.min(size, r.leftBytes));\n const b = le ? value : swapEndianness(value);\n let res = 0n;\n for (let i = 0; i < b.length; i++)\n res |= BigInt(b[i]) << (8n * BigInt(i));\n if (signed && res & signBit)\n res = (res ^ signBit) - signBit;\n return res;\n },\n validate: (value) => {\n if (typeof value !== 'bigint')\n throw new Error(`bigint: invalid value: ${value}`);\n checkBounds(value, 8n * bLen, !!signed);\n return value;\n },\n });\n};\n/** Unsigned 256-bit little-endian integer CoderType. */\nexport const U256LE = /* @__PURE__ */ bigint(32, true);\n/** Unsigned 256-bit big-endian integer CoderType. */\nexport const U256BE = /* @__PURE__ */ bigint(32, false);\n/** Signed 256-bit little-endian integer CoderType. */\nexport const I256LE = /* @__PURE__ */ bigint(32, true, true);\n/** Signed 256-bit big-endian integer CoderType. */\nexport const I256BE = /* @__PURE__ */ bigint(32, false, true);\n/** Unsigned 128-bit little-endian integer CoderType. */\nexport const U128LE = /* @__PURE__ */ bigint(16, true);\n/** Unsigned 128-bit big-endian integer CoderType. */\nexport const U128BE = /* @__PURE__ */ bigint(16, false);\n/** Signed 128-bit little-endian integer CoderType. */\nexport const I128LE = /* @__PURE__ */ bigint(16, true, true);\n/** Signed 128-bit big-endian integer CoderType. */\nexport const I128BE = /* @__PURE__ */ bigint(16, false, true);\n/** Unsigned 64-bit little-endian integer CoderType. */\nexport const U64LE = /* @__PURE__ */ bigint(8, true);\n/** Unsigned 64-bit big-endian integer CoderType. */\nexport const U64BE = /* @__PURE__ */ bigint(8, false);\n/** Signed 64-bit little-endian integer CoderType. */\nexport const I64LE = /* @__PURE__ */ bigint(8, true, true);\n/** Signed 64-bit big-endian integer CoderType. */\nexport const I64BE = /* @__PURE__ */ bigint(8, false, true);\n/**\n * CoderType for working with numbber values (up to 6 bytes/48 bits).\n * Unsized int values should be wrapped in a container (e.g., bytes or string).\n *\n * `0 = new Uint8Array([])`\n *\n * `1 = new Uint8Array([1n])`\n *\n * Please open issue, if you need different behavior for zero.\n *\n * @param size - Size of the number in bytes.\n * @param le - Whether to use little-endian byte order.\n * @param signed - Whether the number is signed.\n * @param sized - Whether the number should have a fixed size.\n * @returns CoderType representing the number value.\n * @example\n * const uint64BE = P.bigint(8, false, true); // Define a CoderType for a 64-bit unsigned big-endian integer\n */\nexport const int = (size, le = false, signed = false, sized = true) => {\n if (!isNum(size))\n throw new Error(`int/size: wrong value ${size}`);\n if (typeof le !== 'boolean')\n throw new Error(`int/le: expected boolean, got ${typeof le}`);\n if (typeof signed !== 'boolean')\n throw new Error(`int/signed: expected boolean, got ${typeof signed}`);\n if (typeof sized !== 'boolean')\n throw new Error(`int/sized: expected boolean, got ${typeof sized}`);\n if (size > 6)\n throw new Error('int supports size up to 6 bytes (48 bits): use bigints instead');\n return apply(bigint(size, le, signed, sized), coders.numberBigint);\n};\nconst view = (len, opts) => wrap({\n size: len,\n encodeStream: (w, value) => w.writeView(len, (view) => opts.write(view, value)),\n decodeStream: (r) => r.readView(len, opts.read),\n validate: (value) => {\n if (typeof value !== 'number')\n throw new Error(`viewCoder: expected number, got ${typeof value}`);\n if (opts.validate)\n opts.validate(value);\n return value;\n },\n});\nconst intView = (len, signed, opts) => {\n const bits = len * 8;\n const signBit = 2 ** (bits - 1);\n // Inlined checkBounds for integer\n const validateSigned = (value) => {\n if (!isNum(value))\n throw new Error(`sintView: value is not safe integer: ${value}`);\n if (value < -signBit || value >= signBit) {\n throw new Error(`sintView: value out of bounds. Expected ${-signBit} <= ${value} < ${signBit}`);\n }\n };\n const maxVal = 2 ** bits;\n const validateUnsigned = (value) => {\n if (!isNum(value))\n throw new Error(`uintView: value is not safe integer: ${value}`);\n if (0 > value || value >= maxVal) {\n throw new Error(`uintView: value out of bounds. Expected 0 <= ${value} < ${maxVal}`);\n }\n };\n return view(len, {\n write: opts.write,\n read: opts.read,\n validate: signed ? validateSigned : validateUnsigned,\n });\n};\n/** Unsigned 32-bit little-endian integer CoderType. */\nexport const U32LE = /* @__PURE__ */ intView(4, false, {\n read: (view, pos) => view.getUint32(pos, true),\n write: (view, value) => view.setUint32(0, value, true),\n});\n/** Unsigned 32-bit big-endian integer CoderType. */\nexport const U32BE = /* @__PURE__ */ intView(4, false, {\n read: (view, pos) => view.getUint32(pos, false),\n write: (view, value) => view.setUint32(0, value, false),\n});\n/** Signed 32-bit little-endian integer CoderType. */\nexport const I32LE = /* @__PURE__ */ intView(4, true, {\n read: (view, pos) => view.getInt32(pos, true),\n write: (view, value) => view.setInt32(0, value, true),\n});\n/** Signed 32-bit big-endian integer CoderType. */\nexport const I32BE = /* @__PURE__ */ intView(4, true, {\n read: (view, pos) => view.getInt32(pos, false),\n write: (view, value) => view.setInt32(0, value, false),\n});\n/** Unsigned 16-bit little-endian integer CoderType. */\nexport const U16LE = /* @__PURE__ */ intView(2, false, {\n read: (view, pos) => view.getUint16(pos, true),\n write: (view, value) => view.setUint16(0, value, true),\n});\n/** Unsigned 16-bit big-endian integer CoderType. */\nexport const U16BE = /* @__PURE__ */ intView(2, false, {\n read: (view, pos) => view.getUint16(pos, false),\n write: (view, value) => view.setUint16(0, value, false),\n});\n/** Signed 16-bit little-endian integer CoderType. */\nexport const I16LE = /* @__PURE__ */ intView(2, true, {\n read: (view, pos) => view.getInt16(pos, true),\n write: (view, value) => view.setInt16(0, value, true),\n});\n/** Signed 16-bit big-endian integer CoderType. */\nexport const I16BE = /* @__PURE__ */ intView(2, true, {\n read: (view, pos) => view.getInt16(pos, false),\n write: (view, value) => view.setInt16(0, value, false),\n});\n/** Unsigned 8-bit integer CoderType. */\nexport const U8 = /* @__PURE__ */ intView(1, false, {\n read: (view, pos) => view.getUint8(pos),\n write: (view, value) => view.setUint8(0, value),\n});\n/** Signed 8-bit integer CoderType. */\nexport const I8 = /* @__PURE__ */ intView(1, true, {\n read: (view, pos) => view.getInt8(pos),\n write: (view, value) => view.setInt8(0, value),\n});\n// Floats\nconst f32 = (le) => view(4, {\n read: (view, pos) => view.getFloat32(pos, le),\n write: (view, value) => view.setFloat32(0, value, le),\n validate: (value) => {\n if (Math.fround(value) !== value && !Number.isNaN(value))\n throw new Error(`f32: wrong value=${value}`);\n },\n});\nconst f64 = (le) => view(8, {\n read: (view, pos) => view.getFloat64(pos, le),\n write: (view, value) => view.setFloat64(0, value, le),\n});\n/** 32-bit big-endian floating point CoderType (\"binary32\", IEEE 754-2008). */\nexport const F32BE = /* @__PURE__ */ f32(false);\n/** 32-bit little-endian floating point CoderType (\"binary32\", IEEE 754-2008). */\nexport const F32LE = /* @__PURE__ */ f32(true);\n/** A 64-bit big-endian floating point type (\"binary64\", IEEE 754-2008). Any JS number can be encoded. */\nexport const F64BE = /* @__PURE__ */ f64(false);\n/** A 64-bit little-endian floating point type (\"binary64\", IEEE 754-2008). Any JS number can be encoded. */\nexport const F64LE = /* @__PURE__ */ f64(true);\n/** Boolean CoderType. */\nexport const bool = /* @__PURE__ */ wrap({\n size: 1,\n encodeStream: (w, value) => w.byte(value ? 1 : 0),\n decodeStream: (r) => {\n const value = r.byte();\n if (value !== 0 && value !== 1)\n throw r.err(`bool: invalid value ${value}`);\n return value === 1;\n },\n validate: (value) => {\n if (typeof value !== 'boolean')\n throw new Error(`bool: invalid value ${value}`);\n return value;\n },\n});\n/**\n * Bytes CoderType with a specified length and endianness.\n * The bytes can have:\n * - Dynamic size (prefixed with a length CoderType like U16BE)\n * - Fixed size (specified by a number)\n * - Unknown size (null, will parse until end of buffer)\n * - Zero-terminated (terminator can be any Uint8Array)\n * @param len - CoderType, number, Uint8Array (terminator) or null\n * @param le - Whether to use little-endian byte order.\n * @returns CoderType representing the bytes.\n * @example\n * // Dynamic size bytes (prefixed with P.U16BE number of bytes length)\n * const dynamicBytes = P.bytes(P.U16BE, false);\n * const fixedBytes = P.bytes(32, false); // Fixed size bytes\n * const unknownBytes = P.bytes(null, false); // Unknown size bytes, will parse until end of buffer\n * const zeroTerminatedBytes = P.bytes(new Uint8Array([0]), false); // Zero-terminated bytes\n */\nconst createBytes = (len, le = false) => {\n if (typeof le !== 'boolean')\n throw new Error(`bytes/le: expected boolean, got ${typeof le}`);\n const _length = lengthCoder(len);\n const _isb = isBytes(len);\n return wrap({\n size: typeof len === 'number' ? len : undefined,\n encodeStream: (w, value) => {\n if (!_isb)\n _length.encodeStream(w, value.length);\n w.bytes(le ? swapEndianness(value) : value);\n if (_isb)\n w.bytes(len);\n },\n decodeStream: (r) => {\n let bytes;\n if (_isb) {\n const tPos = r.find(len);\n if (!tPos)\n throw r.err(`bytes: cannot find terminator`);\n bytes = r.bytes(tPos - r.pos);\n r.bytes(len.length);\n }\n else {\n bytes = r.bytes(len === null ? r.leftBytes : _length.decodeStream(r));\n }\n return le ? swapEndianness(bytes) : bytes;\n },\n validate: (value) => {\n if (!isBytes(value))\n throw new Error(`bytes: invalid value ${value}`);\n return value;\n },\n });\n};\nexport { createBytes as bytes, createHex as hex };\n/**\n * Prefix-encoded value using a length prefix and an inner CoderType.\n * The prefix can have:\n * - Dynamic size (prefixed with a length CoderType like U16BE)\n * - Fixed size (specified by a number)\n * - Unknown size (null, will parse until end of buffer)\n * - Zero-terminated (terminator can be any Uint8Array)\n * @param len - Length CoderType (dynamic size), number (fixed size), Uint8Array (for terminator), or null (will parse until end of buffer)\n * @param inner - CoderType for the actual value to be prefix-encoded.\n * @returns CoderType representing the prefix-encoded value.\n * @example\n * const dynamicPrefix = P.prefix(P.U16BE, P.bytes(null)); // Dynamic size prefix (prefixed with P.U16BE number of bytes length)\n * const fixedPrefix = P.prefix(10, P.bytes(null)); // Fixed size prefix (always 10 bytes)\n */\nexport function prefix(len, inner) {\n if (!isCoder(inner))\n throw new Error(`prefix: invalid inner value ${inner}`);\n return apply(createBytes(len), reverse(inner));\n}\n/**\n * String CoderType with a specified length and endianness.\n * The string can be:\n * - Dynamic size (prefixed with a length CoderType like U16BE)\n * - Fixed size (specified by a number)\n * - Unknown size (null, will parse until end of buffer)\n * - Zero-terminated (terminator can be any Uint8Array)\n * @param len - Length CoderType (dynamic size), number (fixed size), Uint8Array (for terminator), or null (will parse until end of buffer)\n * @param le - Whether to use little-endian byte order.\n * @returns CoderType representing the string.\n * @example\n * const dynamicString = P.string(P.U16BE, false); // Dynamic size string (prefixed with P.U16BE number of string length)\n * const fixedString = P.string(10, false); // Fixed size string\n * const unknownString = P.string(null, false); // Unknown size string, will parse until end of buffer\n * const nullTerminatedString = P.cstring; // NUL-terminated string\n * const _cstring = P.string(new Uint8Array([0])); // Same thing\n */\nexport const string = (len, le = false) => validate(apply(createBytes(len, le), utf8), (value) => {\n // TextEncoder/TextDecoder will fail on non-string, but we create more readable errors earlier\n if (typeof value !== 'string')\n throw new Error(`expected string, got ${typeof value}`);\n return value;\n});\n/** NUL-terminated string CoderType. */\nexport const cstring = /* @__PURE__ */ string(NULL);\n/**\n * Hexadecimal string CoderType with a specified length, endianness, and optional 0x prefix.\n * @param len - Length CoderType (dynamic size), number (fixed size), Uint8Array (for terminator), or null (will parse until end of buffer)\n * @param le - Whether to use little-endian byte order.\n * @param withZero - Whether to include the 0x prefix.\n * @returns CoderType representing the hexadecimal string.\n * @example\n * const dynamicHex = P.hex(P.U16BE, {isLE: false, with0x: true}); // Hex string with 0x prefix and U16BE length\n * const fixedHex = P.hex(32, {isLE: false, with0x: false}); // Fixed-length 32-byte hex string without 0x prefix\n */\nconst createHex = (len, options = { isLE: false, with0x: false }) => {\n let inner = apply(createBytes(len, options.isLE), baseHex);\n const prefix = options.with0x;\n if (typeof prefix !== 'boolean')\n throw new Error(`hex/with0x: expected boolean, got ${typeof prefix}`);\n if (prefix) {\n inner = apply(inner, {\n encode: (value) => `0x${value}`,\n decode: (value) => {\n if (!value.startsWith('0x'))\n throw new Error('hex(with0x=true).encode input should start with 0x');\n return value.slice(2);\n },\n });\n }\n return inner;\n};\n/**\n * Applies a base coder to a CoderType.\n * @param inner - The inner CoderType.\n * @param b - The base coder to apply.\n * @returns CoderType representing the transformed value.\n * @example\n * import { hex } from '@scure/base';\n * const hex = P.apply(P.bytes(32), hex); // will decode bytes into a hex string\n */\nexport function apply(inner, base) {\n if (!isCoder(inner))\n throw new Error(`apply: invalid inner value ${inner}`);\n if (!isBaseCoder(base))\n throw new Error(`apply: invalid base value ${inner}`);\n return wrap({\n size: inner.size,\n encodeStream: (w, value) => {\n let innerValue;\n try {\n innerValue = base.decode(value);\n }\n catch (e) {\n throw w.err('' + e);\n }\n return inner.encodeStream(w, innerValue);\n },\n decodeStream: (r) => {\n const innerValue = inner.decodeStream(r);\n try {\n return base.encode(innerValue);\n }\n catch (e) {\n throw r.err('' + e);\n }\n },\n });\n}\n/**\n * Lazy CoderType that is evaluated at runtime.\n * @param fn - A function that returns the CoderType.\n * @returns CoderType representing the lazy value.\n * @example\n * type Tree = { name: string; children: Tree[] };\n * const tree = P.struct({\n * name: P.cstring,\n * children: P.array(\n * P.U16BE,\n * P.lazy((): P.CoderType<Tree> => tree)\n * ),\n * });\n */\nexport function lazy(fn) {\n if (typeof fn !== 'function')\n throw new Error(`lazy: expected function, got ${typeof fn}`);\n return wrap({\n encodeStream: (w, value) => fn().encodeStream(w, value),\n decodeStream: (r) => fn().decodeStream(r),\n });\n}\n/**\n * Flag CoderType that encodes/decodes a boolean value based on the presence of a marker.\n * @param flagValue - Marker value.\n * @param xor - Whether to invert the flag behavior.\n * @returns CoderType representing the flag value.\n * @example\n * const flag = P.flag(new Uint8Array([0x01, 0x02])); // Encodes true as u8a([0x01, 0x02]), false as u8a([])\n * const flagXor = P.flag(new Uint8Array([0x01, 0x02]), true); // Encodes true as u8a([]), false as u8a([0x01, 0x02])\n * // Conditional encoding with flagged\n * const s = P.struct({ f: P.flag(new Uint8Array([0x0, 0x1])), f2: P.flagged('f', P.U32BE) });\n */\nexport const flag = (flagValue, xor = false) => {\n if (!isBytes(flagValue))\n throw new Error(`flag/flagValue: expected Uint8Array, got ${typeof flagValue}`);\n if (typeof xor !== 'boolean')\n throw new Error(`flag/xor: expected boolean, got ${typeof xor}`);\n return wrap({\n size: flagValue.length,\n encodeStream: (w, value) => {\n if (!!value !== xor)\n w.bytes(flagValue);\n },\n decodeStream: (r) => {\n let hasFlag = r.leftBytes >= flagValue.length;\n if (hasFlag) {\n hasFlag = equalBytes(r.bytes(flagValue.length, true), flagValue);\n // Found flag, advance cursor position\n if (hasFlag)\n r.bytes(flagValue.length);\n }\n return hasFlag !== xor; // hasFlag ^ xor\n },\n validate: (value) => {\n if (value !== undefined && typeof value !== 'boolean')\n throw new Error(`flag: expected boolean value or undefined, got ${typeof value}`);\n return value;\n },\n });\n};\n/**\n * Conditional CoderType that encodes/decodes a value only if a flag is present.\n * @param path - Path to the flag value or a CoderType for the flag.\n * @param inner - Inner CoderType for the value.\n * @param def - Optional default value to use if the flag is not present.\n * @returns CoderType representing the conditional value.\n * @example\n * const s = P.struct({\n * f: P.flag(new Uint8Array([0x0, 0x1])),\n * f2: P.flagged('f', P.U32BE)\n * });\n *\n * @example\n * const s2 = P.struct({\n * f: P.flag(new Uint8Array([0x0, 0x1])),\n * f2: P.flagged('f', P.U32BE, 123)\n * });\n */\nexport function flagged(path, inner, def) {\n if (!isCoder(inner))\n throw new Error(`flagged: invalid inner value ${inner}`);\n if (typeof path !== 'string' && !isCoder(inner))\n throw new Error(`flagged: wrong path=${path}`);\n return wrap({\n encodeStream: (w, value) => {\n if (typeof path === 'string') {\n if (Path.resolve(w.stack, path))\n inner.encodeStream(w, value);\n else if (def)\n inner.encodeStream(w, def);\n }\n else {\n path.encodeStream(w, !!value);\n if (!!value)\n inner.encodeStream(w, value);\n else if (def)\n inner.encodeStream(w, def);\n }\n },\n decodeStream: (r) => {\n let hasFlag = false;\n if (typeof path === 'string')\n hasFlag = !!Path.resolve(r.stack, path);\n else\n hasFlag = path.decodeStream(r);\n // If there is a flag -- decode and return value\n if (hasFlag)\n return inner.decodeStream(r);\n else if (def)\n inner.decodeStream(r);\n return;\n },\n });\n}\n/**\n * Optional CoderType that encodes/decodes a value based on a flag.\n * @param flag - CoderType for the flag value.\n * @param inner - Inner CoderType for the value.\n * @param def - Optional default value to use if the flag is not present.\n * @returns CoderType representing the optional value.\n * @example\n * // Will decode into P.U32BE only if flag present\n * const optional = P.optional(P.flag(new Uint8Array([0x0, 0x1])), P.U32BE);\n *\n * @example\n * // If no flag present, will decode into default value\n * const optionalWithDefault = P.optional(P.flag(new Uint8Array([0x0, 0x1])), P.U32BE, 123);\n */\nexport function optional(flag, inner, def) {\n if (!isCoder(flag) || !isCoder(inner))\n throw new Error(`optional: invalid flag or inner value flag=${flag} inner=${inner}`);\n return wrap({\n size: def !== undefined && flag.size && inner.size ? flag.size + inner.size : undefined,\n encodeStream: (w, value) => {\n flag.encodeStream(w, !!value);\n if (value)\n inner.encodeStream(w, value);\n else if (def !== undefined)\n inner.encodeStream(w, def);\n },\n decodeStream: (r) => {\n if (flag.decodeStream(r))\n return inner.decodeStream(r);\n else if (def !== undefined)\n inner.decodeStream(r);\n return;\n },\n });\n}\n/**\n * Magic value CoderType that encodes/decodes a constant value.\n * This can be used to check for a specific magic value or sequence of bytes at the beginning of a data structure.\n * @param inner - Inner CoderType for the value.\n * @param constant - Constant value.\n * @param check - Whether to check the decoded value against the constant.\n * @returns CoderType representing the magic value.\n * @example\n * // Always encodes constant as bytes using inner CoderType, throws if encoded value is not present\n * const magicU8 = P.magic(P.U8, 0x42);\n */\nexport function magic(inner, constant, check = true) {\n if (!isCoder(inner))\n throw new Error(`magic: invalid inner value ${inner}`);\n if (typeof check !== 'boolean')\n throw new Error(`magic: expected boolean, got ${typeof check}`);\n return wrap({\n size: inner.size,\n encodeStream: (w, _value) => inner.encodeStream(w, constant),\n decodeStream: (r) => {\n const value = inner.decodeStream(r);\n if ((check && typeof value !== 'object' && value !== constant) ||\n (isBytes(constant) && !equalBytes(constant, value))) {\n throw r.err(`magic: invalid value: ${value} !== ${constant}`);\n }\n return;\n },\n validate: (value) => {\n if (value !== undefined)\n throw new Error(`magic: wrong value=${typeof value}`);\n return value;\n },\n });\n}\n/**\n * Magic bytes CoderType that encodes/decodes a constant byte array or string.\n * @param constant - Constant byte array or string.\n * @returns CoderType representing the magic bytes.\n * @example\n * // Always encodes undefined into byte representation of string 'MAGIC'\n * const magicBytes = P.magicBytes('MAGIC');\n */\nexport const magicBytes = (constant) => {\n const c = typeof constant === 'string' ? utf8.decode(constant) : constant;\n return magic(createBytes(c.length), c);\n};\n/**\n * Creates a CoderType for a constant value. The function enforces this value during encoding,\n * ensuring it matches the provided constant. During decoding, it always returns the constant value.\n * The actual value is not written to or read from any byte stream; it's used only for validation.\n *\n * @param c - Constant value.\n * @returns CoderType representing the constant value.\n * @example\n * // Always return 123 on decode, throws on encoding anything other than 123\n * const constantU8 = P.constant(123);\n */\nexport function constant(c) {\n return wrap({\n encodeStream: (_w, value) => {\n if (value !== c)\n throw new Error(`constant: invalid value ${value} (exp: ${c})`);\n },\n decodeStream: (_r) => c,\n });\n}\nfunction sizeof(fields) {\n let size = 0;\n for (const f of fields) {\n if (f.size === undefined)\n return;\n if (!isNum(f.size))\n throw new Error(`sizeof: wrong element size=${size}`);\n size += f.size;\n }\n return size;\n}\n/**\n * Structure of composable primitives (C/Rust struct)\n * @param fields - Object mapping field names to CoderTypes.\n * @returns CoderType representing the structure.\n * @example\n * // Define a structure with a 32-bit big-endian unsigned integer, a string, and a nested structure\n * const myStruct = P.struct({\n * id: P.U32BE,\n * name: P.string(P.U8),\n * nested: P.struct({\n * flag: P.bool,\n * value: P.I16LE\n * })\n * });\n */\nexport function struct(fields) {\n if (!isPlainObject(fields))\n throw new Error(`struct: expected plain object, got ${fields}`);\n for (const name in fields) {\n if (!isCoder(fields[name]))\n throw new Error(`struct: field ${name} is not CoderType`);\n }\n return wrap({\n size: sizeof(Object.values(fields)),\n encodeStream: (w, value) => {\n w.pushObj(value, (fieldFn) => {\n for (const name in fields)\n fieldFn(name, () => fields[name].encodeStream(w, value[name]));\n });\n },\n decodeStream: (r) => {\n const res = {};\n r.pushObj(res, (fieldFn) => {\n for (const name in fields)\n fieldFn(name, () => (res[name] = fields[name].decodeStream(r)));\n });\n return res;\n },\n validate: (value) => {\n if (typeof value !== 'object' || value === null)\n throw new Error(`struct: invalid value ${value}`);\n return value;\n },\n });\n}\n/**\n * Tuple (unnamed structure) of CoderTypes. Same as struct but with unnamed fields.\n * @param fields - Array of CoderTypes.\n * @returns CoderType representing the tuple.\n * @example\n * const myTuple = P.tuple([P.U8, P.U16LE, P.string(P.U8)]);\n */\nexport function tuple(fields) {\n if (!Array.isArray(fields))\n throw new Error(`Packed.Tuple: got ${typeof fields} instead of array`);\n for (let i = 0; i < fields.length; i++) {\n if (!isCoder(fields[i]))\n throw new Error(`tuple: field ${i} is not CoderType`);\n }\n return wrap({\n size: sizeof(fields),\n encodeStream: (w, value) => {\n // TODO: fix types\n if (!Array.isArray(value))\n throw w.err(`tuple: invalid value ${value}`);\n w.pushObj(value, (fieldFn) => {\n for (let i = 0; i < fields.length; i++)\n fieldFn(`${i}`, () => fields[i].encodeStream(w, value[i]));\n });\n },\n decodeStream: (r) => {\n const res = [];\n r.pushObj(res, (fieldFn) => {\n for (let i = 0; i < fields.length; i++)\n fieldFn(`${i}`, () => res.push(fields[i].decodeStream(r)));\n });\n return res;\n },\n validate: (value) => {\n if (!Array.isArray(value))\n throw new Error(`tuple: invalid value ${value}`);\n if (value.length !== fields.length)\n throw new Error(`tuple: wrong length=${value.length}, expected ${fields.length}`);\n return value;\n },\n });\n}\n/**\n * Array of items (inner type) with a specified length.\n * @param len - Length CoderType (dynamic size), number (fixed size), Uint8Array (for terminator), or null (will parse until end of buffer)\n * @param inner - CoderType for encoding/decoding each array item.\n * @returns CoderType representing the array.\n * @example\n * const a1 = P.array(P.U16BE, child); // Dynamic size array (prefixed with P.U16BE number of array length)\n * const a2 = P.array(4, child); // Fixed size array\n * const a3 = P.array(null, child); // Unknown size array, will parse until end of buffer\n * const a4 = P.array(new Uint8Array([0]), child); // zero-terminated array (NOTE: terminator can be any buffer)\n */\nexport function array(len, inner) {\n if (!isCoder(inner))\n throw new Error(`array: invalid inner value ${inner}`);\n // By construction length is inside array (otherwise there will be various incorrect stack states)\n // But forcing users always write '..' seems like bad idea. Also, breaking change.\n const _length = lengthCoder(typeof len === 'string' ? `../${len}` : len);\n return wrap({\n size: typeof len === 'number' && inner.size ? len * inner.size : undefined,\n encodeStream: (w, value) => {\n const _w = w;\n _w.pushObj(value, (fieldFn) => {\n if (!isBytes(len))\n _length.encodeStream(w, value.length);\n for (let i = 0; i < value.length; i++) {\n fieldFn(`${i}`, () => {\n const elm = value[i];\n const startPos = w.pos;\n inner.encodeStream(w, elm);\n if (isBytes(len)) {\n // Terminator is bigger than elm size, so skip\n if (len.length > _w.pos - startPos)\n return;\n const data = _w.finish(false).subarray(startPos, _w.pos);\n // There is still possible case when multiple elements create terminator,\n // but it is hard to catch here, will be very slow\n if (equalBytes(data.subarray(0, len.length), len))\n throw _w.err(`array: inner element encoding same as separator. elm=${elm} data=${data}`);\n }\n });\n }\n });\n if (isBytes(len))\n w.bytes(len);\n },\n decodeStream: (r) => {\n const res = [];\n r.pushObj(res, (fieldFn) => {\n if (len === null) {\n for (let i = 0; !r.isEnd(); i++) {\n fieldFn(`${i}`, () => res.push(inner.decodeStream(r)));\n if (inner.size && r.leftBytes < inner.size)\n break;\n }\n }\n else if (isBytes(len)) {\n for (let i = 0;; i++) {\n if (equalBytes(r.bytes(len.length, true), len)) {\n // Advance cursor position if terminator found\n r.bytes(len.length);\n break;\n }\n fieldFn(`${i}`, () => res.push(inner.decodeStream(r)));\n }\n }\n else {\n let length;\n fieldFn('arrayLen', () => (length = _length.decodeStream(r)));\n for (let i = 0; i < length; i++)\n fieldFn(`${i}`, () => res.push(inner.decodeStream(r)));\n }\n });\n return res;\n },\n validate: (value) => {\n if (!Array.isArray(value))\n throw new Error(`array: invalid value ${value}`);\n return value;\n },\n });\n}\n/**\n * Mapping between encoded values and string representations.\n * @param inner - CoderType for encoded values.\n * @param variants - Object mapping string representations to encoded values.\n * @returns CoderType representing the mapping.\n * @example\n * // Map between numbers and strings\n * const numberMap = P.map(P.U8, {\n * 'one': 1,\n * 'two': 2,\n * 'three': 3\n * });\n *\n * // Map between byte arrays and strings\n * const byteMap = P.map(P.bytes(2, false), {\n * 'ab': Uint8Array.from([0x61, 0x62]),\n * 'cd': Uint8Array.from([0x63, 0x64])\n * });\n */\nexport function map(inner, variants) {\n if (!isCoder(inner))\n throw new Error(`map: invalid inner value ${inner}`);\n if (!isPlainObject(variants))\n throw new Error(`map: variants should be plain object`);\n const variantNames = new Map();\n for (const k in variants)\n variantNames.set(variants[k], k);\n return wrap({\n size: inner.size,\n encodeStream: (w, value) => inner.encodeStream(w, variants[value]),\n decodeStream: (r) => {\n const variant = inner.decodeStream(r);\n const name = variantNames.get(variant);\n if (name === undefined)\n throw r.err(`Enum: unknown value: ${variant} ${Array.from(variantNames.keys())}`);\n return name;\n },\n validate: (value) => {\n if (typeof value !== 'string')\n throw new Error(`map: invalid value ${value}`);\n if (!(value in variants))\n throw new Error(`Map: unknown variant: ${value}`);\n return value;\n },\n });\n}\n/**\n * Tagged union of CoderTypes, where the tag value determines which CoderType to use.\n * The decoded value will have the structure `{ TAG: number, data: ... }`.\n * @param tag - CoderType for the tag value.\n * @param variants - Object mapping tag values to CoderTypes.\n * @returns CoderType representing the tagged union.\n * @example\n * // Tagged union of array, string, and number\n * // Depending on the value of the first byte, it will be decoded as an array, string, or number.\n * const taggedUnion = P.tag(P.U8, {\n * 0x01: P.array(P.U16LE, P.U8),\n * 0x02: P.string(P.U8),\n * 0x03: P.U32BE\n * });\n *\n * const encoded = taggedUnion.encode({ TAG: 0x01, data: 'hello' }); // Encodes the string 'hello' with tag 0x01\n * const decoded = taggedUnion.decode(encoded); // Decodes the encoded value back to { TAG: 0x01, data: 'hello' }\n */\nexport function tag(tag, variants) {\n if (!isCoder(tag))\n throw new Error(`tag: invalid tag value ${tag}`);\n if (!isPlainObject(variants))\n throw new Error(`tag: variants should be plain object`);\n for (const name in variants) {\n if (!isCoder(variants[name]))\n throw new Error(`tag: variant ${name} is not CoderType`);\n }\n return wrap({\n size: tag.size,\n encodeStream: (w, value) => {\n const { TAG, data } = value;\n const dataType = variants[TAG];\n tag.encodeStream(w, TAG);\n dataType.encodeStream(w, data);\n },\n decodeStream: (r) => {\n const TAG = tag.decodeStream(r);\n const dataType = variants[TAG];\n if (!dataType)\n throw r.err(`Tag: invalid tag ${TAG}`);\n return { TAG, data: dataType.decodeStream(r) };\n },\n validate: (value) => {\n const { TAG } = value;\n const dataType = variants[TAG];\n if (!dataType)\n throw new Error(`Tag: invalid tag ${TAG.toString()}`);\n return value;\n },\n });\n}\n/**\n * Mapping between encoded values, string representations, and CoderTypes using a tag CoderType.\n * @param tagCoder - CoderType for the tag value.\n * @param variants - Object mapping string representations to [tag value, CoderType] pairs.\n * * @returns CoderType representing the mapping.\n * @example\n * const cborValue: P.CoderType<CborValue> = P.mappedTag(P.bits(3), {\n * uint: [0, cborUint], // An unsigned integer in the range 0..264-1 inclusive.\n * negint: [1, cborNegint], // A negative integer in the range -264..-1 inclusive\n * bytes: [2, P.lazy(() => cborLength(P.bytes, cborValue))], // A byte string.\n * string: [3, P.lazy(() => cborLength(P.string, cborValue))], // A text string (utf8)\n * array: [4, cborArrLength(P.lazy(() => cborValue))], // An array of data items\n * map: [5, P.lazy(() => cborArrLength(P.tuple([cborValue, cborValue])))], // A map of pairs of data items\n * tag: [6, P.tuple([cborUint, P.lazy(() => cborValue)] as const)], // A tagged data item (\"tag\") whose tag number\n * simple: [7, cborSimple], // Floating-point numbers and simple values, as well as the \"break\" stop code\n * });\n */\nexport function mappedTag(tagCoder, variants) {\n if (!isCoder(tagCoder))\n throw new Error(`mappedTag: invalid tag value ${tag}`);\n if (!isPlainObject(variants))\n throw new Error(`mappedTag: variants should be plain object`);\n const mapValue = {};\n const tagValue = {};\n for (const key in variants) {\n const v = variants[key];\n mapValue[key] = v[0];\n tagValue[key] = v[1];\n }\n return tag(map(tagCoder, mapValue), tagValue);\n}\n/**\n * Bitset of boolean values with optional padding.\n * @param names - An array of string names for the bitset values.\n * @param pad - Whether to pad the bitset to a multiple of 8 bits.\n * @returns CoderType representing the bitset.\n * @template Names\n * @example\n * const myBitset = P.bitset(['flag1', 'flag2', 'flag3', 'flag4'], true);\n */\nexport function bitset(names, pad = false) {\n if (typeof pad !== 'boolean')\n throw new Error(`bitset/pad: expected boolean, got ${typeof pad}`);\n if (!Array.isArray(names))\n throw new Error('bitset/names: expected array');\n for (const name of names) {\n if (typeof name !== 'string')\n throw new Error('bitset/names: expected array of strings');\n }\n return wrap({\n encodeStream: (w, value) => {\n for (let i = 0; i < names.length; i++)\n w.bits(+value[names[i]], 1);\n if (pad && names.length % 8)\n w.bits(0, 8 - (names.length % 8));\n },\n decodeStream: (r) => {\n const out = {};\n for (let i = 0; i < names.length; i++)\n out[names[i]] = !!r.bits(1);\n if (pad && names.length % 8)\n r.bits(8 - (names.length % 8));\n return out;\n },\n validate: (value) => {\n if (!isPlainObject(value))\n throw new Error(`bitset: invalid value ${value}`);\n for (const v of Object.values(value)) {\n if (typeof v !== 'boolean')\n throw new Error('expected boolean');\n }\n return value;\n },\n });\n}\n/** Padding function which always returns zero */\nexport const ZeroPad = (_) => 0;\nfunction padLength(blockSize, len) {\n if (len % blockSize === 0)\n return 0;\n return blockSize - (len % blockSize);\n}\n/**\n * Pads a CoderType with a specified block size and padding function on the left side.\n * @param blockSize - Block size for padding (positive safe integer).\n * @param inner - Inner CoderType to pad.\n * @param padFn - Padding function to use. If not provided, zero padding is used.\n * @returns CoderType representing the padded value.\n * @example\n * // Pad a U32BE with a block size of 4 and zero padding\n * const paddedU32BE = P.padLeft(4, P.U32BE);\n *\n * // Pad a string with a block size of 16 and custom padding\n * const paddedString = P.padLeft(16, P.string(P.U8), (i) => i + 1);\n */\nexport function padLeft(blockSize, inner, padFn) {\n if (!isNum(blockSize) || blockSize <= 0)\n throw new Error(`padLeft: wrong blockSize=${blockSize}`);\n if (!isCoder(inner))\n throw new Error(`padLeft: invalid inner value ${inner}`);\n if (padFn !== undefined && typeof padFn !== 'function')\n throw new Error(`padLeft: wrong padFn=${typeof padFn}`);\n const _padFn = padFn || ZeroPad;\n if (!inner.size)\n throw new Error('padLeft cannot have dynamic size');\n return wrap({\n size: inner.size + padLength(blockSize, inner.size),\n encodeStream: (w, value) => {\n const padBytes = padLength(blockSize, inner.size);\n for (let i = 0; i < padBytes; i++)\n w.byte(_padFn(i));\n inner.encodeStream(w, value);\n },\n decodeStream: (r) => {\n r.bytes(padLength(blockSize, inner.size));\n return inner.decodeStream(r);\n },\n });\n}\n/**\n * Pads a CoderType with a specified block size and padding function on the right side.\n * @param blockSize - Block size for padding (positive safe integer).\n * @param inner - Inner CoderType to pad.\n * @param padFn - Padding function to use. If not provided, zero padding is used.\n * @returns CoderType representing the padded value.\n * @example\n * // Pad a U16BE with a block size of 2 and zero padding\n * const paddedU16BE = P.padRight(2, P.U16BE);\n *\n * // Pad a bytes with a block size of 8 and custom padding\n * const paddedBytes = P.padRight(8, P.bytes(null), (i) => i + 1);\n */\nexport function padRight(blockSize, inner, padFn) {\n if (!isCoder(inner))\n throw new Error(`padRight: invalid inner value ${inner}`);\n if (!isNum(blockSize) || blockSize <= 0)\n throw new Error(`padLeft: wrong blockSize=${blockSize}`);\n if (padFn !== undefined && typeof padFn !== 'function')\n throw new Error(`padRight: wrong padFn=${typeof padFn}`);\n const _padFn = padFn || ZeroPad;\n return wrap({\n size: inner.size ? inner.size + padLength(blockSize, inner.size) : undefined,\n encodeStream: (w, value) => {\n const _w = w;\n const pos = _w.pos;\n inner.encodeStream(w, value);\n const padBytes = padLength(blockSize, _w.pos - pos);\n for (let i = 0; i < padBytes; i++)\n w.byte(_padFn(i));\n },\n decodeStream: (r) => {\n const start = r.pos;\n const res = inner.decodeStream(r);\n r.bytes(padLength(blockSize, r.pos - start));\n return res;\n },\n });\n}\n1;\n/**\n * Pointer to a value using a pointer CoderType and an inner CoderType.\n * Pointers are scoped, and the next pointer in the dereference chain is offset by the previous one.\n * By default (if no 'allowMultipleReads' in ReaderOpts is set) is safe, since\n * same region of memory cannot be read multiple times.\n * @param ptr - CoderType for the pointer value.\n * @param inner - CoderType for encoding/decoding the pointed value.\n * @param sized - Whether the pointer should have a fixed size.\n * @returns CoderType representing the pointer to the value.\n * @example\n * const pointerToU8 = P.pointer(P.U16BE, P.U8); // Pointer to a single U8 value\n */\nexport function pointer(ptr, inner, sized = false) {\n if (!isCoder(ptr))\n throw new Error(`pointer: invalid ptr value ${ptr}`);\n if (!isCoder(inner))\n throw new Error(`pointer: invalid inner value ${inner}`);\n if (typeof sized !== 'boolean')\n throw new Error(`pointer/sized: expected boolean, got ${typeof sized}`);\n if (!ptr.size)\n throw new Error('unsized pointer');\n return wrap({\n size: sized ? ptr.size : undefined,\n encodeStream: (w, value) => {\n const _w = w;\n const start = _w.pos;\n ptr.encodeStream(w, 0);\n _w.ptrs.push({ pos: start, ptr, buffer: inner.encode(value) });\n },\n decodeStream: (r) => {\n const ptrVal = ptr.decodeStream(r);\n r._enablePointers();\n return inner.decodeStream(r.offsetReader(ptrVal));\n },\n });\n}\n// Internal methods for test purposes only\nexport const _TEST = { _bitset: Bitset, _Reader, _Writer, Path };\n//# sourceMappingURL=index.js.map","import { ed25519 } from '@noble/curves/ed25519';\nimport { base58, base64, hex, utf8 } from '@scure/base';\nimport { sha256 } from '@noble/hashes/sha256';\nimport * as P from 'micro-packed';\nexport const PRECISION = 9;\nexport const Decimal = P.coders.decimal(PRECISION);\n// first bit -- terminator (1 -- continue, 0 -- last)\nexport const shortVec = P.wrap({\n encodeStream: (w, value) => {\n if (!value)\n return w.byte(0);\n for (; value; value >>= 7) {\n w.bits(value > 0x7f ? 1 : 0, 1);\n w.bits(value & 0x7f, 7);\n }\n },\n decodeStream: (r) => {\n let len = 0;\n for (let pos = 0; !r.isEnd(); pos++) {\n const last = !r.bits(1);\n len |= r.bits(7) << (pos * 7);\n if (last)\n break;\n }\n return len;\n },\n});\nconst rustString = P.string(P.padRight(8, P.U32LE, undefined));\nconst b58 = () => {\n const inner = P.bytes(32);\n return P.wrap({\n size: inner.size,\n encodeStream: (w, value) => inner.encodeStream(w, base58.decode(value)),\n decodeStream: (r) => base58.encode(inner.decodeStream(r)),\n });\n};\nconst pubKey = b58();\nexport const Message = P.struct({\n requiredSignatures: P.U8,\n readSigned: P.U8,\n readUnsigned: P.U8,\n keys: P.array(shortVec, pubKey),\n blockhash: pubKey,\n instructions: P.array(shortVec, P.struct({ programIdx: P.U8, keys: P.array(shortVec, P.U8), data: P.bytes(shortVec) })),\n});\nexport function validateAddress(address) {\n const pubkey = base58.decode(address);\n if (pubkey.length !== 32)\n throw new Error('Invalid Solana address');\n}\nconst keyParams = (i, req, signed, unsigned, total) => ({\n sign: i < req ? true : false,\n write: i < req - signed || (i >= req && i < total - unsigned) ? true : false,\n});\nexport const TransactionRaw = P.struct({\n signatures: P.array(shortVec, P.bytes(64)),\n msg: Message,\n});\n// Keys position is implementation specific, Transaction.encode(Transaction.decode(tx)) not neccessary equals to tx,\n// since there is information loss for readability purposes. Use TransactionRaw in case you need exactly same encoding\nexport const Transaction = P.wrap({\n encodeStream: (w, value) => {\n const { msg, signatures } = value;\n const accounts = {};\n const add = (address, sign, write) => {\n let acc = accounts[address] || (accounts[address] = { sign: false, write: false });\n acc.write || (acc.write = write);\n acc.sign || (acc.sign = sign);\n };\n add(msg.feePayer, true, true);\n for (let i of msg.instructions)\n for (let k of i.keys)\n add(k.address, k.sign, k.write);\n // Same loop as above, but cannot be merged since it will change implementation specific key positions inside transaction.\n // This doesn't invalidate transaction, but can be used for fingerprinting.\n for (let i of msg.instructions)\n add(i.program, false, false);\n const _keys = Object.keys(accounts);\n // [feePayer, ...sign+write, ...sign+read, ...nosign+write, ...nosign+read]\n const keys = [\n msg.feePayer,\n ..._keys.filter((i) => accounts[i].sign && accounts[i].write && i !== msg.feePayer),\n ..._keys.filter((i) => accounts[i].sign && !accounts[i].write),\n ..._keys.filter((i) => !accounts[i].sign && accounts[i].write),\n ..._keys.filter((i) => !accounts[i].sign && !accounts[i].write),\n ];\n let requiredSignatures = 0;\n let readSigned = 0;\n let readUnsigned = 0;\n for (let k of keys) {\n if (accounts[k].sign)\n requiredSignatures++;\n if (accounts[k].write)\n continue;\n if (accounts[k].sign)\n readSigned++;\n else\n readUnsigned++;\n }\n TransactionRaw.encodeStream(w, {\n signatures: keys\n .filter((i) => accounts[i].sign)\n .map((i) => signatures[i] || new Uint8Array(64)),\n msg: {\n requiredSignatures,\n readSigned,\n readUnsigned,\n keys,\n // indexOf potentially can be slow, but for most tx there will be ~3-5 keys, so doesn't matter much\n instructions: msg.instructions.map((i) => ({\n programIdx: keys.indexOf(i.program),\n keys: i.keys.map((j) => keys.indexOf(j.address)),\n data: i.data,\n })),\n blockhash: msg.blockhash,\n },\n });\n },\n decodeStream: (r) => {\n const { signatures, msg } = TransactionRaw.decodeStream(r);\n if (signatures.length !== msg.requiredSignatures)\n throw new Error('SOL.tx: wrong signatures length');\n if (msg.keys.length < signatures.length)\n throw new Error('SOL.tx: invalid keys length');\n const sigs = {};\n for (let i = 0; i < signatures.length; i++)\n sigs[msg.keys[i]] = signatures[i];\n let accounts = [];\n for (let i = 0; i < msg.keys.length; i++) {\n accounts.push({\n address: msg.keys[i],\n ...keyParams(i, msg.requiredSignatures, msg.readSigned, msg.readUnsigned, msg.keys.length),\n });\n }\n if (!accounts.length)\n throw new Error('SOL.tx: empty accounts array');\n return {\n msg: {\n feePayer: accounts[0].address,\n blockhash: msg.blockhash,\n instructions: msg.instructions.map((i) => ({\n program: accounts[i.programIdx].address,\n keys: i.keys.map((j) => accounts[j]),\n data: i.data,\n })),\n },\n signatures: sigs,\n };\n },\n});\nconst registry = {};\n// Basic ABI thing. There is IDL which is kinda ABI, but not official and system accounts doesn't have offical types for it.\n// Later we can add support to conversion IDL -> defineProgram\nexport function defineProgram(address, tagType, methods) {\n if (registry[address])\n throw new Error('SOL: program for this address already defined');\n const variants = P.map(tagType, Object.keys(methods).reduce((acc, k, i) => ({ ...acc, [k]: i }), {}));\n const coders = Object.keys(methods).reduce((acc, k) => ({ ...acc, [k]: methods[k].coder }), {});\n const mainCoder = P.tag(variants, coders);\n registry[address] = (instr, tl) => {\n if (instr.program !== address)\n throw new Error('SOL.parseInstruction: Wrong instruction program address');\n const { TAG, data } = mainCoder.decode(instr.data);\n // Should be close to node parser (https://github.com/solana-labs/solana/tree/master/transaction-status/src)\n const res = { type: TAG, info: data };\n const keys = Object.keys(methods[TAG].keys);\n if (keys.length !== instr.keys.length)\n throw new Error('SOL.parseInstruction: Keys length mismatch');\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (methods[TAG].keys[key].address) {\n if (methods[TAG].keys[key].address !== instr.keys[i].address) {\n throw new Error(`SOL.parseInstruction(${address}/${TAG}): Invalid constant address for key exp=${methods[TAG].keys[key].address} got=${instr.keys[i].address}`);\n }\n continue;\n }\n res.info[keys[i]] = instr.keys[i].address;\n }\n if (methods[TAG].hint)\n res.hint = methods[TAG].hint(data, tl);\n return res;\n };\n const program = {};\n for (const m in methods) {\n program[m] = (data) => ({\n program: address,\n data: mainCoder.encode({ TAG: m, data }),\n keys: Object.keys(methods[m].keys).map((name) => {\n let { sign, write, address } = methods[m].keys[name];\n address || (address = data[name]);\n validateAddress(address);\n return { address, sign, write };\n }),\n });\n }\n return program;\n}\nexport function parseInstruction(instr, tl) {\n if (!registry[instr.program])\n return;\n return registry[instr.program](instr, tl);\n}\nexport const SYS_RECENT_BLOCKHASHES = 'SysvarRecentB1ockHashes11111111111111111111';\nexport const SYS_RENT = 'SysvarRent111111111111111111111111111111111';\nexport const SYS_PROGRAM = '11111111111111111111111111111111';\nexport const sys = defineProgram(SYS_PROGRAM, P.U32LE, {\n createAccount: {\n coder: P.struct({ lamports: P.U64LE, space: P.U64LE, owner: pubKey }),\n keys: {\n source: { sign: true, write: true },\n newAccount: { sign: true, write: true },\n },\n hint: (o) => `Create new account=${o.newAccount} with balance of ${Decimal.encode(o.lamports)} and owner program ${o.owner}, using funding account ${o.source}`,\n },\n assign: {\n coder: P.struct({ owner: pubKey }),\n keys: { account: { sign: true, write: true } },\n hint: (o) => `Assign account=${o.account} to owner program=${o.owner}`,\n },\n transfer: {\n coder: P.struct({ lamports: P.U64LE }),\n keys: { source: { sign: true, write: true }, destination: { sign: false, write: true } },\n hint: (o) => `Transfer ${Decimal.encode(o.lamports)} SOL from ${o.source} to ${o.destination}`,\n },\n createAccountWithSeed: {\n coder: P.struct({\n base: pubKey,\n seed: rustString,\n lamports: P.U64LE,\n space: P.U64LE,\n owner: pubKey,\n }),\n keys: {\n source: { sign: true, write: true },\n newAccount: { sign: false, write: true },\n base: { sign: true, write: false },\n },\n },\n advanceNonce: {\n coder: P.struct({}),\n keys: {\n nonceAccount: { sign: false, write: true },\n _recent_bh: { address: SYS_RECENT_BLOCKHASHES, sign: false, write: false },\n nonceAuthority: { sign: true, write: false },\n },\n hint: (o) => `Consume nonce in nonce account=${o.nonceAccount} (owner: ${o.nonceAuthority})`,\n },\n withdrawFromNonce: {\n coder: P.struct({ lamports: P.U64LE }),\n keys: {\n nonceAccount: { sign: false, write: true },\n destination: { sign: false, write: true },\n _recent_bh: { address: SYS_RECENT_BLOCKHASHES, sign: false, write: false },\n _rent: { address: SYS_RENT, sign: false, write: false },\n nonceAuthority: { sign: true, write: false },\n },\n hint: (o) => `Withdraw ${Decimal.encode(o.lamports)} SOL from nonce account=${o.nonceAccount} (owner: ${o.nonceAuthority}) to ${o.destination}`,\n },\n initializeNonce: {\n coder: P.struct({ nonceAuthority: pubKey }),\n keys: {\n nonceAccount: { sign: false, write: true },\n _recent_bh: { address: SYS_RECENT_BLOCKHASHES, sign: false, write: false },\n _rent: { address: SYS_RENT, sign: false, write: false },\n },\n },\n authorizeNonce: {\n coder: P.struct({ newAuthorized: pubKey }),\n keys: {\n nonceAccount: { sign: false, write: true },\n nonceAuthority: { sign: true, write: false },\n },\n hint: (o) => `Change owner of nonce account=${o.nonceAccount} from ${o.nonceAuthority} to ${o.newAuthorized}`,\n },\n allocate: {\n coder: P.struct({ space: P.U64LE }),\n keys: {\n account: { sign: true, write: true },\n },\n },\n allocateWithSeed: {\n coder: P.struct({\n base: pubKey,\n seed: rustString,\n space: P.U64LE,\n owner: pubKey,\n }),\n keys: {\n account: { sign: false, write: true },\n base: { sign: true, write: false },\n },\n },\n assignWithSeed: {\n coder: P.struct({\n base: pubKey,\n seed: rustString,\n owner: pubKey,\n }),\n keys: {\n account: { sign: false, write: true },\n base: { sign: true, write: false },\n },\n },\n transferWithSeed: {\n coder: P.struct({\n lamports: P.U64LE,\n sourceSeed: rustString,\n sourceOwner: pubKey,\n }),\n keys: {\n source: { sign: false, write: true },\n sourceBase: { sign: true, write: false },\n destination: { sign: false, write: true },\n },\n },\n});\n// Type tests\nconst assertType = (_value) => { };\nassertType(sys.transfer);\nassertType(sys.advanceNonce);\nconst authorityType = P.map(P.U8, {\n MintTokens: 0,\n FreezeAccount: 1,\n AccountOwner: 2,\n CloseAccount: 3,\n});\nconst tokenName = (address, tl) => tl[address]?.symbol || address;\nexport const TOKEN_PROGRAM = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';\nexport const token = defineProgram(TOKEN_PROGRAM, P.U8, {\n initializeMint: {\n coder: P.struct({\n decimals: P.U8,\n mintAuthority: pubKey,\n freezeAuthority: P.optional(P.bool, pubKey, '11111111111111111111111111111111'),\n }),\n keys: {\n mint: { sign: false, write: true },\n _rent: { address: SYS_RENT, sign: false, write: false },\n },\n },\n initializeAccount: {\n coder: P.struct({}),\n keys: {\n account: { sign: false, write: true },\n mint: { sign: false, write: false },\n owner: { sign: false, write: false },\n _rent: { address: SYS_RENT, sign: false, write: false },\n },\n hint: (o, tl) => `Initialize token account=${o.account} with owner=${o.owner} token=${tokenName(o.mint, tl)}`,\n },\n // TODO: multisig support?\n initializeMultisig: {\n coder: P.struct({ m: P.U8 }),\n keys: {\n account: { sign: false, write: true },\n _rent: { address: SYS_RENT, sign: false, write: false },\n },\n hint: (o, _) => `Initialize multi-sig token account=${o.account} with signatures=${o.m}`,\n },\n transfer: {\n coder: P.struct({ amount: P.U64LE }),\n keys: {\n source: { sign: false, write: true },\n destination: { sign: false, write: true },\n owner: { sign: true, write: false },\n },\n hint: (o, _) => `Transfer ${o.amount} from token account=${o.source} of owner=${o.owner} to ${o.destination}`,\n },\n approve: {\n coder: P.struct({ amount: P.U64LE }),\n keys: {\n account: { sign: false, write: true },\n delegate: { sign: false, write: false },\n owner: { sign: true, write: false },\n },\n hint: (o, _) => `Approve authority of delegate=${o.delegate} over tokens on account=${o.account} on behalf of owner=${o.owner}`,\n },\n revoke: {\n coder: P.struct({}),\n keys: {\n account: { sign: false, write: true },\n owner: { sign: true, write: false },\n },\n hint: (o, _) => `Revoke delegate's authority over tokens on account=${o.account} on behalf of owner=${o.owner}`,\n },\n setAuthority: {\n coder: P.struct({\n authorityType,\n newAuthority: P.optional(P.bool, pubKey, '11111111111111111111111111111111'),\n }),\n keys: {\n account: { sign: false, write: true },\n currentAuthority: { sign: true, write: false },\n },\n hint: (o, _) => `Sets a new authority=${o.newAuthority} of a mint or account=${o.account}. Current authority=${o.currentAuthority}. Authority Type: ${o.authorityType}`,\n },\n mintTo: {\n coder: P.struct({ amount: P.U64LE }),\n keys: {\n mint: { sign: false, write: true },\n dest: { sign: false, write: true },\n authority: { sign: true, write: false },\n },\n },\n burn: {\n coder: P.struct({ amount: P.U64LE }),\n keys: {\n account: { sign: false, write: true },\n mint: { sign: false, write: true },\n owner: { sign: true, write: false },\n },\n hint: (o, _) => `Burn ${o.amount} tokens from account=${o.account} of owner=${o.owner} mint=${o.mint}`,\n },\n closeAccount: {\n coder: P.struct({}),\n keys: {\n account: { sign: false, write: true },\n dest: { sign: false, write: true },\n owner: { sign: true, write: false },\n },\n hint: (o, _) => `Close token account=${o.account} of owner=${o.owner}, transferring all its SOL to destionation account=${o.dest}`,\n },\n freezeAccount: {\n coder: P.struct({}),\n keys: {\n account: { sign: false, write: true },\n mint: { sign: false, write: true },\n authority: { sign: true, write: false },\n },\n hint: (o, _) => `Freeze token account=${o.account} of mint=${o.mint} using freeze_authority=${o.authority}`,\n },\n thawAccount: {\n coder: P.struct({}),\n keys: {\n account: { sign: false, write: true },\n mint: { sign: false, write: false },\n authority: { sign: true, write: false },\n },\n hint: (o, _) => `Thaw a frozne token account=${o.account} of mint=${o.mint} using freeze_authority=${o.authority}`,\n },\n transferChecked: {\n coder: P.struct({ amount: P.U64LE, decimals: P.U8 }),\n keys: {\n source: { sign: false, write: true },\n mint: { sign: false, write: false },\n destination: { sign: false, write: true },\n owner: { sign: true, write: false },\n },\n hint: (o, tl) => `Transfer ${P.coders.decimal(o.decimals).encode(o.amount)} ${tokenName(o.mint, tl)} from token account=${o.source} of owner=${o.owner} to ${o.destination}`,\n },\n approveChecked: {\n coder: P.struct({ amount: P.U64LE, decimals: P.U8 }),\n keys: {\n source: { sign: false, write: true },\n mint: { sign: false, write: false },\n delegate: { sign: false, write: false },\n owner: { sign: true, write: false },\n },\n hint: (o, tl) => `Approve delgate=${o.delegate} authority on behalf account=${o.source} owner=${o.owner} over ${P.coders.decimal(o.decimals).encode(o.amount)} ${tokenName(o.mint, tl)}`,\n },\n mintToChecked: {\n coder: P.struct({ amount: P.U64LE, decimals: P.U8 }),\n keys: {\n mint: { sign: false, write: true },\n dest: { sign: false, write: true },\n authority: { sign: true, write: false },\n },\n hint: (o, tl) => `Mint new tokens (${P.coders.decimal(o.decimals).encode(o.amount)} ${tokenName(o.mint, tl)}) to account=${o.dest} using authority=${o.authority}`,\n },\n burnChecked: {\n coder: P.struct({ amount: P.U64LE, decimals: P.U8 }),\n keys: {\n mint: { sign: false, write: true },\n account: { sign: false, write: true },\n owner: { sign: true, write: false },\n },\n hint: (o, tl) => `Burn tokens (${P.coders.decimal(o.decimals).encode(o.amount)} ${tokenName(o.mint, tl)}) on account=${o.account} of owner=${o.owner}`,\n },\n initializeAccount2: {\n coder: P.struct({ owner: pubKey }),\n keys: {\n account: { sign: false, write: true },\n mint: { sign: false, write: false },\n _rent: { address: SYS_RENT, sign: false, write: false },\n },\n hint: (o, tl) => `Initialize token account=${o.account} with owner=${o.owner} token=${tokenName(o.mint, tl)}`,\n },\n syncNative: {\n coder: P.struct({}),\n keys: { nativeAccount: { sign: false, write: true } },\n hint: (o) => `Sync SOL balance for wrapped account ${o.nativeAccount}`,\n },\n});\nexport const NonceAccount = P.struct({\n version: P.U32LE,\n state: P.U32LE,\n authority: pubKey,\n nonce: pubKey,\n lamportPerSignature: P.U64LE,\n});\nfunction mod(a, b = ed25519.CURVE.Fp.ORDER) {\n const res = a % b;\n return res >= 0n ? res : b + res;\n}\nexport function isOnCurve(bytes) {\n if (typeof bytes === 'string')\n bytes = base58.decode(bytes);\n try {\n // noble-ed25519 checks that publicKey is < P, but dalek (ed25519-dalek.CompressedEdwardsY) is not, so we do modulo here.\n // first bit in last byte is x oddity flag\n const last = bytes[31];\n const normedLast = last & ~0x80;\n const normed = Uint8Array.from(Array.from(bytes.slice(0, 31)).concat(normedLast));\n const modBytes = P.U256LE.encode(mod(P.U256LE.decode(normed)));\n if ((last & 0x80) !== 0)\n modBytes[31] |= 0x80;\n ed25519.ExtendedPoint.fromHex(modBytes);\n return true;\n }\n catch (e) {\n return false;\n }\n}\nexport function programAddress(program, ...seeds) {\n let seed = P.utils.concatBytes(...seeds);\n const noncePos = seed.length;\n seed = P.utils.concatBytes(seed, new Uint8Array([0]), base58.decode(program), utf8.decode('ProgramDerivedAddress'));\n for (let i = 255; i >= 0; i--) {\n seed[noncePos] = i;\n const hash = sha256(seed);\n if (isOnCurve(hash))\n continue;\n return base58.encode(hash);\n }\n throw new Error('SOL.programAddress: nonce exhausted, cannot find program address');\n}\nexport const ASSOCIATED_TOKEN_PROGRAM = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';\nexport const associatedToken = defineProgram(ASSOCIATED_TOKEN_PROGRAM, P.constant(0), {\n create: {\n coder: P.struct({}),\n keys: {\n source: { sign: true, write: true },\n account: { sign: false, write: true },\n wallet: { sign: false, write: false },\n mint: { sign: false, write: false },\n _sys: { address: SYS_PROGRAM, sign: false, write: false },\n _token: { address: TOKEN_PROGRAM, sign: false, write: false },\n _rent: { address: SYS_RENT, sign: false, write: false },\n },\n hint: (o, tl) => `Initialize associated token account=${o.account} with owner=${o.wallet} for token=${tokenName(o.mint, tl)}, payed by ${o.source}`,\n },\n});\nexport function tokenAddress(mint, owner, allowOffCurveOwner = false) {\n if (!allowOffCurveOwner && !isOnCurve(owner))\n throw new Error('Owner is off curve (cannot sign)');\n return programAddress(ASSOCIATED_TOKEN_PROGRAM, ...[owner, TOKEN_PROGRAM, mint].map((i) => base58.decode(i)));\n}\n// https://raw.githubusercontent.com/solana-labs/token-list/main/src/tokens/solana.tokenlist.json\nexport const COMMON_TOKENS = {\n So11111111111111111111111111111111111111112: { decimals: 9, symbol: 'SOL' }, // Wrapped SOL\n Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB: { decimals: 6, symbol: 'USDT', price: 1 },\n EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: { decimals: 6, symbol: 'USDC', price: 1 },\n};\nexport function tokenFromSymbol(symbol, tokens = COMMON_TOKENS) {\n for (let c in tokens)\n if (tokens[c].symbol === symbol)\n return { ...tokens[c], contract: c };\n return;\n}\n// [1, 0, 0, 0] -> true\n// [0, 0, 0, 0] -> false\nconst U32LEBOOL = P.padRight(4, P.bool, () => 0);\nexport const TokenAccount = P.struct({\n mint: pubKey,\n owner: pubKey,\n amount: P.U64LE,\n delegate: P.optional(U32LEBOOL, pubKey, '11111111111111111111111111111111'),\n state: P.map(P.U8, {\n uninitialized: 0,\n initialized: 1,\n frozen: 2,\n }),\n isNative: P.optional(U32LEBOOL, P.U64LE, 0n),\n delegateAmount: P.U64LE,\n closeAuthority: P.optional(U32LEBOOL, pubKey, '11111111111111111111111111111111'),\n});\nexport const swapProgram = 'SwaPpA9LAaLfeLi3a68M4DjnLqgtticKg6CnyNwgAC8';\nexport function verifyTx(tx) {\n if (typeof tx === 'string')\n tx = base64.decode(tx);\n if (tx.length > 1280 - 40 - 8)\n throw new Error('sol: transaction too big');\n const parsed = Transaction.decode(tx);\n const raw = TransactionRaw.decode(tx);\n const msg = Message.encode(TransactionRaw.decode(tx).msg);\n for (let i = 0; i < raw.msg.requiredSignatures; i++) {\n const address = raw.msg.keys[i];\n const pubKey = base58.decode(address);\n const sig = parsed.signatures[address];\n if (!ed25519.verify(sig, msg, pubKey))\n throw new Error(`sol: invalid signature sig=${sig} msg=${msg}`);\n }\n}\nexport function getPublicKey(privateKey) {\n return ed25519.getPublicKey(privateKey);\n}\nexport function getAddress(privateKey) {\n const publicKey = getPublicKey(privateKey);\n return base58.encode(publicKey);\n}\nexport function getAddressFromPublicKey(publicKey) {\n return base58.encode(publicKey);\n}\nexport function formatPrivate(privateKey, format = 'base58') {\n const publicKey = getPublicKey(privateKey);\n const fullKey = P.utils.concatBytes(privateKey, publicKey);\n switch (format) {\n case 'base58': {\n return base58.encode(fullKey);\n }\n case 'hex': {\n return hex.encode(fullKey);\n }\n case 'array': {\n return Array.from(fullKey);\n }\n default: {\n throw new Error('sol: unsupported format');\n }\n }\n}\nexport function createTxComplex(address, instructions, blockhash) {\n if (!instructions.length)\n throw new Error('SOLPublic: empty instructions array');\n return base64.encode(Transaction.encode({\n msg: { feePayer: address, blockhash, instructions },\n signatures: {},\n }));\n}\nexport function createTx(from, to, amount, _fee, blockhash) {\n const amountNum = Decimal.decode(amount);\n return createTxComplex(from, [sys.transfer({ source: from, destination: to, lamports: amountNum })], blockhash);\n}\nexport function signTx(privateKey, data) {\n if (typeof data === 'string')\n data = base64.decode(data);\n const address = getAddress(privateKey);\n const raw = TransactionRaw.decode(data);\n const reqSignatures = raw.msg.keys.slice(0, raw.msg.requiredSignatures);\n if (!reqSignatures.filter((i) => i == address).length)\n throw new Error(`SOLPrivate: tx doesn't require signature for address=${address}`);\n const sig = ed25519.sign(Message.encode(raw.msg), privateKey);\n for (let i = 0; i < reqSignatures.length; i++)\n if (reqSignatures[i] === address)\n raw.signatures[i] = sig;\n // Base58 encoding for tx is deprecated\n const tx = base64.encode(TransactionRaw.encode(raw));\n // first signature is txHash\n return [base58.encode(sig), tx];\n}\n//# sourceMappingURL=index.js.map","// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n const BASE_MAP = new Uint8Array(256)\n for (let j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (let i = 0; i < ALPHABET.length; i++) {\n const x = ALPHABET.charAt(i)\n const xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n const BASE = ALPHABET.length\n const LEADER = ALPHABET.charAt(0)\n const FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n const iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n // eslint-disable-next-line no-empty\n if (source instanceof Uint8Array) { } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source)\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n let zeroes = 0\n let length = 0\n let pbegin = 0\n const pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n const size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n const b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n let carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n let i = 0\n for (let it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n let it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n let str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n let psz = 0\n // Skip and count leading '1's.\n let zeroes = 0\n let length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n const size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n const b256 = new Uint8Array(size)\n // Process the characters.\n while (psz < source.length) {\n // Find code of next character\n const charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n let carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n let i = 0\n for (let it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n let it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n const vch = new Uint8Array(zeroes + (size - it4))\n let j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n const buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode,\n decodeUnsafe,\n decode\n }\n}\nexport default base\n","import basex from 'base-x';\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\nexport default basex(ALPHABET);\n","import * as sol from \"micro-sol-signer\";\nimport bs58 from \"bs58\";\n\n// Re-export from micro-sol-signer\nexport * from \"micro-sol-signer\";\n\n// Export our custom utilities\nexport { Connection } from \"./connection\";\nexport * from \"./spl-token\";\n\n// Additional compatibility layer for easier migration\nexport class PublicKey {\n private _publicKey: string;\n\n constructor(value: string | Uint8Array | number[] | Buffer | PublicKey) {\n if (value instanceof PublicKey) {\n this._publicKey = value.toString();\n } else if (typeof value === \"string\") {\n this._publicKey = value;\n } else if (\n value instanceof Uint8Array ||\n Array.isArray(value) ||\n Buffer.isBuffer(value)\n ) {\n const bytes = value instanceof Uint8Array ? value : new Uint8Array(value);\n this._publicKey = bs58.encode(bytes);\n } else {\n throw new Error(\"Invalid public key input\");\n }\n }\n\n toString(): string {\n return this._publicKey;\n }\n\n toBytes(): Uint8Array {\n return bs58.decode(this._publicKey);\n }\n\n toBuffer(): Buffer {\n return Buffer.from(this.toBytes());\n }\n\n equals(other: PublicKey | string): boolean {\n const otherKey = other instanceof PublicKey ? other.toString() : other;\n return this._publicKey === otherKey;\n }\n\n toBase58(): string {\n return this._publicKey;\n }\n}\n\n// Transaction compatibility wrapper\nexport class Transaction {\n private _transaction: any;\n public signatures: Array<{\n signature: Uint8Array | null;\n publicKey: PublicKey;\n }> = [];\n public feePayer?: PublicKey;\n public recentBlockhash?: string;\n private _instructions: sol.Instruction[];\n\n constructor() {\n // We'll build instructions array and serialize using micro-sol-signer\n this._instructions = [];\n }\n\n add(...instructions: sol.Instruction[]): Transaction {\n this._instructions.push(...instructions);\n return this;\n }\n\n static from(buffer: Uint8Array | Buffer | number[]): Transaction {\n // Decode using micro-sol-signer\n const bytes =\n buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n const decoded = sol.Transaction.decode(bytes);\n\n // Create a new Transaction and populate it\n const tx = new Transaction();\n // Note: This would need proper mapping from decoded to our wrapper\n // For now, storing the raw decoded transaction\n tx._transaction = decoded;\n return tx;\n }\n\n serialize(_options?: { requireAllSignatures?: boolean }): Buffer {\n // Build transaction using micro-sol-signer\n if (this._transaction) {\n // If we have a decoded transaction, re-serialize it\n return Buffer.from(sol.Transaction.encode(this._transaction));\n }\n\n // Build from instructions\n if (!this.feePayer || !this.recentBlockhash) {\n throw new Error(\"Transaction requires feePayer and recentBlockhash\");\n }\n\n const txHex = sol.createTxComplex(\n this.feePayer.toString(),\n this._instructions,\n this.recentBlockhash,\n );\n\n return Buffer.from(txHex, \"hex\");\n }\n\n serializeMessage(): Buffer {\n // Serialize just the message part\n if (!this.feePayer || !this.recentBlockhash) {\n throw new Error(\"Transaction requires feePayer and recentBlockhash\");\n }\n\n const txHex = sol.createTxComplex(\n this.feePayer.toString(),\n this._instructions,\n this.recentBlockhash,\n );\n\n // Return the message part of the transaction\n return Buffer.from(txHex, \"hex\");\n }\n}\n\n// Versioned transaction support\nexport class VersionedTransaction {\n constructor(\n public message: any,\n public signatures: Uint8Array[],\n ) {}\n\n static deserialize(serialized: Uint8Array): VersionedTransaction {\n const decoded = sol.Transaction.decode(serialized);\n // Map to VersionedTransaction format\n return new VersionedTransaction(decoded, []);\n }\n\n serialize(): Uint8Array {\n return sol.Transaction.encode(this.message);\n }\n}\n","import {\n PublicKey,\n Transaction,\n VersionedTransaction,\n} from \"../../utils/solana\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\ninterface PhantomProvider {\n isPhantom: boolean;\n publicKey: PublicKey | null;\n isConnected: boolean;\n connect(opts?: { onlyIfTrusted: boolean }): Promise<{ publicKey: PublicKey }>;\n disconnect(): Promise<void>;\n signTransaction(\n transaction: Transaction | VersionedTransaction,\n ): Promise<Transaction | VersionedTransaction>;\n signAllTransactions(\n transactions: (Transaction | VersionedTransaction)[],\n ): Promise<(Transaction | VersionedTransaction)[]>;\n signAndSendTransaction(\n transaction: Transaction | VersionedTransaction,\n opts?: { skipPreflight?: boolean; maxRetries?: number },\n ): Promise<{ signature: string }>;\n signMessage(\n message: Uint8Array,\n display?: \"utf8\" | \"hex\",\n ): Promise<{ signature: Uint8Array }>;\n on(\n event: \"connect\" | \"disconnect\" | \"accountChanged\",\n handler: (args: unknown) => void,\n ): void;\n request(args: { method: string; params?: unknown }): Promise<unknown>;\n}\n\nexport class PhantomWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"phantom\";\n readonly platform: ExternalPlatform = \"solana\";\n private account: string | undefined = undefined;\n private connectedAccounts: string[] = [];\n\n private getProvider(): PhantomProvider {\n if (typeof window === \"undefined\") {\n throw new Error(\"Not ready\");\n }\n\n const provider = window.solana;\n\n if (!provider?.isPhantom) {\n throw new Error(\"Phantom is not available\");\n }\n\n return provider;\n }\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.solana?.isPhantom;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: \"Unknown\",\n name: \"Phantom\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Phantom is not available\");\n }\n\n const response = await this.getProvider().connect();\n if (response.publicKey) {\n this.account = response.publicKey.toString();\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n getConnectedAccounts(): string[] {\n return this.connectedAccounts;\n }\n\n async signMessage(message: string): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Phantom is not connected\");\n }\n\n const encodedMessage = new TextEncoder().encode(message);\n const result = await this.getProvider().signMessage(\n encodedMessage,\n \"utf8\",\n );\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing message with Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(\n serailized_txn: Uint8Array,\n ): Promise<ExternalWalletResponse<any>> {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Phantom is not connected\");\n }\n\n try {\n const txn = Transaction.from(serailized_txn);\n const provider = this.getProvider();\n const result = await provider.signAndSendTransaction(txn);\n return {\n success: true,\n wallet: this.type,\n result,\n };\n } catch (error) {\n console.error(`Error sending transaction with Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async switchChain(_chainId: string): Promise<boolean> {\n console.warn(\"Chain switching not supported for Phantom\");\n return false;\n }\n\n async getBalance(\n _tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Phantom is not connected\");\n }\n\n // TODO: Implement balance fetching based on Phantom's API\n return {\n success: true,\n wallet: this.type,\n result: \"Implement based on Phantom API\",\n };\n } catch (error) {\n console.error(`Error getting balance from Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async waitForTransaction(\n _txHash: string,\n _timeoutMs?: number,\n ): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"waitForTransaction not supported for Phantom wallet\",\n };\n }\n}\n","import { ExternalWalletType } from \"../types\";\nimport { EthereumWalletBase } from \"../ethereum-base\";\n\nexport class PhantomEVMWallet extends EthereumWalletBase {\n readonly type: ExternalWalletType = \"phantom-evm\";\n readonly rdns = \"app.phantom\";\n readonly displayName = \"Phantom\";\n}\n","import { ExternalWalletType } from \"../types\";\nimport { EthereumWalletBase } from \"../ethereum-base\";\n\nexport class RabbyWallet extends EthereumWalletBase {\n readonly type: ExternalWalletType = \"rabby\";\n readonly rdns = \"io.rabby\";\n readonly displayName = \"Rabby\";\n}\n","import { Call, TypedData, StarknetWindowObject } from \"@starknet-io/types-js\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\nexport class BraavosWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"braavos\";\n readonly platform: ExternalPlatform = \"starknet\";\n private wallet: StarknetWindowObject | undefined = undefined;\n private account: string | undefined = undefined;\n private connectedAccounts: string[] = [];\n private accountChangeListener: ((accounts?: string[]) => void) | undefined =\n undefined;\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.starknet_braavos;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available\n ? window.starknet_braavos?.version || \"Unknown\"\n : undefined,\n chainId: available ? window.starknet_braavos?.chainId : undefined,\n name: \"Braavos\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Braavos is not available\");\n }\n\n const wallet = window.starknet_braavos as StarknetWindowObject;\n if (!wallet) {\n throw new Error(\"No wallet found\");\n }\n\n // Request accounts from the wallet\n const accounts = await wallet.request({\n type: \"wallet_requestAccounts\",\n params: { silent_mode: false },\n });\n\n if (!accounts || accounts.length === 0) {\n throw new Error(\"No accounts found\");\n }\n\n this.removeAccountChangeListener();\n\n this.wallet = wallet;\n this.account = accounts[0];\n this.connectedAccounts = accounts;\n this.setupAccountChangeListener();\n return { success: true, wallet: this.type, account: this.account };\n } catch (error) {\n console.error(`Error connecting to Braavos:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n getConnectedAccounts(): string[] {\n return this.connectedAccounts;\n }\n\n async signTypedData(data: TypedData): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.wallet) {\n throw new Error(\"Braavos is not connected\");\n }\n\n const sig = await this.wallet.request({\n type: \"wallet_signTypedData\",\n params: data,\n });\n\n return { success: true, wallet: this.type, result: sig };\n } catch (error) {\n console.error(`Error signing typed data with Braavos:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(calls: Call[]): Promise<ExternalWalletResponse> {\n if (!this.wallet) {\n throw new Error(\"No wallet found\");\n }\n\n try {\n const result = await this.wallet.request({\n type: \"wallet_addInvokeTransaction\",\n params: {\n calls,\n },\n });\n\n return {\n success: true,\n wallet: this.type,\n result,\n };\n } catch (error) {\n console.error(`Error sending transaction with Braavos:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async switchChain(chainId: string): Promise<boolean> {\n if (!this.wallet) {\n throw new Error(\"No wallet found\");\n }\n\n const result = await this.wallet.request({\n type: \"wallet_switchStarknetChain\",\n params: {\n chainId,\n },\n });\n\n return result;\n }\n async getBalance(\n _tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.wallet) {\n throw new Error(\"Braavos is not connected\");\n }\n\n // TODO: Implement balance fetching based on Braavos's API\n return {\n success: true,\n wallet: this.type,\n result: \"Implement based on Braavos API\",\n };\n } catch (error) {\n console.error(`Error getting balance from Braavos:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async waitForTransaction(\n _txHash: string,\n _timeoutMs?: number,\n ): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"waitForTransaction not supported for Braavos wallet\",\n };\n }\n\n private setupAccountChangeListener(): void {\n if (!this.wallet) return;\n\n this.accountChangeListener = (accounts: string[] | undefined) => {\n if (accounts && accounts.length > 0) {\n this.account = accounts[0];\n this.connectedAccounts = accounts;\n } else {\n this.account = undefined;\n this.connectedAccounts = [];\n }\n };\n\n // Listen for account changes\n this.wallet.on(\"accountsChanged\", this.accountChangeListener);\n }\n\n private removeAccountChangeListener(): void {\n if (this.wallet && this.accountChangeListener) {\n this.wallet.off(\"accountsChanged\", this.accountChangeListener);\n this.accountChangeListener = undefined;\n }\n }\n\n disconnect(): void {\n this.removeAccountChangeListener();\n this.wallet = undefined;\n this.account = undefined;\n this.connectedAccounts = [];\n }\n}\n","import { getAddress } from \"ethers\";\nimport { ArgentWallet } from \"./argent\";\nimport { BaseWallet } from \"./base\";\nimport { MetaMaskWallet } from \"./metamask\";\nimport { PhantomWallet } from \"./phantom\";\nimport { PhantomEVMWallet } from \"./phantom-evm\";\nimport { RabbyWallet } from \"./rabby\";\nimport {\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"./types\";\nimport { BraavosWallet } from \"./braavos\";\n\nexport class WalletBridge {\n private readonly walletAdapters: Map<ExternalWalletType, WalletAdapter>;\n\n constructor() {\n this.walletAdapters = new Map<ExternalWalletType, WalletAdapter>();\n\n if (typeof window == \"undefined\") {\n return;\n }\n\n const metamask = new MetaMaskWallet();\n this.walletAdapters.set(\"metamask\", metamask);\n\n const phantom = new PhantomWallet();\n this.walletAdapters.set(\"phantom\", phantom);\n\n const phantomEvm = new PhantomEVMWallet();\n this.walletAdapters.set(\"phantom-evm\", phantomEvm);\n\n const argent = new ArgentWallet();\n this.walletAdapters.set(\"argent\", argent);\n\n const braavos = new BraavosWallet();\n this.walletAdapters.set(\"braavos\", braavos);\n\n const rabby = new RabbyWallet();\n this.walletAdapters.set(\"rabby\", rabby);\n\n const base = new BaseWallet();\n this.walletAdapters.set(\"base\", base);\n\n window.wallet_bridge = this;\n }\n\n getIFrameMethods() {\n return {\n externalDetectWallets: (_origin: string) => () => this.detectWallets(),\n externalConnectWallet: (_origin: string) => (type: ExternalWalletType) =>\n this.connectWallet(type),\n externalSignMessage:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, message: string) =>\n this.signMessage(identifier, message),\n externalSignTypedData:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, data: any) =>\n this.signTypedData(identifier, data),\n externalSendTransaction:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, txn: any) =>\n this.sendTransaction(identifier, txn),\n externalGetBalance:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, tokenAddress?: string) =>\n this.getBalance(identifier, tokenAddress),\n externalSwitchChain:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, chainId: string) =>\n this.switchChain(identifier, chainId),\n externalWaitForTransaction:\n (_origin: string) =>\n (\n identifier: ExternalWalletType | string,\n txHash: string,\n timeoutMs?: number,\n ) =>\n this.waitForTransaction(identifier, txHash, timeoutMs),\n };\n }\n\n async detectWallets(): Promise<ExternalWallet[]> {\n const wallets = Array.from(this.walletAdapters.values()).map((adapter) =>\n adapter.getInfo(),\n ) as ExternalWallet[];\n\n return wallets;\n }\n\n private getWalletAdapterByType(type: ExternalWalletType): WalletAdapter {\n const adapter = this.walletAdapters.get(type);\n if (!adapter) {\n throw new Error(`Unsupported wallet type: ${type}`);\n }\n return adapter;\n }\n\n private handleError(\n identifier: ExternalWalletType | string,\n error: unknown,\n operation: string,\n responseType?: ExternalWalletType,\n ): ExternalWalletResponse {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error\";\n let walletType: ExternalWalletType | string = \"unknown\";\n if (typeof identifier === \"string\") {\n const adapter = this.getConnectedWalletAdapter(identifier);\n walletType = responseType ?? adapter?.type ?? identifier;\n } else {\n walletType = identifier;\n }\n\n console.error(`Error ${operation} with ${identifier} wallet:`, error);\n return {\n success: false,\n wallet: walletType as ExternalWalletType,\n error: errorMessage,\n };\n }\n\n async connectWallet(\n type: ExternalWalletType,\n ): Promise<ExternalWalletResponse> {\n try {\n const wallet = this.getWalletAdapterByType(type);\n const response = await wallet.connect();\n\n if (response.success && response.account) {\n console.log(\n `Wallet ${type} connected with address ${response.account}`,\n );\n } else if (response.success && !response.account) {\n console.error(\n `Wallet ${type} connected successfully but did not provide an address.`,\n );\n return {\n ...response,\n success: false,\n error: \"Wallet connected but address not found.\",\n };\n }\n\n return response;\n } catch (error) {\n return this.handleError(type, error, \"connecting to\");\n }\n }\n\n private getConnectedWalletAdapter(\n identifier: ExternalWalletType | string,\n ): WalletAdapter {\n let wallet: WalletAdapter | undefined;\n let checkSummedAddress: string;\n\n try {\n checkSummedAddress = getAddress(identifier);\n } catch {\n // getAddress failed, so this must be a wallet type\n wallet = this.walletAdapters.get(identifier as ExternalWalletType);\n if (!wallet) {\n throw new Error(`Wallet ${identifier} is not connected or supported`);\n }\n return wallet;\n }\n\n wallet = this.walletAdapters.values().find((adapter) => {\n return adapter.getConnectedAccounts().includes(checkSummedAddress);\n });\n\n if (!wallet) {\n throw new Error(`No wallet found with connected address ${identifier}`);\n }\n\n return wallet;\n }\n\n async signMessage(\n identifier: ExternalWalletType | string,\n message: string,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n if (!wallet.signMessage) {\n throw new Error(\n `Wallet type ${wallet.type} (identifier: ${identifier}) does not support signing messages`,\n );\n }\n return await wallet.signMessage(message, identifier);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"signing message with\",\n wallet?.type,\n );\n }\n }\n\n async signTypedData(\n identifier: ExternalWalletType | string,\n data: any,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n if (!wallet.signTypedData) {\n throw new Error(\n `Wallet type ${wallet.type} (identifier: ${identifier}) does not support signing typed data`,\n );\n }\n return await wallet.signTypedData(data);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"signing typed data with\",\n wallet?.type,\n );\n }\n }\n\n async sendTransaction(\n identifier: ExternalWalletType | string,\n txn: any,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n return await wallet.sendTransaction(txn);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"sending transaction with\",\n wallet?.type,\n );\n }\n }\n\n async getBalance(\n identifier: ExternalWalletType | string,\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n return await wallet.getBalance(tokenAddress);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"getting balance from\",\n wallet?.type,\n );\n }\n }\n\n async switchChain(\n identifier: ExternalWalletType | string,\n chainId: string,\n ): Promise<boolean> {\n try {\n const wallet = this.getConnectedWalletAdapter(identifier);\n return await wallet.switchChain(chainId);\n } catch (error) {\n console.error(`Error switching chain for ${identifier} wallet:`, error);\n return false;\n }\n }\n\n async waitForTransaction(\n identifier: ExternalWalletType | string,\n txHash: string,\n timeoutMs?: number,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n return await wallet.waitForTransaction(txHash, timeoutMs);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"waiting for transaction with\",\n wallet?.type,\n );\n }\n }\n}\n\ndeclare global {\n interface Window {\n ethereum?: any;\n solana?: any;\n starknet_argentX?: any;\n starknet_braavos?: any;\n wallet_bridge?: WalletBridge;\n }\n}\n\nexport type {\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"./types\";\n","import { KEYCHAIN_URL } from \"../constants\";\nimport { Keychain, KeychainOptions } from \"../types\";\nimport { WalletBridge } from \"../wallets/bridge\";\nimport { IFrame, IFrameOptions } from \"./base\";\n\ntype KeychainIframeOptions = IFrameOptions<Keychain> &\n KeychainOptions & {\n version?: string;\n ref?: string;\n refGroup?: string;\n needsSessionCreation?: boolean;\n username?: string;\n onSessionCreated?: () => void;\n onStarterpackPlay?: () => void;\n encryptedBlob?: string;\n };\n\nconst STARTERPACK_PLAY_CALLBACK_DELAY_MS = 200;\n\nexport class KeychainIFrame extends IFrame<Keychain> {\n private walletBridge: WalletBridge;\n private onStarterpackPlay?: () => void;\n\n constructor({\n url,\n policies,\n version,\n slot,\n namespace,\n tokens,\n preset,\n shouldOverridePresetPolicies,\n rpcUrl,\n ref,\n refGroup,\n needsSessionCreation,\n username,\n onSessionCreated,\n onStarterpackPlay,\n encryptedBlob,\n propagateSessionErrors,\n errorDisplayMode,\n ...iframeOptions\n }: KeychainIframeOptions) {\n let onStarterpackPlayHandler: (() => Promise<void>) | undefined;\n const _url = new URL(url ?? KEYCHAIN_URL);\n const walletBridge = new WalletBridge();\n\n if (propagateSessionErrors) {\n _url.searchParams.set(\"propagate_error\", \"true\");\n }\n\n if (errorDisplayMode) {\n _url.searchParams.set(\"error_display_mode\", errorDisplayMode);\n }\n\n if (version) {\n _url.searchParams.set(\"v\", encodeURIComponent(version));\n }\n\n if (slot) {\n _url.searchParams.set(\"ps\", encodeURIComponent(slot));\n }\n\n if (namespace) {\n _url.searchParams.set(\"ns\", encodeURIComponent(namespace));\n }\n\n if (tokens?.erc20) {\n _url.searchParams.set(\n \"erc20\",\n encodeURIComponent(tokens.erc20.toString()),\n );\n }\n\n if (rpcUrl) {\n _url.searchParams.set(\"rpc_url\", encodeURIComponent(rpcUrl));\n }\n\n if (ref) {\n _url.searchParams.set(\"ref\", encodeURIComponent(ref));\n }\n\n if (refGroup) {\n _url.searchParams.set(\"ref_group\", encodeURIComponent(refGroup));\n }\n\n if (needsSessionCreation) {\n _url.searchParams.set(\"needs_session_creation\", \"true\");\n }\n\n if (username) {\n _url.searchParams.set(\"username\", encodeURIComponent(username));\n }\n\n // Policy precedence logic:\n // 1. If shouldOverridePresetPolicies is true and policies are provided, use policies\n // 2. Otherwise, if preset is defined, use empty object (let preset take precedence)\n // 3. Otherwise, use provided policies or empty object\n if ((!preset || shouldOverridePresetPolicies) && policies) {\n _url.searchParams.set(\n \"policies\",\n encodeURIComponent(JSON.stringify(policies)),\n );\n } else if (preset) {\n _url.searchParams.set(\"preset\", preset);\n }\n\n // Add encrypted blob to URL fragment (hash) if present\n // This contains the encrypted localStorage snapshot from keychain redirect\n if (encryptedBlob) {\n _url.hash = `kc=${encodeURIComponent(encryptedBlob)}`;\n }\n\n super({\n ...iframeOptions,\n id: \"controller-keychain\",\n url: _url,\n methods: {\n ...walletBridge.getIFrameMethods(),\n // Expose callback for keychain to notify parent that session was created and storage access granted\n onSessionCreated: (_origin: string) => () => {\n if (onSessionCreated) {\n onSessionCreated();\n }\n },\n onStarterpackPlay: (_origin: string) => async () => {\n if (onStarterpackPlayHandler) {\n await onStarterpackPlayHandler();\n }\n },\n },\n });\n\n this.walletBridge = walletBridge;\n this.onStarterpackPlay = onStarterpackPlay;\n onStarterpackPlayHandler = async () => {\n this.close();\n const callback = this.onStarterpackPlay;\n this.onStarterpackPlay = undefined;\n if (!callback) {\n return;\n }\n await new Promise((resolve) =>\n setTimeout(resolve, STARTERPACK_PLAY_CALLBACK_DELAY_MS),\n );\n try {\n callback();\n } catch (error) {\n console.error(\"Failed to run starterpack play callback:\", error);\n }\n };\n\n // Expose the wallet bridge instance globally for WASM interop\n if (typeof window !== \"undefined\") {\n (window as any).external_wallets = this.walletBridge;\n }\n }\n\n getWalletBridge(): WalletBridge {\n return this.walletBridge;\n }\n\n setOnStarterpackPlay(callback?: () => void) {\n this.onStarterpackPlay = callback;\n }\n}\n","/**\n * Validates a redirect URL to prevent XSS and open redirect attacks.\n *\n * This validator is designed for the standalone auth flow where we want to\n * support redirecting to external game domains (e.g., lootsurvivor.io)\n * after authentication, while blocking dangerous attack vectors.\n *\n * @param redirectUrl - The URL to validate (from redirectUrl option)\n * @returns Object with isValid boolean and optional error message\n */\nexport function validateRedirectUrl(redirectUrl: string): {\n isValid: boolean;\n error?: string;\n} {\n // Check for empty or undefined\n if (!redirectUrl || redirectUrl.trim() === \"\") {\n return { isValid: false, error: \"Redirect URL is empty\" };\n }\n\n // Try to parse as URL\n let url: URL;\n try {\n url = new URL(redirectUrl);\n } catch {\n return {\n isValid: false,\n error: \"Invalid URL format\",\n };\n }\n\n // CRITICAL: Block dangerous protocols that can execute JavaScript\n const allowedProtocols = [\"http:\", \"https:\"];\n if (!allowedProtocols.includes(url.protocol)) {\n return {\n isValid: false,\n error: `Protocol \"${url.protocol}\" is not allowed. Only http: and https: are supported.`,\n };\n }\n\n // CRITICAL: Ensure URL has a valid hostname\n // This blocks edge cases like \"javascript:alert(1)\" being parsed as a URL\n if (!url.hostname || url.hostname === \"\") {\n return {\n isValid: false,\n error: \"URL must have a valid hostname\",\n };\n }\n\n // Additional validation: Block localhost in production\n // Allow localhost only for development (when current origin is also localhost)\n if (typeof window !== \"undefined\") {\n const isCurrentHostLocal =\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\";\n\n const isRedirectLocal =\n url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\";\n\n // If we're NOT on localhost but trying to redirect to localhost, block it\n if (!isCurrentHostLocal && isRedirectLocal) {\n return {\n isValid: false,\n error: \"Cannot redirect to localhost from production\",\n };\n }\n }\n\n // URL is safe to redirect to\n return { isValid: true };\n}\n","import { AsyncMethodReturns } from \"@cartridge/penpal\";\n\nimport { Policy } from \"@cartridge/presets\";\nimport {\n AddInvokeTransactionResult,\n AddStarknetChainParameters,\n ChainId,\n} from \"@starknet-io/types-js\";\nimport { constants, shortString, WalletAccount } from \"starknet\";\nimport { version } from \"../package.json\";\nimport ControllerAccount from \"./account\";\nimport { KEYCHAIN_URL } from \"./constants\";\nimport { NotReadyToConnect } from \"./errors\";\nimport { KeychainIFrame } from \"./iframe\";\nimport BaseProvider from \"./provider\";\nimport {\n AuthOptions,\n Chain,\n ConnectError,\n ConnectReply,\n ControllerOptions,\n IFrames,\n Keychain,\n ProbeReply,\n ProfileContextTypeVariant,\n ResponseCodes,\n OpenOptions,\n StarterpackOptions,\n} from \"./types\";\nimport { validateRedirectUrl } from \"./url-validator\";\nimport { parseChainId } from \"./utils\";\n\nexport default class ControllerProvider extends BaseProvider {\n private keychain?: AsyncMethodReturns<Keychain>;\n private options: ControllerOptions;\n private iframes?: IFrames;\n private selectedChain: ChainId;\n private chains: Map<ChainId, Chain>;\n private referral: { ref?: string; refGroup?: string };\n private encryptedBlob?: string;\n\n isReady(): boolean {\n return !!this.keychain;\n }\n\n constructor(options: ControllerOptions = {}) {\n super();\n\n // Default Cartridge chains that are always available\n const cartridgeChains: Chain[] = [\n { rpcUrl: \"https://api.cartridge.gg/x/starknet/sepolia/rpc/v0_9\" },\n { rpcUrl: \"https://api.cartridge.gg/x/starknet/mainnet/rpc/v0_9\" },\n ];\n\n // Merge user chains with default chains\n // User chains take precedence if they specify the same network\n const chains = [...cartridgeChains, ...(options.chains || [])];\n const defaultChainId =\n options.defaultChainId || constants.StarknetChainId.SN_MAIN;\n\n this.selectedChain = defaultChainId;\n this.chains = new Map<ChainId, Chain>();\n\n // Auto-extract referral parameters from URL\n // This allows games to pass referrals via their own URL: game.com/?ref=alice&ref_group=campaign1\n const urlParams =\n typeof window !== \"undefined\"\n ? new URLSearchParams(window.location.search)\n : null;\n this.referral = {\n ref: urlParams?.get(\"ref\") ?? undefined,\n refGroup: urlParams?.get(\"ref_group\") ?? undefined,\n };\n\n this.options = { ...options, chains, defaultChainId };\n\n // Auto-detect and set lastUsedConnector from URL parameter\n // This is set by the keychain after redirect flow completion\n if (typeof window !== \"undefined\" && typeof localStorage !== \"undefined\") {\n // Check our dedicated parameter to detect return from standalone auth flow\n const standaloneParam = urlParams?.get(\"controller_standalone\");\n if (standaloneParam === \"1\") {\n // Store a flag in sessionStorage so lazy-loaded iframes can detect this\n // Use sessionStorage instead of localStorage to avoid cross-tab issues\n sessionStorage.setItem(\"controller_standalone\", \"1\");\n }\n\n // Also handle lastUsedConnector for backwards compatibility\n const lastUsedConnector = urlParams?.get(\"lastUsedConnector\");\n if (lastUsedConnector) {\n localStorage.setItem(\"lastUsedConnector\", lastUsedConnector);\n }\n\n // Extract encrypted blob from URL fragment (#kc=...)\n // This contains the encrypted localStorage snapshot from keychain\n if (window.location.hash) {\n const hashParams = new URLSearchParams(window.location.hash.slice(1));\n const encryptedBlob = hashParams.get(\"kc\");\n if (encryptedBlob) {\n // Store encrypted blob as class variable to pass to iframe\n this.encryptedBlob = encryptedBlob;\n }\n }\n\n // Clean up the URL by removing controller flow parameters\n if (urlParams && window.history?.replaceState) {\n let needsCleanup = false;\n\n if (standaloneParam) {\n urlParams.delete(\"controller_standalone\");\n needsCleanup = true;\n }\n\n if (lastUsedConnector) {\n urlParams.delete(\"lastUsedConnector\");\n needsCleanup = true;\n }\n\n // Also clean up the fragment if it contains our encrypted blob\n let cleanHash = window.location.hash;\n if (cleanHash) {\n const hashParams = new URLSearchParams(cleanHash.slice(1));\n if (hashParams.has(\"kc\")) {\n hashParams.delete(\"kc\");\n cleanHash = hashParams.toString()\n ? `#${hashParams.toString()}`\n : \"\";\n needsCleanup = true;\n }\n }\n\n if (needsCleanup) {\n const newUrl =\n window.location.pathname +\n (urlParams.toString() ? \"?\" + urlParams.toString() : \"\") +\n cleanHash;\n window.history.replaceState({}, \"\", newUrl);\n }\n }\n }\n\n this.initializeChains(chains);\n\n this.iframes = {\n keychain: options.lazyload ? undefined : this.createKeychainIframe(),\n };\n\n if (typeof window !== \"undefined\") {\n (window as any).starknet_controller = this;\n }\n }\n\n async logout() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n try {\n // Disconnect the controller/keychain first\n await this.disconnect();\n\n // Close all controller iframes\n const iframes = document.querySelectorAll('iframe[id^=\"controller-\"]');\n iframes.forEach((iframe) => {\n const container = iframe.parentElement;\n if (container) {\n // Start fade-out transition\n container.style.opacity = \"0\";\n // Set display: none after transition completes\n setTimeout(() => {\n container.style.display = \"none\";\n }, 200);\n }\n });\n\n // Reset body overflow\n if (document.body) {\n document.body.style.overflow = \"auto\";\n }\n\n // Reload the page to complete logout\n window.location.reload();\n } catch (err) {\n console.error(\"Logout failed:\", err);\n throw err;\n }\n }\n\n async probe(): Promise<WalletAccount | undefined> {\n if (!this.iframes) {\n return;\n }\n\n try {\n // Ensure iframe is created if using lazy loading\n if (!this.iframes.keychain) {\n this.iframes.keychain = this.createKeychainIframe();\n }\n\n await this.waitForKeychain();\n\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n const response = (await this.keychain.probe(this.rpcUrl())) as ProbeReply;\n\n // For backwards compat with controller <=0.6.0\n let rpcUrl = response?.rpcUrl || this.rpcUrl();\n this.account = new ControllerAccount(\n this,\n rpcUrl,\n response.address,\n this.keychain,\n this.options,\n this.iframes.keychain,\n );\n } catch (e) {\n console.error(e);\n return;\n }\n\n return this.account;\n }\n\n async connect(\n signupOptions?: AuthOptions,\n ): Promise<WalletAccount | undefined> {\n if (!this.iframes) {\n return;\n }\n\n if (this.account) {\n return this.account;\n }\n\n // Ensure iframe is created if using lazy loading\n if (!this.iframes.keychain) {\n this.iframes.keychain = this.createKeychainIframe();\n // Wait for the keychain to be ready\n await this.waitForKeychain();\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n this.iframes.keychain.open();\n\n try {\n // Use connect() parameter if provided, otherwise fall back to constructor options\n const effectiveOptions = signupOptions ?? this.options.signupOptions;\n let response = await this.keychain.connect(effectiveOptions);\n if (response.code !== ResponseCodes.SUCCESS) {\n throw new Error(response.message);\n }\n\n response = response as ConnectReply;\n this.account = new ControllerAccount(\n this,\n this.rpcUrl(),\n response.address,\n this.keychain,\n this.options,\n this.iframes.keychain,\n );\n\n return this.account;\n } catch (e) {\n console.log(e);\n } finally {\n this.iframes.keychain.close();\n }\n }\n\n async switchStarknetChain(chainId: string): Promise<boolean> {\n if (!this.iframes) {\n return false;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return false;\n }\n\n const currentChain = this.selectedChain;\n\n try {\n this.selectedChain = chainId;\n await this.keychain.switchChain(this.rpcUrl());\n } catch (e) {\n console.error(e);\n this.selectedChain = currentChain;\n return false;\n }\n\n this.emitNetworkChanged(chainId);\n return true;\n }\n\n addStarknetChain(_chain: AddStarknetChainParameters): Promise<boolean> {\n return Promise.resolve(true);\n }\n\n async disconnect() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n this.account = undefined;\n return this.keychain.disconnect();\n }\n\n async openProfile(tab: ProfileContextTypeVariant = \"inventory\") {\n if (!this.iframes) {\n return;\n }\n\n // Profile functionality is now integrated into keychain\n // Navigate keychain iframe to profile page\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n const username = await this.keychain.username();\n\n // Navigate first, then open to avoid flash\n const options = [];\n if (this.options.slot) {\n options.push(`ps=${this.options.slot}`);\n }\n await this.keychain.navigate(\n `/account/${username}/${tab}?${options.join(\"&\")}`,\n );\n this.iframes.keychain.open();\n }\n\n async openProfileTo(to: string) {\n if (!this.iframes) {\n return;\n }\n\n // Profile functionality is now integrated into keychain\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n const username = await this.keychain.username();\n const options = [];\n if (this.options.slot) {\n options.push(`ps=${this.options.slot}`);\n }\n await this.keychain.navigate(\n `/account/${username}/${to}?${options.join(\"&\")}`,\n );\n this.iframes.keychain.open();\n }\n\n async openProfileAt(at: string) {\n if (!this.iframes) {\n return;\n }\n\n // Profile functionality is now integrated into keychain\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n await this.keychain.navigate(at);\n this.iframes.keychain.open();\n }\n\n openSettings() {\n if (!this.iframes) {\n return;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n this.iframes.keychain.open();\n this.keychain.openSettings();\n }\n\n revoke(origin: string, _policy: Policy[]) {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n\n return this.keychain.revoke(origin);\n }\n\n rpcUrl(): string {\n const chain = this.chains.get(this.selectedChain);\n if (!chain) {\n const availableChains = Array.from(this.chains.keys()).map((chain) =>\n shortString.decodeShortString(chain),\n );\n throw new Error(\n `Chain not found: ${shortString.decodeShortString(this.selectedChain)}. Available chains: ${availableChains.join(\", \")}`,\n );\n }\n return chain.rpcUrl;\n }\n\n username() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n return this.keychain.username();\n }\n\n openPurchaseCredits() {\n if (!this.iframes) {\n return;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n this.keychain.navigate(\"/purchase/credits\").then(() => {\n this.iframes!.keychain?.open();\n });\n }\n\n async openStarterPack(\n id: string | number,\n options?: StarterpackOptions,\n ): Promise<void> {\n if (!this.iframes) {\n return;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n const { onPurchaseComplete, ...starterpackOptions } = options ?? {};\n this.iframes.keychain.setOnStarterpackPlay(onPurchaseComplete);\n const sanitizedOptions =\n Object.keys(starterpackOptions).length > 0\n ? (starterpackOptions as Omit<StarterpackOptions, \"onPurchaseComplete\">)\n : undefined;\n\n await this.keychain.openStarterPack(id, sanitizedOptions);\n this.iframes.keychain?.open();\n }\n\n async openExecute(calls: any, chainId?: string) {\n if (!this.iframes) {\n return;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n // Switch to the chain if provided\n let currentChainId = this.selectedChain;\n if (chainId) {\n this.switchStarknetChain(chainId);\n }\n // Open keychain\n this.iframes.keychain.open();\n // Invoke execute\n const res = await this.keychain.execute(calls, undefined, undefined, true);\n // Close keychain\n this.iframes.keychain.close();\n // Switch back to the original chain\n if (chainId) {\n this.switchStarknetChain(currentChainId);\n }\n const status = !(\n res &&\n ((res as ConnectError).code === ResponseCodes.NOT_CONNECTED ||\n (res as ConnectError).code === ResponseCodes.CANCELED)\n );\n return {\n status,\n transactionHash: (res as AddInvokeTransactionResult)?.transaction_hash,\n };\n }\n\n async delegateAccount() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n\n return await this.keychain.delegateAccount();\n }\n\n /**\n * Opens the keychain in standalone mode (first-party context) for authentication.\n * This establishes first-party storage, enabling seamless iframe access across all games.\n * @param options - Configuration for redirect after authentication\n */\n open(options: OpenOptions = {}) {\n if (typeof window === \"undefined\") {\n console.error(\"open can only be called in browser context\");\n return;\n }\n\n const keychainUrl = new URL(this.options.url || KEYCHAIN_URL);\n\n // Add redirect target (defaults to current page)\n const redirectUrl = options.redirectUrl || window.location.href;\n\n // Validate redirect URL to prevent XSS and open redirect attacks\n const validation = validateRedirectUrl(redirectUrl);\n if (!validation.isValid) {\n console.error(\n `Invalid redirect URL: ${validation.error}`,\n `URL: ${redirectUrl}`,\n );\n return;\n }\n\n keychainUrl.searchParams.set(\"redirect_url\", redirectUrl);\n\n // Add preset if provided\n if (this.options.preset) {\n keychainUrl.searchParams.set(\"preset\", this.options.preset);\n }\n\n // Add controller configuration parameters\n if (this.options.slot) {\n keychainUrl.searchParams.set(\"ps\", this.options.slot);\n }\n\n if (this.options.namespace) {\n keychainUrl.searchParams.set(\"ns\", this.options.namespace);\n }\n\n if (this.options.tokens?.erc20) {\n keychainUrl.searchParams.set(\n \"erc20\",\n this.options.tokens.erc20.toString(),\n );\n }\n\n if (this.rpcUrl()) {\n keychainUrl.searchParams.set(\"rpc_url\", this.rpcUrl());\n }\n\n // Navigate to standalone keychain\n window.location.href = keychainUrl.toString();\n }\n\n private initializeChains(chains: Chain[]) {\n for (const chain of chains) {\n try {\n const url = new URL(chain.rpcUrl);\n const chainId = parseChainId(url);\n\n this.chains.set(chainId, chain);\n } catch (error) {\n console.error(`Failed to parse chainId for ${chain.rpcUrl}:`, error);\n throw error; // Re-throw to ensure invalid chains fail fast\n }\n }\n\n if (!this.chains.has(this.selectedChain)) {\n console.warn(\n `Selected chain ${this.selectedChain} not found in configured chains. ` +\n `Available chains: ${Array.from(this.chains.keys()).join(\", \")}`,\n );\n }\n }\n\n private createKeychainIframe(): KeychainIFrame {\n // Check if we're returning from standalone auth flow\n const isReturningFromRedirect =\n typeof window !== \"undefined\" &&\n typeof sessionStorage !== \"undefined\" &&\n sessionStorage.getItem(\"controller_standalone\") === \"1\";\n\n // Extract username from URL if present (passed from keychain after auth)\n const urlParams =\n typeof window !== \"undefined\"\n ? new URLSearchParams(window.location.search)\n : undefined;\n const username = urlParams?.get(\"username\") ?? undefined;\n\n // Extract encrypted blob from class variable (stored during URL parsing)\n const encryptedBlob = this.encryptedBlob;\n\n // Clear the flag after detecting it\n if (isReturningFromRedirect) {\n sessionStorage.removeItem(\"controller_standalone\");\n }\n\n // Clear encrypted blob after using it\n if (encryptedBlob) {\n this.encryptedBlob = undefined;\n }\n\n const iframe = new KeychainIFrame({\n ...this.options,\n rpcUrl: this.rpcUrl(),\n onClose: this.keychain?.reset,\n onConnect: (keychain) => {\n this.keychain = keychain;\n },\n version: version,\n ref: this.referral.ref,\n refGroup: this.referral.refGroup,\n needsSessionCreation: isReturningFromRedirect,\n encryptedBlob: encryptedBlob ?? undefined,\n username: username,\n onSessionCreated: async () => {\n // Re-probe to establish connection now that storage access is granted and session created\n await this.probe();\n },\n });\n\n // If we're returning from redirect, open the modal immediately to show session creation prompt\n if (isReturningFromRedirect) {\n // Open after a short delay to ensure iframe is ready\n setTimeout(() => {\n iframe.open();\n }, 100);\n }\n\n return iframe;\n }\n\n private waitForKeychain({\n timeout = 50000,\n interval = 100,\n }:\n | {\n timeout?: number;\n interval?: number;\n }\n | undefined = {}) {\n return new Promise<void>((resolve, reject) => {\n const startTime = Date.now();\n const id = setInterval(() => {\n if (Date.now() - startTime > timeout) {\n clearInterval(id);\n reject(new Error(\"Timeout waiting for keychain\"));\n return;\n }\n\n if (!this.keychain) return;\n\n clearInterval(id);\n resolve();\n }, interval);\n });\n }\n}\n","import { LookupRequest, LookupResponse } from \"./types\";\nimport { num } from \"starknet\";\nimport { API_URL } from \"./constants\";\n\nconst cache = new Map<string, string>();\n\nasync function lookup(request: LookupRequest): Promise<LookupResponse> {\n if (!request.addresses?.length && !request.usernames?.length) {\n return { results: [] };\n }\n\n const response = await fetch(`${API_URL}/lookup`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n return response.json();\n}\n\nexport async function lookupUsernames(\n usernames: string[],\n): Promise<Map<string, string>> {\n const uncachedUsernames = usernames.filter((name) => !cache.has(name));\n\n if (uncachedUsernames.length > 0) {\n const response = await lookup({ usernames: uncachedUsernames });\n\n response.results.forEach((result) => {\n cache.set(result.username, result.addresses[0]); // TODO: handle multiple controller addresses\n });\n }\n\n return new Map(\n usernames\n .map((name) => [name, cache.get(name)] as [string, string])\n .filter((entry): entry is [string, string] => entry[1] !== undefined),\n );\n}\n\nexport async function lookupAddresses(\n addresses: string[],\n): Promise<Map<string, string>> {\n addresses = addresses.map(num.toHex);\n const uncachedAddresses = addresses.filter((addr) => !cache.has(addr));\n\n if (uncachedAddresses.length > 0) {\n const response = await lookup({\n addresses: uncachedAddresses,\n });\n\n response.results.forEach((result) => {\n cache.set(result.addresses[0], result.username); // TODO: handle multiple controller addresses\n });\n }\n\n return new Map(\n addresses\n .map((addr) => [addr, cache.get(addr)] as [string, string])\n .filter((entry): entry is [string, string] => entry[1] !== undefined),\n );\n}\n","export const TOAST_CONTAINER_ID = \"cartridge-toast-container\";\nexport const DEFAULT_DURATION = 3000;\nexport const DEFAULT_POSITION = \"bottom-right\";\nexport const TOAST_MESSAGE_TYPE = \"cartridge-toast-show\";\n\n// Check if we're in an iframe\nexport function isInIframe(): boolean {\n try {\n return typeof window !== \"undefined\" && window.self !== window.top;\n } catch {\n return true; // If we can't access window.top, we're likely in an iframe\n }\n}\n\n// Get the target document (parent if in iframe, current if not)\nexport function getTargetDocument(): Document | null {\n if (typeof document === \"undefined\") {\n return null;\n }\n\n if (isInIframe()) {\n try {\n // Try to access parent document\n if (window.parent && window.parent.document) {\n return window.parent.document;\n }\n } catch (e) {\n console.warn(\"Failed to access parent document:\", e);\n return null;\n }\n }\n\n return document;\n}\n\n// Get or create toast container\nexport function getToastContainer(\n targetDoc: Document,\n position: string,\n): HTMLElement {\n let container = targetDoc.getElementById(TOAST_CONTAINER_ID);\n\n if (!container) {\n container = targetDoc.createElement(\"div\");\n container.id = TOAST_CONTAINER_ID;\n if (targetDoc.body) {\n targetDoc.body.appendChild(container);\n }\n }\n\n // Update position class\n container.className = position;\n\n return container;\n}\n\n// Remove toast with animation\nexport function removeToast(toast: HTMLElement): void {\n toast.classList.add(\"closing\");\n setTimeout(() => {\n if (toast.parentNode) {\n toast.parentNode.removeChild(toast);\n }\n }, 200);\n}\n","import { TOAST_CONTAINER_ID } from \"./utils\";\n\n// Inject CSS styles if not already present\nexport function injectStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-styles\";\n style.textContent = getCommonStyles();\n targetDoc.head.appendChild(style);\n}\n\nfunction getCommonStyles(): string {\n return `\n #${TOAST_CONTAINER_ID} {\n position: fixed;\n z-index: 999999;\n pointer-events: none;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 12px;\n }\n\n #${TOAST_CONTAINER_ID}.top-left {\n top: 20px;\n left: 20px;\n align-items: flex-start;\n }\n\n #${TOAST_CONTAINER_ID}.top-right {\n top: 20px;\n right: 20px;\n align-items: flex-end;\n }\n\n #${TOAST_CONTAINER_ID}.top-center {\n top: 20px;\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n }\n\n #${TOAST_CONTAINER_ID}.bottom-left {\n bottom: 20px;\n left: 20px;\n align-items: flex-start;\n }\n\n #${TOAST_CONTAINER_ID}.bottom-right {\n bottom: 20px;\n right: 20px;\n align-items: flex-end;\n }\n\n #${TOAST_CONTAINER_ID}.bottom-center {\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n }\n\n .cartridge-toast {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n display: flex;\n align-items: center;\n animation: cartridge-toast-slide-in 0.3s ease-out;\n overflow: hidden;\n pointer-events: auto;\n }\n\n #${TOAST_CONTAINER_ID}.top-right .cartridge-toast,\n #${TOAST_CONTAINER_ID}.bottom-right .cartridge-toast {\n align-self: flex-end;\n }\n\n #${TOAST_CONTAINER_ID}.top-left .cartridge-toast,\n #${TOAST_CONTAINER_ID}.bottom-left .cartridge-toast {\n align-self: flex-start;\n }\n\n #${TOAST_CONTAINER_ID}.top-center .cartridge-toast,\n #${TOAST_CONTAINER_ID}.bottom-center .cartridge-toast {\n align-self: center;\n }\n\n @keyframes cartridge-toast-slide-in {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .cartridge-toast.closing {\n animation: cartridge-toast-slide-out 0.2s ease-in forwards;\n }\n\n @keyframes cartridge-toast-slide-out {\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(10px);\n }\n }\n\n @media (max-width: 640px) {\n .cartridge-toast {\n min-width: calc(100vw - 40px);\n max-width: calc(100vw - 40px);\n }\n\n #${TOAST_CONTAINER_ID}.top-left,\n #${TOAST_CONTAINER_ID}.top-right,\n #${TOAST_CONTAINER_ID}.top-center {\n top: 10px;\n left: 20px;\n right: 20px;\n transform: none;\n align-items: stretch;\n }\n\n #${TOAST_CONTAINER_ID}.bottom-left,\n #${TOAST_CONTAINER_ID}.bottom-right,\n #${TOAST_CONTAINER_ID}.bottom-center {\n bottom: 10px;\n left: 20px;\n right: 20px;\n transform: none;\n align-items: stretch;\n }\n }\n `;\n}\n","export const CloseButton = (translucent = false): HTMLDivElement => {\n const container = document.createElement(\"div\");\n container.id = \"close-button\";\n container.style.display = \"flex\";\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n\n const button = document.createElement(\"button\");\n button.className = translucent\n ? \"cartridge-close-button translucent\"\n : \"cartridge-close-button\";\n\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"width\", \"20\");\n svg.setAttribute(\"height\", \"20\");\n svg.setAttribute(\"viewBox\", \"0 0 20 20\");\n svg.setAttribute(\"fill\", \"none\");\n svg.style.pointerEvents = \"none\"; // Ensure clicks pass through to button\n\n const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n path.setAttribute(\n \"d\",\n \"M15.5465 14.343C15.8881 14.6837 15.8881 15.2364 15.5465 15.5772C15.2049 15.9179 14.6506 15.9178 14.309 15.5772L10.0006 11.2484L5.66162 15.5757C5.32001 15.9164 4.76575 15.9164 4.4241 15.5757C4.08245 15.235 4.08249 14.6822 4.4241 14.3415L8.76455 10.0157L4.4229 5.65573C4.08128 5.31504 4.08128 4.76227 4.4229 4.42155C4.76451 4.08082 5.31877 4.08086 5.66042 4.42155L10.0006 8.78299L14.3396 4.45573C14.6812 4.11504 15.2355 4.11504 15.5771 4.45573C15.9188 4.79642 15.9187 5.34918 15.5771 5.68991L11.2367 10.0157L15.5465 14.343Z\",\n );\n path.setAttribute(\"class\", \"cartridge-close-icon\");\n\n svg.appendChild(path);\n button.appendChild(svg);\n\n // Inline critical button styles\n button.style.display = \"flex\";\n button.style.alignItems = \"center\";\n button.style.justifyContent = \"center\";\n button.style.border = \"none\";\n button.style.background = \"transparent\";\n button.style.cursor = \"pointer\";\n button.style.borderRadius = \"4px\";\n button.style.padding = \"10px\";\n button.style.gap = \"4px\";\n button.style.transition = \"background-color 0.2s ease\";\n\n // Add styles dynamically to the correct document\n const targetDoc = container.ownerDocument;\n if (!targetDoc.getElementById(\"cartridge-close-button-style\")) {\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-close-button-style\";\n style.textContent = `\n .cartridge-close-button .cartridge-close-icon {\n fill: rgba(0, 0, 0, 0.48);\n transition: fill 0.2s ease;\n }\n\n .cartridge-close-button:not(.translucent):hover {\n background-color: #181c19;\n }\n\n .cartridge-close-button:not(.translucent):hover .cartridge-close-icon {\n fill: rgba(255, 255, 255, 0.72);\n }\n\n .cartridge-close-button.translucent .cartridge-close-icon {\n fill: rgba(0, 0, 0, 0.48);\n }\n\n .cartridge-close-button.translucent:hover {\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n .cartridge-close-button.translucent:hover .cartridge-close-icon {\n fill: rgba(0, 0, 0, 0.72);\n }\n\n .cartridge-close-button:active {\n transform: scale(0.95);\n }\n `;\n targetDoc.head.appendChild(style);\n }\n\n container.appendChild(button);\n return container;\n};\n","import { ErrorToastOptions } from \"../types\";\nimport { CloseButton } from \"../components/close-button\";\n\n// Inject error toast specific styles\nexport function injectErrorStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-error-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-error-styles\";\n style.textContent = `\n /* Error Toast */\n .cartridge-toast.error {\n background-color: #E66666;\n border-radius: 8px;\n width: 360px;\n display: flex;\n align-items: flex-start;\n position: relative;\n overflow: hidden;\n box-sizing: border-box;\n transition: background-color 0.2s ease, transform 0.1s ease;\n }\n\n /* Clickable state */\n .cartridge-toast.error[style*=\"cursor: pointer\"]:hover {\n background-color: #D85555;\n transform: translateY(-2px);\n }\n\n .cartridge-toast.error[style*=\"cursor: pointer\"]:active {\n transform: translateY(0);\n }\n\n .cartridge-toast.error .label-bar {\n display: flex;\n padding: 12px 12px 16px 12px;\n align-items: center;\n gap: 8px;\n flex: 1 0 0;\n }\n\n .cartridge-toast.error .label-bar .label-container {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .cartridge-toast.error .label-bar .icon-container {\n width: 24px;\n height: 24px;\n aspect-ratio: 1/1;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n }\n\n .cartridge-toast.error .label-bar p {\n color: #0F1410;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n }\n\n .cartridge-toast.error .close-button-container {\n display: flex;\n padding: 4px;\n align-items: center;\n gap: 10px;\n }\n\n .cartridge-toast.error {\n position: relative;\n overflow: hidden;\n }\n `;\n targetDoc.head.appendChild(style);\n}\n\n// Create error toast element\nexport function createErrorToast(options: ErrorToastOptions): HTMLElement {\n const toast = document.createElement(\"div\");\n toast.className = \"cartridge-toast error\";\n\n const labelBar = document.createElement(\"div\");\n labelBar.className = \"label-bar\";\n toast.appendChild(labelBar);\n\n const labelContainer = document.createElement(\"div\");\n labelContainer.className = \"label-container\";\n labelBar.appendChild(labelContainer);\n\n const icon = document.createElement(\"div\");\n icon.className = \"icon-container\";\n icon.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.79313 0.326989L17.673 8.20771C18.109 8.6437 18.109 9.35713 17.673 9.79229L9.79229 17.673C9.3563 18.109 8.6437 18.109 8.20771 17.673L0.326989 9.79229C-0.108996 9.35713 -0.108996 8.6437 0.326989 8.20771L8.20856 0.326989C8.64454 -0.108996 9.35715 -0.108996 9.79313 0.326989ZM8.26159 4.84378C8.26159 4.37794 8.63953 4 9.10537 4C9.57121 4 9.94915 4.3797 9.94915 4.84378V9.34394C9.94915 9.80978 9.57121 10.1877 9.13701 10.1877C8.70282 10.1877 8.26159 9.81154 8.26159 9.34394V4.84378ZM9.10537 13.5628C8.49503 13.5628 8.00002 13.0678 8.00002 12.4575C8.00002 11.8472 8.49468 11.3521 9.10537 11.3521C9.71605 11.3521 10.2107 11.8472 10.2107 12.4575C10.2093 13.0671 9.71711 13.5628 9.10537 13.5628Z\" fill=\"#0F1410\"/>\n </svg>\n`;\n labelContainer.appendChild(icon);\n\n const content = document.createElement(\"p\");\n content.className = \"content\";\n content.textContent = options.message || \"Error\";\n labelContainer.appendChild(content);\n\n const closeButtonContainer = document.createElement(\"div\");\n closeButtonContainer.className = \"close-button-container\";\n const closeButton = CloseButton(true);\n closeButtonContainer.appendChild(closeButton);\n toast.appendChild(closeButtonContainer);\n\n return toast;\n}\n","import { TransactionToastOptions } from \"../types\";\nimport { CloseButton } from \"../components/close-button\";\n\n// Inject transaction toast specific styles\nexport function injectTransactionStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-transaction-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-transaction-styles\";\n style.textContent = `\n /* Transaction Toast */\n .cartridge-toast.transaction {\n background-color: #161A17;\n border-radius: 8px;\n position: relative;\n overflow: hidden;\n }\n\n /* Expanded State */\n .cartridge-toast.transaction.expanded {\n width: 360px;\n }\n\n .cartridge-toast.transaction.expanded .toast-content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n gap: 8px;\n box-sizing: border-box;\n }\n\n .cartridge-toast.transaction.expanded .label-bar {\n display: flex;\n align-items: center;\n padding: 12px;\n gap: 8px;\n flex: 1 0 0;\n }\n\n .cartridge-toast.transaction.expanded .label-bar .label-container {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .cartridge-toast.transaction.expanded .label-bar .icon-container {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .cartridge-toast.transaction.expanded .label-bar p.status {\n color: #FFF;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n margin: 0;\n }\n\n .cartridge-toast.transaction.expanded .label-bar .activity-feed-container {\n display: flex;\n padding: 2px;\n align-items: center;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.08);\n }\n\n .cartridge-toast.transaction.expanded .label-bar .activity-icon {\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .cartridge-toast.transaction.expanded .label-bar .activity-label-container {\n display: flex;\n padding: 0 2px;\n justify-content: center;\n align-items: center;\n }\n\n .cartridge-toast.transaction.expanded .label-bar span.activity-label {\n color: #3F3;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 16px;\n }\n\n .cartridge-toast.transaction.expanded .close-button-container {\n display: flex;\n align-items: center;\n }\n\n /* Progress Bar - will be added dynamically */\n .cartridge-toast.transaction .cartridge-toast-progress-bar {\n background: rgba(255, 255, 255, 0.1);\n }\n\n .cartridge-toast.transaction .cartridge-toast-progress-bar-fill {\n background: #3F3;\n }\n\n /* Collapsed State */\n .cartridge-toast.transaction.collapsed {\n display: inline-flex;\n padding: 10px;\n align-items: center;\n justify-content: center;\n }\n\n .cartridge-toast.transaction.collapsed .collapsed-icon {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n /* Spinner Animation */\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n\n .cartridge-toast.transaction .icon-container.spinning,\n .cartridge-toast.transaction .collapsed-icon.spinning {\n animation: spin 1s linear infinite;\n }\n `;\n targetDoc.head.appendChild(style);\n}\n\n// Create transaction toast element\nexport function createTransactionToast(\n options: TransactionToastOptions,\n): HTMLElement {\n const toast = document.createElement(\"div\");\n toast.className = `cartridge-toast transaction ${options.isExpanded ? \"expanded\" : \"collapsed\"}`;\n\n if (options.isExpanded) {\n // Create main content container\n const toastContent = document.createElement(\"div\");\n toastContent.className = \"toast-content\";\n\n // Create label bar\n const labelBar = document.createElement(\"div\");\n labelBar.className = \"label-bar\";\n\n const labelContainer = document.createElement(\"div\");\n labelContainer.className = \"label-container\";\n\n // Create icon container\n const iconContainer = document.createElement(\"div\");\n iconContainer.className = \"icon-container\";\n if (options.status === \"confirming\") {\n iconContainer.classList.add(\"spinning\");\n iconContainer.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M11.1111 5.77756C11.1111 5.28673 11.5083 4.88867 12 4.88867C15.9278 4.88867 19.1111 8.07201 19.1111 11.9998C19.1111 13.2942 18.7639 14.5109 18.1583 15.5553C17.9139 15.9803 17.3694 16.1276 16.9194 15.8803C16.5194 15.6359 16.375 15.0914 16.6194 14.6414C17.0722 13.8831 17.3333 12.972 17.3333 11.9748C17.3333 9.03034 14.9444 6.64145 12 6.64145C11.5083 6.64145 11.1111 6.26839 11.1111 5.75256V5.77756Z\" fill=\"white\"/>\n <path opacity=\"0.25\" d=\"M11.975 6.66645C9.03058 6.66645 6.64169 9.03034 6.64169 11.9998C6.64169 14.9442 9.03058 17.3331 11.975 17.3331C13.9472 17.3331 15.6472 16.2914 16.5806 14.7331L16.5834 14.7359C16.3917 15.1498 16.5417 15.647 16.9195 15.8803C17.3695 16.1276 17.9139 15.9803 18.1584 15.5553C18.1639 15.547 18.1695 15.5387 18.1722 15.5303C16.9472 17.6692 14.6417 19.1109 12 19.1109C8.07225 19.1109 4.88892 15.9276 4.88892 11.9998C4.88892 8.07201 8.07225 4.88867 12 4.88867C11.5084 4.88867 11.1111 5.28673 11.1111 5.77756C11.1111 6.26839 11.5084 6.66645 12 6.66645H11.975Z\" fill=\"white\" fill-opacity=\"0.64\"/>\n </svg>\n `;\n } else {\n iconContainer.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M8.36382 18.5465L4 14.1827L5.45427 12.7284L8.36382 15.638L18.5457 5.45508L20 6.91032L8.36382 18.5465Z\" fill=\"#33FF33\"/>\n </svg>\n `;\n }\n\n // Create status text\n const status = document.createElement(\"p\");\n status.className = \"status\";\n status.textContent =\n options.status === \"confirming\" ? \"Confirming\" : \"Confirmed\";\n\n labelContainer.appendChild(iconContainer);\n labelContainer.appendChild(status);\n\n // Add activity label if provided\n if (options.label) {\n const activityFeedContainer = document.createElement(\"div\");\n activityFeedContainer.className = \"activity-feed-container\";\n\n const activityIcon = document.createElement(\"div\");\n activityIcon.className = \"activity-icon\";\n activityIcon.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M7.985 4.0002C8.23167 3.99353 8.45 4.1552 8.515 4.39353L9.74833 8.91353L10.0433 8.32353C10.2233 7.96187 10.5933 7.73353 10.9967 7.73353H12.8C13.095 7.73353 13.3333 7.97187 13.3333 8.26687C13.3333 8.56187 13.095 8.8002 12.8 8.8002H10.9967L10.0767 10.6385C9.97833 10.8369 9.76667 10.9519 9.54667 10.9302C9.32667 10.9085 9.14333 10.7535 9.085 10.5402L8.06167 6.78853L6.92167 12.1119C6.87 12.3519 6.66333 12.5252 6.41833 12.5335C6.17333 12.5419 5.955 12.3819 5.88833 12.1469L4.93167 8.8002H3.2C2.905 8.8002 2.66667 8.56187 2.66667 8.26687C2.66667 7.97187 2.905 7.73353 3.2 7.73353H4.93167C5.40833 7.73353 5.82667 8.04853 5.95667 8.50687L6.32667 9.8002L7.47833 4.42187C7.53 4.18187 7.74 4.00687 7.985 4.0002Z\" fill=\"#33FF33\"/>\n </svg>\n `;\n\n const activityLabelContainer = document.createElement(\"div\");\n activityLabelContainer.className = \"activity-label-container\";\n\n const activityLabel = document.createElement(\"span\");\n activityLabel.className = \"activity-label\";\n activityLabel.textContent = options.label;\n\n activityLabelContainer.appendChild(activityLabel);\n activityFeedContainer.appendChild(activityIcon);\n activityFeedContainer.appendChild(activityLabelContainer);\n labelContainer.appendChild(activityFeedContainer);\n }\n\n labelBar.appendChild(labelContainer);\n toastContent.appendChild(labelBar);\n\n // Create close button\n const closeButtonContainer = document.createElement(\"div\");\n closeButtonContainer.className = \"close-button-container\";\n const closeButton = CloseButton();\n closeButtonContainer.appendChild(closeButton);\n toastContent.appendChild(closeButtonContainer);\n\n toast.appendChild(toastContent);\n } else {\n // Collapsed state\n const collapsedIcon = document.createElement(\"div\");\n collapsedIcon.className = \"collapsed-icon\";\n\n if (options.status === \"confirming\") {\n collapsedIcon.classList.add(\"spinning\");\n collapsedIcon.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\">\n <path d=\"M12.9629 6.74016C12.9629 6.16752 13.4264 5.70312 14 5.70312C18.5824 5.70312 22.2963 9.41701 22.2963 13.9994C22.2963 15.5096 21.8912 16.9291 21.1847 18.1476C20.8995 18.6434 20.2643 18.8152 19.7393 18.5267C19.2727 18.2416 19.1041 17.6064 19.3893 17.0814C19.9176 16.1966 20.2222 15.1337 20.2222 13.9703C20.2222 10.5351 17.4352 7.74803 14 7.74803C13.4264 7.74803 12.9629 7.3128 12.9629 6.711V6.74016Z\" fill=\"white\"/>\n <path opacity=\"0.25\" d=\"M13.9709 7.7772C10.5357 7.7772 7.74864 10.5351 7.74864 13.9994C7.74864 17.4346 10.5357 20.2216 13.9709 20.2216C16.2718 20.2216 18.2551 19.0064 19.344 17.1883L19.3473 17.1916C19.1236 17.6744 19.2986 18.2545 19.7394 18.5267C20.2644 18.8152 20.8996 18.6434 21.1848 18.1476C21.1912 18.1378 21.1977 18.1281 21.201 18.1184C19.7718 20.6138 17.082 22.2957 14 22.2957C9.41762 22.2957 5.70374 18.5818 5.70374 13.9994C5.70374 9.41701 9.41762 5.70312 14 5.70312C13.4264 5.70312 12.963 6.16752 12.963 6.74016C12.963 7.3128 13.4264 7.7772 14 7.7772H13.9709Z\" fill=\"white\" fill-opacity=\"0.64\"/>\n </svg>\n `;\n } else {\n collapsedIcon.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\">\n <path d=\"M9.75779 21.6366L4.66667 16.5455L6.36332 14.8489L9.75779 18.2433L21.6367 6.36328L23.3333 8.06107L9.75779 21.6366Z\" fill=\"#33FF33\"/>\n </svg>\n `;\n }\n\n toast.appendChild(collapsedIcon);\n }\n\n return toast;\n}\n","import { sanitizeImageSrc } from \"../../utils\";\nimport { NetworkSwitchToastOptions } from \"../types\";\n\n// Inject network switch toast specific styles\nexport function injectNetworkSwitchStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-network-switch-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-network-switch-styles\";\n style.textContent = `\n /* Network Switch Toast */\n .cartridge-toast.network-switch {\n background-color: #161A17;\n border-radius: 8px;\n width: 360px;\n padding: 14px;\n gap: 12px;\n }\n\n .cartridge-toast.network-switch p.content {\n color: #ffffff;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px; /* 142.857% */\n }\n `;\n targetDoc.head.appendChild(style);\n}\n\n// Create network switch toast element\nexport function createNetworkSwitchToast(\n options: NetworkSwitchToastOptions,\n): HTMLElement {\n const toast = document.createElement(\"div\");\n toast.className = \"cartridge-toast network-switch\";\n\n const icon = document.createElement(options.networkIcon ? \"img\" : \"div\");\n icon.className = \"icon\";\n icon.style.width = \"24px\";\n icon.style.height = \"24px\";\n icon.style.aspectRatio = \"1/1\";\n if (options.networkIcon) {\n (icon as HTMLImageElement).src = sanitizeImageSrc(options.networkIcon);\n (icon as HTMLImageElement).alt = options.networkName;\n } else {\n (icon as HTMLDivElement).style.backgroundColor = \"#161A17\";\n (icon as HTMLDivElement).innerHTML = options.networkName\n .charAt(0)\n .toUpperCase();\n (icon as HTMLDivElement).style.color = \"#ffffff\";\n (icon as HTMLDivElement).style.fontWeight = \"600\";\n (icon as HTMLDivElement).style.fontSize = \"12px\";\n (icon as HTMLDivElement).style.lineHeight = \"16px\";\n (icon as HTMLDivElement).style.textAlign = \"center\";\n (icon as HTMLDivElement).style.textTransform = \"uppercase\";\n (icon as HTMLDivElement).style.borderRadius = \"4px\";\n (icon as HTMLDivElement).style.padding = \"4px\";\n }\n\n const content = document.createElement(\"p\");\n content.className = \"content\";\n content.textContent = `Switched to ${options.networkName}`;\n\n toast.appendChild(icon);\n toast.appendChild(content);\n\n return toast;\n}\n","import { AchievementToastOptions } from \"../types\";\nimport { CloseButton } from \"../components/close-button\";\n\n// Inject achievement toast specific styles\nexport function injectAchievementStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-achievement-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-achievement-styles\";\n style.textContent = `\n /* Achievement Toast */\n .cartridge-toast.achievement {\n background-color: #161A17;\n border-radius: 8px;\n width: 360px;\n padding: 12px;\n padding-bottom: 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: relative;\n overflow: hidden;\n min-height: 52px;\n box-sizing: border-box;\n }\n\n .cartridge-toast.achievement .image-content-container {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n }\n\n .cartridge-toast.achievement .image {\n width: 30px;\n height: 30px;\n aspect-ratio: 1/1;\n }\n\n .cartridge-toast.achievement .image-container {\n display: flex;\n padding: 5px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 4px;\n background: #161A17;\n }\n\n .cartridge-toast.achievement .content {\n display: flex;\n height: 40px;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n gap: 2px;\n }\n\n .cartridge-toast.achievement .title {\n color: #FFF;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n }\n\n .cartridge-toast.achievement .subtitle {\n color: #808080;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 16px;\n }\n\n .cartridge-toast.achievement .xp-section-container {\n display: flex;\n padding: 10px;\n flex-direction: column;\n align-items: flex-start;\n gap: 10px;\n }\n\n .cartridge-toast.achievement .xp-section {\n display: flex;\n align-items: center;\n gap: 2px;\n align-self: stretch;\n }\n\n .cartridge-toast.achievement .xp-section .xp-icon {\n width: 20px;\n height: 20px;\n aspect-ratio: 1/1;\n }\n\n .cartridge-toast.achievement .xp-section .xp-amount {\n color: #FFF;\n /* Inter/Regular 14px */\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px; /* 142.857% */\n }\n `;\n targetDoc.head.appendChild(style);\n}\n\n// Create achievement toast element\nexport function createAchievementToast(\n options: AchievementToastOptions,\n): HTMLElement {\n const toast = document.createElement(\"div\");\n toast.className = \"cartridge-toast achievement\";\n\n const imageContentContainer = document.createElement(\"div\");\n imageContentContainer.className = \"image-content-container\";\n\n const imageContainer = document.createElement(\"div\");\n imageContainer.className = \"image-container\";\n\n const icon = getAchievementIcon(options.isDraft);\n icon.className = \"image\";\n imageContainer.appendChild(icon);\n\n const content = document.createElement(\"div\");\n content.className = \"content\";\n\n const title = document.createElement(\"p\");\n title.className = \"title\";\n title.textContent = options.title;\n\n const subtitle = document.createElement(\"p\");\n subtitle.className = \"subtitle\";\n subtitle.textContent = options.subtitle || \"Earned!\";\n\n content.appendChild(title);\n content.appendChild(subtitle);\n\n imageContentContainer.appendChild(imageContainer);\n imageContentContainer.appendChild(content);\n\n // XP section on the right (icon + amount)\n const xpSectionContainer = document.createElement(\"div\");\n xpSectionContainer.className = \"xp-section-container\";\n\n const xpSection = document.createElement(\"div\");\n xpSection.className = \"xp-section\";\n\n const xpIcon = getXPIcon(!options.isDraft);\n xpIcon.setAttribute(\"class\", \"xp-icon\");\n xpSection.appendChild(xpIcon);\n\n const xpAmount = document.createElement(\"span\");\n xpAmount.className = \"xp-amount\";\n xpAmount.textContent = `${options.xpAmount}`;\n xpSection.appendChild(xpAmount);\n\n xpSectionContainer.appendChild(xpSection);\n\n const closeButton = CloseButton(false);\n\n toast.appendChild(imageContentContainer);\n toast.appendChild(xpSectionContainer);\n toast.appendChild(closeButton);\n\n return toast;\n}\n\nconst getAchievementIcon = (isDraft = false) => {\n const container = document.createElement(\"div\");\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"width\", \"34\");\n svg.setAttribute(\"height\", \"34\");\n svg.setAttribute(\"viewBox\", \"0 0 30 30\");\n svg.style.width = \"100%\";\n svg.style.height = \"100%\";\n\n switch (isDraft) {\n case true:\n svg.innerHTML = `\n <path d=\"M26.25 5.15625C26.25 10.1484 22.5322 14.2749 17.7158 14.9121C17.4038 12.5654 16.3711 10.4473 14.8462 8.79053C16.5293 5.78467 19.7461 3.75 23.4375 3.75H24.8438C25.6216 3.75 26.25 4.37842 26.25 5.15625ZM3.75 7.96875C3.75 7.19092 4.37842 6.5625 5.15625 6.5625H6.5625C11.9985 6.5625 16.4062 10.9702 16.4062 16.4062V17.8125V24.8438C16.4062 25.6216 15.7778 26.25 15 26.25C14.2222 26.25 13.5938 25.6216 13.5938 24.8438V17.8125C8.15771 17.8125 3.75 13.4048 3.75 7.96875Z\" fill=\"#33FF33\"/>\n `;\n break;\n default:\n svg.innerHTML = `\n <path d=\"M9.559 6.47461C9.73478 6.23633 10.016 6.0918 10.3129 6.0918H19.688C19.9848 6.0918 20.2661 6.23242 20.4419 6.47461L24.8169 12.4121C25.0825 12.7715 25.0552 13.2676 24.7583 13.5996L15.6957 23.5997C15.5161 23.795 15.2661 23.9083 15.0004 23.9083C14.7348 23.9083 14.4848 23.795 14.3051 23.5997L5.24257 13.5996C4.94179 13.2676 4.91835 12.7715 5.18398 12.4121L9.559 6.47461ZM11.0629 8.02931C10.934 8.12696 10.8988 8.30275 10.9809 8.43946L13.2231 12.1739L7.47305 12.6543C7.31289 12.666 7.18789 12.8028 7.18789 12.9668C7.18789 13.1309 7.31289 13.2637 7.47305 13.2793L14.9731 13.9043C14.9887 13.9043 15.0082 13.9043 15.0239 13.9043L22.5239 13.2793C22.6841 13.2676 22.8091 13.1309 22.8091 12.9668C22.8091 12.8028 22.6841 12.67 22.5239 12.6543L16.7778 12.1778L19.02 8.44337C19.102 8.30665 19.0669 8.12696 18.9379 8.03321C18.809 7.93946 18.6294 7.95509 18.52 8.07228L15.0004 11.8809L11.4809 8.06837C11.3715 7.95118 11.1918 7.93556 11.0629 8.02931Z\" fill=\"#D3A4E5\"/>\n `;\n }\n\n container.appendChild(svg);\n return container;\n};\n\n/**\n *\n * @param isMainnet isMainnet = !isDraft\n * @returns\n */\nconst getXPIcon = (isMainnet: boolean) => {\n const container = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"svg\",\n );\n container.setAttribute(\"width\", \"12\");\n container.setAttribute(\"height\", \"12\");\n container.setAttribute(\"viewBox\", \"0 0 20 20\");\n\n switch (isMainnet) {\n case true:\n container.innerHTML = `\n <path d=\"M15 12.5C15.125 12.5 15.2373 12.5781 15.2815 12.6953L15.8333 14.1667L17.3046 14.7184C17.4218 14.7627 17.5 14.875 17.5 15C17.5 15.125 17.4218 15.2373 17.3046 15.2816L15.8333 15.8333L15.2815 17.3047C15.2373 17.4219 15.125 17.5 15 17.5C14.875 17.5 14.7627 17.4219 14.7184 17.3047L14.1666 15.8333L12.6953 15.2816C12.5781 15.2373 12.5 15.125 12.5 15C12.5 14.875 12.5781 14.7627 12.6953 14.7184L14.1666 14.1667L14.7184 12.6953C14.7627 12.5781 14.875 12.5 15 12.5Z\" fill=\"white\"/>\n <path d=\"M8.33492 3.33333C8.55184 3.33333 8.75177 3.45943 8.84273 3.65885L10.6217 7.51139C10.6632 7.60119 10.7353 7.67335 10.8252 7.71484L14.6744 9.49056C14.8739 9.58152 15 9.78146 15 9.99837C14.9999 10.2152 14.8738 10.4144 14.6744 10.5054L10.8219 12.2852C10.7321 12.3267 10.66 12.3988 10.6184 12.4886L8.83866 16.3411C8.74772 16.5405 8.54853 16.6666 8.33167 16.6667C8.11475 16.6667 7.91482 16.5406 7.82385 16.3411L6.04814 12.4919C6.00665 12.402 5.93449 12.3299 5.84469 12.2884L1.99215 10.5094C1.79272 10.4185 1.66663 10.222 1.66663 10.0016C1.66667 9.78126 1.79276 9.58151 1.99215 9.49056L5.84143 7.71159C5.93113 7.67013 6.00335 7.59781 6.04488 7.50814L7.82792 3.65885C7.91887 3.45947 8.11805 3.33338 8.33492 3.33333Z\" fill=\"white\"/>\n <path d=\"M15 2.5C15.125 2.5 15.2373 2.57812 15.2815 2.69531L15.8333 4.16667L17.3046 4.71842C17.4218 4.7627 17.5 4.875 17.5 5C17.5 5.125 17.4218 5.2373 17.3046 5.28158L15.8333 5.83333L15.2815 7.30469C15.2373 7.42188 15.125 7.5 15 7.5C14.875 7.5 14.7627 7.42188 14.7184 7.30469L14.1666 5.83333L12.6953 5.28158C12.5781 5.2373 12.5 5.125 12.5 5C12.5 4.875 12.5781 4.7627 12.6953 4.71842L14.1666 4.16667L14.7184 2.69531C14.7627 2.57812 14.875 2.5 15 2.5Z\" fill=\"white\"/>\n `;\n break;\n default:\n container.innerHTML = `\n <path d=\"M10.4094 15.4897C10.411 15.4905 10.4126 15.4914 10.4143 15.4922L10.4314 15.4995C10.6358 15.6012 10.726 15.8431 10.6397 16.0537L10.6356 16.0635C10.6329 16.0701 10.6305 16.0772 10.6275 16.0838L10.5087 16.3418C10.495 16.3716 10.478 16.3992 10.4598 16.4256C10.4582 16.428 10.4558 16.4306 10.4541 16.4329C10.4476 16.4421 10.4389 16.4494 10.4322 16.4582C10.4242 16.4681 10.4164 16.4781 10.4078 16.4875C10.402 16.4939 10.3962 16.5004 10.3907 16.507C10.3874 16.5102 10.3843 16.5136 10.3809 16.5168C10.3787 16.5181 10.377 16.5201 10.3752 16.5216C10.373 16.5236 10.3701 16.5246 10.3679 16.5265C10.3542 16.5386 10.3395 16.5492 10.3247 16.5599C10.303 16.5758 10.2802 16.5897 10.2564 16.6022C10.2458 16.6077 10.2356 16.6137 10.2246 16.6185C10.2214 16.6199 10.218 16.6215 10.2149 16.6234C10.2122 16.6245 10.2095 16.6255 10.2067 16.6266C10.201 16.6289 10.1954 16.6294 10.1897 16.6315C10.1684 16.6393 10.1468 16.6459 10.1246 16.651C10.1207 16.6519 10.1169 16.6529 10.1132 16.6543C10.1085 16.6552 10.104 16.6567 10.0993 16.6576C10.0969 16.6576 10.0944 16.658 10.092 16.6584C10.0653 16.6629 10.0382 16.6651 10.0106 16.6657C10.0076 16.6657 10.0047 16.6673 10.0017 16.6673L10 16.6665L9.99841 16.6673C9.99542 16.6673 9.99245 16.6657 9.98946 16.6657C9.96191 16.6651 9.93482 16.6629 9.90808 16.6584C9.90541 16.6579 9.90266 16.6577 9.89994 16.6576C9.89527 16.6567 9.89075 16.6553 9.88611 16.6543C9.88265 16.653 9.87909 16.6519 9.87553 16.651C9.85329 16.6459 9.83172 16.6393 9.81042 16.6315C9.80464 16.6294 9.79825 16.6289 9.79252 16.6266C9.7898 16.6255 9.78709 16.6245 9.78438 16.6234C9.78147 16.6216 9.77852 16.6199 9.77543 16.6185C9.76453 16.6137 9.75425 16.6077 9.74369 16.6022C9.71984 16.5897 9.69713 16.5758 9.67533 16.5599C9.66058 16.5492 9.64588 16.5386 9.6322 16.5265C9.63002 16.5246 9.62704 16.5236 9.62488 16.5216C9.62295 16.5199 9.6207 16.5182 9.61837 16.5168C9.61499 16.5136 9.6119 16.5102 9.6086 16.507L9.56791 16.4582C9.56115 16.4494 9.55246 16.4421 9.54594 16.4329C9.54426 16.4306 9.54187 16.428 9.54024 16.4256C9.52204 16.3992 9.50507 16.3716 9.49141 16.3418L9.37179 16.0838C9.36875 16.0772 9.36715 16.0701 9.36446 16.0635L9.35958 16.0537C9.27358 15.8434 9.36397 15.6014 9.56791 15.4995L9.58582 15.4922C9.58746 15.4914 9.58904 15.4905 9.5907 15.4897L9.82237 15.3823C9.93257 15.3312 10.0596 15.3307 10.1702 15.381L10.4094 15.4897Z\" fill=\"white\"/>\n <path d=\"M8.6711 13.4959C8.89565 13.3923 9.16217 13.4896 9.26599 13.714L9.50281 14.23C9.58063 14.3981 9.54569 14.5899 9.42875 14.7191C9.40896 14.741 9.38639 14.7606 9.36202 14.7785C9.33856 14.7956 9.31368 14.8114 9.28634 14.8241C9.22958 14.8502 9.17014 14.8624 9.11137 14.8639C9.0348 14.8666 8.95986 14.8483 8.89246 14.8143C8.80654 14.7705 8.73345 14.7003 8.68982 14.606L8.45219 14.09L8.45138 14.0892L8.45056 14.0868C8.35597 13.8818 8.42976 13.6441 8.61414 13.5252C8.6199 13.5235 8.62553 13.5214 8.63123 13.5195C8.64439 13.5117 8.6569 13.5025 8.6711 13.4959Z\" fill=\"white\"/>\n <path d=\"M10.7341 13.714C10.8379 13.4896 11.1044 13.3923 11.329 13.4959C11.3432 13.5025 11.3557 13.5117 11.3689 13.5195C11.3743 13.5213 11.3796 13.5236 11.3851 13.5252C11.5699 13.644 11.6442 13.8816 11.5495 14.0868L11.5487 14.0892L11.5479 14.09L11.3103 14.606C11.2666 14.7003 11.1935 14.7705 11.1076 14.8143C11.0402 14.8483 10.9653 14.8666 10.8887 14.8639C10.8299 14.8624 10.7705 14.8502 10.7137 14.8241C10.6862 14.8113 10.6609 14.7957 10.6372 14.7785C10.6131 14.7607 10.591 14.7409 10.5713 14.7191C10.5643 14.7113 10.5582 14.7028 10.5518 14.6947C10.5296 14.6666 10.5113 14.6365 10.4965 14.6043C10.4442 14.4895 10.4401 14.3534 10.4973 14.23L10.7341 13.714Z\" fill=\"white\"/>\n <path d=\"M7.17289 11.6388C7.27684 11.4148 7.54356 11.318 7.76778 11.4215L8.02576 11.5404L8.13888 11.5916C8.25956 11.6472 8.35637 11.7446 8.41231 11.8651L8.5824 12.2337C8.68602 12.4579 8.5892 12.7239 8.36511 12.8278C8.34249 12.8382 8.31926 12.8455 8.29594 12.8514L8.29106 12.8522C8.26967 12.8573 8.24828 12.8613 8.22677 12.8636C8.2011 12.8667 8.1757 12.8673 8.15027 12.866C7.98977 12.8578 7.83918 12.7648 7.76697 12.6089L7.72953 12.5283C7.67627 12.4133 7.58336 12.3211 7.4683 12.2679L7.38936 12.2313C7.17378 12.1316 7.07701 11.8826 7.1615 11.6641C7.16304 11.6616 7.16492 11.6593 7.16638 11.6567C7.16879 11.6509 7.17021 11.6446 7.17289 11.6388Z\" fill=\"white\"/>\n <path d=\"M12.2323 11.4215C12.4565 11.318 12.7232 11.4148 12.8272 11.6388C12.8299 11.6446 12.8313 11.6509 12.8337 11.6567C12.8351 11.6592 12.8363 11.6617 12.8378 11.6641C12.9224 11.8827 12.8264 12.1315 12.6107 12.2313L12.5318 12.2679C12.4167 12.3211 12.3238 12.4133 12.2705 12.5283L12.2331 12.6089C12.1505 12.7873 11.9652 12.8837 11.7798 12.8644C11.7774 12.8642 11.775 12.8639 11.7725 12.8636C11.7261 12.8585 11.6796 12.8484 11.635 12.8278C11.4109 12.7239 11.3141 12.4579 11.4177 12.2337L11.5878 11.8651C11.6437 11.7446 11.7405 11.6472 11.8612 11.5916L11.9743 11.5404L12.2323 11.4215Z\" fill=\"white\"/>\n <path d=\"M10 7.50065C10.125 7.50065 10.2373 7.57878 10.2816 7.69596L10.7666 8.98991C10.8089 9.10259 10.8981 9.1918 11.0108 9.23405L12.3047 9.71908C12.4219 9.76335 12.5 9.87565 12.5 10.0007C12.5 10.1257 12.4219 10.238 12.3047 10.2822L11.0108 10.7673C10.8981 10.8095 10.8089 10.8987 10.7666 11.0114L10.2816 12.3053C10.2373 12.4225 10.125 12.5007 10 12.5007C9.87504 12.5007 9.76274 12.4225 9.71846 12.3053L9.23344 11.0114C9.19119 10.8987 9.10197 10.8095 8.9893 10.7673L7.69535 10.2822C7.57817 10.238 7.50004 10.1257 7.50004 10.0007C7.50004 9.87565 7.57817 9.76335 7.69535 9.71908L8.9893 9.23405C9.10197 9.1918 9.19119 9.10259 9.23344 8.98991L9.71846 7.69596C9.76274 7.57878 9.87504 7.50065 10 7.50065Z\" fill=\"white\"/>\n <path d=\"M5.17582 10.7184C5.27971 10.4938 5.54608 10.3957 5.77071 10.4995L5.87162 10.5459L5.87325 10.5467L6.28992 10.738C6.5069 10.8384 6.60331 11.0913 6.51534 11.3109C6.51294 11.3167 6.5115 11.323 6.50883 11.3288C6.50648 11.3339 6.50321 11.3385 6.50069 11.3434C6.48189 11.3813 6.45788 11.4144 6.4307 11.4443C6.36347 11.5167 6.2748 11.5643 6.17924 11.5811C6.09138 11.5974 5.998 11.5887 5.91069 11.5485L5.39473 11.3109C5.19818 11.22 5.09874 11.0044 5.14653 10.8014L5.17582 10.7184Z\" fill=\"white\"/>\n <path d=\"M14.2294 10.4995C14.454 10.3957 14.7204 10.4938 14.8243 10.7184L14.8536 10.8014C14.9013 11.0044 14.8019 11.22 14.6053 11.3109L14.0894 11.5485C14.0021 11.5887 13.9087 11.5974 13.8208 11.5811C13.6811 11.5566 13.5551 11.4671 13.4913 11.3288C13.4886 11.3231 13.4879 11.3166 13.4856 11.3109C13.3974 11.0913 13.4931 10.8384 13.7102 10.738L14.1268 10.5467L14.1285 10.5459L14.2294 10.4995Z\" fill=\"white\"/>\n <path d=\"M3.96651 9.35205C4.17017 9.274 4.401 9.36373 4.49711 9.56201L4.51013 9.59049C4.51134 9.593 4.51303 9.59528 4.5142 9.59782L4.61902 9.83038C4.66826 9.93964 4.66807 10.0648 4.61849 10.1739L4.5142 10.4035C4.51313 10.4058 4.51123 10.4077 4.51013 10.41L4.49548 10.4409C4.39952 10.6364 4.17327 10.7248 3.97139 10.6501L3.94698 10.6387C3.93704 10.6351 3.92689 10.6319 3.91687 10.6281L3.65889 10.5093C3.63045 10.4963 3.60365 10.4809 3.57833 10.4637C3.57288 10.46 3.56816 10.4554 3.56287 10.4515C3.53866 10.4339 3.51543 10.4147 3.49451 10.3937C3.48924 10.3884 3.48408 10.383 3.47904 10.3774C3.47489 10.3729 3.47165 10.3675 3.46765 10.3628C3.4513 10.3437 3.43652 10.3236 3.42289 10.3026C3.41862 10.2959 3.41467 10.2891 3.41069 10.2822C3.39638 10.2579 3.38371 10.2329 3.37325 10.2065C3.37142 10.2019 3.36926 10.1974 3.36755 10.1927C3.35907 10.1698 3.35269 10.1461 3.34721 10.1219C3.34543 10.1138 3.34375 10.1057 3.34233 10.0975C3.33705 10.0664 3.33337 10.0346 3.33337 10.0023C3.33337 10.0004 3.33417 9.99848 3.33419 9.99658C3.33437 9.96506 3.33718 9.93408 3.34233 9.90381C3.34408 9.89365 3.34653 9.8837 3.34884 9.8737C3.3539 9.8524 3.35932 9.83138 3.36674 9.81104C3.37028 9.80114 3.37405 9.7914 3.37813 9.78174C3.38778 9.75923 3.39902 9.73761 3.4115 9.71663C3.41532 9.71013 3.41882 9.70344 3.42289 9.6971C3.43664 9.67601 3.45197 9.65601 3.46847 9.63688C3.47209 9.63263 3.47529 9.62801 3.47904 9.62386V9.62223C3.48395 9.61685 3.48938 9.61196 3.49451 9.60677C3.51639 9.58487 3.54076 9.56475 3.56612 9.54655C3.57053 9.54339 3.57463 9.53982 3.57914 9.53678C3.60419 9.51987 3.6308 9.50487 3.65889 9.49202L3.9185 9.37158C3.92793 9.368 3.9376 9.36521 3.94698 9.36182L3.96651 9.35205Z\" fill=\"white\"/>\n <path d=\"M15.5022 9.56201C15.5981 9.36374 15.8292 9.27444 16.0328 9.35205L16.0531 9.36182C16.0622 9.36513 16.0716 9.36813 16.0808 9.37158L16.3412 9.49202C16.3691 9.50477 16.3952 9.52002 16.4201 9.53678C16.4248 9.53994 16.4294 9.54326 16.434 9.54655C16.4592 9.56464 16.483 9.58503 16.5048 9.60677C16.5099 9.61196 16.5153 9.61685 16.5202 9.62223L16.521 9.62386C16.5248 9.62801 16.528 9.63263 16.5316 9.63688C16.5481 9.65601 16.5634 9.67601 16.5772 9.6971C16.5813 9.70344 16.5848 9.71013 16.5886 9.71663C16.601 9.73751 16.6115 9.75934 16.6211 9.78174C16.6377 9.82081 16.6504 9.86145 16.6578 9.90381C16.6629 9.93408 16.6657 9.96506 16.6659 9.99658C16.6659 9.99848 16.6667 10.0004 16.6667 10.0023C16.6667 10.0735 16.6521 10.1423 16.6268 10.2065C16.6164 10.2329 16.6037 10.2579 16.5894 10.2822C16.5854 10.2891 16.5815 10.2959 16.5772 10.3026C16.5636 10.3236 16.5488 10.3437 16.5324 10.3628C16.5284 10.3675 16.5244 10.3729 16.5202 10.3774C16.4909 10.4096 16.4584 10.4389 16.4218 10.4637C16.3964 10.4809 16.3696 10.4963 16.3412 10.5093L16.0824 10.6281C16.0726 10.6317 16.0628 10.6352 16.0531 10.6387L16.0279 10.6501C15.8261 10.7244 15.5995 10.6363 15.5038 10.4409L15.4899 10.41C15.4888 10.4077 15.4869 10.4058 15.4859 10.4035L15.3814 10.176C15.3309 10.0662 15.3306 9.93988 15.3806 9.82986L15.4859 9.59782C15.4871 9.59528 15.4887 9.593 15.4899 9.59049L15.5022 9.56201Z\" fill=\"white\"/>\n <path d=\"M6.17354 8.41781C6.24076 8.42866 6.30491 8.45486 6.36072 8.4943C6.36594 8.49804 6.37111 8.50173 6.37618 8.5057C6.39298 8.51868 6.40844 8.5334 6.42338 8.54883C6.45414 8.58106 6.48087 8.61756 6.50151 8.6595C6.50346 8.6634 6.50616 8.66693 6.50802 8.6709C6.6098 8.89465 6.51325 9.16001 6.28992 9.26335L5.87325 9.45459L5.77071 9.50179C5.54608 9.60561 5.27971 9.50747 5.17582 9.28288C5.16739 9.26458 5.16208 9.24546 5.15629 9.22673C5.09213 9.01602 5.18924 8.78544 5.39473 8.69043L5.91069 8.4528C5.99604 8.41351 6.08742 8.40301 6.17354 8.41781Z\" fill=\"white\"/>\n <path d=\"M13.8265 8.41781C13.9127 8.40301 14.004 8.41351 14.0894 8.4528L14.6053 8.69043C14.8108 8.78544 14.9079 9.01602 14.8438 9.22673C14.838 9.24546 14.8327 9.26458 14.8243 9.28288C14.7204 9.50747 14.454 9.60561 14.2294 9.50179L14.1268 9.45459L13.7102 9.26335C13.4869 9.16006 13.3897 8.89459 13.4913 8.6709C13.5562 8.53141 13.6849 8.44067 13.8265 8.41781Z\" fill=\"white\"/>\n <path d=\"M8.08191 7.14258C8.12914 7.13285 8.17781 7.13014 8.22677 7.13607C8.24823 7.1384 8.26974 7.14218 8.29106 7.14746L8.29594 7.14827C8.31935 7.15435 8.34238 7.16303 8.36511 7.1735C8.56102 7.26434 8.65923 7.47893 8.61169 7.68131C8.60496 7.70958 8.59583 7.73771 8.58321 7.76514L8.41231 8.13623C8.35637 8.25674 8.25956 8.35409 8.13888 8.40967L8.02576 8.46094L7.76778 8.57975C7.54356 8.6833 7.27684 8.58647 7.17289 8.36247C7.17011 8.35645 7.16888 8.34982 7.16638 8.34375C7.16463 8.34069 7.16259 8.33779 7.16069 8.3348C7.07785 8.11681 7.17457 7.86935 7.38936 7.77002L7.4683 7.7334C7.58336 7.68022 7.67627 7.58801 7.72953 7.47298L7.76697 7.39242C7.82881 7.25894 7.9481 7.17047 8.08191 7.14258Z\" fill=\"white\"/>\n <path d=\"M11.7798 7.13525C11.9651 7.11604 12.1505 7.21406 12.2331 7.39242L12.2705 7.47298C12.3238 7.58801 12.4167 7.68022 12.5318 7.7334L12.6107 7.77002C12.8256 7.86939 12.9216 8.11674 12.8386 8.3348C12.8368 8.33767 12.8354 8.34081 12.8337 8.34375C12.8312 8.34982 12.83 8.35645 12.8272 8.36247C12.8018 8.41716 12.7665 8.46398 12.7246 8.50244C12.7224 8.50452 12.7197 8.5061 12.7173 8.50814C12.588 8.62224 12.3988 8.65664 12.2323 8.57975L11.9743 8.46094L11.8612 8.40967C11.7405 8.35409 11.6437 8.25674 11.5878 8.13623L11.4169 7.76514C11.4042 7.73766 11.3943 7.70964 11.3876 7.68131C11.3401 7.47899 11.4391 7.26431 11.635 7.1735C11.6797 7.1529 11.7261 7.14117 11.7725 7.13607C11.7749 7.13577 11.7774 7.13551 11.7798 7.13525Z\" fill=\"white\"/>\n <path d=\"M9.18949 5.14632C9.1935 5.14715 9.19771 5.14701 9.2017 5.14795C9.22997 5.15459 9.25812 5.16391 9.28552 5.17643C9.31373 5.18956 9.33961 5.20577 9.36365 5.22363C9.45286 5.28964 9.51067 5.38576 9.53292 5.49056C9.55232 5.58202 9.54494 5.67999 9.50281 5.77132L9.26599 6.28727C9.16217 6.5117 8.89565 6.60897 8.6711 6.50537C8.65677 6.49874 8.6445 6.48886 8.63123 6.48096C8.62472 6.47885 8.61831 6.47634 8.61169 6.47445C8.42914 6.35505 8.35639 6.11858 8.45056 5.91455L8.51648 5.77214L8.68982 5.39534C8.71856 5.33319 8.75929 5.2802 8.80863 5.23909C8.8927 5.16966 9.00036 5.13309 9.10974 5.13656H9.11381C9.13907 5.13735 9.16427 5.14113 9.18949 5.14632Z\" fill=\"white\"/>\n <path d=\"M10.8903 5.13656C10.9995 5.13309 11.1066 5.16992 11.1906 5.23909C11.2402 5.28026 11.2814 5.33298 11.3103 5.39534L11.4836 5.77214L11.5495 5.91455C11.6438 6.1188 11.5706 6.35517 11.3876 6.47445C11.3812 6.47627 11.3751 6.47893 11.3689 6.48096C11.3556 6.48886 11.3433 6.49874 11.329 6.50537C11.1044 6.60897 10.8379 6.5117 10.7341 6.28727L10.4973 5.77132C10.4551 5.67999 10.4478 5.58202 10.4672 5.49056C10.4894 5.38576 10.5472 5.28964 10.6364 5.22363C10.6603 5.20591 10.6858 5.1895 10.7137 5.17643C10.7696 5.15079 10.8284 5.13837 10.8863 5.13656H10.8903Z\" fill=\"white\"/>\n <path d=\"M10.0106 3.3348C10.0381 3.3354 10.0653 3.33759 10.092 3.34212H10.0953C10.1029 3.34343 10.1105 3.34539 10.118 3.34701C10.1203 3.34772 10.1223 3.34892 10.1246 3.34945C10.1468 3.3546 10.1684 3.36122 10.1897 3.36898C10.1952 3.37101 10.2012 3.37179 10.2067 3.37386C10.2103 3.37525 10.2138 3.37647 10.2173 3.37793C10.2198 3.37925 10.2221 3.38088 10.2246 3.382C10.2355 3.38682 10.2458 3.39278 10.2564 3.39827C10.2802 3.41078 10.303 3.42474 10.3247 3.44059C10.3395 3.45123 10.3542 3.46189 10.3679 3.47396C10.3702 3.47599 10.3729 3.47758 10.3752 3.47965C10.3769 3.48116 10.3789 3.4825 10.3809 3.48372C10.3847 3.48725 10.3886 3.49067 10.3923 3.4943C10.3975 3.50048 10.4024 3.50699 10.4078 3.51302C10.4164 3.52234 10.4242 3.53238 10.4322 3.54232C10.4391 3.55124 10.4475 3.55906 10.4541 3.56836C10.4558 3.5707 10.4582 3.57333 10.4598 3.57568C10.478 3.60208 10.495 3.62965 10.5087 3.65951L10.6283 3.91748C10.6312 3.92383 10.633 3.9306 10.6356 3.93701L10.6389 3.94434C10.7268 4.15432 10.6373 4.39518 10.4346 4.49854L10.4167 4.50749C10.4142 4.5087 10.4119 4.51039 10.4094 4.51156L10.1763 4.61897C10.0664 4.66962 9.93997 4.67 9.82978 4.62002L9.5907 4.51156C9.58816 4.51039 9.58588 4.5087 9.58337 4.50749L9.56466 4.49854C9.36247 4.39504 9.2728 4.15403 9.36039 3.94434L9.36446 3.93701C9.36707 3.9306 9.36886 3.92383 9.37179 3.91748L9.49141 3.65951C9.50507 3.62965 9.52204 3.60208 9.54024 3.57568C9.54187 3.57333 9.54426 3.5707 9.54594 3.56836C9.55259 3.55906 9.56101 3.55124 9.56791 3.54232C9.57592 3.53238 9.5837 3.52234 9.59233 3.51302C9.59759 3.50712 9.60188 3.50036 9.60697 3.4943C9.61067 3.49066 9.61457 3.48725 9.61837 3.48372C9.62059 3.48237 9.62305 3.48131 9.62488 3.47965C9.62717 3.47758 9.62988 3.47599 9.6322 3.47396C9.64588 3.46189 9.66058 3.45123 9.67533 3.44059C9.69711 3.42474 9.71986 3.41078 9.74369 3.39827C9.75424 3.39278 9.76454 3.38682 9.77543 3.382C9.77776 3.38097 9.77969 3.37914 9.78194 3.37793C9.78543 3.37647 9.78901 3.37525 9.79252 3.37386C9.79826 3.37162 9.80465 3.3711 9.81042 3.36898C9.8317 3.36122 9.85332 3.3546 9.87553 3.34945C9.87753 3.34898 9.87926 3.34763 9.88123 3.34701C9.88881 3.34538 9.89634 3.34344 9.90401 3.34212H9.90808C9.93478 3.33759 9.96195 3.3354 9.98946 3.3348C9.99245 3.33474 9.99542 3.33398 9.99841 3.33398H10.0017C10.0047 3.33398 10.0076 3.33474 10.0106 3.3348Z\" fill=\"white\"/>\n `;\n }\n\n return container;\n};\n","import { MarketplaceToastOptions } from \"../types\";\nimport { CloseButton } from \"../components/close-button\";\nimport { sanitizeImageSrc } from \"../../utils\";\n\n// Inject marketplace toast specific styles\nexport function injectMarketplaceStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-marketplace-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-marketplace-styles\";\n style.textContent = `\n /* Marketplace Toast */\n .cartridge-toast.marketplace {\n background-color: #1E221F;\n border-radius: 4px;\n width: 400px;\n padding: 12px;\n padding-bottom: 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: relative;\n overflow: hidden;\n box-sizing: border-box;\n }\n\n .cartridge-toast.marketplace .image-container {\n display: flex;\n padding: 3px;\n align-items: center;\n gap: 10px;\n border-radius: 4px;\n background: #161A17;\n }\n\n .cartridge-toast.marketplace .image-content-container {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .cartridge-toast.marketplace .image {\n display: flex;\n width: 34px;\n height: 34px;\n padding: 2px;\n justify-content: center;\n align-items: center;\n aspect-ratio: 1/1;\n border-radius: 2px;\n background: #000;\n flex-shrink: 0;\n }\n\n .cartridge-toast.marketplace .content {\n display: flex;\n height: 40px;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n gap: 2px;\n }\n\n .cartridge-toast.marketplace .title {\n color: #FFF;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px; /* 142.857% */\n }\n\n .cartridge-toast.marketplace .item-name {\n color: #808080;\n text-align: center;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 16px; /* 133.333% */\n }\n\n .cartridge-toast.marketplace .close-button-container {\n display: flex;\n padding: 4px;\n align-items: center;\n gap: 10px;\n }\n `;\n targetDoc.head.appendChild(style);\n}\n\n// Create marketplace toast element\nexport function createMarketplaceToast(\n options: MarketplaceToastOptions,\n): HTMLElement {\n const toast = document.createElement(\"div\");\n toast.className = \"cartridge-toast marketplace\";\n\n const imageContentContainer = document.createElement(\"div\");\n imageContentContainer.className = \"image-content-container\";\n\n const imageContainer = document.createElement(\"div\");\n imageContainer.className = \"image-container\";\n\n const image = document.createElement(\"img\");\n image.className = \"image\";\n image.src = sanitizeImageSrc(options.itemImages[0]);\n image.alt = options.itemNames[0];\n imageContainer.appendChild(image);\n\n const content = document.createElement(\"div\");\n content.className = \"content\";\n\n const actionText = {\n purchased: \"Purchased!\",\n sold: \"Sold!\",\n sent: \"Sent!\",\n listed: \"Listed!\",\n unlisted: \"Unlisted!\",\n };\n\n const title = document.createElement(\"p\");\n title.className = \"title\";\n title.textContent = actionText[options.action];\n\n const itemName = document.createElement(\"p\");\n itemName.className = \"item-name\";\n itemName.textContent = options.itemNames[0];\n\n content.appendChild(title);\n content.appendChild(itemName);\n\n imageContentContainer.appendChild(imageContainer);\n imageContentContainer.appendChild(content);\n\n const closeButtonContainer = document.createElement(\"div\");\n closeButtonContainer.className = \"close-button-container\";\n const closeButton = CloseButton(false);\n closeButtonContainer.appendChild(closeButton);\n\n toast.appendChild(imageContentContainer);\n toast.appendChild(closeButtonContainer);\n\n return toast;\n}\n","import { QuestToastOptions } from \"../types\";\nimport { CloseButton } from \"../components/close-button\";\n\n// Inject quest toast specific styles\nexport function injectQuestStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-quest-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-quest-styles\";\n style.textContent = `\n /* Quest Toast */\n .cartridge-toast.quest {\n background-color: #161A17;\n border-radius: 8px;\n width: 360px;\n padding: 12px;\n padding-bottom: 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: relative;\n overflow: hidden;\n min-height: 52px;\n box-sizing: border-box;\n }\n\n .cartridge-toast.quest .image-content-container {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n }\n\n .cartridge-toast.quest .image {\n width: 30px;\n height: 30px;\n aspect-ratio: 1/1;\n }\n\n .cartridge-toast.quest .image-container {\n display: flex;\n padding: 5px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 4px;\n background: #161A17;\n }\n\n .cartridge-toast.quest .content {\n display: flex;\n height: 40px;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n gap: 2px;\n }\n\n .cartridge-toast.quest .title {\n color: #FFF;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n }\n\n .cartridge-toast.quest .subtitle {\n color: #808080;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 16px;\n }\n\n .cartridge-toast.quest .xp-section-container {\n display: flex;\n padding: 10px;\n flex-direction: column;\n align-items: flex-start;\n gap: 10px;\n }\n\n .cartridge-toast.quest .xp-section {\n display: flex;\n align-items: center;\n gap: 2px;\n align-self: stretch;\n }\n\n .cartridge-toast.quest .xp-section .xp-icon {\n width: 20px;\n height: 20px;\n aspect-ratio: 1/1;\n }\n\n .cartridge-toast.quest .xp-section .xp-amount {\n color: #FFF;\n /* Inter/Regular 14px */\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px; /* 142.857% */\n }\n `;\n targetDoc.head.appendChild(style);\n}\n\n// Create quest toast element\nexport function createQuestToast(options: QuestToastOptions): HTMLElement {\n const toast = document.createElement(\"div\");\n toast.className = \"cartridge-toast quest\";\n\n const imageContentContainer = document.createElement(\"div\");\n imageContentContainer.className = \"image-content-container\";\n\n const imageContainer = document.createElement(\"div\");\n imageContainer.className = \"image-container\";\n\n const icon = getQuestIcon();\n icon.className = \"image\";\n imageContainer.appendChild(icon);\n\n const content = document.createElement(\"div\");\n content.className = \"content\";\n\n const title = document.createElement(\"p\");\n title.className = \"title\";\n title.textContent = options.title;\n\n const subtitle = document.createElement(\"p\");\n subtitle.className = \"subtitle\";\n subtitle.textContent = options.subtitle || \"Earned!\";\n\n content.appendChild(title);\n content.appendChild(subtitle);\n\n imageContentContainer.appendChild(imageContainer);\n imageContentContainer.appendChild(content);\n\n const closeButton = CloseButton(false);\n\n toast.appendChild(imageContentContainer);\n toast.appendChild(closeButton);\n\n return toast;\n}\n\nconst getQuestIcon = () => {\n const container = document.createElement(\"div\");\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"width\", \"34\");\n svg.setAttribute(\"height\", \"34\");\n svg.setAttribute(\"viewBox\", \"0 0 30 30\");\n svg.style.width = \"100%\";\n svg.style.height = \"100%\";\n svg.innerHTML = `<path d=\"M3 6.5V8C3 8.55312 3.44687 9 4 9H4.5H6V6.5C6 5.67188 5.32812 5 4.5 5C3.67188 5 3 5.67188 3 6.5ZM6.5 5C6.8125 5.41875 7 5.9375 7 6.5V16C7 17.1031 7.89687 18 9 18C10.1031 18 11 17.1031 11 16V15.8344C11 14.8219 11.8219 14 12.8344 14H18V8C18 6.34375 16.6562 5 15 5H6.5ZM17.5 19C19.4344 19 21 17.4344 21 15.5C21 15.225 20.775 15 20.5 15H12.8344C12.375 15 12 15.3719 12 15.8344V16C12 17.6562 10.6562 19 9 19H14.5H17.5Z\" fill=\"white\"/>`;\n container.appendChild(svg);\n return container;\n};\n","export interface ProgressBarOptions {\n duration: number; // in milliseconds (0 or Infinity for static full bar)\n onComplete?: () => void;\n borderRadius?: number; // Optional border radius in pixels (default: 8px)\n}\n\nexport const ProgressBar = (options: ProgressBarOptions): HTMLDivElement => {\n const borderRadius = options.borderRadius ?? 8;\n const isInfiniteDuration =\n !isFinite(options.duration) || options.duration <= 0;\n\n const container = document.createElement(\"div\");\n container.className = \"cartridge-toast-progress-bar\";\n container.style.position = \"absolute\";\n container.style.bottom = \"0\";\n container.style.left = \"0\";\n container.style.right = \"0\";\n container.style.height = \"4px\";\n container.style.overflow = \"hidden\";\n container.style.borderBottomLeftRadius = `${borderRadius}px`;\n container.style.borderBottomRightRadius = `${borderRadius}px`;\n container.style.backgroundColor = \"rgba(255, 255, 255, 0.2)\";\n\n const inside = document.createElement(\"div\");\n inside.className = \"cartridge-toast-progress-bar-fill\";\n inside.style.position = \"absolute\";\n inside.style.bottom = \"0\";\n inside.style.left = \"0\";\n inside.style.height = \"100%\";\n inside.style.backgroundColor = \"rgba(255, 255, 255, 0.8)\";\n inside.style.borderBottomLeftRadius = `${borderRadius}px`;\n\n if (isInfiniteDuration) {\n // For infinite duration, show full bar immediately without animation\n inside.style.width = \"100%\";\n inside.style.transition = \"none\";\n } else {\n // For finite duration, animate the progress bar\n inside.style.width = \"0%\";\n inside.style.transition = `width ${options.duration}ms linear`;\n\n // Start animation after a brief delay to ensure styles are applied\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n inside.style.width = \"100%\";\n });\n });\n\n // Call onComplete when animation finishes\n if (options.onComplete) {\n setTimeout(() => {\n options.onComplete?.();\n }, options.duration);\n }\n }\n\n container.appendChild(inside);\n\n return container;\n};\n","import { ProgressBar } from \"../components/progress-bar\";\n\n/**\n * Add a progress bar to a toast element\n *\n * @param toast - The toast element to add the progress bar to\n * @param duration - Duration in milliseconds\n * @param onComplete - Callback when progress completes\n * @param borderRadius - Optional border radius in pixels (default: 8px)\n */\nexport function addProgressBarToToast(\n toast: HTMLElement,\n duration: number,\n onComplete: () => void,\n borderRadius?: number,\n): void {\n const progressBar = ProgressBar({\n duration,\n onComplete,\n borderRadius,\n });\n toast.appendChild(progressBar);\n}\n","import { ToastOptions } from \"./types\";\nimport {\n isInIframe,\n getTargetDocument,\n getToastContainer,\n DEFAULT_DURATION,\n DEFAULT_POSITION,\n TOAST_MESSAGE_TYPE,\n removeToast,\n} from \"./utils\";\nimport { injectStyles } from \"./styles\";\nimport {\n injectErrorStyles,\n createErrorToast,\n injectTransactionStyles,\n createTransactionToast,\n injectNetworkSwitchStyles,\n createNetworkSwitchToast,\n injectAchievementStyles,\n createAchievementToast,\n injectQuestStyles,\n createQuestToast,\n injectMarketplaceStyles,\n createMarketplaceToast,\n} from \"./variants\";\nimport { addProgressBarToToast } from \"./utils/progress-bar\";\n\n// Create toast element based on variant\nfunction createToastElement(options: ToastOptions): HTMLElement {\n switch (options.variant) {\n case \"error\":\n return createErrorToast(options);\n case \"transaction\":\n return createTransactionToast(options);\n case \"network-switch\":\n return createNetworkSwitchToast(options);\n case \"achievement\":\n return createAchievementToast(options);\n case \"quest\":\n return createQuestToast(options);\n case \"marketplace\":\n return createMarketplaceToast(options);\n }\n}\n\n// Inject variant-specific styles\nfunction injectVariantStyles(\n targetDoc: Document,\n variant: ToastOptions[\"variant\"],\n): void {\n switch (variant) {\n case \"error\":\n injectErrorStyles(targetDoc);\n break;\n case \"transaction\":\n injectTransactionStyles(targetDoc);\n break;\n case \"network-switch\":\n injectNetworkSwitchStyles(targetDoc);\n break;\n case \"achievement\":\n injectAchievementStyles(targetDoc);\n break;\n case \"quest\":\n injectQuestStyles(targetDoc);\n break;\n case \"marketplace\":\n injectMarketplaceStyles(targetDoc);\n break;\n }\n}\n\n// Show toast on target document (parent or current)\nfunction showToastOnDocument(\n targetDoc: Document,\n options: ToastOptions,\n): () => void {\n // Inject common styles if needed\n injectStyles(targetDoc);\n\n // Inject variant-specific styles\n injectVariantStyles(targetDoc, options.variant);\n\n // Get container\n const position = options.position || DEFAULT_POSITION;\n const container = getToastContainer(targetDoc, position);\n\n // Create toast element\n const toastElement = createToastElement(options);\n\n // Set up dismiss function\n const dismiss = () => removeToast(toastElement);\n\n // Add to container\n container.appendChild(toastElement);\n\n // Setup click handler if provided\n if (options.onClick) {\n toastElement.style.cursor = \"pointer\";\n toastElement.addEventListener(\"click\", (e) => {\n // Don't trigger onClick if clicking close button\n const target = e.target as HTMLElement;\n const isCloseButton = target.closest(\"#close-button\");\n if (!isCloseButton && options.onClick) {\n options.onClick();\n }\n });\n }\n\n // Setup close button\n const closeButton = toastElement.querySelector(\"#close-button\");\n if (closeButton) {\n closeButton.addEventListener(\"click\", (e) => {\n e.stopPropagation(); // Prevent onClick from firing\n dismiss();\n });\n }\n\n // Handle duration and progress bar\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n const duration = options.duration ?? DEFAULT_DURATION;\n const isInfiniteDuration = !isFinite(duration) || duration <= 0;\n\n // Add progress bar to all variants except network-switch\n if (options.variant !== \"network-switch\") {\n // Determine border radius based on variant\n const borderRadius =\n options.variant === \"error\" || options.variant === \"transaction\" ? 8 : 4;\n\n if (isInfiniteDuration) {\n // Show static progress bar for infinite duration (no animation, no auto-dismiss)\n addProgressBarToToast(toastElement, Infinity, () => {}, borderRadius);\n } else {\n // Animated progress bar with auto-dismiss\n addProgressBarToToast(toastElement, duration, dismiss, borderRadius);\n }\n } else if (!isInfiniteDuration) {\n // Network-switch variant uses setTimeout instead of progress bar\n timeoutId = setTimeout(dismiss, duration);\n }\n\n // Return dismiss function\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n dismiss();\n };\n}\n\n// Set up message listener on parent window to handle toast requests from iframes\nlet messageListenerSetup = false;\nfunction setupMessageListener(): void {\n if (messageListenerSetup || typeof window === \"undefined\") {\n return;\n }\n\n // Only set up listener on parent window (not in iframe)\n if (isInIframe()) {\n return;\n }\n\n window.addEventListener(\"message\", (event) => {\n // Basic origin check - in production, you might want stricter checks\n if (event.data?.type === TOAST_MESSAGE_TYPE && event.data?.options) {\n const targetDoc = document;\n if (targetDoc) {\n showToastOnDocument(targetDoc, event.data.options);\n }\n }\n });\n\n messageListenerSetup = true;\n}\n\n/**\n * Show a toast notification\n *\n * The toast will always appear on the parent page, even if called from within an iframe.\n * This ensures toasts are visible above all content, including the keychain iframe.\n *\n * @param options - Toast options with variant-specific properties\n * @returns A function to manually dismiss the toast\n *\n * @example\n * ```ts\n * import { toast } from \"@cartridge/controller\";\n *\n * // Error toast\n * toast({\n * variant: \"error\",\n * message: \"Transaction failed\",\n * });\n *\n * // Transaction toast\n * toast({\n * variant: \"transaction\",\n * hash: \"0x1234...\",\n * status: \"success\",\n * amount: \"100\",\n * token: \"ETH\"\n * });\n *\n * // Network switch toast\n * toast({\n * variant: \"network-switch\",\n * networkName: \"Mainnet\",\n * networkIcon: <url to icon image>\n * });\n *\n * // Achievement toast\n * toast({\n * variant: \"achievement\",\n * itemName: \"First Achievement\",\n * itemImage: \"https://example.com/trophy.png\"\n * action: \"purchased\" | \"sold\",\n * });\n *\n * // Marketplace toast\n * toast({\n * variant: \"marketplace\",\n * itemName: \"Cool NFT #123\",\n * action: \"purchased\",\n * price: \"0.5\",\n * currency: \"ETH\",\n * image: \"https://example.com/nft.png\"\n * });\n * ```\n */\nexport function toast(options: ToastOptions): () => void {\n // Ensure we're in a browser environment\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n console.warn(\"Toast can only be used in a browser environment\");\n return () => {};\n }\n\n // Set up message listener on parent window if not already set up\n setupMessageListener();\n\n // Check if we're in an iframe\n if (isInIframe()) {\n // Try to get parent document\n const targetDoc = getTargetDocument();\n\n if (targetDoc) {\n // Same-origin iframe, can access parent document directly\n return showToastOnDocument(targetDoc, options);\n } else {\n // Cross-origin iframe, use postMessage\n try {\n if (window.parent) {\n window.parent.postMessage(\n {\n type: TOAST_MESSAGE_TYPE,\n options: options,\n },\n \"*\", // In production, specify target origin\n );\n }\n } catch (e) {\n console.warn(\"Failed to send toast message to parent:\", e);\n }\n\n // Return a no-op dismiss function for cross-origin case\n return () => {};\n }\n } else {\n // Not in iframe, show toast directly on current document\n const targetDoc = document;\n return showToastOnDocument(targetDoc, options);\n }\n}\n\nexport * from \"./types\";\n\n// Initialize message listener when module loads (if in browser environment)\nif (typeof window !== \"undefined\") {\n setupMessageListener();\n}\n","// src/generated/erc20-metadata.ts\nvar metadata = [\n {\n name: \"Wrapped BTC\",\n symbol: \"WBTC\",\n decimals: 8,\n l2_token_address: \"0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac\",\n sort_order: 0,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/7dcb2db2-a7a7-44af-660b-8262e057a100/logo\"\n },\n {\n name: \"USD Coin\",\n symbol: \"USDC\",\n decimals: 6,\n l2_token_address: \"0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8\",\n sort_order: 5,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e5aaa970-a998-47e8-bd43-4a3b56b87200/logo\"\n },\n {\n name: \"LUSD Stablecoin\",\n symbol: \"LUSD\",\n decimals: 18,\n l2_token_address: \"0x070a76fd48ca0ef910631754d77dd822147fe98a569b826ec85e3c33fde586ac\",\n sort_order: 3,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dc0ae733-5498-4afa-f475-48dba677aa00/logo\"\n },\n {\n name: \"Tether USD\",\n symbol: \"USDT\",\n decimals: 6,\n l2_token_address: \"0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8\",\n sort_order: 4,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c8a721d1-07c3-46e4-ab4e-523977c30b00/logo\"\n },\n {\n name: \"Ether\",\n symbol: \"ETH\",\n decimals: 18,\n l2_token_address: \"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n sort_order: 3,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e07829b7-0382-4e03-7ecd-a478c5aa9f00/logo\"\n },\n {\n name: \"Dai Stablecoin\",\n symbol: \"DAIv0\",\n decimals: 18,\n l2_token_address: \"0x00da114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3\",\n sort_order: 4,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/919e761b-56f7-4f53-32aa-5e066f7f6200/logo\"\n },\n {\n name: \"Dai Stablecoin\",\n symbol: \"DAI\",\n decimals: 18,\n l2_token_address: \"0x05574eb6b8789a91466f902c380d978e472db68170ff82a5b650b95a58ddf4ad\",\n sort_order: 4,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/919e761b-56f7-4f53-32aa-5e066f7f6200/logo\"\n },\n {\n name: \"Legacy Starknet Wrapped Staked Ether\",\n symbol: \"wstETH-legacy\",\n decimals: 18,\n l2_token_address: \"0x042b8f0484674ca266ac5d08e4ac6a3fe65bd3129795def2dca5c34ecc5f96d2\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/26162dcc-29c2-4f5e-3acd-5e6be1f07a00/logo\"\n },\n {\n name: \"Wrapped Staked Ether\",\n symbol: \"wstETH\",\n decimals: 18,\n l2_token_address: \"0x0057912720381af14b0e5c87aa4718ed5e527eab60b3801ebf702ab09139e38b\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dbbcbdea-1a92-437d-3701-4a5ee129d000/logo\"\n },\n {\n name: \"Rocket Pool ETH\",\n symbol: \"rETH\",\n decimals: 18,\n l2_token_address: \"0x0319111a5037cbec2b3e638cc34a3474e2d2608299f3e62866e9cc683208c610\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c9f2d6fe-fbc6-4384-0990-923dfcb7a200/logo\"\n },\n {\n name: \"LORDS\",\n symbol: \"LORDS\",\n decimals: 18,\n l2_token_address: \"0x0124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49\",\n sort_order: 1,\n total_supply: 509e5,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/a3bfe959-50c4-4f89-0aef-b19207d82a00/logo\"\n },\n {\n name: \"R Stablecoin\",\n symbol: \"R\",\n decimals: 18,\n l2_token_address: \"0x01fa2fb85f624600112040e1f3a848f53a37ed5a7385810063d5fe6887280333\",\n sort_order: 3,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/77612e4e-f7ee-4dba-2066-af321843ef00/logo\"\n },\n {\n name: \"Frax\",\n symbol: \"FRAX\",\n decimals: 18,\n l2_token_address: \"0x009c6b4fb13dfaa025c1383ed6190af8ed8cbb09d9588a3bb020feb152442406\",\n sort_order: 1,\n total_supply: 649462235,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/eeaf0779-e492-474c-ef19-b27843525600/logo\"\n },\n {\n name: \"Frax Share\",\n symbol: \"FXS\",\n decimals: 18,\n l2_token_address: \"0x0058efd0e73c33a848ffaa88738d128ebf0af98ea78cf3c14dc757bb02d39ffb\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/98bea621-1e4f-4d63-9689-bdaef0d56500/logo\"\n },\n {\n name: \"Staked Frax Ether\",\n symbol: \"sfrxETH\",\n decimals: 18,\n l2_token_address: \"0x04578fffc279e61b5cb0267a5f8e24b6089d40f93158fbbad2cb23b8622c9233\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/cd6fe18a-25db-4de9-758a-daf3b364ea00/logo\"\n },\n {\n name: \"Uniswap\",\n symbol: \"UNI\",\n decimals: 18,\n l2_token_address: \"0x049210ffc442172463f3177147c1aeaa36c51d152c1b0630f2364c300d4f48ee\",\n sort_order: 1,\n total_supply: 1e9,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/361b018e-bd53-4019-27c8-7cf8d9031b00/logo\"\n },\n {\n name: \"Paper\",\n symbol: \"PAPER\",\n decimals: 18,\n l2_token_address: \"0x0410466536b5ae074f7fea81e5533b8134a9fa08b3dd077dd9db08f64997d113\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/811f019a-0461-4cff-6c1e-442102863f00/logo\"\n },\n {\n name: \"StarkPepe\",\n symbol: \"xSPEPE\",\n decimals: 18,\n l2_token_address: \"0x06f15ec4b6ff0b7f7a216c4b2ccdefc96cbf114d6242292ca82971592f62273b\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n disabled: true\n },\n {\n name: \"StarkNet Token\",\n symbol: \"STRK\",\n decimals: 18,\n l2_token_address: \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\",\n sort_order: 2,\n total_supply: 1e10,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1b126320-367c-48ed-cf5a-ba7580e49600/logo\"\n },\n {\n name: \"zkLend Token\",\n symbol: \"ZEND\",\n decimals: 18,\n l2_token_address: \"0x00585c32b625999e6e5e78645ff8df7a9001cf5cf3eb6b80ccdd16cb64bd3a34\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/95515b0e-1230-4158-10f1-56888f613c00/logo\"\n },\n {\n name: \"Ekubo Protocol\",\n symbol: \"EKUBO\",\n decimals: 18,\n l2_token_address: \"0x075afe6402ad5a5c20dd25e10ec3b3986acaa647b77e4ae24b0cbc9a54a27a87\",\n sort_order: 1,\n total_supply: 1e7,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/634d9c36-2f0b-4781-93e6-72d701b5af00/logo\"\n },\n {\n name: \"SOCKS\",\n symbol: \"SOCKS\",\n decimals: 18,\n l2_token_address: \"0x023ed2ba4fb5709302c5dfd739fa7613359042f143286c115b6c7f7dc2601015\",\n sort_order: 1,\n total_supply: 1e11,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/2db5a2a6-c98e-4b80-35e0-31b489132100/logo\"\n },\n {\n name: \"Nostra\",\n symbol: \"NSTR\",\n decimals: 18,\n l2_token_address: \"0x00c530f2c0aa4c16a0806365b0898499fba372e5df7a7172dc6fe9ba777e8007\",\n sort_order: 1,\n total_supply: 1e8,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/a45c2224-17a7-4269-ea7e-3924e9755800/logo\"\n },\n {\n name: \"Carmine\",\n symbol: \"CRM\",\n decimals: 18,\n l2_token_address: \"0x51c4b1fe3bf6774b87ad0b15ef5d1472759076e42944fff9b9f641ff13e5bbe\",\n sort_order: 1,\n total_supply: 1e8,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6ab817f1-8075-4a94-6e14-f112f1f89d00/logo\"\n },\n {\n name: \"Cash\",\n symbol: \"CASH\",\n decimals: 18,\n l2_token_address: \"0x498edfaf50ca5855666a700c25dd629d577eb9afccdf3b5977aec79aee55ada\",\n sort_order: 3,\n total_supply: null,\n hidden: false,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bd6d156-f509-4b51-5dfc-3ee566143600/logo\"\n },\n {\n name: \"Nums\",\n symbol: \"NUMS\",\n decimals: 18,\n l2_token_address: \"0xe5f10eddc01699dc899a30dbc3c9858148fa4aa0a47c0ffd85f887ffc4653e\",\n sort_order: 1,\n total_supply: 1,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/90868d05-cb75-4c42-278c-5a540db2cf00/logo\"\n },\n {\n name: \"Flip\",\n symbol: \"FLIP\",\n decimals: 18,\n l2_token_address: \"0x01bfe97d729138fc7c2d93c77d6d1d8a24708d5060608017d9b384adf38f04c7\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/275f0fa8-a691-471c-ace6-0eb0315dde00/logo\"\n },\n {\n name: \"Eternum Stone\",\n symbol: \"STONE\",\n decimals: 18,\n l2_token_address: \"0x439a1c010e3e1bb2d43d43411000893c0042bd88f6c701611a0ea914d426da4\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/932e7f83-a4c2-40f0-3048-35af3b194100/logo\"\n },\n {\n name: \"Eternum Coal\",\n symbol: \"COAL\",\n decimals: 18,\n l2_token_address: \"0xce635e3f241b0ae78c46a929d84a9101910188f9c4024eaa7559556503c31a\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/cf2ee180-06bf-4443-e3aa-724d7c28e800/logo\"\n },\n {\n name: \"Eternum Wood\",\n symbol: \"WOOD\",\n decimals: 18,\n l2_token_address: \"0x40d8907cec0f7ae9c364dfb12485a1314d84c129bf1898d2f3d4b7fcc7d44f4\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1db5f954-c1ef-447e-9f8f-05bd9f3b2b00/logo\"\n },\n {\n name: \"Eternum Copper\",\n symbol: \"COPPER\",\n decimals: 18,\n l2_token_address: \"0x66ed5c928ee027a9419ace1cbea8389885161db5572a7c5c4fef2310e9bf494\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bbcdcc9-6146-404d-9501-92a664cf3100/logo\"\n },\n {\n name: \"Eternum Ironwood\",\n symbol: \"IRONWOOD\",\n decimals: 18,\n l2_token_address: \"0x1720cf6318bff45e62acc588680ae3cd4d5f8465b1d52cb710533c9299b031a\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/5af7c03b-e4ae-4aee-eba4-a4e2160a1d00/logo\"\n },\n {\n name: \"Eternum Obsidian\",\n symbol: \"OBSIDIAN\",\n decimals: 18,\n l2_token_address: \"0x3b6448d09dcd023507376402686261f5d6739455fa02f804907b066e488da66\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/8be9bc66-486b-4181-6804-725a1db8ad00/logo\"\n },\n {\n name: \"Eternum Gold\",\n symbol: \"GOLD\",\n decimals: 18,\n l2_token_address: \"0xdff9dca192609c4e86ab3be22c7ec1e968876c992d21986f3c542be97fa2f\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/fb9e90f7-3c2f-4c64-7e43-c3f694f35e00/logo\"\n },\n {\n name: \"Eternum Silver\",\n symbol: \"SILVER\",\n decimals: 18,\n l2_token_address: \"0x6fe21d2d4a8a05bdb70f09c9250af9870020d5dcc35f410b4a39d6605c3e353\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e443afeb-850b-46a0-a7ba-a473306d6b00/logo\"\n },\n {\n name: \"Eternum Mithral\",\n symbol: \"MITHRAL\",\n decimals: 18,\n l2_token_address: \"0x67ba235c569c23877064b2ac6ebd4d79f32d3c00f5fab8e28a3b5700b957f6\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/33dc517f-8a66-45eb-f2c5-de5388e47500/logo\"\n },\n {\n name: \"Eternum Alchemical Silver\",\n symbol: \"ALCHEMICALSILVER\",\n decimals: 18,\n l2_token_address: \"0x3956a5301e99522038a2e7dcb9c2a89bf087ffa79310ee0a508b5538efd8ddd\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/3d2e0fd8-4af8-49a0-4bdb-691a4d6ef800/logo\"\n },\n {\n name: \"Eternum Cold Iron\",\n symbol: \"COLDIRON\",\n decimals: 18,\n l2_token_address: \"0x555d713e59d4ff96b7960447e9bc9e79bfdeab5b0eea74e3df81bce61cfbc77\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/878c0d8a-8e2c-4281-0896-9cbbb2ef9400/logo\"\n },\n {\n name: \"Eternum Deep Crystal\",\n symbol: \"DEEPCRYSTAL\",\n decimals: 18,\n l2_token_address: \"0x1d655ac834d38df7921074fc1588411e202b1af83307cbd996983aff52db3a8\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1c2c954f-448c-476b-a4a6-19b52efe3e00/logo\"\n },\n {\n name: \"Eternum Ruby\",\n symbol: \"RUBY\",\n decimals: 18,\n l2_token_address: \"0x3d9b66720959d0e7687b898292c10e62e78626f2dba5e1909961a2ce3f86612\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6a45b34d-3bfe-4994-45b0-f2bee8abac00/logo\"\n },\n {\n name: \"Eternum Diamonds\",\n symbol: \"DIAMONDS\",\n decimals: 18,\n l2_token_address: \"0xe03ea8ae385f64754820af5c01c36abf1b8130dd6797d3fd9d430e4114e876\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/b1fa609d-8799-4754-cdea-ab69514ca700/logo\"\n },\n {\n name: \"Eternum Hartwood\",\n symbol: \"HARTWOOD\",\n decimals: 18,\n l2_token_address: \"0x5620aa7170cd66dbcbc37d03087bfe4633ffef91d3e4d97b501de906004f79b\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/27e37e85-91bd-4ee1-0552-1e0795077400/logo\"\n },\n {\n name: \"Eternum Ignium\",\n symbol: \"IGNIUM\",\n decimals: 18,\n l2_token_address: \"0x625c1f789b03ebebc7a9322366f38ebad1f693b84b2abd8cb8f5b2748b0cdd5\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/58591e20-24fb-4353-417a-81d877a5a200/logo\"\n },\n {\n name: \"Eternum Twilight Quartz\",\n symbol: \"TWILIGHTQUARTZ\",\n decimals: 18,\n l2_token_address: \"0x35e24c02409c3cfe8d5646399a62c4d102bb782938d5f5180e92c9c62d3faf7\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/2f8cb892-e82a-4af3-bd09-316061faec00/logo\"\n },\n {\n name: \"Eternum True Ice\",\n symbol: \"TRUEICE\",\n decimals: 18,\n l2_token_address: \"0x4485f5a6e16562e1c761cd348e63256d00389e3ddf4f5d98afe7ab44c57c481\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/fe4bfc17-6553-4dc5-58d2-f452b4aa8a00/logo\"\n },\n {\n name: \"Eternum Adamantine\",\n symbol: \"ADAMANTINE\",\n decimals: 18,\n l2_token_address: \"0x367f838f85a2f5e1580d6f011e4476f581083314cff8721ba3dda9706076eed\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/13bd026b-3612-480e-0119-04cf4c505a00/logo\"\n },\n {\n name: \"Eternum Sapphire\",\n symbol: \"SAPPHIRE\",\n decimals: 18,\n l2_token_address: \"0x2f8dd022568af8f9f718aa37707a9b858529db56910633a160456838b6cbcbc\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/0ebf555f-e732-4054-f8e5-55b2ed49ba00/logo\"\n },\n {\n name: \"Eternum Ethereal Silica\",\n symbol: \"ETHEREALSILICA\",\n decimals: 18,\n l2_token_address: \"0x68b6e23cbbd58a644700f55e96c83580921e9f521b6e5175396b53ba7910e7d\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/f02a5b43-bfcf-408c-7d1b-fcfe68b02d00/logo\"\n },\n {\n name: \"Eternum Dragon Hide\",\n symbol: \"DRAGONHIDE\",\n decimals: 18,\n l2_token_address: \"0x3bf856515bece3c93f5061b7941b8645f817a0acab93c758b8c7b4bc0afa3c6\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e74955fc-5c8a-4dff-4882-a49a46a5a800/logo\"\n },\n {\n name: \"Eternum Ancient Fragment\",\n symbol: \"ANCIENTFRAGMENT\",\n decimals: 18,\n l2_token_address: \"0x0695b08ecdfdd828c2e6267da62f59e6d7543e690ef56a484df25c8566b332a5\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/9af855b7-4790-4390-9466-6bed4481ab00/logo\"\n },\n {\n name: \"Eternum Donkey\",\n symbol: \"DONKEY\",\n decimals: 18,\n l2_token_address: \"0x264be95a4a2ace20add68cb321acdccd2f9f8440ee1c7abd85da44ddab01085\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/20817378-a45e-4521-f464-10f6dd13c500/logo\"\n },\n {\n name: \"Eternum Knight\",\n symbol: \"KNIGHT\",\n decimals: 18,\n l2_token_address: \"0xac965f9e67164723c16735a9da8dbc9eb8e43b1bd0323591e87c056badf606\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/8787ed1f-af5c-4873-c01a-55f05e999a00/logo\"\n },\n {\n name: \"Eternum Crossbowman\",\n symbol: \"CROSSBOWMAN\",\n decimals: 18,\n l2_token_address: \"0x67e4ac00a241be06ba6afc11fa2715ec7da0c42c05a67ef6ecfcfeda725aaa8\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dec7f31b-4b1d-46bb-4fca-c0253cf55a00/logo\"\n },\n {\n name: \"Eternum Paladin\",\n symbol: \"PALADIN\",\n decimals: 18,\n l2_token_address: \"0x3bc86299bee061c7c8d7546ccb62b9daf9bffc653b1508facb722c6593874bc\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/7d2cd5a5-f38a-49f6-11f8-ba3b59a59e00/logo\"\n },\n {\n name: \"Eternum Wheat\",\n symbol: \"WHEAT\",\n decimals: 18,\n l2_token_address: \"0x57a3f1ee475e072ce3be41785c0e889b7295d7a0dcc22b992c5b9408dbeb280\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c338b6a8-77c4-4dd6-34f5-1af0d3fb1e00/logo\"\n },\n {\n name: \"Eternum Fish\",\n symbol: \"FISH\",\n decimals: 18,\n l2_token_address: \"0x27719173cfe10f1aa38d2aaed0a075b6077290f1e817aa3485d2b828394f4d9\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6deef27f-df40-4248-4e1b-ed1d79a3f000/logo\"\n },\n {\n name: \"Fools\",\n symbol: \"FOOLS\",\n decimals: 18,\n l2_token_address: \"0x068a7a07e08fc3e723a878223d00f669106780d5ea6665eb15d893476d47bf3b\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://assets.underware.gg/pistols/fools.svg\"\n },\n {\n name: \"Fame\",\n symbol: \"FAME\",\n decimals: 18,\n l2_token_address: \"0x02549653a4ae1ff8d04a20b8820a49cbe97486c536ec0e4c8f68aa33d80067cf\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://assets.underware.gg/pistols/fame.svg\"\n },\n {\n name: \"Survivor\",\n symbol: \"SURVIVOR\",\n decimals: 18,\n l2_token_address: \"0x42dd777885ad2c116be96d4d634abc90a26a790ffb5871e037dd5ae7d2ec86b\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/399cb277-f675-4efe-97fb-fac94a236a00/logo\"\n },\n {\n name: \"Dungeon Ticket\",\n symbol: \"TICKET\",\n decimals: 18,\n l2_token_address: \"0x035f581b050a39958b7188ab5c75daaa1f9d3571a0c032203038c898663f31f8\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"\thttps://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/f96b51e2-e978-42e2-c67a-e84159015000/logo\"\n }\n];\n\n// configs/cartridge/config.json\nvar config_default = {\n origin: \"*\",\n theme: {\n name: \"Cartridge\",\n icon: \"icon.svg\"\n },\n \"apple-app-site-association\": {\n webcredentials: {\n apps: [\n \"FAKETEAMID.com.cartridge.marketplace\",\n \"F9U4Y5YSTN.com.cartridge.marketplace\"\n ]\n }\n }\n};\n\n// src/config-loader.ts\nvar CONFIG_BASE_URL = \"https://static.cartridge.gg/presets\";\nasync function getConfigsIndex() {\n try {\n const response = await fetch(`${CONFIG_BASE_URL}/index.json`);\n if (!response.ok) {\n throw new Error(`Failed to load configs index: ${response.statusText}`);\n }\n return await response.json();\n } catch (error) {\n console.error(\"Error loading configs index:\", error);\n return { configs: [], baseUrl: CONFIG_BASE_URL };\n }\n}\nasync function getAvailableConfigs() {\n const indexData = await getConfigsIndex();\n return indexData.configs;\n}\nasync function loadConfig(configName) {\n try {\n const indexData = await getConfigsIndex();\n const baseUrl = indexData.baseUrl || CONFIG_BASE_URL;\n const prefix = `${baseUrl}/${configName}`;\n const response = await fetch(`${prefix}/config.json`);\n if (!response.ok) {\n throw new Error(\n `Failed to load config ${configName}: ${response.statusText}`\n );\n }\n const config = await response.json();\n if (config && config.theme) {\n if (config.theme.icon && !config.theme.icon.startsWith(\"http\")) {\n config.theme.icon = `${prefix}/${config.theme.icon}`;\n }\n if (config.theme.cover) {\n if (typeof config.theme.cover === \"string\") {\n if (!config.theme.cover.startsWith(\"http\")) {\n config.theme.cover = `${prefix}/${config.theme.cover}`;\n }\n } else {\n if (config.theme.cover.light && !config.theme.cover.light.startsWith(\"http\")) {\n config.theme.cover.light = `${prefix}/${config.theme.cover.light}`;\n }\n if (config.theme.cover.dark && !config.theme.cover.dark.startsWith(\"http\")) {\n config.theme.cover.dark = `${prefix}/${config.theme.cover.dark}`;\n }\n }\n }\n const prefixOptimizedImageSet = (imageSet) => {\n if (!imageSet) return;\n for (const format in imageSet) {\n if (imageSet[format]) {\n for (const size in imageSet[format]) {\n if (imageSet[format][size] && !imageSet[format][size].startsWith(\"http\")) {\n imageSet[format][size] = `${prefix}/${imageSet[format][size]}`;\n }\n }\n }\n }\n };\n if (config.theme.optimizedIcon) {\n prefixOptimizedImageSet(config.theme.optimizedIcon);\n }\n if (config.theme.optimizedCover) {\n if (typeof config.theme.optimizedCover === \"string\") {\n if (!config.theme.optimizedCover.startsWith(\"http\")) {\n config.theme.optimizedCover = `${prefix}/${config.theme.optimizedCover}`;\n }\n } else if (config.theme.optimizedCover.light || config.theme.optimizedCover.dark) {\n const themeVal = config.theme.optimizedCover;\n if (themeVal.light) {\n prefixOptimizedImageSet(themeVal.light);\n }\n if (themeVal.dark) {\n prefixOptimizedImageSet(themeVal.dark);\n }\n } else {\n prefixOptimizedImageSet(config.theme.optimizedCover);\n }\n }\n }\n return config;\n } catch (error) {\n console.error(`Error loading config ${configName}:`, error);\n return null;\n }\n}\nasync function loadAllConfigs() {\n const indexData = await getConfigsIndex();\n const availableConfigs = indexData.configs;\n const baseUrl = indexData.baseUrl || CONFIG_BASE_URL;\n const configsMap = {};\n await Promise.all(\n availableConfigs.map(async (configName) => {\n try {\n const response = await fetch(`${baseUrl}/${configName}/config.json`);\n if (response.ok) {\n const config = await response.json();\n configsMap[configName] = config;\n }\n } catch (error) {\n console.error(`Error loading config ${configName}:`, error);\n }\n })\n );\n return configsMap;\n}\n\n// src/index.ts\nconfig_default.theme.icon = \"https://static.cartridge.gg/presets/cartridge/icon.svg\";\nvar erc20Metadata = metadata;\nvar defaultTheme = config_default.theme;\nexport {\n defaultTheme,\n erc20Metadata,\n getAvailableConfigs,\n getConfigsIndex,\n loadAllConfigs,\n loadConfig\n};\n//# sourceMappingURL=index.js.map"],"names":["ControllerAccount","WalletAccount","provider","rpcUrl","address","keychain","options","modal","calls","toArray","resolve","reject","sessionExecute","ResponseCodes","errorDisplayMode","error","requiresUI","toast","index","isHandled","dismissFn","manualExecute","typedData","sessionSign","manualSign","MessageType","Resolution","ErrorCode","NativeErrorName","NativeEventType","createDestructor","localName","log","callbacks","destroyed","callback","createLogger","debug","args","DEFAULT_PORT_BY_PROTOCOL","URL_REGEX","opaqueOriginSchemes","getOriginFromSrc","src","scheme","location","regexResult","protocol","hostname","port","portSuffix","serializeError","name","message","stack","deserializeError","obj","deserializedError","key","connectCallReceiver","info","serializedMethods","local","remote","originForSending","originForReceiving","handleMessageEvent","event","callMessage","methodName","id","createPromiseHandler","resolution","returnValue","err","errorReplyMessage","generateId","KEY_PATH_DELIMITER","keyPathToSegments","keyPath","segmentsToKeyPath","segments","createKeyPath","prefix","setAtKeyPath","subject","value","prevSubject","idx","serializeMethods","methods","flattenedMethods","deserializeMethods","connectCallSender","callSender","methodKeyPaths","destroyConnection","createMethodProxy","iframeRemoved","replyMessage","api","handleAckMessageFactory","childOrigin","destructor","destroy","onDestroy","destroyCallReceiver","receiverMethodNames","receiverMethodName","destroyCallSender","handleSynMessageFactory","synAckMessage","CHECK_IFRAME_IN_DOC_INTERVAL","monitorIframeRemoval","iframe","checkIframeInDocIntervalId","startConnectionTimeout","timeout","timeoutId","validateIframeHasSrcOrSrcDoc","connectToChild","handleSynMessage","handleAckMessage","stopConnectionTimeout","handleMessage","IFrame","url","onClose","onConnect","docHead","meta","container","e","_origin","observer","existingController","version","defineProperties","target","values","types","stringify","HEX","result","i","keys","k","makeError","code","shortMessage","details","assert","check","assertArgument","accum","form","_getBytes","copy","offset","getBytes","HexCharacters","hexlify","data","bytes","v","isBytes","a","anumber","n","abytes","b","lengths","aexists","instance","checkFinished","aoutput","out","min","u32","arr","clean","arrays","isLE","byteSwap","word","byteSwap32","swap32IfBE","u","utf8ToBytes","str","toBytes","Hash","createHasher","hashCons","hashC","msg","tmp","U32_MASK64","_32n","fromBig","le","split","lst","len","Ah","Al","h","l","rotlSH","s","rotlSL","rotlBH","rotlBL","_0n","_1n","_2n","_7n","_256n","_0x71n","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","round","R","x","y","t","j","IOTAS","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","rotlL","keccakP","rounds","B","idx1","idx0","B0","B1","Th","Tl","curH","curL","shift","PI","Keccak","blockLen","suffix","outputLen","enableXOF","state","pos","take","bufferOut","to","gen","keccak_256","locked","_keccak256","__keccak256","keccak256","_data","func","BN_0","BN_36","getChecksumAddress","chars","expanded","hashed","ibanLookup","safeDigits","ibanChecksum","c","block","checksum","Base36","fromBase36","getAddress","ArgentWallet","available","wallet","accounts","sig","chainId","_tokenAddress","_txHash","_timeoutMs","requestProviders","listener","handler","createStore","listeners","providerDetails","request","providerDetail","unwatch","rdns","emitImmediately","PLATFORMS","constants","chainIdToPlatform","hex","num","platform","EthereumWalletBase","account","isMobile","ethereum","transaction","txn","tokenAddress","balance","txHash","timeoutMs","startTime","pollInterval","receipt","BaseWallet","MetaMaskWallet","isArrayOf","isString","item","afn","input","astr","label","aArr","astrArr","anumArr","chain","wrap","encode","decode","alphabet","letters","lettersA","indexes","digits","letter","join","separator","from","padding","bits","chr","end","normalize","fn","convertRadix","res","d","dlen","carry","done","digit","fromCarry","digitBase","div","rounded","gcd","radix2carry","powers","convertRadix2","max","mask","pow","radix","_256","radix2","revPadding","hasBase64Builtin","base64","genBase58","abc","base58","utf8","hasHexBuiltin","hexBuiltin","equalBytes","createView","isPlainObject","isNum","lengthCoder","isCoder","w","byteLen","Path","r","Bitset","bs","bsLen","chunk","allowRewrite","invert","FULL_MASK","BITS","left","lastMask","m","cur","first","lastPos","last","start","objFn","field","fieldFn","path","parts","objPath","_Reader","opts","parent","parentOffset","baseHex","notRead","formatted","length","peek","slice","needle","_Writer","buffers","sum","buf","pad","ptr","p","swapEndianness","checkBounds","signed","signBit","_wrap","inner","validate","isBaseCoder","elm","dict","numberBigint","tsEnum","decimal","precision","decimalMask","sep","int","frac","neg","intS","fracS","fracLen","match","reverse","coder","coders","bigint","size","sized","bLen","U64LE","view","intView","validateSigned","maxVal","validateUnsigned","U32LE","U8","bool","createBytes","_length","_isb","tPos","string","apply","base","innerValue","optional","flag","def","constant","_w","_r","sizeof","fields","f","struct","array","startPos","map","variants","variantNames","variant","tag","TAG","dataType","ZeroPad","_","padLength","blockSize","padRight","padFn","_padFn","padBytes","PRECISION","Decimal","P.coders","shortVec","P.wrap","rustString","P.string","P.padRight","P.U32LE","b58","P.bytes","pubKey","Message","P.struct","P.U8","P.array","validateAddress","keyParams","req","unsigned","total","TransactionRaw","Transaction","signatures","add","sign","write","acc","_keys","requiredSignatures","readSigned","readUnsigned","sigs","registry","defineProgram","tagType","P.map","mainCoder","P.tag","instr","tl","program","SYS_RECENT_BLOCKHASHES","SYS_RENT","SYS_PROGRAM","sys","P.U64LE","o","assertType","_value","authorityType","tokenName","TOKEN_PROGRAM","P.optional","P.bool","ASSOCIATED_TOKEN_PROGRAM","P.constant","U32LEBOOL","createTxComplex","instructions","blockhash","ALPHABET","BASE_MAP","xc","BASE","LEADER","FACTOR","iFACTOR","source","zeroes","pbegin","pend","it1","it2","decodeUnsafe","psz","b256","charCode","it3","it4","vch","buffer","basex","decoded","sol.Transaction","tx","_options","txHex","sol.createTxComplex","PhantomWallet","response","encodedMessage","serailized_txn","_chainId","PhantomEVMWallet","RabbyWallet","BraavosWallet","WalletBridge","metamask","phantom","phantomEvm","argent","braavos","rabby","type","identifier","adapter","operation","responseType","errorMessage","walletType","checkSummedAddress","STARTERPACK_PLAY_CALLBACK_DELAY_MS","KeychainIFrame","policies","slot","namespace","tokens","preset","shouldOverridePresetPolicies","ref","refGroup","needsSessionCreation","username","onSessionCreated","onStarterpackPlay","encryptedBlob","propagateSessionErrors","iframeOptions","onStarterpackPlayHandler","_url","KEYCHAIN_URL","walletBridge","validateRedirectUrl","redirectUrl","isCurrentHostLocal","isRedirectLocal","ControllerProvider","BaseProvider","chains","defaultChainId","urlParams","standaloneParam","lastUsedConnector","needsCleanup","cleanHash","hashParams","newUrl","NotReadyToConnect","signupOptions","effectiveOptions","currentChain","_chain","tab","at","origin","_policy","availableChains","shortString","onPurchaseComplete","starterpackOptions","sanitizedOptions","currentChainId","keychainUrl","validation","parseChainId","isReturningFromRedirect","interval","cache","lookup","API_URL","lookupUsernames","usernames","uncachedUsernames","entry","lookupAddresses","addresses","uncachedAddresses","addr","TOAST_CONTAINER_ID","DEFAULT_DURATION","DEFAULT_POSITION","TOAST_MESSAGE_TYPE","isInIframe","getTargetDocument","getToastContainer","targetDoc","position","removeToast","injectStyles","style","getCommonStyles","CloseButton","translucent","button","svg","injectErrorStyles","createErrorToast","labelBar","labelContainer","icon","content","closeButtonContainer","closeButton","injectTransactionStyles","createTransactionToast","toastContent","iconContainer","status","activityFeedContainer","activityIcon","activityLabelContainer","activityLabel","collapsedIcon","injectNetworkSwitchStyles","createNetworkSwitchToast","sanitizeImageSrc","injectAchievementStyles","createAchievementToast","imageContentContainer","imageContainer","getAchievementIcon","title","subtitle","xpSectionContainer","xpSection","xpIcon","getXPIcon","xpAmount","isDraft","isMainnet","injectMarketplaceStyles","createMarketplaceToast","image","actionText","itemName","injectQuestStyles","createQuestToast","getQuestIcon","ProgressBar","borderRadius","isInfiniteDuration","inside","addProgressBarToToast","duration","onComplete","progressBar","createToastElement","injectVariantStyles","showToastOnDocument","toastElement","dismiss","messageListenerSetup","setupMessageListener","metadata","config_default","CONFIG_BASE_URL","getConfigsIndex","getAvailableConfigs","loadConfig","configName","config","prefixOptimizedImageSet","imageSet","format","themeVal","loadAllConfigs","indexData","availableConfigs","baseUrl","configsMap","erc20Metadata","defaultTheme"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,19,20,21,22,23,24,25,27,28,33,34,35,36,37,60]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/@wallet-standard+features@1.1.0/node_modules/@wallet-standard/features/lib/esm/connect.js","../../../node_modules/.pnpm/@wallet-standard+features@1.1.0/node_modules/@wallet-standard/features/lib/esm/disconnect.js","../../../node_modules/.pnpm/@wallet-standard+features@1.1.0/node_modules/@wallet-standard/features/lib/esm/events.js","../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.3_zod@3.24.4/node_modules/ox/_esm/core/version.js","../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.3_zod@3.24.4/node_modules/ox/_esm/core/internal/errors.js","../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.3_zod@3.24.4/node_modules/ox/_esm/core/Errors.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/utils.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/_u64.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/sha3.js","../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.3_zod@3.24.4/node_modules/ox/_esm/core/Json.js","../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.3_zod@3.24.4/node_modules/ox/_esm/core/Hex.js","../../../node_modules/.pnpm/@starknet-io+get-starknet-wallet-standard@5.0.0-beta.0_typescript@5.8.3_zod@3.24.4/node_modules/@starknet-io/get-starknet-wallet-standard/dist/chains.mjs","../../../node_modules/.pnpm/@starknet-io+get-starknet-wallet-standard@5.0.0-beta.0_typescript@5.8.3_zod@3.24.4/node_modules/@starknet-io/get-starknet-wallet-standard/dist/features.mjs","../../../node_modules/.pnpm/@starknet-io+get-starknet-wallet-standard@5.0.0-beta.0_typescript@5.8.3_zod@3.24.4/node_modules/@starknet-io/get-starknet-wallet-standard/dist/index.mjs","../src/account.ts","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/enums.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/createDestructor.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/createLogger.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/getOriginFromSrc.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/errorSerialization.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/connectCallReceiver.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/generateId.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/methodSerialization.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/connectCallSender.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/handleAckMessageFactory.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/handleSynMessageFactory.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/monitorIframeRemoval.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/startConnectionTimeout.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/validateIframeHasSrcOrSrcDoc.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/connectToChild.js","../src/iframe/security.ts","../src/iframe/base.ts","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/_version.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/properties.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/errors.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/data.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/crypto/keccak.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/address/address.js","../src/wallets/argent/index.ts","../../../node_modules/.pnpm/mipd@0.0.7_typescript@5.8.3/node_modules/mipd/dist/esm/utils.js","../../../node_modules/.pnpm/mipd@0.0.7_typescript@5.8.3/node_modules/mipd/dist/esm/store.js","../src/wallets/platform.ts","../src/wallets/ethereum-base.ts","../src/wallets/base/index.ts","../src/wallets/metamask/index.ts","../../../node_modules/.pnpm/@scure+base@1.2.5/node_modules/@scure/base/lib/esm/index.js","../../../node_modules/.pnpm/micro-packed@0.7.3/node_modules/micro-packed/lib/esm/index.js","../../../node_modules/.pnpm/micro-sol-signer@0.5.0/node_modules/micro-sol-signer/lib/esm/index.js","../../../node_modules/.pnpm/base-x@5.0.1/node_modules/base-x/src/esm/index.js","../../../node_modules/.pnpm/bs58@6.0.0/node_modules/bs58/src/esm/index.js","../src/utils/solana/index.ts","../src/wallets/phantom/index.ts","../src/wallets/phantom-evm/index.ts","../src/wallets/rabby/index.ts","../src/wallets/braavos/index.ts","../src/wallets/bridge.ts","../src/iframe/keychain.ts","../src/url-validator.ts","../src/controller.ts","../src/lookup.ts","../src/policies.ts","../src/toast/utils.ts","../src/toast/styles.ts","../src/toast/components/close-button.ts","../src/toast/variants/error.ts","../src/toast/variants/transaction.ts","../src/toast/variants/network-switch.ts","../src/toast/variants/achievement.ts","../src/toast/variants/marketplace.ts","../src/toast/variants/quest.ts","../src/toast/components/progress-bar.ts","../src/toast/utils/progress-bar.ts","../src/toast/index.ts","../../../node_modules/.pnpm/@cartridge+presets@https+++codeload.github.com+cartridge-gg+presets+tar.gz+bac9813/node_modules/@cartridge/presets/dist/index.js"],"sourcesContent":["/** Name of the feature. */\nexport const StandardConnect = 'standard:connect';\n/**\n * @deprecated Use {@link StandardConnect} instead.\n *\n * @group Deprecated\n */\nexport const Connect = StandardConnect;\n//# sourceMappingURL=connect.js.map","/** Name of the feature. */\nexport const StandardDisconnect = 'standard:disconnect';\n/**\n * @deprecated Use {@link StandardDisconnect} instead.\n *\n * @group Deprecated\n */\nexport const Disconnect = StandardDisconnect;\n//# sourceMappingURL=disconnect.js.map","/** Name of the feature. */\nexport const StandardEvents = 'standard:events';\n/**\n * @deprecated Use {@link StandardEvents} instead.\n *\n * @group Deprecated\n */\nexport const Events = StandardEvents;\n//# sourceMappingURL=events.js.map","/** @internal */\nexport const version = '0.1.1';\n//# sourceMappingURL=version.js.map","import { version } from '../version.js';\n/** @internal */\nexport function getUrl(url) {\n return url;\n}\n/** @internal */\nexport function getVersion() {\n return version;\n}\n/** @internal */\nexport function prettyPrint(args) {\n if (!args)\n return '';\n const entries = Object.entries(args)\n .map(([key, value]) => {\n if (value === undefined || value === false)\n return null;\n return [key, value];\n })\n .filter(Boolean);\n const maxLength = entries.reduce((acc, [key]) => Math.max(acc, key.length), 0);\n return entries\n .map(([key, value]) => ` ${`${key}:`.padEnd(maxLength + 1)} ${value}`)\n .join('\\n');\n}\n//# sourceMappingURL=errors.js.map","import { getVersion } from './internal/errors.js';\n/**\n * Base error class inherited by all errors thrown by ox.\n *\n * @example\n * ```ts\n * import { Errors } from 'ox'\n * throw new Errors.BaseError('An error occurred')\n * ```\n */\nexport class BaseError extends Error {\n constructor(shortMessage, options = {}) {\n const details = (() => {\n if (options.cause instanceof BaseError) {\n if (options.cause.details)\n return options.cause.details;\n if (options.cause.shortMessage)\n return options.cause.shortMessage;\n }\n if (options.cause?.message)\n return options.cause.message;\n return options.details;\n })();\n const docsPath = (() => {\n if (options.cause instanceof BaseError)\n return options.cause.docsPath || options.docsPath;\n return options.docsPath;\n })();\n const docsBaseUrl = 'https://oxlib.sh';\n const docs = `${docsBaseUrl}${docsPath ?? ''}`;\n const message = [\n shortMessage || 'An error occurred.',\n ...(options.metaMessages ? ['', ...options.metaMessages] : []),\n ...(details || docsPath\n ? [\n '',\n details ? `Details: ${details}` : undefined,\n docsPath ? `See: ${docs}` : undefined,\n ]\n : []),\n ]\n .filter((x) => typeof x === 'string')\n .join('\\n');\n super(message, options.cause ? { cause: options.cause } : undefined);\n Object.defineProperty(this, \"details\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"docs\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"docsPath\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"shortMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"cause\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'BaseError'\n });\n Object.defineProperty(this, \"version\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: `ox@${getVersion()}`\n });\n this.cause = options.cause;\n this.details = details;\n this.docs = docs;\n this.docsPath = docsPath;\n this.shortMessage = shortMessage;\n }\n walk(fn) {\n return walk(this, fn);\n }\n}\n/** @internal */\nfunction walk(err, fn) {\n if (fn?.(err))\n return err;\n if (err && typeof err === 'object' && 'cause' in err && err.cause)\n return walk(err.cause, fn);\n return fn ? null : err;\n}\n//# sourceMappingURL=Errors.js.map","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nexport function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nexport function abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexport const byteSwapIfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async () => { };\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nexport class Hash {\n}\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor = createHasher;\nexport const wrapConstructorWithOpts = createOptHasher;\nexport const wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","/**\n * SHA3 (keccak) hash function, based on a new \"Sponge function\" design.\n * Different from older hashes, the internal state is bigger than output size.\n *\n * Check out [FIPS-202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf),\n * [Website](https://keccak.team/keccak.html),\n * [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub).\n *\n * Check out `sha3-addons` module for cSHAKE, k12, and others.\n * @module\n */\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from \"./_u64.js\";\n// prettier-ignore\nimport { abytes, aexists, anumber, aoutput, clean, createHasher, createXOFer, Hash, swap32IfBE, toBytes, u32 } from \"./utils.js\";\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI = [];\nconst SHA3_ROTL = [];\nconst _SHA3_IOTA = [];\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n/** `keccakf1600` internal function, additionally allows to adjust round count. */\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n clean(B);\n}\n/** Keccak sponge function. */\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n this.enableXOF = false;\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n // Can be passed from user as dkLen\n anumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n // 0 < blockLen < 200\n if (!(0 < blockLen && blockLen < 200))\n throw new Error('only keccak-f1600 function is supported');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n clone() {\n return this._cloneInto();\n }\n keccak() {\n swap32IfBE(this.state32);\n keccakP(this.state32, this.rounds);\n swap32IfBE(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { blockLen, state } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n aexists(this, false);\n abytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n clean(this.state);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => createHasher(() => new Keccak(blockLen, suffix, outputLen));\n/** SHA3-224 hash function. */\nexport const sha3_224 = /* @__PURE__ */ (() => gen(0x06, 144, 224 / 8))();\n/** SHA3-256 hash function. Different from keccak-256. */\nexport const sha3_256 = /* @__PURE__ */ (() => gen(0x06, 136, 256 / 8))();\n/** SHA3-384 hash function. */\nexport const sha3_384 = /* @__PURE__ */ (() => gen(0x06, 104, 384 / 8))();\n/** SHA3-512 hash function. */\nexport const sha3_512 = /* @__PURE__ */ (() => gen(0x06, 72, 512 / 8))();\n/** keccak-224 hash function. */\nexport const keccak_224 = /* @__PURE__ */ (() => gen(0x01, 144, 224 / 8))();\n/** keccak-256 hash function. Different from SHA3-256. */\nexport const keccak_256 = /* @__PURE__ */ (() => gen(0x01, 136, 256 / 8))();\n/** keccak-384 hash function. */\nexport const keccak_384 = /* @__PURE__ */ (() => gen(0x01, 104, 384 / 8))();\n/** keccak-512 hash function. */\nexport const keccak_512 = /* @__PURE__ */ (() => gen(0x01, 72, 512 / 8))();\nconst genShake = (suffix, blockLen, outputLen) => createXOFer((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\n/** SHAKE128 XOF with 128-bit security. */\nexport const shake128 = /* @__PURE__ */ (() => genShake(0x1f, 168, 128 / 8))();\n/** SHAKE256 XOF with 256-bit security. */\nexport const shake256 = /* @__PURE__ */ (() => genShake(0x1f, 136, 256 / 8))();\n//# sourceMappingURL=sha3.js.map","const bigIntSuffix = /*#__PURE__*/ '#__bigint';\n/**\n * Parses a JSON string, with support for `bigint`.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.parse('{\"foo\":\"bar\",\"baz\":\"69420694206942069420694206942069420694206942069420#__bigint\"}')\n * // @log: {\n * // @log: foo: 'bar',\n * // @log: baz: 69420694206942069420694206942069420694206942069420n\n * // @log: }\n * ```\n *\n * @param string - The value to parse.\n * @param reviver - A function that transforms the results.\n * @returns The parsed value.\n */\nexport function parse(string, reviver) {\n return JSON.parse(string, (key, value_) => {\n const value = value_;\n if (typeof value === 'string' && value.endsWith(bigIntSuffix))\n return BigInt(value.slice(0, -bigIntSuffix.length));\n return typeof reviver === 'function' ? reviver(key, value) : value;\n });\n}\n/**\n * Stringifies a value to its JSON representation, with support for `bigint`.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.stringify({\n * foo: 'bar',\n * baz: 69420694206942069420694206942069420694206942069420n,\n * })\n * // @log: '{\"foo\":\"bar\",\"baz\":\"69420694206942069420694206942069420694206942069420#__bigint\"}'\n * ```\n *\n * @param value - The value to stringify.\n * @param replacer - A function that transforms the results. It is passed the key and value of the property, and must return the value to be used in the JSON string. If this function returns `undefined`, the property is not included in the resulting JSON string.\n * @param space - A string or number that determines the indentation of the JSON string. If it is a number, it indicates the number of spaces to use as indentation; if it is a string (e.g. `'\\t'`), it uses the string as the indentation character.\n * @returns The JSON string.\n */\nexport function stringify(value, replacer, space) {\n return JSON.stringify(value, (key, value) => {\n if (typeof replacer === 'function')\n return replacer(key, value);\n if (typeof value === 'bigint')\n return value.toString() + bigIntSuffix;\n return value;\n }, space);\n}\n//# sourceMappingURL=Json.js.map","import { equalBytes } from '@noble/curves/abstract/utils';\nimport * as Bytes from './Bytes.js';\nimport * as Errors from './Errors.js';\nimport * as Json from './Json.js';\nimport * as internal_bytes from './internal/bytes.js';\nimport * as internal from './internal/hex.js';\nconst encoder = /*#__PURE__*/ new TextEncoder();\nconst hexes = /*#__PURE__*/ Array.from({ length: 256 }, (_v, i) => i.toString(16).padStart(2, '0'));\n/**\n * Asserts if the given value is {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert('abc')\n * // @error: InvalidHexValueTypeError:\n * // @error: Value `\"abc\"` of type `string` is an invalid hex type.\n * // @error: Hex types must be represented as `\"0x\\${string}\"`.\n * ```\n *\n * @param value - The value to assert.\n * @param options - Options.\n */\nexport function assert(value, options = {}) {\n const { strict = false } = options;\n if (!value)\n throw new InvalidHexTypeError(value);\n if (typeof value !== 'string')\n throw new InvalidHexTypeError(value);\n if (strict) {\n if (!/^0x[0-9a-fA-F]*$/.test(value))\n throw new InvalidHexValueError(value);\n }\n if (!value.startsWith('0x'))\n throw new InvalidHexValueError(value);\n}\n/**\n * Concatenates two or more {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.concat('0x123', '0x456')\n * // @log: '0x123456'\n * ```\n *\n * @param values - The {@link ox#Hex.Hex} values to concatenate.\n * @returns The concatenated {@link ox#Hex.Hex} value.\n */\nexport function concat(...values) {\n return `0x${values.reduce((acc, x) => acc + x.replace('0x', ''), '')}`;\n}\n/**\n * Instantiates a {@link ox#Hex.Hex} value from a hex string or {@link ox#Bytes.Bytes} value.\n *\n * :::tip\n *\n * To instantiate from a **Boolean**, **String**, or **Number**, use one of the following:\n *\n * - `Hex.fromBoolean`\n *\n * - `Hex.fromString`\n *\n * - `Hex.fromNumber`\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.from('0x48656c6c6f20576f726c6421')\n * // @log: '0x48656c6c6f20576f726c6421'\n *\n * Hex.from(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value to encode.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function from(value) {\n if (value instanceof Uint8Array)\n return fromBytes(value);\n if (Array.isArray(value))\n return fromBytes(new Uint8Array(value));\n return value;\n}\n/**\n * Encodes a boolean into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromBoolean(true)\n * // @log: '0x1'\n *\n * Hex.fromBoolean(false)\n * // @log: '0x0'\n *\n * Hex.fromBoolean(true, { size: 32 })\n * // @log: '0x0000000000000000000000000000000000000000000000000000000000000001'\n * ```\n *\n * @param value - The boolean value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromBoolean(value, options = {}) {\n const hex = `0x${Number(value)}`;\n if (typeof options.size === 'number') {\n internal.assertSize(hex, options.size);\n return padLeft(hex, options.size);\n }\n return hex;\n}\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.fromBytes(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromBytes(value, options = {}) {\n let string = '';\n for (let i = 0; i < value.length; i++)\n string += hexes[value[i]];\n const hex = `0x${string}`;\n if (typeof options.size === 'number') {\n internal.assertSize(hex, options.size);\n return padRight(hex, options.size);\n }\n return hex;\n}\n/**\n * Encodes a number or bigint into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromNumber(420)\n * // @log: '0x1a4'\n *\n * Hex.fromNumber(420, { size: 32 })\n * // @log: '0x00000000000000000000000000000000000000000000000000000000000001a4'\n * ```\n *\n * @param value - The number or bigint value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromNumber(value, options = {}) {\n const { signed, size } = options;\n const value_ = BigInt(value);\n let maxValue;\n if (size) {\n if (signed)\n maxValue = (1n << (BigInt(size) * 8n - 1n)) - 1n;\n else\n maxValue = 2n ** (BigInt(size) * 8n) - 1n;\n }\n else if (typeof value === 'number') {\n maxValue = BigInt(Number.MAX_SAFE_INTEGER);\n }\n const minValue = typeof maxValue === 'bigint' && signed ? -maxValue - 1n : 0;\n if ((maxValue && value_ > maxValue) || value_ < minValue) {\n const suffix = typeof value === 'bigint' ? 'n' : '';\n throw new IntegerOutOfRangeError({\n max: maxValue ? `${maxValue}${suffix}` : undefined,\n min: `${minValue}${suffix}`,\n signed,\n size,\n value: `${value}${suffix}`,\n });\n }\n const stringValue = (signed && value_ < 0 ? (1n << BigInt(size * 8)) + BigInt(value_) : value_).toString(16);\n const hex = `0x${stringValue}`;\n if (size)\n return padLeft(hex, size);\n return hex;\n}\n/**\n * Encodes a string into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n * Hex.fromString('Hello World!')\n * // '0x48656c6c6f20576f726c6421'\n *\n * Hex.fromString('Hello World!', { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n * ```\n *\n * @param value - The string value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromString(value, options = {}) {\n return fromBytes(encoder.encode(value), options);\n}\n/**\n * Checks if two {@link ox#Hex.Hex} values are equal.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.isEqual('0xdeadbeef', '0xdeadbeef')\n * // @log: true\n *\n * Hex.isEqual('0xda', '0xba')\n * // @log: false\n * ```\n *\n * @param hexA - The first {@link ox#Hex.Hex} value.\n * @param hexB - The second {@link ox#Hex.Hex} value.\n * @returns `true` if the two {@link ox#Hex.Hex} values are equal, `false` otherwise.\n */\nexport function isEqual(hexA, hexB) {\n return equalBytes(Bytes.fromHex(hexA), Bytes.fromHex(hexB));\n}\n/**\n * Pads a {@link ox#Hex.Hex} value to the left with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.padLeft('0x1234', 4)\n * // @log: '0x00001234'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to pad.\n * @param size - The size (in bytes) of the output hex value.\n * @returns The padded {@link ox#Hex.Hex} value.\n */\nexport function padLeft(value, size) {\n return internal.pad(value, { dir: 'left', size });\n}\n/**\n * Pads a {@link ox#Hex.Hex} value to the right with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts\n * import { Hex } from 'ox'\n *\n * Hex.padRight('0x1234', 4)\n * // @log: '0x12340000'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to pad.\n * @param size - The size (in bytes) of the output hex value.\n * @returns The padded {@link ox#Hex.Hex} value.\n */\nexport function padRight(value, size) {\n return internal.pad(value, { dir: 'right', size });\n}\n/**\n * Generates a random {@link ox#Hex.Hex} value of the specified length.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * const hex = Hex.random(32)\n * // @log: '0x...'\n * ```\n *\n * @returns Random {@link ox#Hex.Hex} value.\n */\nexport function random(length) {\n return fromBytes(Bytes.random(length));\n}\n/**\n * Returns a section of a {@link ox#Bytes.Bytes} value given a start/end bytes offset.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.slice('0x0123456789', 1, 4)\n * // @log: '0x234567'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to slice.\n * @param start - The start offset (in bytes).\n * @param end - The end offset (in bytes).\n * @param options - Options.\n * @returns The sliced {@link ox#Hex.Hex} value.\n */\nexport function slice(value, start, end, options = {}) {\n const { strict } = options;\n internal.assertStartOffset(value, start);\n const value_ = `0x${value\n .replace('0x', '')\n .slice((start ?? 0) * 2, (end ?? value.length) * 2)}`;\n if (strict)\n internal.assertEndOffset(value_, start, end);\n return value_;\n}\n/**\n * Retrieves the size of a {@link ox#Hex.Hex} value (in bytes).\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.size('0xdeadbeef')\n * // @log: 4\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to get the size of.\n * @returns The size of the {@link ox#Hex.Hex} value (in bytes).\n */\nexport function size(value) {\n return Math.ceil((value.length - 2) / 2);\n}\n/**\n * Trims leading zeros from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.trimLeft('0x00000000deadbeef')\n * // @log: '0xdeadbeef'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to trim.\n * @returns The trimmed {@link ox#Hex.Hex} value.\n */\nexport function trimLeft(value) {\n return internal.trim(value, { dir: 'left' });\n}\n/**\n * Trims trailing zeros from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.trimRight('0xdeadbeef00000000')\n * // @log: '0xdeadbeef'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to trim.\n * @returns The trimmed {@link ox#Hex.Hex} value.\n */\nexport function trimRight(value) {\n return internal.trim(value, { dir: 'right' });\n}\n/**\n * Decodes a {@link ox#Hex.Hex} value into a BigInt.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBigInt('0x1a4')\n * // @log: 420n\n *\n * Hex.toBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // @log: 420n\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded BigInt.\n */\nexport function toBigInt(hex, options = {}) {\n const { signed } = options;\n if (options.size)\n internal.assertSize(hex, options.size);\n const value = BigInt(hex);\n if (!signed)\n return value;\n const size = (hex.length - 2) / 2;\n const max_unsigned = (1n << (BigInt(size) * 8n)) - 1n;\n const max_signed = max_unsigned >> 1n;\n if (value <= max_signed)\n return value;\n return value - max_unsigned - 1n;\n}\n/**\n * Decodes a {@link ox#Hex.Hex} value into a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBoolean('0x01')\n * // @log: true\n *\n * Hex.toBoolean('0x0000000000000000000000000000000000000000000000000000000000000001', { size: 32 })\n * // @log: true\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded boolean.\n */\nexport function toBoolean(hex, options = {}) {\n if (options.size)\n internal.assertSize(hex, options.size);\n const hex_ = trimLeft(hex);\n if (hex_ === '0x')\n return false;\n if (hex_ === '0x1')\n return true;\n throw new InvalidHexBooleanError(hex);\n}\n/**\n * Decodes a {@link ox#Hex.Hex} value into a {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * const data = Hex.toBytes('0x48656c6c6f20776f726c6421')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded {@link ox#Bytes.Bytes}.\n */\nexport function toBytes(hex, options = {}) {\n return Bytes.fromHex(hex, options);\n}\n/**\n * Decodes a {@link ox#Hex.Hex} value into a number.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toNumber('0x1a4')\n * // @log: 420\n *\n * Hex.toNumber('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // @log: 420\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded number.\n */\nexport function toNumber(hex, options = {}) {\n const { signed, size } = options;\n if (!signed && !size)\n return Number(hex);\n return Number(toBigInt(hex, options));\n}\n/**\n * Decodes a {@link ox#Hex.Hex} value into a string.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toString('0x48656c6c6f20576f726c6421')\n * // @log: 'Hello world!'\n *\n * Hex.toString('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n * size: 32,\n * })\n * // @log: 'Hello world'\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded string.\n */\nexport function toString(hex, options = {}) {\n const { size } = options;\n let bytes = Bytes.fromHex(hex);\n if (size) {\n internal_bytes.assertSize(bytes, size);\n bytes = Bytes.trimRight(bytes);\n }\n return new TextDecoder().decode(bytes);\n}\n/**\n * Checks if the given value is {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.validate('0xdeadbeef')\n * // @log: true\n *\n * Hex.validate(Bytes.from([1, 2, 3]))\n * // @log: false\n * ```\n *\n * @param value - The value to check.\n * @param options - Options.\n * @returns `true` if the value is a {@link ox#Hex.Hex}, `false` otherwise.\n */\nexport function validate(value, options = {}) {\n const { strict = false } = options;\n try {\n assert(value, { strict });\n return true;\n }\n catch {\n return false;\n }\n}\n/**\n * Thrown when the provided integer is out of range, and cannot be represented as a hex value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromNumber(420182738912731283712937129)\n * // @error: Hex.IntegerOutOfRangeError: Number \\`4.2018273891273126e+26\\` is not in safe unsigned integer range (`0` to `9007199254740991`)\n * ```\n */\nexport class IntegerOutOfRangeError extends Errors.BaseError {\n constructor({ max, min, signed, size, value, }) {\n super(`Number \\`${value}\\` is not in safe${size ? ` ${size * 8}-bit` : ''}${signed ? ' signed' : ' unsigned'} integer range ${max ? `(\\`${min}\\` to \\`${max}\\`)` : `(above \\`${min}\\`)`}`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Hex.IntegerOutOfRangeError'\n });\n }\n}\n/**\n * Thrown when the provided hex value cannot be represented as a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBoolean('0xa')\n * // @error: Hex.InvalidHexBooleanError: Hex value `\"0xa\"` is not a valid boolean.\n * // @error: The hex value must be `\"0x0\"` (false) or `\"0x1\"` (true).\n * ```\n */\nexport class InvalidHexBooleanError extends Errors.BaseError {\n constructor(hex) {\n super(`Hex value \\`\"${hex}\"\\` is not a valid boolean.`, {\n metaMessages: [\n 'The hex value must be `\"0x0\"` (false) or `\"0x1\"` (true).',\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Hex.InvalidHexBooleanError'\n });\n }\n}\n/**\n * Thrown when the provided value is not a valid hex type.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert(1)\n * // @error: Hex.InvalidHexTypeError: Value `1` of type `number` is an invalid hex type.\n * ```\n */\nexport class InvalidHexTypeError extends Errors.BaseError {\n constructor(value) {\n super(`Value \\`${typeof value === 'object' ? Json.stringify(value) : value}\\` of type \\`${typeof value}\\` is an invalid hex type.`, {\n metaMessages: ['Hex types must be represented as `\"0x${string}\"`.'],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Hex.InvalidHexTypeError'\n });\n }\n}\n/**\n * Thrown when the provided hex value is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert('0x0123456789abcdefg')\n * // @error: Hex.InvalidHexValueError: Value `0x0123456789abcdefg` is an invalid hex value.\n * // @error: Hex values must start with `\"0x\"` and contain only hexadecimal characters (0-9, a-f, A-F).\n * ```\n */\nexport class InvalidHexValueError extends Errors.BaseError {\n constructor(value) {\n super(`Value \\`${value}\\` is an invalid hex value.`, {\n metaMessages: [\n 'Hex values must start with `\"0x\"` and contain only hexadecimal characters (0-9, a-f, A-F).',\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Hex.InvalidHexValueError'\n });\n }\n}\n/**\n * Thrown when the provided hex value is an odd length.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.fromHex('0xabcde')\n * // @error: Hex.InvalidLengthError: Hex value `\"0xabcde\"` is an odd length (5 nibbles).\n * ```\n */\nexport class InvalidLengthError extends Errors.BaseError {\n constructor(value) {\n super(`Hex value \\`\"${value}\"\\` is an odd length (${value.length - 2} nibbles).`, {\n metaMessages: ['It must be an even length.'],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Hex.InvalidLengthError'\n });\n }\n}\n/**\n * Thrown when the size of the value exceeds the expected max size.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromString('Hello World!', { size: 8 })\n * // @error: Hex.SizeOverflowError: Size cannot exceed `8` bytes. Given size: `12` bytes.\n * ```\n */\nexport class SizeOverflowError extends Errors.BaseError {\n constructor({ givenSize, maxSize }) {\n super(`Size cannot exceed \\`${maxSize}\\` bytes. Given size: \\`${givenSize}\\` bytes.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Hex.SizeOverflowError'\n });\n }\n}\n/**\n * Thrown when the slice offset exceeds the bounds of the value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.slice('0x0123456789', 6)\n * // @error: Hex.SliceOffsetOutOfBoundsError: Slice starting at offset `6` is out-of-bounds (size: `5`).\n * ```\n */\nexport class SliceOffsetOutOfBoundsError extends Errors.BaseError {\n constructor({ offset, position, size, }) {\n super(`Slice ${position === 'start' ? 'starting' : 'ending'} at offset \\`${offset}\\` is out-of-bounds (size: \\`${size}\\`).`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Hex.SliceOffsetOutOfBoundsError'\n });\n }\n}\n/**\n * Thrown when the size of the value exceeds the pad size.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.padLeft('0x1a4e12a45a21323123aaa87a897a897a898a6567a578a867a98778a667a85a875a87a6a787a65a675a6a9', 32)\n * // @error: Hex.SizeExceedsPaddingSizeError: Hex size (`43`) exceeds padding size (`32`).\n * ```\n */\nexport class SizeExceedsPaddingSizeError extends Errors.BaseError {\n constructor({ size, targetSize, type, }) {\n super(`${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (\\`${size}\\`) exceeds padding size (\\`${targetSize}\\`).`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Hex.SizeExceedsPaddingSizeError'\n });\n }\n}\n//# sourceMappingURL=Hex.js.map","import { Hex } from 'ox';\n\nconst STARKNET_CHAIN_PREFIX = \"starknet:\";\nclass StarknetChainError extends Error {\n constructor(message) {\n super(message);\n this.name = \"StarknetChainError\";\n }\n}\nconst WELL_KNOWN_STARKNET_CHAINS = [\n \"starknet:0x534e5f4d41494e\",\n // mainnet\n \"starknet:0x534e5f5345504f4c4941\"\n // sepolia\n];\nfunction isStarknetChain(chain) {\n const parts = chain.split(\":\");\n if (parts.length !== 2 || parts[0] !== \"starknet\") {\n return false;\n }\n return Hex.validate(parts[1]);\n}\nfunction formatStarknetChainId(chainId) {\n if (!Hex.validate(chainId)) {\n throw new StarknetChainError(`Invalid Starknet chain id: ${chainId}`);\n }\n return `${STARKNET_CHAIN_PREFIX}${chainId}`;\n}\nfunction getStarknetChainId(chain) {\n if (!isStarknetChain(chain)) {\n throw new StarknetChainError(`Invalid Starknet chain: ${chain}`);\n }\n return chain.slice(STARKNET_CHAIN_PREFIX.length);\n}\n\nexport { STARKNET_CHAIN_PREFIX, StarknetChainError, WELL_KNOWN_STARKNET_CHAINS, formatStarknetChainId, getStarknetChainId, isStarknetChain };\n//# sourceMappingURL=chains.mjs.map\n","import { StandardConnect, StandardDisconnect, StandardEvents } from '@wallet-standard/features';\n\nconst StarknetWalletApi = \"starknet:walletApi\";\nconst RequiredStarknetFeatures = [\n StarknetWalletApi,\n StandardConnect,\n StandardDisconnect,\n StandardEvents\n];\nfunction isStarknetWallet(wallet) {\n return RequiredStarknetFeatures.every(\n (feature) => feature in wallet.features\n );\n}\n\nexport { RequiredStarknetFeatures, StarknetWalletApi, isStarknetWallet };\n//# sourceMappingURL=features.mjs.map\n","import { StandardConnect, StandardDisconnect, StandardEvents } from '@wallet-standard/features';\nimport { WELL_KNOWN_STARKNET_CHAINS, formatStarknetChainId, isStarknetChain } from './chains.mjs';\nimport { StarknetWalletApi } from './features.mjs';\nimport 'ox';\n\nvar __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _listeners, _account, _connect, _disconnect, _on, _emit, emit_fn, _off, off_fn, _disconnected, disconnected_fn, _onAccountsChanged, onAccountsChanged_fn, _onNetworkChanged, onNetworkChanged_fn, _updateAccount, updateAccount_fn, _request, request_fn, _getStarknetChain, getStarknetChain_fn;\nclass StarknetInjectedWallet {\n constructor(injected) {\n this.injected = injected;\n __privateAdd(this, _emit);\n __privateAdd(this, _off);\n __privateAdd(this, _disconnected);\n __privateAdd(this, _onAccountsChanged);\n __privateAdd(this, _onNetworkChanged);\n __privateAdd(this, _updateAccount);\n __privateAdd(this, _request);\n __privateAdd(this, _getStarknetChain);\n __privateAdd(this, _listeners, {});\n __privateAdd(this, _account, null);\n __privateAdd(this, _connect, async ({ silent }) => {\n if (!__privateGet(this, _account)) {\n const accounts = await this.injected.request({\n type: \"wallet_requestAccounts\",\n params: {\n silent_mode: silent\n }\n });\n if (accounts.length === 0) {\n return { accounts: [] };\n }\n await __privateMethod(this, _updateAccount, updateAccount_fn).call(this, accounts);\n }\n return { accounts: this.accounts };\n });\n __privateAdd(this, _disconnect, async () => {\n __privateMethod(this, _disconnected, disconnected_fn).call(this);\n });\n __privateAdd(this, _on, (event, listener) => {\n if (!__privateGet(this, _listeners)[event]) {\n __privateGet(this, _listeners)[event] = [];\n }\n __privateGet(this, _listeners)[event].push(listener);\n return () => __privateMethod(this, _off, off_fn).call(this, event, listener);\n });\n this.injected.on(\"accountsChanged\", __privateMethod(this, _onAccountsChanged, onAccountsChanged_fn).bind(this));\n this.injected.on(\"networkChanged\", __privateMethod(this, _onNetworkChanged, onNetworkChanged_fn).bind(this));\n }\n get version() {\n return \"1.0.0\";\n }\n get name() {\n return this.injected.name;\n }\n get icon() {\n if (typeof this.injected.icon === \"string\") {\n return this.injected.icon;\n }\n return this.injected.icon.light;\n }\n get features() {\n return {\n [StandardConnect]: {\n version: \"1.0.0\",\n connect: __privateGet(this, _connect).bind(this)\n },\n [StandardDisconnect]: {\n version: \"1.0.0\",\n disconnect: __privateGet(this, _disconnect).bind(this)\n },\n [StandardEvents]: {\n version: \"1.0.0\",\n on: __privateGet(this, _on).bind(this)\n },\n [StarknetWalletApi]: {\n version: \"1.0.0\",\n request: __privateMethod(this, _request, request_fn).bind(this),\n walletVersion: this.injected.version\n }\n };\n }\n get chains() {\n return WELL_KNOWN_STARKNET_CHAINS.slice();\n }\n get accounts() {\n if (__privateGet(this, _account)) {\n return [\n {\n address: __privateGet(this, _account).address,\n publicKey: new Uint8Array(),\n chains: [__privateGet(this, _account).chain],\n features: []\n }\n ];\n }\n return [];\n }\n}\n_listeners = new WeakMap();\n_account = new WeakMap();\n_connect = new WeakMap();\n_disconnect = new WeakMap();\n_on = new WeakMap();\n_emit = new WeakSet();\nemit_fn = function(event, ...args) {\n if (!__privateGet(this, _listeners)[event])\n return;\n for (const listener of __privateGet(this, _listeners)[event]) {\n listener.apply(null, args);\n }\n};\n_off = new WeakSet();\noff_fn = function(event, listener) {\n __privateGet(this, _listeners)[event] = __privateGet(this, _listeners)[event]?.filter(\n (existingListener) => listener !== existingListener\n );\n};\n_disconnected = new WeakSet();\ndisconnected_fn = function() {\n if (__privateGet(this, _account)) {\n __privateSet(this, _account, null);\n __privateMethod(this, _emit, emit_fn).call(this, \"change\", { accounts: this.accounts });\n }\n};\n_onAccountsChanged = new WeakSet();\nonAccountsChanged_fn = async function(accounts) {\n if (!accounts || accounts.length === 0) {\n __privateMethod(this, _disconnected, disconnected_fn).call(this);\n return;\n }\n if (!__privateGet(this, _account)) {\n return;\n }\n await __privateMethod(this, _updateAccount, updateAccount_fn).call(this, accounts);\n};\n_onNetworkChanged = new WeakSet();\nonNetworkChanged_fn = function(chainId, accounts) {\n if (!chainId) {\n __privateMethod(this, _disconnected, disconnected_fn).call(this);\n return;\n }\n if (!__privateGet(this, _account)) {\n return;\n }\n const chain = formatStarknetChainId(chainId);\n if (!isStarknetChain(chain)) {\n throw new Error(`Invalid Starknet chain: ${chain}`);\n }\n if (accounts?.length > 0) {\n const [account] = accounts;\n __privateSet(this, _account, { address: account, chain });\n __privateMethod(this, _emit, emit_fn).call(this, \"change\", { accounts: this.accounts });\n } else {\n __privateSet(this, _account, { address: __privateGet(this, _account)?.address, chain });\n __privateMethod(this, _emit, emit_fn).call(this, \"change\", { accounts: this.accounts });\n }\n};\n_updateAccount = new WeakSet();\nupdateAccount_fn = async function(accounts) {\n if (accounts.length === 0) {\n return;\n }\n const [account] = accounts;\n if (__privateGet(this, _account)?.chain) {\n __privateGet(this, _account).address = account;\n __privateMethod(this, _emit, emit_fn).call(this, \"change\", { accounts: this.accounts });\n } else {\n const chain = await __privateMethod(this, _getStarknetChain, getStarknetChain_fn).call(this);\n __privateSet(this, _account, { address: account, chain });\n __privateMethod(this, _emit, emit_fn).call(this, \"change\", { accounts: this.accounts });\n }\n};\n_request = new WeakSet();\nrequest_fn = function(...args) {\n return this.injected.request(...args);\n};\n_getStarknetChain = new WeakSet();\ngetStarknetChain_fn = async function() {\n const chainId = await this.injected.request({\n type: \"wallet_requestChainId\"\n });\n const chain = formatStarknetChainId(chainId);\n if (!isStarknetChain(chain)) {\n throw new Error(`Invalid Starknet chain: ${chain}`);\n }\n return chain;\n};\n\nexport { StarknetInjectedWallet };\n//# sourceMappingURL=index.mjs.map\n","import {\n InvokeFunctionResponse,\n TypedData,\n WalletAccount,\n Call,\n AllowArray,\n} from \"starknet\";\n\nimport {\n ConnectError,\n Keychain,\n KeychainOptions,\n Modal,\n ResponseCodes,\n} from \"./types\";\nimport { AsyncMethodReturns } from \"@cartridge/penpal\";\nimport BaseProvider from \"./provider\";\nimport { toArray } from \"./utils\";\nimport { SIGNATURE } from \"@starknet-io/types-js\";\n\nclass ControllerAccount extends WalletAccount {\n private keychain: AsyncMethodReturns<Keychain>;\n private modal: Modal;\n private options?: KeychainOptions;\n\n constructor(\n provider: BaseProvider,\n rpcUrl: string,\n address: string,\n keychain: AsyncMethodReturns<Keychain>,\n options: KeychainOptions,\n modal: Modal,\n ) {\n super({\n provider: { nodeUrl: rpcUrl },\n walletProvider: provider,\n address,\n });\n\n this.keychain = keychain;\n this.options = options;\n this.modal = modal;\n }\n\n /**\n * Invoke execute function in account contract\n *\n * @param calls the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abis (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n async execute(calls: AllowArray<Call>): Promise<InvokeFunctionResponse> {\n calls = toArray(calls);\n\n return new Promise(async (resolve, reject) => {\n const sessionExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n false,\n this.options?.feeSource,\n );\n\n // Session call succeeded\n if (sessionExecute.code === ResponseCodes.SUCCESS) {\n resolve(sessionExecute as InvokeFunctionResponse);\n return;\n }\n\n // Propagates session txn error back to caller\n if (\n this.options?.propagateSessionErrors &&\n sessionExecute.code !== ResponseCodes.USER_INTERACTION_REQUIRED\n ) {\n reject((sessionExecute as ConnectError).error);\n return;\n }\n\n // Handle errorDisplayMode\n const errorDisplayMode = this.options?.errorDisplayMode || \"modal\";\n const error = (sessionExecute as ConnectError).error;\n\n // Exception: USER_INTERACTION_REQUIRED always shows modal UI\n // (SessionRefreshRequired and ManualExecutionRequired)\n const requiresUI =\n sessionExecute.code === ResponseCodes.USER_INTERACTION_REQUIRED;\n\n // Silent mode - no UI, just reject\n // Exception: USER_INTERACTION_REQUIRED goes to modal\n if (errorDisplayMode === \"silent\" && !requiresUI) {\n console.warn(\n \"[Cartridge Controller] Transaction failed silently:\",\n error,\n );\n reject(error);\n return;\n }\n\n // Notification mode - show clickable toast\n // Exception: USER_INTERACTION_REQUIRED goes directly to modal\n if (errorDisplayMode === \"notification\" && !requiresUI) {\n const { toast } = await import(\"./toast\");\n\n let isHandled = false;\n let dismissFn: (() => void) | undefined;\n\n dismissFn = toast({\n variant: \"error\",\n message: error?.message || \"Transaction failed\",\n duration: 10000,\n onClick: () => {\n // Mark as handled and dismiss toast to prevent duplicate clicks\n isHandled = true;\n if (dismissFn) dismissFn();\n\n // Open modal when notification is clicked\n this.modal.open();\n this.keychain\n .execute(calls, undefined, undefined, true, error)\n .then((manualExecute) => {\n if (manualExecute.code === ResponseCodes.SUCCESS) {\n resolve(manualExecute as InvokeFunctionResponse);\n this.modal.close();\n } else {\n reject((manualExecute as ConnectError).error);\n }\n });\n },\n });\n\n // If toast auto-dismisses without being clicked, reject the promise\n // Set timeout slightly longer than toast duration to allow for completion\n setTimeout(() => {\n if (!isHandled) {\n reject(error);\n }\n }, 10100);\n\n return;\n }\n\n // Default modal mode - existing behavior\n // Session call or Paymaster flow failed.\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n true,\n error,\n );\n\n // Manual call succeeded\n if (manualExecute.code === ResponseCodes.SUCCESS) {\n resolve(manualExecute as InvokeFunctionResponse);\n this.modal.close();\n return;\n }\n\n reject((manualExecute as ConnectError).error);\n return;\n });\n }\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n async signMessage(typedData: TypedData): Promise<SIGNATURE> {\n return new Promise(async (resolve, reject) => {\n const sessionSign = await this.keychain.signMessage(typedData, \"\", true);\n\n // Session sign succeeded\n if (!(\"code\" in sessionSign)) {\n resolve(sessionSign as SIGNATURE);\n return;\n }\n\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualSign = await this.keychain.signMessage(typedData, \"\", false);\n\n if (!(\"code\" in manualSign)) {\n resolve(manualSign as SIGNATURE);\n } else {\n reject((manualSign as ConnectError).error);\n }\n this.modal.close();\n });\n }\n}\n\nexport default ControllerAccount;\n","export var MessageType;\n(function (MessageType) {\n MessageType[\"Call\"] = \"call\";\n MessageType[\"Reply\"] = \"reply\";\n MessageType[\"Syn\"] = \"syn\";\n MessageType[\"SynAck\"] = \"synAck\";\n MessageType[\"Ack\"] = \"ack\";\n})(MessageType || (MessageType = {}));\nexport var Resolution;\n(function (Resolution) {\n Resolution[\"Fulfilled\"] = \"fulfilled\";\n Resolution[\"Rejected\"] = \"rejected\";\n})(Resolution || (Resolution = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[\"ConnectionDestroyed\"] = \"ConnectionDestroyed\";\n ErrorCode[\"ConnectionTimeout\"] = \"ConnectionTimeout\";\n ErrorCode[\"NoIframeSrc\"] = \"NoIframeSrc\";\n})(ErrorCode || (ErrorCode = {}));\nexport var NativeErrorName;\n(function (NativeErrorName) {\n NativeErrorName[\"DataCloneError\"] = \"DataCloneError\";\n})(NativeErrorName || (NativeErrorName = {}));\nexport var NativeEventType;\n(function (NativeEventType) {\n NativeEventType[\"Message\"] = \"message\";\n})(NativeEventType || (NativeEventType = {}));\n","export default (localName, log) => {\n const callbacks = [];\n let destroyed = false;\n return {\n destroy(error) {\n if (!destroyed) {\n destroyed = true;\n log(`${localName}: Destroying connection`);\n callbacks.forEach((callback) => {\n callback(error);\n });\n }\n },\n onDestroy(callback) {\n destroyed ? callback() : callbacks.push(callback);\n },\n };\n};\n","export default (debug) => {\n /**\n * Logs a message if debug is enabled.\n */\n return (...args) => {\n if (debug) {\n console.log('[Penpal]', ...args); // eslint-disable-line no-console\n }\n };\n};\n","const DEFAULT_PORT_BY_PROTOCOL = {\n 'http:': '80',\n 'https:': '443',\n};\nconst URL_REGEX = /^(https?:)?\\/\\/([^/:]+)?(:(\\d+))?/;\nconst opaqueOriginSchemes = ['file:', 'data:'];\n/**\n * Converts a src value into an origin.\n */\nexport default (src) => {\n if (src && opaqueOriginSchemes.find((scheme) => src.startsWith(scheme))) {\n // The origin of the child document is an opaque origin and its\n // serialization is \"null\"\n // https://html.spec.whatwg.org/multipage/origin.html#origin\n return 'null';\n }\n // Note that if src is undefined, then srcdoc is being used instead of src\n // and we can follow this same logic below to get the origin of the parent,\n // which is the origin that we will need to use.\n const location = document.location;\n const regexResult = URL_REGEX.exec(src);\n let protocol;\n let hostname;\n let port;\n if (regexResult) {\n // It's an absolute URL. Use the parsed info.\n // regexResult[1] will be undefined if the URL starts with //\n protocol = regexResult[1] ? regexResult[1] : location.protocol;\n hostname = regexResult[2];\n port = regexResult[4];\n }\n else {\n // It's a relative path. Use the current location's info.\n protocol = location.protocol;\n hostname = location.hostname;\n port = location.port;\n }\n // If the port is the default for the protocol, we don't want to add it to the origin string\n // or it won't match the message's event.origin.\n const portSuffix = port && port !== DEFAULT_PORT_BY_PROTOCOL[protocol] ? `:${port}` : '';\n return `${protocol}//${hostname}${portSuffix}`;\n};\n","/**\n * Converts an error object into a plain object.\n */\nexport const serializeError = ({ name, message, stack, }) => ({\n name,\n message,\n stack,\n});\n/**\n * Converts a plain object into an error object.\n */\nexport const deserializeError = (obj) => {\n const deserializedError = new Error();\n // @ts-ignore\n Object.keys(obj).forEach((key) => (deserializedError[key] = obj[key]));\n return deserializedError;\n};\n","import { serializeError } from './errorSerialization';\nimport { MessageType, NativeEventType, NativeErrorName, Resolution, } from './enums';\n/**\n * Listens for \"call\" messages coming from the remote, executes the corresponding method, and\n * responds with the return value.\n */\nexport default (info, serializedMethods, log) => {\n const { localName, local, remote, originForSending, originForReceiving, } = info;\n let destroyed = false;\n const handleMessageEvent = (event) => {\n if (event.source !== remote || event.data.penpal !== MessageType.Call) {\n return;\n }\n if (originForReceiving !== '*' && event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const callMessage = event.data;\n const { methodName, args, id } = callMessage;\n log(`${localName}: Received ${methodName}() call`);\n const createPromiseHandler = (resolution) => {\n return (returnValue) => {\n log(`${localName}: Sending ${methodName}() reply`);\n if (destroyed) {\n // It's possible to throw an error here, but it would need to be thrown asynchronously\n // and would only be catchable using window.onerror. This is because the consumer\n // is merely returning a value from their method and not calling any function\n // that they could wrap in a try-catch. Even if the consumer were to catch the error,\n // the value of doing so is questionable. Instead, we'll just log a message.\n log(`${localName}: Unable to send ${methodName}() reply due to destroyed connection`);\n return;\n }\n const message = {\n penpal: MessageType.Reply,\n id,\n resolution,\n returnValue,\n };\n if (resolution === Resolution.Rejected &&\n returnValue instanceof Error) {\n message.returnValue = serializeError(returnValue);\n message.returnValueIsError = true;\n }\n try {\n remote.postMessage(message, originForSending);\n }\n catch (err) {\n // If a consumer attempts to send an object that's not cloneable (e.g., window),\n // we want to ensure the receiver's promise gets rejected.\n if (err.name === NativeErrorName.DataCloneError) {\n const errorReplyMessage = {\n penpal: MessageType.Reply,\n id,\n resolution: Resolution.Rejected,\n returnValue: serializeError(err),\n returnValueIsError: true,\n };\n remote.postMessage(errorReplyMessage, originForSending);\n }\n throw err;\n }\n };\n };\n new Promise((resolve) => resolve(serializedMethods[methodName]\n .call(serializedMethods, event.origin)\n .apply(serializedMethods, args))).then(createPromiseHandler(Resolution.Fulfilled), createPromiseHandler(Resolution.Rejected));\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n return () => {\n destroyed = true;\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n };\n};\n","let id = 0;\n/**\n * @return {number} A unique ID (not universally unique)\n */\nexport default () => ++id;\n","const KEY_PATH_DELIMITER = '.';\nconst keyPathToSegments = (keyPath) => keyPath ? keyPath.split(KEY_PATH_DELIMITER) : [];\nconst segmentsToKeyPath = (segments) => segments.join(KEY_PATH_DELIMITER);\nconst createKeyPath = (key, prefix) => {\n const segments = keyPathToSegments(prefix || '');\n segments.push(key);\n return segmentsToKeyPath(segments);\n};\n/**\n * Given a `keyPath`, set it to be `value` on `subject`, creating any intermediate\n * objects along the way.\n *\n * @param {Object} subject The object on which to set value.\n * @param {string} keyPath The key path at which to set value.\n * @param {Object} value The value to store at the given key path.\n * @returns {Object} Updated subject.\n */\nexport const setAtKeyPath = (subject, keyPath, value) => {\n const segments = keyPathToSegments(keyPath);\n segments.reduce((prevSubject, key, idx) => {\n if (typeof prevSubject[key] === 'undefined') {\n prevSubject[key] = {};\n }\n if (idx === segments.length - 1) {\n prevSubject[key] = value;\n }\n return prevSubject[key];\n }, subject);\n return subject;\n};\n/**\n * Given a dictionary of (nested) keys to function, flatten them to a map\n * from key path to function.\n *\n * @param {Object} methods The (potentially nested) object to serialize.\n * @param {string} prefix A string with which to prefix entries. Typically not intended to be used by consumers.\n * @returns {Object} An map from key path in `methods` to functions.\n */\nexport const serializeMethods = (methods, prefix) => {\n const flattenedMethods = {};\n Object.keys(methods).forEach((key) => {\n const value = methods[key];\n const keyPath = createKeyPath(key, prefix);\n if (typeof value === 'object') {\n // Recurse into any nested children.\n Object.assign(flattenedMethods, serializeMethods(value, keyPath));\n }\n if (typeof value === 'function') {\n // If we've found a method, expose it.\n flattenedMethods[keyPath] = value;\n }\n });\n return flattenedMethods;\n};\n/**\n * Given a map of key paths to functions, unpack the key paths to an object.\n *\n * @param {Object} flattenedMethods A map of key paths to functions to unpack.\n * @returns {Object} A (potentially nested) map of functions.\n */\nexport const deserializeMethods = (flattenedMethods) => {\n const methods = {};\n for (const keyPath in flattenedMethods) {\n setAtKeyPath(methods, keyPath, flattenedMethods[keyPath]);\n }\n return methods;\n};\n","import generateId from './generateId';\nimport { deserializeError } from './errorSerialization';\nimport { deserializeMethods } from './methodSerialization';\nimport { ErrorCode, MessageType, NativeEventType, Resolution } from './enums';\n/**\n * Augments an object with methods that match those defined by the remote. When these methods are\n * called, a \"call\" message will be sent to the remote, the remote's corresponding method will be\n * executed, and the method's return value will be returned via a message.\n * @param {Object} callSender Sender object that should be augmented with methods.\n * @param {Object} info Information about the local and remote windows.\n * @param {Array} methodKeyPaths Key paths of methods available to be called on the remote.\n * @param {Promise} destructionPromise A promise resolved when destroy() is called on the penpal\n * connection.\n * @returns {Object} The call sender object with methods that may be called.\n */\nexport default (callSender, info, methodKeyPaths, destroyConnection, log) => {\n const { localName, local, remote, originForSending, originForReceiving, } = info;\n let destroyed = false;\n log(`${localName}: Connecting call sender`);\n const createMethodProxy = (methodName) => {\n return (...args) => {\n log(`${localName}: Sending ${methodName}() call`);\n // This handles the case where the iframe has been removed from the DOM\n // (and therefore its window closed), the consumer has not yet\n // called destroy(), and the user calls a method exposed by\n // the remote. We detect the iframe has been removed and force\n // a destroy() immediately so that the consumer sees the error saying\n // the connection has been destroyed. We wrap this check in a try catch\n // because Edge throws an \"Object expected\" error when accessing\n // contentWindow.closed on a contentWindow from an iframe that's been\n // removed from the DOM.\n let iframeRemoved;\n try {\n if (remote.closed) {\n iframeRemoved = true;\n }\n }\n catch (e) {\n iframeRemoved = true;\n }\n if (iframeRemoved) {\n destroyConnection();\n }\n if (destroyed) {\n const error = new Error(`Unable to send ${methodName}() call due ` + `to destroyed connection`);\n error.code = ErrorCode.ConnectionDestroyed;\n throw error;\n }\n return new Promise((resolve, reject) => {\n const id = generateId();\n const handleMessageEvent = (event) => {\n if (event.source !== remote ||\n event.data.penpal !== MessageType.Reply ||\n event.data.id !== id) {\n return;\n }\n if (originForReceiving !== '*' &&\n event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const replyMessage = event.data;\n log(`${localName}: Received ${methodName}() reply`);\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n let returnValue = replyMessage.returnValue;\n if (replyMessage.returnValueIsError) {\n returnValue = deserializeError(returnValue);\n }\n (replyMessage.resolution === Resolution.Fulfilled ? resolve : reject)(returnValue);\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n const callMessage = {\n penpal: MessageType.Call,\n id,\n methodName,\n args,\n };\n remote.postMessage(callMessage, originForSending);\n });\n };\n };\n // Wrap each method in a proxy which sends it to the corresponding receiver.\n const flattenedMethods = methodKeyPaths.reduce((api, name) => {\n api[name] = createMethodProxy(name);\n return api;\n }, {});\n // Unpack the structure of the provided methods object onto the CallSender, exposing\n // the methods in the same shape they were provided.\n Object.assign(callSender, deserializeMethods(flattenedMethods));\n return () => {\n destroyed = true;\n };\n};\n","import connectCallReceiver from '../connectCallReceiver';\nimport connectCallSender from '../connectCallSender';\n/**\n * Handles an ACK handshake message.\n */\nexport default (serializedMethods, childOrigin, originForSending, destructor, log) => {\n const { destroy, onDestroy } = destructor;\n let destroyCallReceiver;\n let receiverMethodNames;\n // We resolve the promise with the call sender. If the child reconnects\n // (for example, after refreshing or navigating to another page that\n // uses Penpal, we'll update the call sender with methods that match the\n // latest provided by the child.\n const callSender = {};\n return (event) => {\n if (childOrigin !== '*' && event.origin !== childOrigin) {\n log(`Parent: Handshake - Received ACK message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received ACK');\n const info = {\n localName: 'Parent',\n local: window,\n remote: event.source,\n originForSending: originForSending,\n originForReceiving: childOrigin,\n };\n // If the child reconnected, we need to destroy the prior call receiver\n // before setting up a new one.\n if (destroyCallReceiver) {\n destroyCallReceiver();\n }\n destroyCallReceiver = connectCallReceiver(info, serializedMethods, log);\n onDestroy(destroyCallReceiver);\n // If the child reconnected, we need to remove the methods from the\n // previous call receiver off the sender.\n if (receiverMethodNames) {\n receiverMethodNames.forEach((receiverMethodName) => {\n delete callSender[receiverMethodName];\n });\n }\n receiverMethodNames = event.data.methodNames;\n const destroyCallSender = connectCallSender(callSender, info, receiverMethodNames, destroy, log);\n onDestroy(destroyCallSender);\n return callSender;\n };\n};\n","import { MessageType } from '../enums';\n/**\n * Handles a SYN handshake message.\n */\nexport default (log, serializedMethods, childOrigin, originForSending) => {\n return (event) => {\n // Under specific timing circumstances, we can receive an event\n // whose source is null. This seems to happen when the child iframe is\n // removed from the DOM about the same time it has sent the SYN event.\n // https://github.com/Aaronius/penpal/issues/85\n if (!event.source) {\n return;\n }\n if (childOrigin !== '*' && event.origin !== childOrigin) {\n log(`Parent: Handshake - Received SYN message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received SYN, responding with SYN-ACK');\n const synAckMessage = {\n penpal: MessageType.SynAck,\n methodNames: Object.keys(serializedMethods),\n };\n event.source.postMessage(synAckMessage, originForSending);\n };\n};\n","const CHECK_IFRAME_IN_DOC_INTERVAL = 60000;\n/**\n * Monitors for iframe removal and destroys connection if iframe\n * is found to have been removed from DOM. This is to prevent memory\n * leaks when the iframe is removed from the document and the consumer\n * hasn't called destroy(). Without this, event listeners attached to\n * the window would stick around and since the event handlers have a\n * reference to the iframe in their closures, the iframe would stick\n * around too.\n */\nexport default (iframe, destructor) => {\n const { destroy, onDestroy } = destructor;\n const checkIframeInDocIntervalId = setInterval(() => {\n if (!iframe.isConnected) {\n clearInterval(checkIframeInDocIntervalId);\n destroy();\n }\n }, CHECK_IFRAME_IN_DOC_INTERVAL);\n onDestroy(() => {\n clearInterval(checkIframeInDocIntervalId);\n });\n};\n","import { ErrorCode } from './enums';\n/**\n * Starts a timeout and calls the callback with an error\n * if the timeout completes before the stop function is called.\n */\nexport default (timeout, callback) => {\n let timeoutId;\n if (timeout !== undefined) {\n timeoutId = window.setTimeout(() => {\n const error = new Error(`Connection timed out after ${timeout}ms`);\n error.code = ErrorCode.ConnectionTimeout;\n callback(error);\n }, timeout);\n }\n return () => {\n clearTimeout(timeoutId);\n };\n};\n","import { ErrorCode } from '../enums';\nexport default (iframe) => {\n if (!iframe.src && !iframe.srcdoc) {\n const error = new Error('Iframe must have src or srcdoc property defined.');\n error.code = ErrorCode.NoIframeSrc;\n throw error;\n }\n};\n","import { MessageType, NativeEventType } from '../enums';\nimport createDestructor from '../createDestructor';\nimport createLogger from '../createLogger';\nimport getOriginFromSrc from './getOriginFromSrc';\nimport handleAckMessageFactory from './handleAckMessageFactory';\nimport handleSynMessageFactory from './handleSynMessageFactory';\nimport { serializeMethods } from '../methodSerialization';\nimport monitorIframeRemoval from './monitorIframeRemoval';\nimport startConnectionTimeout from '../startConnectionTimeout';\nimport validateIframeHasSrcOrSrcDoc from './validateIframeHasSrcOrSrcDoc';\n/**\n * Attempts to establish communication with an iframe.\n */\nexport default (options) => {\n let { iframe, methods = {}, childOrigin, timeout, debug = false } = options;\n const log = createLogger(debug);\n const destructor = createDestructor('Parent', log);\n const { onDestroy, destroy } = destructor;\n if (!childOrigin) {\n validateIframeHasSrcOrSrcDoc(iframe);\n childOrigin = getOriginFromSrc(iframe.src);\n }\n // If event.origin is \"null\", the remote protocol is file: or data: and we\n // must post messages with \"*\" as targetOrigin when sending messages.\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Using_window.postMessage_in_extensions\n const originForSending = childOrigin === 'null' ? '*' : childOrigin;\n const serializedMethods = serializeMethods(methods);\n const handleSynMessage = handleSynMessageFactory(log, serializedMethods, childOrigin, originForSending);\n const handleAckMessage = handleAckMessageFactory(serializedMethods, childOrigin, originForSending, destructor, log);\n const promise = new Promise((resolve, reject) => {\n const stopConnectionTimeout = startConnectionTimeout(timeout, destroy);\n const handleMessage = (event) => {\n if (event.source !== iframe.contentWindow || !event.data) {\n return;\n }\n if (event.data.penpal === MessageType.Syn) {\n handleSynMessage(event);\n return;\n }\n if (event.data.penpal === MessageType.Ack) {\n const callSender = handleAckMessage(event);\n if (callSender) {\n stopConnectionTimeout();\n resolve(callSender);\n }\n return;\n }\n };\n window.addEventListener(NativeEventType.Message, handleMessage);\n log('Parent: Awaiting handshake');\n monitorIframeRemoval(iframe, destructor);\n onDestroy((error) => {\n window.removeEventListener(NativeEventType.Message, handleMessage);\n if (error) {\n reject(error);\n }\n });\n });\n return {\n promise,\n destroy() {\n // Don't allow consumer to pass an error into destroy.\n destroy();\n },\n };\n};\n","const LOCALHOST_HOSTNAMES = new Set([\"localhost\", \"127.0.0.1\", \"::1\", \"[::1]\"]);\n\nexport function isLocalhostHostname(hostname: string): boolean {\n const normalized = hostname.toLowerCase();\n return (\n LOCALHOST_HOSTNAMES.has(normalized) || normalized.endsWith(\".localhost\")\n );\n}\n\n/**\n * Restrict iframe targets to HTTPS in production, while still allowing local HTTP dev.\n */\nexport function validateKeychainIframeUrl(url: URL): void {\n if (url.username || url.password) {\n throw new Error(\"Invalid keychain iframe URL: credentials are not allowed\");\n }\n\n if (url.protocol === \"https:\") {\n return;\n }\n\n if (url.protocol === \"http:\" && isLocalhostHostname(url.hostname)) {\n return;\n }\n\n throw new Error(\n \"Invalid keychain iframe URL: only https:// or local http:// URLs are allowed\",\n );\n}\n\n/**\n * Build a conservative allow list for iframe feature policy.\n * Local network access is only needed for localhost development.\n */\nexport function buildIframeAllowList(url: URL): string {\n const allowFeatures = [\n \"publickey-credentials-create *\",\n \"publickey-credentials-get *\",\n \"clipboard-write\",\n \"payment *\",\n ];\n\n if (isLocalhostHostname(url.hostname)) {\n allowFeatures.push(\"local-network-access *\");\n }\n\n return allowFeatures.join(\"; \");\n}\n","import { AsyncMethodReturns, connectToChild } from \"@cartridge/penpal\";\nimport { Modal } from \"../types\";\nimport { buildIframeAllowList, validateKeychainIframeUrl } from \"./security\";\n\nexport type IFrameOptions<CallSender> = Omit<\n ConstructorParameters<typeof IFrame>[0],\n \"id\" | \"url\" | \"onConnect\"\n> & {\n url?: string;\n onConnect: (child: AsyncMethodReturns<CallSender>) => void;\n};\n\nexport class IFrame<CallSender extends {}> implements Modal {\n url?: URL;\n private iframe?: HTMLIFrameElement;\n private container?: HTMLDivElement;\n private onClose?: () => void;\n private closeTimeout?: NodeJS.Timeout;\n\n constructor({\n id,\n url,\n onClose,\n onConnect,\n methods = {},\n }: {\n id: string;\n url: URL;\n onClose?: () => void;\n onConnect: (child: AsyncMethodReturns<CallSender>) => void;\n methods?: { [key: string]: (...args: any[]) => void };\n }) {\n if (typeof document === \"undefined\" || typeof window === \"undefined\") {\n return;\n }\n\n this.url = url;\n validateKeychainIframeUrl(url);\n\n const docHead = document.head;\n\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n meta.id = \"controller-viewport\";\n meta.content =\n \"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, interactive-widget=resizes-content\";\n docHead.appendChild(meta);\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url.toString();\n iframe.id = id;\n iframe.style.border = \"none\";\n iframe.sandbox.add(\"allow-forms\");\n iframe.sandbox.add(\"allow-popups\");\n iframe.sandbox.add(\"allow-popups-to-escape-sandbox\");\n iframe.sandbox.add(\"allow-scripts\");\n iframe.sandbox.add(\"allow-same-origin\");\n iframe.allow = buildIframeAllowList(url);\n iframe.referrerPolicy = \"no-referrer\";\n iframe.style.scrollbarWidth = \"none\";\n iframe.style.setProperty(\"-ms-overflow-style\", \"none\");\n iframe.style.setProperty(\"-webkit-scrollbar\", \"none\");\n // Enable Storage Access API for the iframe\n // This allows the keychain iframe to request access to its first-party storage\n // when embedded in third-party contexts (other games/apps)\n if (!!document.hasStorageAccess) {\n iframe.sandbox.add(\"allow-storage-access-by-user-activation\");\n }\n\n const container = document.createElement(\"div\");\n container.id = \"controller\";\n container.style.position = \"fixed\";\n container.style.height = \"100%\";\n container.style.width = \"100%\";\n container.style.top = \"0\";\n container.style.left = \"0\";\n container.style.zIndex = \"10000\";\n container.style.backgroundColor = \"rgba(0,0,0,0.6)\";\n container.style.display = \"none\"; // Use display: none to completely hide from password managers\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n container.style.transition = \"opacity 0.2s ease\";\n container.style.opacity = \"0\";\n container.style.pointerEvents = \"auto\";\n container.style.overscrollBehaviorY = \"contain\";\n container.style.scrollbarWidth = \"none\";\n container.style.setProperty(\"-ms-overflow-style\", \"none\");\n container.style.setProperty(\"-webkit-scrollbar\", \"none\");\n container.appendChild(iframe);\n\n // Disables pinch to zoom\n container.addEventListener(\n \"touchstart\",\n (e) => {\n if (e.touches.length > 1) {\n e.preventDefault();\n }\n },\n { passive: false },\n );\n\n container.addEventListener(\n \"touchmove\",\n (e) => {\n if (e.touches.length > 1) {\n e.preventDefault();\n }\n },\n { passive: false },\n );\n\n container.addEventListener(\n \"touchend\",\n (e) => {\n if (e.touches.length > 1) {\n e.preventDefault();\n }\n },\n { passive: false },\n );\n\n this.iframe = iframe;\n this.container = container;\n\n connectToChild<CallSender>({\n iframe: this.iframe,\n childOrigin: url.origin,\n methods: {\n open: (_origin: string) => () => this.open(),\n close: (_origin: string) => () => this.close(),\n reload: (_origin: string) => () => window.location.reload(),\n ...methods,\n },\n })\n .promise.then(onConnect)\n .catch((error) => {\n console.error(\"Failed to establish secure keychain iframe connection\", {\n error,\n childOrigin: url.origin,\n });\n });\n\n this.resize();\n window.addEventListener(\"resize\", () => this.resize());\n\n const observer = new MutationObserver(() => {\n if (typeof document === \"undefined\") return;\n const existingController = document.getElementById(\"controller\");\n if (document.body) {\n if (id === \"controller-keychain\" && !existingController) {\n document.body.appendChild(container);\n observer.disconnect();\n }\n }\n });\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n\n const existingController = document.getElementById(\"controller\");\n if (document.body) {\n if (id === \"controller-keychain\" && !existingController) {\n document.body.appendChild(container);\n }\n }\n\n this.onClose = onClose;\n }\n\n open() {\n if (!this.container || typeof document === \"undefined\" || !document.body)\n return;\n\n // Clear any pending close timeout to prevent race condition\n if (this.closeTimeout) {\n clearTimeout(this.closeTimeout);\n this.closeTimeout = undefined;\n }\n\n document.body.style.overflow = \"hidden\";\n\n this.container.style.display = \"flex\";\n // Use requestAnimationFrame to ensure display change is processed before opacity change\n requestAnimationFrame(() => {\n if (this.container) {\n this.container.style.opacity = \"1\";\n }\n });\n }\n\n close() {\n if (!this.container || typeof document === \"undefined\" || !document.body)\n return;\n this.onClose?.();\n\n document.body.style.overflow = \"auto\";\n\n // Start fade-out transition\n this.container.style.opacity = \"0\";\n\n // Set display: none after transition completes (200ms)\n this.closeTimeout = setTimeout(() => {\n if (this.container) {\n this.container.style.display = \"none\";\n }\n this.closeTimeout = undefined;\n }, 200);\n }\n\n sendBackward() {\n if (!this.container) return;\n this.container.style.zIndex = \"9999\";\n }\n\n sendForward() {\n if (!this.container) return;\n this.container.style.zIndex = \"10000\";\n }\n\n private resize() {\n if (!this.iframe || typeof window === \"undefined\") return;\n\n this.iframe.style.userSelect = \"none\";\n\n if (window.innerWidth < 768) {\n this.iframe.style.height = \"100%\";\n this.iframe.style.width = \"100%\";\n this.iframe.style.borderRadius = \"0\";\n return;\n }\n\n this.iframe.style.height = \"600px\";\n this.iframe.style.width = \"432px\";\n this.iframe.style.borderRadius = \"8px\";\n }\n\n isOpen() {\n return this.container?.style.display !== \"none\";\n }\n}\n","/* Do NOT modify this file; see /src.ts/_admin/update-version.ts */\n/**\n * The current version of Ethers.\n */\nexport const version = \"6.13.7\";\n//# sourceMappingURL=_version.js.map","/**\n * Property helper functions.\n *\n * @_subsection api/utils:Properties [about-properties]\n */\nfunction checkType(value, type, name) {\n const types = type.split(\"|\").map(t => t.trim());\n for (let i = 0; i < types.length; i++) {\n switch (type) {\n case \"any\":\n return;\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n if (typeof (value) === type) {\n return;\n }\n }\n }\n const error = new Error(`invalid value for type ${type}`);\n error.code = \"INVALID_ARGUMENT\";\n error.argument = `value.${name}`;\n error.value = value;\n throw error;\n}\n/**\n * Resolves to a new object that is a copy of %%value%%, but with all\n * values resolved.\n */\nexport async function resolveProperties(value) {\n const keys = Object.keys(value);\n const results = await Promise.all(keys.map((k) => Promise.resolve(value[k])));\n return results.reduce((accum, v, index) => {\n accum[keys[index]] = v;\n return accum;\n }, {});\n}\n/**\n * Assigns the %%values%% to %%target%% as read-only values.\n *\n * It %%types%% is specified, the values are checked.\n */\nexport function defineProperties(target, values, types) {\n for (let key in values) {\n let value = values[key];\n const type = (types ? types[key] : null);\n if (type) {\n checkType(value, type, key);\n }\n Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n }\n}\n//# sourceMappingURL=properties.js.map","/**\n * All errors in ethers include properties to ensure they are both\n * human-readable (i.e. ``.message``) and machine-readable (i.e. ``.code``).\n *\n * The [[isError]] function can be used to check the error ``code`` and\n * provide a type guard for the properties present on that error interface.\n *\n * @_section: api/utils/errors:Errors [about-errors]\n */\nimport { version } from \"../_version.js\";\nimport { defineProperties } from \"./properties.js\";\nfunction stringify(value) {\n if (value == null) {\n return \"null\";\n }\n if (Array.isArray(value)) {\n return \"[ \" + (value.map(stringify)).join(\", \") + \" ]\";\n }\n if (value instanceof Uint8Array) {\n const HEX = \"0123456789abcdef\";\n let result = \"0x\";\n for (let i = 0; i < value.length; i++) {\n result += HEX[value[i] >> 4];\n result += HEX[value[i] & 0xf];\n }\n return result;\n }\n if (typeof (value) === \"object\" && typeof (value.toJSON) === \"function\") {\n return stringify(value.toJSON());\n }\n switch (typeof (value)) {\n case \"boolean\":\n case \"symbol\":\n return value.toString();\n case \"bigint\":\n return BigInt(value).toString();\n case \"number\":\n return (value).toString();\n case \"string\":\n return JSON.stringify(value);\n case \"object\": {\n const keys = Object.keys(value);\n keys.sort();\n return \"{ \" + keys.map((k) => `${stringify(k)}: ${stringify(value[k])}`).join(\", \") + \" }\";\n }\n }\n return `[ COULD NOT SERIALIZE ]`;\n}\n/**\n * Returns true if the %%error%% matches an error thrown by ethers\n * that matches the error %%code%%.\n *\n * In TypeScript environments, this can be used to check that %%error%%\n * matches an EthersError type, which means the expected properties will\n * be set.\n *\n * @See [ErrorCodes](api:ErrorCode)\n * @example\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, \"CALL_EXCEPTION\")) {\n * // The Type Guard has validated this object\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\n/**\n * Returns true if %%error%% is a [[CallExceptionError].\n */\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/**\n * Returns a new Error configured to the format ethers emits errors, with\n * the %%message%%, [[api:ErrorCode]] %%code%% and additional properties\n * for the corresponding EthersError.\n *\n * Each error in ethers includes the version of ethers, a\n * machine-readable [[ErrorCode]], and depending on %%code%%, additional\n * required properties. The error message will also include the %%message%%,\n * ethers version, %%code%% and all additional properties, serialized.\n */\nexport function makeError(message, code, info) {\n let shortMessage = message;\n {\n const details = [];\n if (info) {\n if (\"message\" in info || \"code\" in info || \"name\" in info) {\n throw new Error(`value will overwrite populated values: ${stringify(info)}`);\n }\n for (const key in info) {\n if (key === \"shortMessage\") {\n continue;\n }\n const value = (info[key]);\n // try {\n details.push(key + \"=\" + stringify(value));\n // } catch (error: any) {\n // console.log(\"MMM\", error.message);\n // details.push(key + \"=[could not serialize object]\");\n // }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n let error;\n switch (code) {\n case \"INVALID_ARGUMENT\":\n error = new TypeError(message);\n break;\n case \"NUMERIC_FAULT\":\n case \"BUFFER_OVERRUN\":\n error = new RangeError(message);\n break;\n default:\n error = new Error(message);\n }\n defineProperties(error, { code });\n if (info) {\n Object.assign(error, info);\n }\n if (error.shortMessage == null) {\n defineProperties(error, { shortMessage });\n }\n return error;\n}\n/**\n * Throws an EthersError with %%message%%, %%code%% and additional error\n * %%info%% when %%check%% is falsish..\n *\n * @see [[api:makeError]]\n */\nexport function assert(check, message, code, info) {\n if (!check) {\n throw makeError(message, code, info);\n }\n}\n/**\n * A simple helper to simply ensuring provided arguments match expected\n * constraints, throwing if not.\n *\n * In TypeScript environments, the %%check%% has been asserted true, so\n * any further code does not need additional compile-time checks.\n */\nexport function assertArgument(check, message, name, value) {\n assert(check, message, \"INVALID_ARGUMENT\", { argument: name, value: value });\n}\nexport function assertArgumentCount(count, expectedCount, message) {\n if (message == null) {\n message = \"\";\n }\n if (message) {\n message = \": \" + message;\n }\n assert(count >= expectedCount, \"missing argument\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n assert(count <= expectedCount, \"too many arguments\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n}\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\n/**\n * Throws if the normalization %%form%% is not supported.\n */\nexport function assertNormalize(form) {\n assert(_normalizeForms.indexOf(form) >= 0, \"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n}\n/**\n * Many classes use file-scoped values to guard the constructor,\n * making it effectively private. This facilitates that pattern\n * by ensuring the %%givenGaurd%% matches the file-scoped %%guard%%,\n * throwing if not, indicating the %%className%% if provided.\n */\nexport function assertPrivate(givenGuard, guard, className) {\n if (className == null) {\n className = \"\";\n }\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n assert(false, `private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n}\n//# sourceMappingURL=errors.js.map","/**\n * Some data helpers.\n *\n *\n * @_subsection api/utils:Data Helpers [about-data]\n */\nimport { assert, assertArgument } from \"./errors.js\";\nfunction _getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n assertArgument(false, \"invalid BytesLike value\", name || \"value\", value);\n}\n/**\n * Get a typed Uint8Array for %%value%%. If already a Uint8Array\n * the original %%value%% is returned; if a copy is required use\n * [[getBytesCopy]].\n *\n * @see: getBytesCopy\n */\nexport function getBytes(value, name) {\n return _getBytes(value, name, false);\n}\n/**\n * Get a typed Uint8Array for %%value%%, creating a copy if necessary\n * to prevent any modifications of the returned value from being\n * reflected elsewhere.\n *\n * @see: getBytes\n */\nexport function getBytesCopy(value, name) {\n return _getBytes(value, name, true);\n}\n/**\n * Returns true if %%value%% is a valid [[HexString]].\n *\n * If %%length%% is ``true`` or a //number//, it also checks that\n * %%value%% is a valid [[DataHexString]] of %%length%% (if a //number//)\n * bytes of data (e.g. ``0x1234`` is 2 bytes).\n */\nexport function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/**\n * Returns true if %%value%% is a valid representation of arbitrary\n * data (i.e. a valid [[DataHexString]] or a Uint8Array).\n */\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\nconst HexCharacters = \"0123456789abcdef\";\n/**\n * Returns a [[DataHexString]] representation of %%data%%.\n */\nexport function hexlify(data) {\n const bytes = getBytes(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\n/**\n * Returns a [[DataHexString]] by concatenating all values\n * within %%data%%.\n */\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\n/**\n * Returns the length of %%data%%, in bytes.\n */\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return getBytes(data).length;\n}\n/**\n * Returns a [[DataHexString]] by slicing %%data%% from the %%start%%\n * offset to the %%end%% offset.\n *\n * By default %%start%% is 0 and %%end%% is the length of %%data%%.\n */\nexport function dataSlice(data, start, end) {\n const bytes = getBytes(data);\n if (end != null && end > bytes.length) {\n assert(false, \"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\n/**\n * Return the [[DataHexString]] result by stripping all **leading**\n ** zero bytes from %%data%%.\n */\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.startsWith(\"00\")) {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\nfunction zeroPad(data, length, left) {\n const bytes = getBytes(data);\n assert(length >= bytes.length, \"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **left**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **values** are in Solidity\n * (e.g. ``uint128``).\n */\nexport function zeroPadValue(data, length) {\n return zeroPad(data, length, true);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **right**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **bytes** are in Solidity\n * (e.g. ``bytes16``).\n */\nexport function zeroPadBytes(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=data.js.map","/**\n * Cryptographic hashing functions\n *\n * @_subsection: api/crypto:Hash Functions [about-crypto-hashing]\n */\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { getBytes, hexlify } from \"../utils/index.js\";\nlet locked = false;\nconst _keccak256 = function (data) {\n return keccak_256(data);\n};\nlet __keccak256 = _keccak256;\n/**\n * Compute the cryptographic KECCAK256 hash of %%data%%.\n *\n * The %%data%% **must** be a data representation, to compute the\n * hash of UTF-8 data use the [[id]] function.\n *\n * @returns DataHexstring\n * @example:\n * keccak256(\"0x\")\n * //_result:\n *\n * keccak256(\"0x1337\")\n * //_result:\n *\n * keccak256(new Uint8Array([ 0x13, 0x37 ]))\n * //_result:\n *\n * // Strings are assumed to be DataHexString, otherwise it will\n * // throw. To hash UTF-8 data, see the note above.\n * keccak256(\"Hello World\")\n * //_error:\n */\nexport function keccak256(_data) {\n const data = getBytes(_data, \"data\");\n return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function () { locked = true; };\nkeccak256.register = function (func) {\n if (locked) {\n throw new TypeError(\"keccak256 is locked\");\n }\n __keccak256 = func;\n};\nObject.freeze(keccak256);\n//# sourceMappingURL=keccak.js.map","import { keccak256 } from \"../crypto/index.js\";\nimport { getBytes, assertArgument } from \"../utils/index.js\";\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\nfunction getChecksumAddress(address) {\n // if (!isHexString(address, 20)) {\n // logger.throwArgumentError(\"invalid address\", \"address\", address);\n // }\n address = address.toLowerCase();\n const chars = address.substring(2).split(\"\");\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n const hashed = getBytes(keccak256(expanded));\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return \"0x\" + chars.join(\"\");\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nconst ibanLookup = {};\nfor (let i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (let i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = \"0\" + checksum;\n }\n return checksum;\n}\n;\nconst Base36 = (function () {\n ;\n const result = {};\n for (let i = 0; i < 36; i++) {\n const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n result[key] = BigInt(i);\n }\n return result;\n})();\nfunction fromBase36(value) {\n value = value.toLowerCase();\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result = result * BN_36 + Base36[value[i]];\n }\n return result;\n}\n/**\n * Returns a normalized and checksumed address for %%address%%.\n * This accepts non-checksum addresses, checksum addresses and\n * [[getIcapAddress]] formats.\n *\n * The checksum in Ethereum uses the capitalization (upper-case\n * vs lower-case) of the characters within an address to encode\n * its checksum, which offers, on average, a checksum of 15-bits.\n *\n * If %%address%% contains both upper-case and lower-case, it is\n * assumed to already be a checksum address and its checksum is\n * validated, and if the address fails its expected checksum an\n * error is thrown.\n *\n * If you wish the checksum of %%address%% to be ignore, it should\n * be converted to lower-case (i.e. ``.toLowercase()``) before\n * being passed in. This should be a very rare situation though,\n * that you wish to bypass the safegaurds in place to protect\n * against an address that has been incorrectly copied from another\n * source.\n *\n * @example:\n * // Adds the checksum (via upper-casing specific letters)\n * getAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\")\n * //_result:\n *\n * // Converts ICAP address and adds checksum\n * getAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n * //_result:\n *\n * // Throws an error if an address contains mixed case,\n * // but the checksum fails\n * getAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\")\n * //_error:\n */\nexport function getAddress(address) {\n assertArgument(typeof (address) === \"string\", \"invalid address\", \"address\", address);\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (!address.startsWith(\"0x\")) {\n address = \"0x\" + address;\n }\n const result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n assertArgument(!address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) || result === address, \"bad address checksum\", \"address\", address);\n return result;\n }\n // Maybe ICAP? (we only support direct mode)\n if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n assertArgument(address.substring(2, 4) === ibanChecksum(address), \"bad icap checksum\", \"address\", address);\n let result = fromBase36(address.substring(4)).toString(16);\n while (result.length < 40) {\n result = \"0\" + result;\n }\n return getChecksumAddress(\"0x\" + result);\n }\n assertArgument(false, \"invalid address\", \"address\", address);\n}\n/**\n * The [ICAP Address format](link-icap) format is an early checksum\n * format which attempts to be compatible with the banking\n * industry [IBAN format](link-wiki-iban) for bank accounts.\n *\n * It is no longer common or a recommended format.\n *\n * @example:\n * getIcapAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\");\n * //_result:\n *\n * getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n * //_result:\n *\n * // Throws an error if the ICAP checksum is wrong\n * getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK37\");\n * //_error:\n */\nexport function getIcapAddress(address) {\n //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n while (base36.length < 30) {\n base36 = \"0\" + base36;\n }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n//# sourceMappingURL=address.js.map","import { Call, TypedData, StarknetWindowObject } from \"@starknet-io/types-js\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\nexport class ArgentWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"argent\";\n readonly platform: ExternalPlatform = \"starknet\";\n private wallet: StarknetWindowObject | undefined = undefined;\n private account: string | undefined = undefined;\n private connectedAccounts: string[] = [];\n private accountChangeListener: ((accounts?: string[]) => void) | undefined =\n undefined;\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.starknet_argentX;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available\n ? window.starknet_argentX?.version || \"Unknown\"\n : undefined,\n chainId: available ? window.starknet_argentX?.chainId : undefined,\n name: \"Argent\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Argent is not available\");\n }\n\n const wallet = window.starknet_argentX as StarknetWindowObject;\n if (!wallet) {\n throw new Error(\"No wallet found\");\n }\n\n // Request accounts from the wallet\n const accounts = await wallet.request({\n type: \"wallet_requestAccounts\",\n params: { silent_mode: false },\n });\n\n if (!accounts || accounts.length === 0) {\n throw new Error(\"No accounts found\");\n }\n\n this.removeAccountChangeListener();\n\n this.wallet = wallet;\n this.account = accounts[0];\n this.connectedAccounts = accounts;\n this.setupAccountChangeListener();\n return { success: true, wallet: this.type, account: this.account };\n } catch (error) {\n console.error(`Error connecting to Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n getConnectedAccounts(): string[] {\n return this.connectedAccounts;\n }\n\n async signTypedData(data: TypedData): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.wallet) {\n throw new Error(\"Argent is not connected\");\n }\n\n const sig = await this.wallet.request({\n type: \"wallet_signTypedData\",\n params: data,\n });\n\n return { success: true, wallet: this.type, result: sig };\n } catch (error) {\n console.error(`Error signing typed data with Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(calls: Call[]): Promise<ExternalWalletResponse> {\n if (!this.wallet) {\n throw new Error(\"No wallet found\");\n }\n\n try {\n const result = await this.wallet.request({\n type: \"wallet_addInvokeTransaction\",\n params: {\n calls,\n },\n });\n\n return {\n success: true,\n wallet: this.type,\n result,\n };\n } catch (error) {\n console.error(`Error sending transaction with Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async switchChain(chainId: string): Promise<boolean> {\n if (!this.wallet) {\n throw new Error(\"No wallet found\");\n }\n\n const result = await this.wallet.request({\n type: \"wallet_switchStarknetChain\",\n params: {\n chainId,\n },\n });\n\n return result;\n }\n\n async getBalance(\n _tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.wallet) {\n throw new Error(\"Argent is not connected\");\n }\n\n // TODO: Implement balance fetching based on Argent's API\n return {\n success: true,\n wallet: this.type,\n result: \"Implement based on Argent API\",\n };\n } catch (error) {\n console.error(`Error getting balance from Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async waitForTransaction(\n _txHash: string,\n _timeoutMs?: number,\n ): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"waitForTransaction not supported for Argent wallet\",\n };\n }\n\n private setupAccountChangeListener(): void {\n if (!this.wallet) return;\n\n this.accountChangeListener = (accounts: string[] | undefined) => {\n if (accounts && accounts.length > 0) {\n this.account = accounts[0];\n this.connectedAccounts = accounts;\n } else {\n this.account = undefined;\n this.connectedAccounts = [];\n }\n };\n\n // Listen for account changes\n this.wallet.on(\"accountsChanged\", this.accountChangeListener);\n }\n\n private removeAccountChangeListener(): void {\n if (this.wallet && this.accountChangeListener) {\n this.wallet.off(\"accountsChanged\", this.accountChangeListener);\n this.accountChangeListener = undefined;\n }\n }\n\n disconnect(): void {\n this.removeAccountChangeListener();\n this.wallet = undefined;\n this.account = undefined;\n this.connectedAccounts = [];\n }\n}\n","/**\n * Announces an EIP-1193 Provider.\n */\nexport function announceProvider(detail) {\n const event = new CustomEvent('eip6963:announceProvider', { detail: Object.freeze(detail) });\n window.dispatchEvent(event);\n const handler = () => window.dispatchEvent(event);\n window.addEventListener('eip6963:requestProvider', handler);\n return () => window.removeEventListener('eip6963:requestProvider', handler);\n}\n/**\n * Watches for EIP-1193 Providers to be announced.\n */\nexport function requestProviders(listener) {\n if (typeof window === 'undefined')\n return;\n const handler = (event) => listener(event.detail);\n window.addEventListener('eip6963:announceProvider', handler);\n window.dispatchEvent(new CustomEvent('eip6963:requestProvider'));\n return () => window.removeEventListener('eip6963:announceProvider', handler);\n}\n//# sourceMappingURL=utils.js.map","import { requestProviders } from './utils.js';\nexport function createStore() {\n const listeners = new Set();\n let providerDetails = [];\n const request = () => requestProviders((providerDetail) => {\n if (providerDetails.some(({ info }) => info.uuid === providerDetail.info.uuid))\n return;\n providerDetails = [...providerDetails, providerDetail];\n listeners.forEach((listener) => listener(providerDetails, { added: [providerDetail] }));\n });\n let unwatch = request();\n return {\n _listeners() {\n return listeners;\n },\n clear() {\n listeners.forEach((listener) => listener([], { removed: [...providerDetails] }));\n providerDetails = [];\n },\n destroy() {\n this.clear();\n listeners.clear();\n unwatch?.();\n },\n findProvider({ rdns }) {\n return providerDetails.find((providerDetail) => providerDetail.info.rdns === rdns);\n },\n getProviders() {\n return providerDetails;\n },\n reset() {\n this.clear();\n unwatch?.();\n unwatch = request();\n },\n subscribe(listener, { emitImmediately } = {}) {\n listeners.add(listener);\n if (emitImmediately)\n listener(providerDetails, { added: providerDetails });\n return () => listeners.delete(listener);\n },\n };\n}\n//# sourceMappingURL=store.js.map","import { constants, num } from \"starknet\";\nimport type { ExternalPlatform } from \"./types\";\n\nconst PLATFORMS: Record<string, ExternalPlatform> = {\n \"0x1\": \"ethereum\", // ethereum mainnet\n \"0xaa36a7\": \"ethereum\", // ethereum sepolia\n \"0x14a34\": \"base\", // base mainnet\n \"0x2105\": \"base\", // base sepolia\n \"0x66eee\": \"arbitrum\", // arbitrum mainnet\n \"0xa4b1\": \"arbitrum\", // arbitrum sepolia\n \"0xa\": \"optimism\", // op mainnet\n \"0xaa37dc\": \"optimism\", // op sepolia\n [constants.StarknetChainId.SN_MAIN]: \"starknet\",\n [constants.StarknetChainId.SN_SEPOLIA]: \"starknet\",\n};\n\nexport const chainIdToPlatform = (\n chainId: string,\n): ExternalPlatform | undefined => {\n const hex = num.toHex(chainId);\n const platform = PLATFORMS[hex];\n if (!platform) {\n console.warn(`Unknown chain ID: ${hex}`);\n }\n return platform;\n};\n","import { getAddress } from \"ethers/address\";\nimport { createStore, EIP6963ProviderDetail } from \"mipd\";\nimport { isMobile } from \"../utils\";\nimport { chainIdToPlatform } from \"./platform\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"./types\";\n\nexport abstract class EthereumWalletBase implements WalletAdapter {\n abstract readonly type: ExternalWalletType;\n abstract readonly rdns: string;\n abstract readonly displayName: string;\n\n platform: ExternalPlatform | undefined;\n protected account: string | undefined = undefined;\n protected store = createStore();\n protected provider: EIP6963ProviderDetail | undefined;\n protected connectedAccounts: string[] = [];\n\n constructor() {\n this.initializeIfAvailable();\n }\n\n private getProvider(): EIP6963ProviderDetail | undefined {\n if (!this.provider) {\n this.provider = this.store\n .getProviders()\n .find((provider) => provider.info.rdns === this.rdns);\n }\n return this.provider;\n }\n\n private getEthereumProvider(): any {\n const provider = this.getProvider();\n if (provider) {\n return provider.provider;\n }\n\n // Fallback for MetaMask when not announced via EIP-6963\n if (\n this.rdns === \"io.metamask\" &&\n typeof window !== \"undefined\" &&\n (window as any).ethereum?.isMetaMask\n ) {\n return (window as any).ethereum;\n }\n\n return null;\n }\n\n private initializeIfAvailable(): void {\n const provider = this.getProvider();\n if (provider && !this.initialized) {\n this.initialized = true;\n this.initializeProvider();\n }\n }\n\n private initialized = false;\n\n private initializeProvider(): void {\n const provider = this.getProvider();\n if (!provider) return;\n\n provider.provider\n .request({\n method: \"eth_accounts\",\n })\n .then((accounts) => {\n this.connectedAccounts = accounts.map(getAddress);\n if (accounts.length > 0) {\n this.account = getAddress(accounts[0]);\n }\n })\n .catch(console.error);\n\n provider.provider\n .request({\n method: \"eth_chainId\",\n })\n .then((chainId) => {\n this.platform = chainIdToPlatform(chainId);\n })\n .catch(console.error);\n\n provider.provider?.on(\"chainChanged\", (chainId: string) => {\n this.platform = chainIdToPlatform(chainId);\n });\n\n provider.provider?.on(\"accountsChanged\", (accounts: string[]) => {\n if (accounts) {\n this.connectedAccounts = accounts.map((account) => getAddress(account));\n this.account =\n accounts.length > 0 ? getAddress(accounts[0]) : undefined;\n }\n });\n }\n\n isAvailable(): boolean {\n if (isMobile()) {\n return false;\n }\n\n // Check dynamically each time, as the provider might be announced after instantiation\n const provider = this.getProvider();\n\n // Also check for MetaMask via window.ethereum as a fallback for MetaMask specifically\n if (\n !provider &&\n this.rdns === \"io.metamask\" &&\n typeof window !== \"undefined\"\n ) {\n // MetaMask might be available via window.ethereum even if not announced via EIP-6963 yet\n return !!(window as any).ethereum?.isMetaMask;\n }\n\n // Initialize if we just found the provider\n if (provider && !this.initialized) {\n this.initializeIfAvailable();\n }\n\n return typeof window !== \"undefined\" && !!provider;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available ? window.ethereum?.version || \"Unknown\" : undefined,\n chainId: available ? window.ethereum?.chainId : undefined,\n name: this.displayName,\n platform: this.platform,\n connectedAccounts: this.connectedAccounts,\n };\n }\n\n getConnectedAccounts(): string[] {\n return this.connectedAccounts;\n }\n\n async connect(address?: string): Promise<ExternalWalletResponse<any>> {\n if (address && this.connectedAccounts.includes(getAddress(address))) {\n this.account = getAddress(address);\n }\n\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(`${this.displayName} is not available`);\n }\n\n let ethereum: any;\n const provider = this.getProvider();\n\n if (provider) {\n ethereum = provider.provider;\n } else if (\n this.rdns === \"io.metamask\" &&\n (window as any).ethereum?.isMetaMask\n ) {\n // Fallback for MetaMask when not announced via EIP-6963\n ethereum = (window as any).ethereum;\n }\n\n if (!ethereum) {\n throw new Error(`${this.displayName} provider not found`);\n }\n\n const accounts = await ethereum.request({\n method: \"eth_requestAccounts\",\n });\n\n if (accounts && accounts.length > 0) {\n this.account = getAddress(accounts[0]);\n this.connectedAccounts = accounts.map(getAddress);\n\n // If we used the fallback, store the ethereum provider for future use\n if (!provider && this.rdns === \"io.metamask\") {\n // Create a mock EIP6963ProviderDetail for consistency\n this.provider = {\n info: {\n uuid: \"metamask-fallback\",\n name: \"MetaMask\",\n icon: \"data:image/svg+xml;base64,\",\n rdns: \"io.metamask\",\n },\n provider: ethereum,\n } as EIP6963ProviderDetail;\n this.initializeIfAvailable();\n }\n\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to ${this.displayName}:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTransaction(\n transaction: any,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const result = await ethereum.request({\n method: \"eth_sendTransaction\",\n params: [transaction],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(\n `Error signing transaction with ${this.displayName}:`,\n error,\n );\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signMessage(\n message: string | `0x${string}`,\n address?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} provider not found`);\n }\n const result = await ethereum.request({\n method: \"personal_sign\",\n params: [message, address || this.account] as any,\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing message with ${this.displayName}:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTypedData(data: any): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const result = await ethereum.request({\n method: \"eth_signTypedData_v4\",\n params: [this.account, JSON.stringify(data)] as any,\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(\n `Error signing typed data with ${this.displayName}:`,\n error,\n );\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(txn: any): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const result = await ethereum.request({\n method: \"eth_sendTransaction\",\n params: [txn],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(\n `Error sending transaction with ${this.displayName}:`,\n error,\n );\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async switchChain(chainId: string): Promise<boolean> {\n try {\n if (!this.isAvailable()) {\n throw new Error(`${this.displayName} is not available`);\n }\n\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n try {\n await ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId }],\n });\n\n this.platform = chainIdToPlatform(chainId);\n return true;\n } catch (error) {\n if ((error as any).code === 4902) {\n console.warn(`Chain not added to ${this.displayName}`);\n }\n throw error;\n }\n } catch (error) {\n console.error(`Error switching chain for ${this.displayName}:`, error);\n return false;\n }\n }\n\n async getBalance(\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n if (tokenAddress) {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented for ERC20\",\n };\n } else {\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const balance = await ethereum.request({\n method: \"eth_getBalance\",\n params: [this.account, \"latest\"] as any,\n });\n return { success: true, wallet: this.type, result: balance };\n }\n } catch (error) {\n console.error(`Error getting balance from ${this.displayName}:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async waitForTransaction(\n txHash: string,\n timeoutMs: number = 60000,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable()) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const ethereum = this.getEthereumProvider();\n if (!ethereum) {\n throw new Error(`${this.displayName} is not connected`);\n }\n\n const startTime = Date.now();\n const pollInterval = 1000; // 1 second\n\n while (Date.now() - startTime < timeoutMs) {\n const receipt = await ethereum.request({\n method: \"eth_getTransactionReceipt\",\n params: [txHash as `0x${string}`],\n });\n\n if (receipt) {\n return {\n success: true,\n wallet: this.type,\n result: receipt,\n };\n }\n\n // Wait before polling again\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n\n throw new Error(\"Transaction confirmation timed out\");\n } catch (error) {\n console.error(\n `Error waiting for transaction with ${this.displayName}:`,\n error,\n );\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","import { ExternalWalletType } from \"../types\";\nimport { EthereumWalletBase } from \"../ethereum-base\";\n\nexport class BaseWallet extends EthereumWalletBase {\n readonly type: ExternalWalletType = \"base\";\n readonly rdns = \"com.coinbase.wallet\";\n readonly displayName = \"Base Wallet\";\n}\n","import { ExternalWalletType } from \"../types\";\nimport { EthereumWalletBase } from \"../ethereum-base\";\n\nexport class MetaMaskWallet extends EthereumWalletBase {\n readonly type: ExternalWalletType = \"metamask\";\n readonly rdns = \"io.metamask\";\n readonly displayName = \"MetaMask\";\n}\n","/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\nfunction isArrayOf(isString, arr) {\n if (!Array.isArray(arr))\n return false;\n if (arr.length === 0)\n return true;\n if (isString) {\n return arr.every((item) => typeof item === 'string');\n }\n else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\n// no abytes: seems to have 10% slowdown. Why?!\nfunction afn(input) {\n if (typeof input !== 'function')\n throw new Error('function expected');\n return true;\n}\nfunction astr(label, input) {\n if (typeof input !== 'string')\n throw new Error(`${label}: string expected`);\n return true;\n}\nfunction anumber(n) {\n if (!Number.isSafeInteger(n))\n throw new Error(`invalid integer: ${n}`);\n}\nfunction aArr(input) {\n if (!Array.isArray(input))\n throw new Error('array expected');\n}\nfunction astrArr(label, input) {\n if (!isArrayOf(true, input))\n throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label, input) {\n if (!isArrayOf(false, input))\n throw new Error(`${label}: array of numbers expected`);\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain(...args) {\n const id = (a) => a;\n // Wrap call in closure so JIT can inline calls\n const wrap = (a, b) => (c) => a(b(c));\n // Construct chain of args[-1].encode(args[-2].encode([...]))\n const encode = args.map((x) => x.encode).reduceRight(wrap, id);\n // Construct chain of args[0].decode(args[1].decode(...))\n const decode = args.map((x) => x.decode).reduce(wrap, id);\n return { encode, decode };\n}\n/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters) {\n // mapping 1 to \"b\"\n const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n const len = lettersA.length;\n astrArr('alphabet', lettersA);\n // mapping \"b\" to 1\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(`alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`);\n return lettersA[i];\n });\n },\n decode: (input) => {\n aArr(input);\n return input.map((letter) => {\n astr('alphabet.decode', letter);\n const i = indexes.get(letter);\n if (i === undefined)\n throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n },\n };\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = '') {\n astr('join', separator);\n return {\n encode: (from) => {\n astrArr('join.decode', from);\n return from.join(separator);\n },\n decode: (to) => {\n astr('join.decode', to);\n return to.split(separator);\n },\n };\n}\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits, chr = '=') {\n anumber(bits);\n astr('padding', chr);\n return {\n encode(data) {\n astrArr('padding.encode', data);\n while ((data.length * bits) % 8)\n data.push(chr);\n return data;\n },\n decode(input) {\n astrArr('padding.decode', input);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('padding: invalid, string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0)\n throw new Error('padding: invalid, string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize(fn) {\n afn(fn);\n return { encode: (from) => from, decode: (to) => fn(to) };\n}\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data, from, to) {\n // base 1 is impossible\n if (from < 2)\n throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n if (to < 2)\n throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n aArr(data);\n if (!data.length)\n return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data, (d) => {\n anumber(d);\n if (d < 0 || d >= from)\n throw new Error(`invalid integer: ${d}`);\n return d;\n });\n const dlen = digits.length;\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < dlen; i++) {\n const digit = digits[i];\n const fromCarry = from * carry;\n const digitBase = fromCarry + digit;\n if (!Number.isSafeInteger(digitBase) ||\n fromCarry / from !== carry ||\n digitBase - digit !== fromCarry) {\n throw new Error('convertRadix: carry overflow');\n }\n const div = digitBase / to;\n carry = digitBase % to;\n const rounded = Math.floor(div);\n digits[i] = rounded;\n if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done)\n continue;\n else if (!rounded)\n pos = i;\n else\n done = false;\n }\n res.push(carry);\n if (done)\n break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++)\n res.push(0);\n return res.reverse();\n}\nconst gcd = (a, b) => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from, to) => from + (to - gcd(from, to));\nconst powers = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++)\n res.push(2 ** i);\n return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data, from, to, padding) {\n aArr(data);\n if (from <= 0 || from > 32)\n throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32)\n throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`);\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const max = powers[from];\n const mask = powers[to] - 1;\n const res = [];\n for (const n of data) {\n anumber(n);\n if (n >= max)\n throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32)\n throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to)\n res.push(((carry >> (pos - to)) & mask) >>> 0);\n const pow = powers[pos];\n if (pow === undefined)\n throw new Error('invalid carry');\n carry &= pow - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from)\n throw new Error('Excess padding');\n if (!padding && carry > 0)\n throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0)\n res.push(carry >>> 0);\n return res;\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num) {\n anumber(num);\n const _256 = 2 ** 8;\n return {\n encode: (bytes) => {\n if (!isBytes(bytes))\n throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), _256, num);\n },\n decode: (digits) => {\n anumArr('radix.decode', digits);\n return Uint8Array.from(convertRadix(digits, num, _256));\n },\n };\n}\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits, revPadding = false) {\n anumber(bits);\n if (bits <= 0 || bits > 32)\n throw new Error('radix2: bits should be in (0..32]');\n if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n throw new Error('radix2: carry overflow');\n return {\n encode: (bytes) => {\n if (!isBytes(bytes))\n throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits) => {\n anumArr('radix2.decode', digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\nfunction unsafeWrapper(fn) {\n afn(fn);\n return function (...args) {\n try {\n return fn.apply(null, args);\n }\n catch (e) { }\n };\n}\nfunction checksum(len, fn) {\n anumber(len);\n afn(fn);\n return {\n encode(data) {\n if (!isBytes(data))\n throw new Error('checksum.encode: input should be Uint8Array');\n const sum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(sum, data.length);\n return res;\n },\n decode(data) {\n if (!isBytes(data))\n throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const oldChecksum = data.slice(-len);\n const newChecksum = fn(payload).slice(0, len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i])\n throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\n// prettier-ignore\nexport const utils = {\n alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n// RFC 4648 aka RFC 3548\n// ---------------------\n/**\n * base16 encoding from RFC 4648.\n * @example\n * ```js\n * base16.encode(Uint8Array.from([0x12, 0xab]));\n * // => '12AB'\n * ```\n */\nexport const base16 = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\n/**\n * base32 encoding from RFC 4648. Has padding.\n * Use `base32nopad` for unpadded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ===='\n * base32.decode('CKVQ====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32 = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), padding(5), join(''));\n/**\n * base32 encoding from RFC 4648. No padding.\n * Use `base32` for padded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ'\n * base32nopad.decode('CKVQ');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32nopad = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), join(''));\n/**\n * base32 encoding from RFC 4648. Padded. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hexnopad` for unpadded version.\n * @example\n * ```js\n * base32hex.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG===='\n * base32hex.decode('2ALG====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hex = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), padding(5), join(''));\n/**\n * base32 encoding from RFC 4648. No padding. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hex` for padded version.\n * @example\n * ```js\n * base32hexnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG'\n * base32hexnopad.decode('2ALG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hexnopad = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), join(''));\n/**\n * base32 encoding from RFC 4648. Doug Crockford's version.\n * https://www.crockford.com/base32.html\n * @example\n * ```js\n * base32crockford.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ANG'\n * base32crockford.decode('2ANG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32crockford = chain(radix2(5), alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'), join(''), normalize((s) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1')));\n// Built-in base64 conversion https://caniuse.com/mdn-javascript_builtins_uint8array_frombase64\n// TODO: temporarily set to false, trying to understand bugs\n// prettier-ignore\nconst hasBase64Builtin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toBase64 === 'function' &&\n typeof Uint8Array.fromBase64 === 'function')();\n/**\n * base64 from RFC 4648. Padded.\n * Use `base64nopad` for unpadded version.\n * Also check out `base64url`, `base64urlnopad`.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64 = hasBase64Builtin ? {\n encode(b) { abytes(b); return b.toBase64(); },\n decode(s) {\n astr('base64', s);\n return Uint8Array.fromBase64(s, { lastChunkHandling: 'strict' });\n },\n} : chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), padding(6), join(''));\n/**\n * base64 from RFC 4648. No padding.\n * Use `base64` for padded version.\n * @example\n * ```js\n * base64nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64nopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64nopad = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), join(''));\n/**\n * base64 from RFC 4648, using URL-safe alphabet. Padded.\n * Use `base64urlnopad` for unpadded version.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64url.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64url.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64url = hasBase64Builtin ? {\n encode(b) { abytes(b); return b.toBase64({ alphabet: 'base64url' }); },\n decode(s) { astr('base64', s); return Uint8Array.fromBase64(s, { alphabet: 'base64url' }); },\n} : chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), padding(6), join(''));\n/**\n * base64 from RFC 4648, using URL-safe alphabet. No padding.\n * Use `base64url` for padded version.\n * @example\n * ```js\n * base64urlnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64urlnopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64urlnopad = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), join(''));\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc) => chain(radix(58), alphabet(abc), join(''));\n/**\n * base58: base64 without ambigous characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n * @example\n * ```js\n * base58.decode('01abcdef');\n * // => '3UhJW'\n * ```\n */\nexport const base58 = genBase58('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');\n/**\n * base58: flickr version. Check out `base58`.\n */\nexport const base58flickr = genBase58('123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ');\n/**\n * base58: XRP version. Check out `base58`.\n */\nexport const base58xrp = genBase58('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz');\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n/**\n * base58: XMR version. Check out `base58`.\n * Done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n * Block encoding significantly reduces quadratic complexity of base58.\n */\nexport const base58xmr = {\n encode(data) {\n let res = '';\n for (let i = 0; i < data.length; i += 8) {\n const block = data.subarray(i, i + 8);\n res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length], '1');\n }\n return res;\n },\n decode(str) {\n let res = [];\n for (let i = 0; i < str.length; i += 11) {\n const slice = str.slice(i, i + 11);\n const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n const block = base58.decode(slice);\n for (let j = 0; j < block.length - blockLen; j++) {\n if (block[j] !== 0)\n throw new Error('base58xmr: wrong padding');\n }\n res = res.concat(Array.from(block.slice(block.length - blockLen)));\n }\n return Uint8Array.from(res);\n },\n};\n/**\n * Method, which creates base58check encoder.\n * Requires function, calculating sha256.\n */\nexport const createBase58check = (sha256) => chain(checksum(4, (data) => sha256(sha256(data))), base58);\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexport const base58check = createBase58check;\nconst BECH_ALPHABET = chain(alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'), join(''));\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre) {\n const b = pre >> 25;\n let chk = (pre & 0x1ffffff) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if (((b >> i) & 1) === 1)\n chk ^= POLYMOD_GENERATORS[i];\n }\n return chk;\n}\nfunction bechChecksum(prefix, words, encodingConst = 1) {\n const len = prefix.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126)\n throw new Error(`Invalid prefix (${prefix})`);\n chk = bech32Polymod(chk) ^ (c >> 5);\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++)\n chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words)\n chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++)\n chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]], 30, 5, false));\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding) {\n const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n const _words = radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n function encode(prefix, words, limit = 90) {\n astr('bech32.encode prefix', prefix);\n if (isBytes(words))\n words = Array.from(words);\n anumArr('bech32.encode', words);\n const plen = prefix.length;\n if (plen === 0)\n throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n const lowered = prefix.toLowerCase();\n const sum = bechChecksum(lowered, words, ENCODING_CONST);\n return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}`;\n }\n function decode(str, limit = 90) {\n astr('bech32.decode input', str);\n const slen = str.length;\n if (slen < 8 || (limit !== false && slen > limit))\n throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n // don't allow mixed case\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n const sepIndex = lowered.lastIndexOf('1');\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix = lowered.slice(0, sepIndex);\n const data = lowered.slice(sepIndex + 1);\n if (data.length < 6)\n throw new Error('Data must be at least 6 characters long');\n const words = BECH_ALPHABET.decode(data).slice(0, -6);\n const sum = bechChecksum(prefix, words, ENCODING_CONST);\n if (!data.endsWith(sum))\n throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n const decodeUnsafe = unsafeWrapper(decode);\n function decodeToBytes(str) {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n function encodeFromBytes(prefix, bytes) {\n return encode(prefix, toWords(bytes));\n }\n return {\n encode,\n decode,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords,\n };\n}\n/**\n * bech32 from BIP 173. Operates on words.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32 = genBech32('bech32');\n/**\n * bech32m from BIP 350. Operates on words.\n * It was to mitigate `bech32` weaknesses.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32m = genBech32('bech32m');\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * ```js\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n * ```\n */\nexport const utf8 = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\n// prettier-ignore\nconst hasHexBuiltin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toHex === 'function' &&\n typeof Uint8Array.fromHex === 'function')();\n// prettier-ignore\nconst hexBuiltin = {\n encode(data) { abytes(data); return data.toHex(); },\n decode(s) { astr('hex', s); return Uint8Array.fromHex(s); },\n};\n/**\n * hex string decoder. Uses built-in function, when available.\n * @example\n * ```js\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n * ```\n */\nexport const hex = hasHexBuiltin\n ? hexBuiltin\n : chain(radix2(4), alphabet('0123456789abcdef'), join(''), normalize((s) => {\n if (typeof s !== 'string' || s.length % 2 !== 0)\n throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);\n return s.toLowerCase();\n }));\n// prettier-ignore\nconst CODERS = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\nconst coderTypeError = 'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n/** @deprecated */\nexport const bytesToString = (type, bytes) => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (!isBytes(bytes))\n throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\n/** @deprecated */\nexport const str = bytesToString; // as in python, but for bytes only\n/** @deprecated */\nexport const stringToBytes = (type, str) => {\n if (!CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (typeof str !== 'string')\n throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\n/** @deprecated */\nexport const bytes = stringToBytes;\n//# sourceMappingURL=index.js.map","import { hex as baseHex, utf8 } from '@scure/base';\n/**\n * Define complex binary structures using composable primitives.\n * Main ideas:\n * - Encode / decode can be chained, same as in `scure-base`\n * - A complex structure can be created from an array and struct of primitive types\n * - Strings / bytes are arrays with specific optimizations: we can just read bytes directly\n * without creating plain array first and reading each byte separately.\n * - Types are inferred from definition\n * @module\n * @example\n * import * as P from 'micro-packed';\n * const s = P.struct({\n * field1: P.U32BE, // 32-bit unsigned big-endian integer\n * field2: P.string(P.U8), // String with U8 length prefix\n * field3: P.bytes(32), // 32 bytes\n * field4: P.array(P.U16BE, P.struct({ // Array of structs with U16BE length\n * subField1: P.U64BE, // 64-bit unsigned big-endian integer\n * subField2: P.string(10) // 10-byte string\n * }))\n * });\n */\n// TODO: remove dependency on scure-base & inline?\n/*\nExports can be groupped like this:\n\n- Primitive types: P.bytes, P.string, P.hex, P.constant, P.pointer\n- Complex types: P.array, P.struct, P.tuple, P.map, P.tag, P.mappedTag\n- Padding, prefix, magic: P.padLeft, P.padRight, P.prefix, P.magic, P.magicBytes\n- Flags: P.flag, P.flagged, P.optional\n- Wrappers: P.apply, P.wrap, P.lazy\n- Bit fiddling: P.bits, P.bitset\n- utils: P.validate, coders.decimal\n- Debugger\n*/\n/** Shortcut to zero-length (empty) byte array */\nexport const EMPTY = /* @__PURE__ */ new Uint8Array();\n/** Shortcut to one-element (element is 0) byte array */\nexport const NULL = /* @__PURE__ */ new Uint8Array([0]);\n/** Checks if two Uint8Arrays are equal. Not constant-time. */\nfunction equalBytes(a, b) {\n if (a.length !== b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (a[i] !== b[i])\n return false;\n return true;\n}\n/** Checks if the given value is a Uint8Array. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/**\n * Concatenates multiple Uint8Arrays.\n * Engines limit functions to 65K+ arguments.\n * @param arrays Array of Uint8Array elements\n * @returns Concatenated Uint8Array\n */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n if (!isBytes(a))\n throw new Error('Uint8Array expected');\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n/**\n * Creates DataView from Uint8Array\n * @param arr - bytes\n * @returns DataView\n */\nconst createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n/**\n * Checks if the provided value is a plain object, not created from any class or special constructor.\n * Array, Uint8Array and others are not plain objects.\n * @param obj - The value to be checked.\n */\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\nfunction isNum(num) {\n return Number.isSafeInteger(num);\n}\nexport const utils = {\n equalBytes,\n isBytes,\n isCoder,\n checkBounds,\n concatBytes,\n createView,\n isPlainObject,\n};\n// NOTE: we can't have terminator separate function, since it won't know about boundaries\n// E.g. array of U16LE ([1,2,3]) would be [1, 0, 2, 0, 3, 0]\n// But terminator will find array at index '1', which happens to be inside of an element itself\n/**\n * Can be:\n * - Dynamic (CoderType)\n * - Fixed (number)\n * - Terminated (usually zero): Uint8Array with terminator\n * - Field path to field with length (string)\n * - Infinity (null) - decodes until end of buffer\n * Used in:\n * - bytes (string, prefix is implementation of bytes)\n * - array\n */\nconst lengthCoder = (len) => {\n if (len !== null && typeof len !== 'string' && !isCoder(len) && !isBytes(len) && !isNum(len)) {\n throw new Error(`lengthCoder: expected null | number | Uint8Array | CoderType, got ${len} (${typeof len})`);\n }\n return {\n encodeStream(w, value) {\n if (len === null)\n return;\n if (isCoder(len))\n return len.encodeStream(w, value);\n let byteLen;\n if (typeof len === 'number')\n byteLen = len;\n else if (typeof len === 'string')\n byteLen = Path.resolve(w.stack, len);\n if (typeof byteLen === 'bigint')\n byteLen = Number(byteLen);\n if (byteLen === undefined || byteLen !== value)\n throw w.err(`Wrong length: ${byteLen} len=${len} exp=${value} (${typeof value})`);\n },\n decodeStream(r) {\n let byteLen;\n if (isCoder(len))\n byteLen = Number(len.decodeStream(r));\n else if (typeof len === 'number')\n byteLen = len;\n else if (typeof len === 'string')\n byteLen = Path.resolve(r.stack, len);\n if (typeof byteLen === 'bigint')\n byteLen = Number(byteLen);\n if (typeof byteLen !== 'number')\n throw r.err(`Wrong length: ${byteLen}`);\n return byteLen;\n },\n };\n};\n/**\n * Small bitset structure to store position of ranges that have been read.\n * Can be more efficient when internal trees are utilized at the cost of complexity.\n * Needs `O(N/8)` memory for parsing.\n * Purpose: if there are pointers in parsed structure,\n * they can cause read of two distinct ranges:\n * [0-32, 64-128], which means 'pos' is not enough to handle them\n */\nconst Bitset = {\n BITS: 32,\n FULL_MASK: -1 >>> 0, // 1<<32 will overflow\n len: (len) => Math.ceil(len / 32),\n create: (len) => new Uint32Array(Bitset.len(len)),\n clean: (bs) => bs.fill(0),\n debug: (bs) => Array.from(bs).map((i) => (i >>> 0).toString(2).padStart(32, '0')),\n checkLen: (bs, len) => {\n if (Bitset.len(len) === bs.length)\n return;\n throw new Error(`wrong length=${bs.length}. Expected: ${Bitset.len(len)}`);\n },\n chunkLen: (bsLen, pos, len) => {\n if (pos < 0)\n throw new Error(`wrong pos=${pos}`);\n if (pos + len > bsLen)\n throw new Error(`wrong range=${pos}/${len} of ${bsLen}`);\n },\n set: (bs, chunk, value, allowRewrite = true) => {\n if (!allowRewrite && (bs[chunk] & value) !== 0)\n return false;\n bs[chunk] |= value;\n return true;\n },\n pos: (pos, i) => ({\n chunk: Math.floor((pos + i) / 32),\n mask: 1 << (32 - ((pos + i) % 32) - 1),\n }),\n indices: (bs, len, invert = false) => {\n Bitset.checkLen(bs, len);\n const { FULL_MASK, BITS } = Bitset;\n const left = BITS - (len % BITS);\n const lastMask = left ? (FULL_MASK >>> left) << left : FULL_MASK;\n const res = [];\n for (let i = 0; i < bs.length; i++) {\n let c = bs[i];\n if (invert)\n c = ~c; // allows to gen unset elements\n // apply mask to last element, so we won't iterate non-existent items\n if (i === bs.length - 1)\n c &= lastMask;\n if (c === 0)\n continue; // fast-path\n for (let j = 0; j < BITS; j++) {\n const m = 1 << (BITS - j - 1);\n if (c & m)\n res.push(i * BITS + j);\n }\n }\n return res;\n },\n range: (arr) => {\n const res = [];\n let cur;\n for (const i of arr) {\n if (cur === undefined || i !== cur.pos + cur.length)\n res.push((cur = { pos: i, length: 1 }));\n else\n cur.length += 1;\n }\n return res;\n },\n rangeDebug: (bs, len, invert = false) => `[${Bitset.range(Bitset.indices(bs, len, invert))\n .map((i) => `(${i.pos}/${i.length})`)\n .join(', ')}]`,\n setRange: (bs, bsLen, pos, len, allowRewrite = true) => {\n Bitset.chunkLen(bsLen, pos, len);\n const { FULL_MASK, BITS } = Bitset;\n // Try to set range with maximum efficiency:\n // - first chunk is always '0000[1111]' (only right ones)\n // - middle chunks are set to '[1111 1111]' (all ones)\n // - last chunk is always '[1111]0000' (only left ones)\n // - max operations: (N/32) + 2 (first and last)\n const first = pos % BITS ? Math.floor(pos / BITS) : undefined;\n const lastPos = pos + len;\n const last = lastPos % BITS ? Math.floor(lastPos / BITS) : undefined;\n // special case, whole range inside single chunk\n if (first !== undefined && first === last)\n return Bitset.set(bs, first, (FULL_MASK >>> (BITS - len)) << (BITS - len - pos), allowRewrite);\n if (first !== undefined) {\n if (!Bitset.set(bs, first, FULL_MASK >>> pos % BITS, allowRewrite))\n return false; // first chunk\n }\n // middle chunks\n const start = first !== undefined ? first + 1 : pos / BITS;\n const end = last !== undefined ? last : lastPos / BITS;\n for (let i = start; i < end; i++)\n if (!Bitset.set(bs, i, FULL_MASK, allowRewrite))\n return false;\n if (last !== undefined && first !== last)\n if (!Bitset.set(bs, last, FULL_MASK << (BITS - (lastPos % BITS)), allowRewrite))\n return false; // last chunk\n return true;\n },\n};\nconst Path = {\n /**\n * Internal method for handling stack of paths (debug, errors, dynamic fields via path)\n * This is looks ugly (callback), but allows us to force stack cleaning by construction (.pop always after function).\n * Also, this makes impossible:\n * - pushing field when stack is empty\n * - pushing field inside of field (real bug)\n * NOTE: we don't want to do '.pop' on error!\n */\n pushObj: (stack, obj, objFn) => {\n const last = { obj };\n stack.push(last);\n objFn((field, fieldFn) => {\n last.field = field;\n fieldFn();\n last.field = undefined;\n });\n stack.pop();\n },\n path: (stack) => {\n const res = [];\n for (const i of stack)\n if (i.field !== undefined)\n res.push(i.field);\n return res.join('/');\n },\n err: (name, stack, msg) => {\n const err = new Error(`${name}(${Path.path(stack)}): ${typeof msg === 'string' ? msg : msg.message}`);\n if (msg instanceof Error && msg.stack)\n err.stack = msg.stack;\n return err;\n },\n resolve: (stack, path) => {\n const parts = path.split('/');\n const objPath = stack.map((i) => i.obj);\n let i = 0;\n for (; i < parts.length; i++) {\n if (parts[i] === '..')\n objPath.pop();\n else\n break;\n }\n let cur = objPath.pop();\n for (; i < parts.length; i++) {\n if (!cur || cur[parts[i]] === undefined)\n return undefined;\n cur = cur[parts[i]];\n }\n return cur;\n },\n};\n/**\n * Internal structure. Reader class for reading from a byte array.\n * `stack` is internal: for debugger and logging\n * @class Reader\n */\nclass _Reader {\n constructor(data, opts = {}, stack = [], parent = undefined, parentOffset = 0) {\n this.pos = 0;\n this.bitBuf = 0;\n this.bitPos = 0;\n this.data = data;\n this.opts = opts;\n this.stack = stack;\n this.parent = parent;\n this.parentOffset = parentOffset;\n this.view = createView(data);\n }\n /** Internal method for pointers. */\n _enablePointers() {\n if (this.parent)\n return this.parent._enablePointers();\n if (this.bs)\n return;\n this.bs = Bitset.create(this.data.length);\n Bitset.setRange(this.bs, this.data.length, 0, this.pos, this.opts.allowMultipleReads);\n }\n markBytesBS(pos, len) {\n if (this.parent)\n return this.parent.markBytesBS(this.parentOffset + pos, len);\n if (!len)\n return true;\n if (!this.bs)\n return true;\n return Bitset.setRange(this.bs, this.data.length, pos, len, false);\n }\n markBytes(len) {\n const pos = this.pos;\n this.pos += len;\n const res = this.markBytesBS(pos, len);\n if (!this.opts.allowMultipleReads && !res)\n throw this.err(`multiple read pos=${this.pos} len=${len}`);\n return res;\n }\n pushObj(obj, objFn) {\n return Path.pushObj(this.stack, obj, objFn);\n }\n readView(n, fn) {\n if (!Number.isFinite(n))\n throw this.err(`readView: wrong length=${n}`);\n if (this.pos + n > this.data.length)\n throw this.err('readView: Unexpected end of buffer');\n const res = fn(this.view, this.pos);\n this.markBytes(n);\n return res;\n }\n // read bytes by absolute offset\n absBytes(n) {\n if (n > this.data.length)\n throw new Error('Unexpected end of buffer');\n return this.data.subarray(n);\n }\n finish() {\n if (this.opts.allowUnreadBytes)\n return;\n if (this.bitPos) {\n throw this.err(`${this.bitPos} bits left after unpack: ${baseHex.encode(this.data.slice(this.pos))}`);\n }\n if (this.bs && !this.parent) {\n const notRead = Bitset.indices(this.bs, this.data.length, true);\n if (notRead.length) {\n const formatted = Bitset.range(notRead)\n .map(({ pos, length }) => `(${pos}/${length})[${baseHex.encode(this.data.subarray(pos, pos + length))}]`)\n .join(', ');\n throw this.err(`unread byte ranges: ${formatted} (total=${this.data.length})`);\n }\n else\n return; // all bytes read, everything is ok\n }\n // Default: no pointers enabled\n if (!this.isEnd()) {\n throw this.err(`${this.leftBytes} bytes ${this.bitPos} bits left after unpack: ${baseHex.encode(this.data.slice(this.pos))}`);\n }\n }\n // User methods\n err(msg) {\n return Path.err('Reader', this.stack, msg);\n }\n offsetReader(n) {\n if (n > this.data.length)\n throw this.err('offsetReader: Unexpected end of buffer');\n return new _Reader(this.absBytes(n), this.opts, this.stack, this, n);\n }\n bytes(n, peek = false) {\n if (this.bitPos)\n throw this.err('readBytes: bitPos not empty');\n if (!Number.isFinite(n))\n throw this.err(`readBytes: wrong length=${n}`);\n if (this.pos + n > this.data.length)\n throw this.err('readBytes: Unexpected end of buffer');\n const slice = this.data.subarray(this.pos, this.pos + n);\n if (!peek)\n this.markBytes(n);\n return slice;\n }\n byte(peek = false) {\n if (this.bitPos)\n throw this.err('readByte: bitPos not empty');\n if (this.pos + 1 > this.data.length)\n throw this.err('readBytes: Unexpected end of buffer');\n const data = this.data[this.pos];\n if (!peek)\n this.markBytes(1);\n return data;\n }\n get leftBytes() {\n return this.data.length - this.pos;\n }\n get totalBytes() {\n return this.data.length;\n }\n isEnd() {\n return this.pos >= this.data.length && !this.bitPos;\n }\n // bits are read in BE mode (left to right): (0b1000_0000).readBits(1) == 1\n bits(bits) {\n if (bits > 32)\n throw this.err('BitReader: cannot read more than 32 bits in single call');\n let out = 0;\n while (bits) {\n if (!this.bitPos) {\n this.bitBuf = this.byte();\n this.bitPos = 8;\n }\n const take = Math.min(bits, this.bitPos);\n this.bitPos -= take;\n out = (out << take) | ((this.bitBuf >> this.bitPos) & (2 ** take - 1));\n this.bitBuf &= 2 ** this.bitPos - 1;\n bits -= take;\n }\n // Fix signed integers\n return out >>> 0;\n }\n find(needle, pos = this.pos) {\n if (!isBytes(needle))\n throw this.err(`find: needle is not bytes! ${needle}`);\n if (this.bitPos)\n throw this.err('findByte: bitPos not empty');\n if (!needle.length)\n throw this.err(`find: needle is empty`);\n // indexOf should be faster than full equalBytes check\n for (let idx = pos; (idx = this.data.indexOf(needle[0], idx)) !== -1; idx++) {\n if (idx === -1)\n return;\n const leftBytes = this.data.length - idx;\n if (leftBytes < needle.length)\n return;\n if (equalBytes(needle, this.data.subarray(idx, idx + needle.length)))\n return idx;\n }\n return;\n }\n}\n/**\n * Internal structure. Writer class for writing to a byte array.\n * The `stack` argument of constructor is internal, for debugging and logs.\n * @class Writer\n */\nclass _Writer {\n constructor(stack = []) {\n this.pos = 0;\n // We could have a single buffer here and re-alloc it with\n // x1.5-2 size each time it full, but it will be slower:\n // basic/encode bench: 395ns -> 560ns\n this.buffers = [];\n this.ptrs = [];\n this.bitBuf = 0;\n this.bitPos = 0;\n this.viewBuf = new Uint8Array(8);\n this.finished = false;\n this.stack = stack;\n this.view = createView(this.viewBuf);\n }\n pushObj(obj, objFn) {\n return Path.pushObj(this.stack, obj, objFn);\n }\n writeView(len, fn) {\n if (this.finished)\n throw this.err('buffer: finished');\n if (!isNum(len) || len > 8)\n throw new Error(`wrong writeView length=${len}`);\n fn(this.view);\n this.bytes(this.viewBuf.slice(0, len));\n this.viewBuf.fill(0);\n }\n // User methods\n err(msg) {\n if (this.finished)\n throw this.err('buffer: finished');\n return Path.err('Reader', this.stack, msg);\n }\n bytes(b) {\n if (this.finished)\n throw this.err('buffer: finished');\n if (this.bitPos)\n throw this.err('writeBytes: ends with non-empty bit buffer');\n this.buffers.push(b);\n this.pos += b.length;\n }\n byte(b) {\n if (this.finished)\n throw this.err('buffer: finished');\n if (this.bitPos)\n throw this.err('writeByte: ends with non-empty bit buffer');\n this.buffers.push(new Uint8Array([b]));\n this.pos++;\n }\n finish(clean = true) {\n if (this.finished)\n throw this.err('buffer: finished');\n if (this.bitPos)\n throw this.err('buffer: ends with non-empty bit buffer');\n // Can't use concatBytes, because it limits amount of arguments (65K).\n const buffers = this.buffers.concat(this.ptrs.map((i) => i.buffer));\n const sum = buffers.map((b) => b.length).reduce((a, b) => a + b, 0);\n const buf = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < buffers.length; i++) {\n const a = buffers[i];\n buf.set(a, pad);\n pad += a.length;\n }\n for (let pos = this.pos, i = 0; i < this.ptrs.length; i++) {\n const ptr = this.ptrs[i];\n buf.set(ptr.ptr.encode(pos), ptr.pos);\n pos += ptr.buffer.length;\n }\n // Cleanup\n if (clean) {\n // We cannot cleanup buffers here, since it can be static user provided buffer.\n // Only '.byte' and '.bits' create buffer which we can safely clean.\n // for (const b of this.buffers) b.fill(0);\n this.buffers = [];\n for (const p of this.ptrs)\n p.buffer.fill(0);\n this.ptrs = [];\n this.finished = true;\n this.bitBuf = 0;\n }\n return buf;\n }\n bits(value, bits) {\n if (bits > 32)\n throw this.err('writeBits: cannot write more than 32 bits in single call');\n if (value >= 2 ** bits)\n throw this.err(`writeBits: value (${value}) >= 2**bits (${bits})`);\n while (bits) {\n const take = Math.min(bits, 8 - this.bitPos);\n this.bitBuf = (this.bitBuf << take) | (value >> (bits - take));\n this.bitPos += take;\n bits -= take;\n value &= 2 ** bits - 1;\n if (this.bitPos === 8) {\n this.bitPos = 0;\n this.buffers.push(new Uint8Array([this.bitBuf]));\n this.pos++;\n }\n }\n }\n}\n// Immutable LE<->BE\nconst swapEndianness = (b) => Uint8Array.from(b).reverse();\n/** Internal function for checking bit bounds of bigint in signed/unsinged form */\nfunction checkBounds(value, bits, signed) {\n if (signed) {\n // [-(2**(32-1)), 2**(32-1)-1]\n const signBit = 2n ** (bits - 1n);\n if (value < -signBit || value >= signBit)\n throw new Error(`value out of signed bounds. Expected ${-signBit} <= ${value} < ${signBit}`);\n }\n else {\n // [0, 2**32-1]\n if (0n > value || value >= 2n ** bits)\n throw new Error(`value out of unsigned bounds. Expected 0 <= ${value} < ${2n ** bits}`);\n }\n}\nfunction _wrap(inner) {\n return {\n // NOTE: we cannot export validate here, since it is likely mistake.\n encodeStream: inner.encodeStream,\n decodeStream: inner.decodeStream,\n size: inner.size,\n encode: (value) => {\n const w = new _Writer();\n inner.encodeStream(w, value);\n return w.finish();\n },\n decode: (data, opts = {}) => {\n const r = new _Reader(data, opts);\n const res = inner.decodeStream(r);\n r.finish();\n return res;\n },\n };\n}\n/**\n * Validates a value before encoding and after decoding using a provided function.\n * @param inner - The inner CoderType.\n * @param fn - The validation function.\n * @returns CoderType which check value with validation function.\n * @example\n * const val = (n: number) => {\n * if (n > 10) throw new Error(`${n} > 10`);\n * return n;\n * };\n *\n * const RangedInt = P.validate(P.U32LE, val); // Will check if value is <= 10 during encoding and decoding\n */\nexport function validate(inner, fn) {\n if (!isCoder(inner))\n throw new Error(`validate: invalid inner value ${inner}`);\n if (typeof fn !== 'function')\n throw new Error('validate: fn should be function');\n return _wrap({\n size: inner.size,\n encodeStream: (w, value) => {\n let res;\n try {\n res = fn(value);\n }\n catch (e) {\n throw w.err(e);\n }\n inner.encodeStream(w, res);\n },\n decodeStream: (r) => {\n const res = inner.decodeStream(r);\n try {\n return fn(res);\n }\n catch (e) {\n throw r.err(e);\n }\n },\n });\n}\n/**\n * Wraps a stream encoder into a generic encoder and optionally validation function\n * @param {inner} inner BytesCoderStream & { validate?: Validate<T> }.\n * @returns The wrapped CoderType.\n * @example\n * const U8 = P.wrap({\n * encodeStream: (w: Writer, value: number) => w.byte(value),\n * decodeStream: (r: Reader): number => r.byte()\n * });\n * const checkedU8 = P.wrap({\n * encodeStream: (w: Writer, value: number) => w.byte(value),\n * decodeStream: (r: Reader): number => r.byte()\n * validate: (n: number) => {\n * if (n > 10) throw new Error(`${n} > 10`);\n * return n;\n * }\n * });\n */\nexport const wrap = (inner) => {\n const res = _wrap(inner);\n return inner.validate ? validate(res, inner.validate) : res;\n};\nconst isBaseCoder = (elm) => isPlainObject(elm) && typeof elm.decode === 'function' && typeof elm.encode === 'function';\n/**\n * Checks if the given value is a CoderType.\n * @param elm - The value to check.\n * @returns True if the value is a CoderType, false otherwise.\n */\nexport function isCoder(elm) {\n return (isPlainObject(elm) &&\n isBaseCoder(elm) &&\n typeof elm.encodeStream === 'function' &&\n typeof elm.decodeStream === 'function' &&\n (elm.size === undefined || isNum(elm.size)));\n}\n// Coders (like in @scure/base) for common operations\n/**\n * Base coder for working with dictionaries (records, objects, key-value map)\n * Dictionary is dynamic type like: `[key: string, value: any][]`\n * @returns base coder that encodes/decodes between arrays of key-value tuples and dictionaries.\n * @example\n * const dict: P.CoderType<Record<string, number>> = P.apply(\n * P.array(P.U16BE, P.tuple([P.cstring, P.U32LE] as const)),\n * P.coders.dict()\n * );\n */\nfunction dict() {\n return {\n encode: (from) => {\n if (!Array.isArray(from))\n throw new Error('array expected');\n const to = {};\n for (const item of from) {\n if (!Array.isArray(item) || item.length !== 2)\n throw new Error(`array of two elements expected`);\n const name = item[0];\n const value = item[1];\n if (to[name] !== undefined)\n throw new Error(`key(${name}) appears twice in struct`);\n to[name] = value;\n }\n return to;\n },\n decode: (to) => {\n if (!isPlainObject(to))\n throw new Error(`expected plain object, got ${to}`);\n return Object.entries(to);\n },\n };\n}\n/**\n * Safely converts bigint to number.\n * Sometimes pointers / tags use u64 or other big numbers which cannot be represented by number,\n * but we still can use them since real value will be smaller than u32\n */\nconst numberBigint = {\n encode: (from) => {\n if (typeof from !== 'bigint')\n throw new Error(`expected bigint, got ${typeof from}`);\n if (from > BigInt(Number.MAX_SAFE_INTEGER))\n throw new Error(`element bigger than MAX_SAFE_INTEGER=${from}`);\n return Number(from);\n },\n decode: (to) => {\n if (!isNum(to))\n throw new Error('element is not a safe integer');\n return BigInt(to);\n },\n};\n/**\n * Base coder for working with TypeScript enums.\n * @param e - TypeScript enum.\n * @returns base coder that encodes/decodes between numbers and enum keys.\n * @example\n * enum Color { Red, Green, Blue }\n * const colorCoder = P.coders.tsEnum(Color);\n * colorCoder.encode(Color.Red); // 'Red'\n * colorCoder.decode('Green'); // 1\n */\nfunction tsEnum(e) {\n if (!isPlainObject(e))\n throw new Error('plain object expected');\n return {\n encode: (from) => {\n if (!isNum(from) || !(from in e))\n throw new Error(`wrong value ${from}`);\n return e[from];\n },\n decode: (to) => {\n if (typeof to !== 'string')\n throw new Error(`wrong value ${typeof to}`);\n return e[to];\n },\n };\n}\n/**\n * Base coder for working with decimal numbers.\n * @param precision - Number of decimal places.\n * @param round - Round fraction part if bigger than precision (throws error by default)\n * @returns base coder that encodes/decodes between bigints and decimal strings.\n * @example\n * const decimal8 = P.coders.decimal(8);\n * decimal8.encode(630880845n); // '6.30880845'\n * decimal8.decode('6.30880845'); // 630880845n\n */\nfunction decimal(precision, round = false) {\n if (!isNum(precision))\n throw new Error(`decimal/precision: wrong value ${precision}`);\n if (typeof round !== 'boolean')\n throw new Error(`decimal/round: expected boolean, got ${typeof round}`);\n const decimalMask = 10n ** BigInt(precision);\n return {\n encode: (from) => {\n if (typeof from !== 'bigint')\n throw new Error(`expected bigint, got ${typeof from}`);\n let s = (from < 0n ? -from : from).toString(10);\n let sep = s.length - precision;\n if (sep < 0) {\n s = s.padStart(s.length - sep, '0');\n sep = 0;\n }\n let i = s.length - 1;\n for (; i >= sep && s[i] === '0'; i--)\n ;\n let int = s.slice(0, sep);\n let frac = s.slice(sep, i + 1);\n if (!int)\n int = '0';\n if (from < 0n)\n int = '-' + int;\n if (!frac)\n return int;\n return `${int}.${frac}`;\n },\n decode: (to) => {\n if (typeof to !== 'string')\n throw new Error(`expected string, got ${typeof to}`);\n if (to === '-0')\n throw new Error(`negative zero is not allowed`);\n let neg = false;\n if (to.startsWith('-')) {\n neg = true;\n to = to.slice(1);\n }\n if (!/^(0|[1-9]\\d*)(\\.\\d+)?$/.test(to))\n throw new Error(`wrong string value=${to}`);\n let sep = to.indexOf('.');\n sep = sep === -1 ? to.length : sep;\n // split by separator and strip trailing zeros from fraction. always returns [string, string] (.split doesn't).\n const intS = to.slice(0, sep);\n const fracS = to.slice(sep + 1).replace(/0+$/, '');\n const int = BigInt(intS) * decimalMask;\n if (!round && fracS.length > precision) {\n throw new Error(`fractional part cannot be represented with this precision (num=${to}, prec=${precision})`);\n }\n const fracLen = Math.min(fracS.length, precision);\n const frac = BigInt(fracS.slice(0, fracLen)) * 10n ** BigInt(precision - fracLen);\n const value = int + frac;\n return neg ? -value : value;\n },\n };\n}\n/**\n * Combines multiple coders into a single coder, allowing conditional encoding/decoding based on input.\n * Acts as a parser combinator, splitting complex conditional coders into smaller parts.\n *\n * `encode = [Ae, Be]; decode = [Ad, Bd]`\n * ->\n * `match([{encode: Ae, decode: Ad}, {encode: Be; decode: Bd}])`\n *\n * @param lst - Array of coders to match.\n * @returns Combined coder for conditional encoding/decoding.\n */\nfunction match(lst) {\n if (!Array.isArray(lst))\n throw new Error(`expected array, got ${typeof lst}`);\n for (const i of lst)\n if (!isBaseCoder(i))\n throw new Error(`wrong base coder ${i}`);\n return {\n encode: (from) => {\n for (const c of lst) {\n const elm = c.encode(from);\n if (elm !== undefined)\n return elm;\n }\n throw new Error(`match/encode: cannot find match in ${from}`);\n },\n decode: (to) => {\n for (const c of lst) {\n const elm = c.decode(to);\n if (elm !== undefined)\n return elm;\n }\n throw new Error(`match/decode: cannot find match in ${to}`);\n },\n };\n}\n/** Reverses direction of coder */\nconst reverse = (coder) => {\n if (!isBaseCoder(coder))\n throw new Error('BaseCoder expected');\n return { encode: coder.decode, decode: coder.encode };\n};\nexport const coders = { dict, numberBigint, tsEnum, decimal, match, reverse };\n/**\n * CoderType for parsing individual bits.\n * NOTE: Structure should parse whole amount of bytes before it can start parsing byte-level elements.\n * @param len - Number of bits to parse.\n * @returns CoderType representing the parsed bits.\n * @example\n * const s = P.struct({ magic: P.bits(1), version: P.bits(1), tag: P.bits(4), len: P.bits(2) });\n */\nexport const bits = (len) => {\n if (!isNum(len))\n throw new Error(`bits: wrong length ${len} (${typeof len})`);\n return wrap({\n encodeStream: (w, value) => w.bits(value, len),\n decodeStream: (r) => r.bits(len),\n validate: (value) => {\n if (!isNum(value))\n throw new Error(`bits: wrong value ${value}`);\n return value;\n },\n });\n};\n/**\n * CoderType for working with bigint values.\n * Unsized bigint values should be wrapped in a container (e.g., bytes or string).\n *\n * `0n = new Uint8Array([])`\n *\n * `1n = new Uint8Array([1n])`\n *\n * Please open issue, if you need different behavior for zero.\n *\n * @param size - Size of the bigint in bytes.\n * @param le - Whether to use little-endian byte order.\n * @param signed - Whether the bigint is signed.\n * @param sized - Whether the bigint should have a fixed size.\n * @returns CoderType representing the bigint value.\n * @example\n * const U512BE = P.bigint(64, false, true, true); // Define a CoderType for a 512-bit unsigned big-endian integer\n */\nexport const bigint = (size, le = false, signed = false, sized = true) => {\n if (!isNum(size))\n throw new Error(`bigint/size: wrong value ${size}`);\n if (typeof le !== 'boolean')\n throw new Error(`bigint/le: expected boolean, got ${typeof le}`);\n if (typeof signed !== 'boolean')\n throw new Error(`bigint/signed: expected boolean, got ${typeof signed}`);\n if (typeof sized !== 'boolean')\n throw new Error(`bigint/sized: expected boolean, got ${typeof sized}`);\n const bLen = BigInt(size);\n const signBit = 2n ** (8n * bLen - 1n);\n return wrap({\n size: sized ? size : undefined,\n encodeStream: (w, value) => {\n if (signed && value < 0)\n value = value | signBit;\n const b = [];\n for (let i = 0; i < size; i++) {\n b.push(Number(value & 255n));\n value >>= 8n;\n }\n let res = new Uint8Array(b).reverse();\n if (!sized) {\n let pos = 0;\n for (pos = 0; pos < res.length; pos++)\n if (res[pos] !== 0)\n break;\n res = res.subarray(pos); // remove leading zeros\n }\n w.bytes(le ? res.reverse() : res);\n },\n decodeStream: (r) => {\n // TODO: for le we can read until first zero?\n const value = r.bytes(sized ? size : Math.min(size, r.leftBytes));\n const b = le ? value : swapEndianness(value);\n let res = 0n;\n for (let i = 0; i < b.length; i++)\n res |= BigInt(b[i]) << (8n * BigInt(i));\n if (signed && res & signBit)\n res = (res ^ signBit) - signBit;\n return res;\n },\n validate: (value) => {\n if (typeof value !== 'bigint')\n throw new Error(`bigint: invalid value: ${value}`);\n checkBounds(value, 8n * bLen, !!signed);\n return value;\n },\n });\n};\n/** Unsigned 256-bit little-endian integer CoderType. */\nexport const U256LE = /* @__PURE__ */ bigint(32, true);\n/** Unsigned 256-bit big-endian integer CoderType. */\nexport const U256BE = /* @__PURE__ */ bigint(32, false);\n/** Signed 256-bit little-endian integer CoderType. */\nexport const I256LE = /* @__PURE__ */ bigint(32, true, true);\n/** Signed 256-bit big-endian integer CoderType. */\nexport const I256BE = /* @__PURE__ */ bigint(32, false, true);\n/** Unsigned 128-bit little-endian integer CoderType. */\nexport const U128LE = /* @__PURE__ */ bigint(16, true);\n/** Unsigned 128-bit big-endian integer CoderType. */\nexport const U128BE = /* @__PURE__ */ bigint(16, false);\n/** Signed 128-bit little-endian integer CoderType. */\nexport const I128LE = /* @__PURE__ */ bigint(16, true, true);\n/** Signed 128-bit big-endian integer CoderType. */\nexport const I128BE = /* @__PURE__ */ bigint(16, false, true);\n/** Unsigned 64-bit little-endian integer CoderType. */\nexport const U64LE = /* @__PURE__ */ bigint(8, true);\n/** Unsigned 64-bit big-endian integer CoderType. */\nexport const U64BE = /* @__PURE__ */ bigint(8, false);\n/** Signed 64-bit little-endian integer CoderType. */\nexport const I64LE = /* @__PURE__ */ bigint(8, true, true);\n/** Signed 64-bit big-endian integer CoderType. */\nexport const I64BE = /* @__PURE__ */ bigint(8, false, true);\n/**\n * CoderType for working with numbber values (up to 6 bytes/48 bits).\n * Unsized int values should be wrapped in a container (e.g., bytes or string).\n *\n * `0 = new Uint8Array([])`\n *\n * `1 = new Uint8Array([1n])`\n *\n * Please open issue, if you need different behavior for zero.\n *\n * @param size - Size of the number in bytes.\n * @param le - Whether to use little-endian byte order.\n * @param signed - Whether the number is signed.\n * @param sized - Whether the number should have a fixed size.\n * @returns CoderType representing the number value.\n * @example\n * const uint64BE = P.bigint(8, false, true); // Define a CoderType for a 64-bit unsigned big-endian integer\n */\nexport const int = (size, le = false, signed = false, sized = true) => {\n if (!isNum(size))\n throw new Error(`int/size: wrong value ${size}`);\n if (typeof le !== 'boolean')\n throw new Error(`int/le: expected boolean, got ${typeof le}`);\n if (typeof signed !== 'boolean')\n throw new Error(`int/signed: expected boolean, got ${typeof signed}`);\n if (typeof sized !== 'boolean')\n throw new Error(`int/sized: expected boolean, got ${typeof sized}`);\n if (size > 6)\n throw new Error('int supports size up to 6 bytes (48 bits): use bigints instead');\n return apply(bigint(size, le, signed, sized), coders.numberBigint);\n};\nconst view = (len, opts) => wrap({\n size: len,\n encodeStream: (w, value) => w.writeView(len, (view) => opts.write(view, value)),\n decodeStream: (r) => r.readView(len, opts.read),\n validate: (value) => {\n if (typeof value !== 'number')\n throw new Error(`viewCoder: expected number, got ${typeof value}`);\n if (opts.validate)\n opts.validate(value);\n return value;\n },\n});\nconst intView = (len, signed, opts) => {\n const bits = len * 8;\n const signBit = 2 ** (bits - 1);\n // Inlined checkBounds for integer\n const validateSigned = (value) => {\n if (!isNum(value))\n throw new Error(`sintView: value is not safe integer: ${value}`);\n if (value < -signBit || value >= signBit) {\n throw new Error(`sintView: value out of bounds. Expected ${-signBit} <= ${value} < ${signBit}`);\n }\n };\n const maxVal = 2 ** bits;\n const validateUnsigned = (value) => {\n if (!isNum(value))\n throw new Error(`uintView: value is not safe integer: ${value}`);\n if (0 > value || value >= maxVal) {\n throw new Error(`uintView: value out of bounds. Expected 0 <= ${value} < ${maxVal}`);\n }\n };\n return view(len, {\n write: opts.write,\n read: opts.read,\n validate: signed ? validateSigned : validateUnsigned,\n });\n};\n/** Unsigned 32-bit little-endian integer CoderType. */\nexport const U32LE = /* @__PURE__ */ intView(4, false, {\n read: (view, pos) => view.getUint32(pos, true),\n write: (view, value) => view.setUint32(0, value, true),\n});\n/** Unsigned 32-bit big-endian integer CoderType. */\nexport const U32BE = /* @__PURE__ */ intView(4, false, {\n read: (view, pos) => view.getUint32(pos, false),\n write: (view, value) => view.setUint32(0, value, false),\n});\n/** Signed 32-bit little-endian integer CoderType. */\nexport const I32LE = /* @__PURE__ */ intView(4, true, {\n read: (view, pos) => view.getInt32(pos, true),\n write: (view, value) => view.setInt32(0, value, true),\n});\n/** Signed 32-bit big-endian integer CoderType. */\nexport const I32BE = /* @__PURE__ */ intView(4, true, {\n read: (view, pos) => view.getInt32(pos, false),\n write: (view, value) => view.setInt32(0, value, false),\n});\n/** Unsigned 16-bit little-endian integer CoderType. */\nexport const U16LE = /* @__PURE__ */ intView(2, false, {\n read: (view, pos) => view.getUint16(pos, true),\n write: (view, value) => view.setUint16(0, value, true),\n});\n/** Unsigned 16-bit big-endian integer CoderType. */\nexport const U16BE = /* @__PURE__ */ intView(2, false, {\n read: (view, pos) => view.getUint16(pos, false),\n write: (view, value) => view.setUint16(0, value, false),\n});\n/** Signed 16-bit little-endian integer CoderType. */\nexport const I16LE = /* @__PURE__ */ intView(2, true, {\n read: (view, pos) => view.getInt16(pos, true),\n write: (view, value) => view.setInt16(0, value, true),\n});\n/** Signed 16-bit big-endian integer CoderType. */\nexport const I16BE = /* @__PURE__ */ intView(2, true, {\n read: (view, pos) => view.getInt16(pos, false),\n write: (view, value) => view.setInt16(0, value, false),\n});\n/** Unsigned 8-bit integer CoderType. */\nexport const U8 = /* @__PURE__ */ intView(1, false, {\n read: (view, pos) => view.getUint8(pos),\n write: (view, value) => view.setUint8(0, value),\n});\n/** Signed 8-bit integer CoderType. */\nexport const I8 = /* @__PURE__ */ intView(1, true, {\n read: (view, pos) => view.getInt8(pos),\n write: (view, value) => view.setInt8(0, value),\n});\n// Floats\nconst f32 = (le) => view(4, {\n read: (view, pos) => view.getFloat32(pos, le),\n write: (view, value) => view.setFloat32(0, value, le),\n validate: (value) => {\n if (Math.fround(value) !== value && !Number.isNaN(value))\n throw new Error(`f32: wrong value=${value}`);\n },\n});\nconst f64 = (le) => view(8, {\n read: (view, pos) => view.getFloat64(pos, le),\n write: (view, value) => view.setFloat64(0, value, le),\n});\n/** 32-bit big-endian floating point CoderType (\"binary32\", IEEE 754-2008). */\nexport const F32BE = /* @__PURE__ */ f32(false);\n/** 32-bit little-endian floating point CoderType (\"binary32\", IEEE 754-2008). */\nexport const F32LE = /* @__PURE__ */ f32(true);\n/** A 64-bit big-endian floating point type (\"binary64\", IEEE 754-2008). Any JS number can be encoded. */\nexport const F64BE = /* @__PURE__ */ f64(false);\n/** A 64-bit little-endian floating point type (\"binary64\", IEEE 754-2008). Any JS number can be encoded. */\nexport const F64LE = /* @__PURE__ */ f64(true);\n/** Boolean CoderType. */\nexport const bool = /* @__PURE__ */ wrap({\n size: 1,\n encodeStream: (w, value) => w.byte(value ? 1 : 0),\n decodeStream: (r) => {\n const value = r.byte();\n if (value !== 0 && value !== 1)\n throw r.err(`bool: invalid value ${value}`);\n return value === 1;\n },\n validate: (value) => {\n if (typeof value !== 'boolean')\n throw new Error(`bool: invalid value ${value}`);\n return value;\n },\n});\n/**\n * Bytes CoderType with a specified length and endianness.\n * The bytes can have:\n * - Dynamic size (prefixed with a length CoderType like U16BE)\n * - Fixed size (specified by a number)\n * - Unknown size (null, will parse until end of buffer)\n * - Zero-terminated (terminator can be any Uint8Array)\n * @param len - CoderType, number, Uint8Array (terminator) or null\n * @param le - Whether to use little-endian byte order.\n * @returns CoderType representing the bytes.\n * @example\n * // Dynamic size bytes (prefixed with P.U16BE number of bytes length)\n * const dynamicBytes = P.bytes(P.U16BE, false);\n * const fixedBytes = P.bytes(32, false); // Fixed size bytes\n * const unknownBytes = P.bytes(null, false); // Unknown size bytes, will parse until end of buffer\n * const zeroTerminatedBytes = P.bytes(new Uint8Array([0]), false); // Zero-terminated bytes\n */\nconst createBytes = (len, le = false) => {\n if (typeof le !== 'boolean')\n throw new Error(`bytes/le: expected boolean, got ${typeof le}`);\n const _length = lengthCoder(len);\n const _isb = isBytes(len);\n return wrap({\n size: typeof len === 'number' ? len : undefined,\n encodeStream: (w, value) => {\n if (!_isb)\n _length.encodeStream(w, value.length);\n w.bytes(le ? swapEndianness(value) : value);\n if (_isb)\n w.bytes(len);\n },\n decodeStream: (r) => {\n let bytes;\n if (_isb) {\n const tPos = r.find(len);\n if (!tPos)\n throw r.err(`bytes: cannot find terminator`);\n bytes = r.bytes(tPos - r.pos);\n r.bytes(len.length);\n }\n else {\n bytes = r.bytes(len === null ? r.leftBytes : _length.decodeStream(r));\n }\n return le ? swapEndianness(bytes) : bytes;\n },\n validate: (value) => {\n if (!isBytes(value))\n throw new Error(`bytes: invalid value ${value}`);\n return value;\n },\n });\n};\nexport { createBytes as bytes, createHex as hex };\n/**\n * Prefix-encoded value using a length prefix and an inner CoderType.\n * The prefix can have:\n * - Dynamic size (prefixed with a length CoderType like U16BE)\n * - Fixed size (specified by a number)\n * - Unknown size (null, will parse until end of buffer)\n * - Zero-terminated (terminator can be any Uint8Array)\n * @param len - Length CoderType (dynamic size), number (fixed size), Uint8Array (for terminator), or null (will parse until end of buffer)\n * @param inner - CoderType for the actual value to be prefix-encoded.\n * @returns CoderType representing the prefix-encoded value.\n * @example\n * const dynamicPrefix = P.prefix(P.U16BE, P.bytes(null)); // Dynamic size prefix (prefixed with P.U16BE number of bytes length)\n * const fixedPrefix = P.prefix(10, P.bytes(null)); // Fixed size prefix (always 10 bytes)\n */\nexport function prefix(len, inner) {\n if (!isCoder(inner))\n throw new Error(`prefix: invalid inner value ${inner}`);\n return apply(createBytes(len), reverse(inner));\n}\n/**\n * String CoderType with a specified length and endianness.\n * The string can be:\n * - Dynamic size (prefixed with a length CoderType like U16BE)\n * - Fixed size (specified by a number)\n * - Unknown size (null, will parse until end of buffer)\n * - Zero-terminated (terminator can be any Uint8Array)\n * @param len - Length CoderType (dynamic size), number (fixed size), Uint8Array (for terminator), or null (will parse until end of buffer)\n * @param le - Whether to use little-endian byte order.\n * @returns CoderType representing the string.\n * @example\n * const dynamicString = P.string(P.U16BE, false); // Dynamic size string (prefixed with P.U16BE number of string length)\n * const fixedString = P.string(10, false); // Fixed size string\n * const unknownString = P.string(null, false); // Unknown size string, will parse until end of buffer\n * const nullTerminatedString = P.cstring; // NUL-terminated string\n * const _cstring = P.string(new Uint8Array([0])); // Same thing\n */\nexport const string = (len, le = false) => validate(apply(createBytes(len, le), utf8), (value) => {\n // TextEncoder/TextDecoder will fail on non-string, but we create more readable errors earlier\n if (typeof value !== 'string')\n throw new Error(`expected string, got ${typeof value}`);\n return value;\n});\n/** NUL-terminated string CoderType. */\nexport const cstring = /* @__PURE__ */ string(NULL);\n/**\n * Hexadecimal string CoderType with a specified length, endianness, and optional 0x prefix.\n * @param len - Length CoderType (dynamic size), number (fixed size), Uint8Array (for terminator), or null (will parse until end of buffer)\n * @param le - Whether to use little-endian byte order.\n * @param withZero - Whether to include the 0x prefix.\n * @returns CoderType representing the hexadecimal string.\n * @example\n * const dynamicHex = P.hex(P.U16BE, {isLE: false, with0x: true}); // Hex string with 0x prefix and U16BE length\n * const fixedHex = P.hex(32, {isLE: false, with0x: false}); // Fixed-length 32-byte hex string without 0x prefix\n */\nconst createHex = (len, options = { isLE: false, with0x: false }) => {\n let inner = apply(createBytes(len, options.isLE), baseHex);\n const prefix = options.with0x;\n if (typeof prefix !== 'boolean')\n throw new Error(`hex/with0x: expected boolean, got ${typeof prefix}`);\n if (prefix) {\n inner = apply(inner, {\n encode: (value) => `0x${value}`,\n decode: (value) => {\n if (!value.startsWith('0x'))\n throw new Error('hex(with0x=true).encode input should start with 0x');\n return value.slice(2);\n },\n });\n }\n return inner;\n};\n/**\n * Applies a base coder to a CoderType.\n * @param inner - The inner CoderType.\n * @param b - The base coder to apply.\n * @returns CoderType representing the transformed value.\n * @example\n * import { hex } from '@scure/base';\n * const hex = P.apply(P.bytes(32), hex); // will decode bytes into a hex string\n */\nexport function apply(inner, base) {\n if (!isCoder(inner))\n throw new Error(`apply: invalid inner value ${inner}`);\n if (!isBaseCoder(base))\n throw new Error(`apply: invalid base value ${inner}`);\n return wrap({\n size: inner.size,\n encodeStream: (w, value) => {\n let innerValue;\n try {\n innerValue = base.decode(value);\n }\n catch (e) {\n throw w.err('' + e);\n }\n return inner.encodeStream(w, innerValue);\n },\n decodeStream: (r) => {\n const innerValue = inner.decodeStream(r);\n try {\n return base.encode(innerValue);\n }\n catch (e) {\n throw r.err('' + e);\n }\n },\n });\n}\n/**\n * Lazy CoderType that is evaluated at runtime.\n * @param fn - A function that returns the CoderType.\n * @returns CoderType representing the lazy value.\n * @example\n * type Tree = { name: string; children: Tree[] };\n * const tree = P.struct({\n * name: P.cstring,\n * children: P.array(\n * P.U16BE,\n * P.lazy((): P.CoderType<Tree> => tree)\n * ),\n * });\n */\nexport function lazy(fn) {\n if (typeof fn !== 'function')\n throw new Error(`lazy: expected function, got ${typeof fn}`);\n return wrap({\n encodeStream: (w, value) => fn().encodeStream(w, value),\n decodeStream: (r) => fn().decodeStream(r),\n });\n}\n/**\n * Flag CoderType that encodes/decodes a boolean value based on the presence of a marker.\n * @param flagValue - Marker value.\n * @param xor - Whether to invert the flag behavior.\n * @returns CoderType representing the flag value.\n * @example\n * const flag = P.flag(new Uint8Array([0x01, 0x02])); // Encodes true as u8a([0x01, 0x02]), false as u8a([])\n * const flagXor = P.flag(new Uint8Array([0x01, 0x02]), true); // Encodes true as u8a([]), false as u8a([0x01, 0x02])\n * // Conditional encoding with flagged\n * const s = P.struct({ f: P.flag(new Uint8Array([0x0, 0x1])), f2: P.flagged('f', P.U32BE) });\n */\nexport const flag = (flagValue, xor = false) => {\n if (!isBytes(flagValue))\n throw new Error(`flag/flagValue: expected Uint8Array, got ${typeof flagValue}`);\n if (typeof xor !== 'boolean')\n throw new Error(`flag/xor: expected boolean, got ${typeof xor}`);\n return wrap({\n size: flagValue.length,\n encodeStream: (w, value) => {\n if (!!value !== xor)\n w.bytes(flagValue);\n },\n decodeStream: (r) => {\n let hasFlag = r.leftBytes >= flagValue.length;\n if (hasFlag) {\n hasFlag = equalBytes(r.bytes(flagValue.length, true), flagValue);\n // Found flag, advance cursor position\n if (hasFlag)\n r.bytes(flagValue.length);\n }\n return hasFlag !== xor; // hasFlag ^ xor\n },\n validate: (value) => {\n if (value !== undefined && typeof value !== 'boolean')\n throw new Error(`flag: expected boolean value or undefined, got ${typeof value}`);\n return value;\n },\n });\n};\n/**\n * Conditional CoderType that encodes/decodes a value only if a flag is present.\n * @param path - Path to the flag value or a CoderType for the flag.\n * @param inner - Inner CoderType for the value.\n * @param def - Optional default value to use if the flag is not present.\n * @returns CoderType representing the conditional value.\n * @example\n * const s = P.struct({\n * f: P.flag(new Uint8Array([0x0, 0x1])),\n * f2: P.flagged('f', P.U32BE)\n * });\n *\n * @example\n * const s2 = P.struct({\n * f: P.flag(new Uint8Array([0x0, 0x1])),\n * f2: P.flagged('f', P.U32BE, 123)\n * });\n */\nexport function flagged(path, inner, def) {\n if (!isCoder(inner))\n throw new Error(`flagged: invalid inner value ${inner}`);\n if (typeof path !== 'string' && !isCoder(inner))\n throw new Error(`flagged: wrong path=${path}`);\n return wrap({\n encodeStream: (w, value) => {\n if (typeof path === 'string') {\n if (Path.resolve(w.stack, path))\n inner.encodeStream(w, value);\n else if (def)\n inner.encodeStream(w, def);\n }\n else {\n path.encodeStream(w, !!value);\n if (!!value)\n inner.encodeStream(w, value);\n else if (def)\n inner.encodeStream(w, def);\n }\n },\n decodeStream: (r) => {\n let hasFlag = false;\n if (typeof path === 'string')\n hasFlag = !!Path.resolve(r.stack, path);\n else\n hasFlag = path.decodeStream(r);\n // If there is a flag -- decode and return value\n if (hasFlag)\n return inner.decodeStream(r);\n else if (def)\n inner.decodeStream(r);\n return;\n },\n });\n}\n/**\n * Optional CoderType that encodes/decodes a value based on a flag.\n * @param flag - CoderType for the flag value.\n * @param inner - Inner CoderType for the value.\n * @param def - Optional default value to use if the flag is not present.\n * @returns CoderType representing the optional value.\n * @example\n * // Will decode into P.U32BE only if flag present\n * const optional = P.optional(P.flag(new Uint8Array([0x0, 0x1])), P.U32BE);\n *\n * @example\n * // If no flag present, will decode into default value\n * const optionalWithDefault = P.optional(P.flag(new Uint8Array([0x0, 0x1])), P.U32BE, 123);\n */\nexport function optional(flag, inner, def) {\n if (!isCoder(flag) || !isCoder(inner))\n throw new Error(`optional: invalid flag or inner value flag=${flag} inner=${inner}`);\n return wrap({\n size: def !== undefined && flag.size && inner.size ? flag.size + inner.size : undefined,\n encodeStream: (w, value) => {\n flag.encodeStream(w, !!value);\n if (value)\n inner.encodeStream(w, value);\n else if (def !== undefined)\n inner.encodeStream(w, def);\n },\n decodeStream: (r) => {\n if (flag.decodeStream(r))\n return inner.decodeStream(r);\n else if (def !== undefined)\n inner.decodeStream(r);\n return;\n },\n });\n}\n/**\n * Magic value CoderType that encodes/decodes a constant value.\n * This can be used to check for a specific magic value or sequence of bytes at the beginning of a data structure.\n * @param inner - Inner CoderType for the value.\n * @param constant - Constant value.\n * @param check - Whether to check the decoded value against the constant.\n * @returns CoderType representing the magic value.\n * @example\n * // Always encodes constant as bytes using inner CoderType, throws if encoded value is not present\n * const magicU8 = P.magic(P.U8, 0x42);\n */\nexport function magic(inner, constant, check = true) {\n if (!isCoder(inner))\n throw new Error(`magic: invalid inner value ${inner}`);\n if (typeof check !== 'boolean')\n throw new Error(`magic: expected boolean, got ${typeof check}`);\n return wrap({\n size: inner.size,\n encodeStream: (w, _value) => inner.encodeStream(w, constant),\n decodeStream: (r) => {\n const value = inner.decodeStream(r);\n if ((check && typeof value !== 'object' && value !== constant) ||\n (isBytes(constant) && !equalBytes(constant, value))) {\n throw r.err(`magic: invalid value: ${value} !== ${constant}`);\n }\n return;\n },\n validate: (value) => {\n if (value !== undefined)\n throw new Error(`magic: wrong value=${typeof value}`);\n return value;\n },\n });\n}\n/**\n * Magic bytes CoderType that encodes/decodes a constant byte array or string.\n * @param constant - Constant byte array or string.\n * @returns CoderType representing the magic bytes.\n * @example\n * // Always encodes undefined into byte representation of string 'MAGIC'\n * const magicBytes = P.magicBytes('MAGIC');\n */\nexport const magicBytes = (constant) => {\n const c = typeof constant === 'string' ? utf8.decode(constant) : constant;\n return magic(createBytes(c.length), c);\n};\n/**\n * Creates a CoderType for a constant value. The function enforces this value during encoding,\n * ensuring it matches the provided constant. During decoding, it always returns the constant value.\n * The actual value is not written to or read from any byte stream; it's used only for validation.\n *\n * @param c - Constant value.\n * @returns CoderType representing the constant value.\n * @example\n * // Always return 123 on decode, throws on encoding anything other than 123\n * const constantU8 = P.constant(123);\n */\nexport function constant(c) {\n return wrap({\n encodeStream: (_w, value) => {\n if (value !== c)\n throw new Error(`constant: invalid value ${value} (exp: ${c})`);\n },\n decodeStream: (_r) => c,\n });\n}\nfunction sizeof(fields) {\n let size = 0;\n for (const f of fields) {\n if (f.size === undefined)\n return;\n if (!isNum(f.size))\n throw new Error(`sizeof: wrong element size=${size}`);\n size += f.size;\n }\n return size;\n}\n/**\n * Structure of composable primitives (C/Rust struct)\n * @param fields - Object mapping field names to CoderTypes.\n * @returns CoderType representing the structure.\n * @example\n * // Define a structure with a 32-bit big-endian unsigned integer, a string, and a nested structure\n * const myStruct = P.struct({\n * id: P.U32BE,\n * name: P.string(P.U8),\n * nested: P.struct({\n * flag: P.bool,\n * value: P.I16LE\n * })\n * });\n */\nexport function struct(fields) {\n if (!isPlainObject(fields))\n throw new Error(`struct: expected plain object, got ${fields}`);\n for (const name in fields) {\n if (!isCoder(fields[name]))\n throw new Error(`struct: field ${name} is not CoderType`);\n }\n return wrap({\n size: sizeof(Object.values(fields)),\n encodeStream: (w, value) => {\n w.pushObj(value, (fieldFn) => {\n for (const name in fields)\n fieldFn(name, () => fields[name].encodeStream(w, value[name]));\n });\n },\n decodeStream: (r) => {\n const res = {};\n r.pushObj(res, (fieldFn) => {\n for (const name in fields)\n fieldFn(name, () => (res[name] = fields[name].decodeStream(r)));\n });\n return res;\n },\n validate: (value) => {\n if (typeof value !== 'object' || value === null)\n throw new Error(`struct: invalid value ${value}`);\n return value;\n },\n });\n}\n/**\n * Tuple (unnamed structure) of CoderTypes. Same as struct but with unnamed fields.\n * @param fields - Array of CoderTypes.\n * @returns CoderType representing the tuple.\n * @example\n * const myTuple = P.tuple([P.U8, P.U16LE, P.string(P.U8)]);\n */\nexport function tuple(fields) {\n if (!Array.isArray(fields))\n throw new Error(`Packed.Tuple: got ${typeof fields} instead of array`);\n for (let i = 0; i < fields.length; i++) {\n if (!isCoder(fields[i]))\n throw new Error(`tuple: field ${i} is not CoderType`);\n }\n return wrap({\n size: sizeof(fields),\n encodeStream: (w, value) => {\n // TODO: fix types\n if (!Array.isArray(value))\n throw w.err(`tuple: invalid value ${value}`);\n w.pushObj(value, (fieldFn) => {\n for (let i = 0; i < fields.length; i++)\n fieldFn(`${i}`, () => fields[i].encodeStream(w, value[i]));\n });\n },\n decodeStream: (r) => {\n const res = [];\n r.pushObj(res, (fieldFn) => {\n for (let i = 0; i < fields.length; i++)\n fieldFn(`${i}`, () => res.push(fields[i].decodeStream(r)));\n });\n return res;\n },\n validate: (value) => {\n if (!Array.isArray(value))\n throw new Error(`tuple: invalid value ${value}`);\n if (value.length !== fields.length)\n throw new Error(`tuple: wrong length=${value.length}, expected ${fields.length}`);\n return value;\n },\n });\n}\n/**\n * Array of items (inner type) with a specified length.\n * @param len - Length CoderType (dynamic size), number (fixed size), Uint8Array (for terminator), or null (will parse until end of buffer)\n * @param inner - CoderType for encoding/decoding each array item.\n * @returns CoderType representing the array.\n * @example\n * const a1 = P.array(P.U16BE, child); // Dynamic size array (prefixed with P.U16BE number of array length)\n * const a2 = P.array(4, child); // Fixed size array\n * const a3 = P.array(null, child); // Unknown size array, will parse until end of buffer\n * const a4 = P.array(new Uint8Array([0]), child); // zero-terminated array (NOTE: terminator can be any buffer)\n */\nexport function array(len, inner) {\n if (!isCoder(inner))\n throw new Error(`array: invalid inner value ${inner}`);\n // By construction length is inside array (otherwise there will be various incorrect stack states)\n // But forcing users always write '..' seems like bad idea. Also, breaking change.\n const _length = lengthCoder(typeof len === 'string' ? `../${len}` : len);\n return wrap({\n size: typeof len === 'number' && inner.size ? len * inner.size : undefined,\n encodeStream: (w, value) => {\n const _w = w;\n _w.pushObj(value, (fieldFn) => {\n if (!isBytes(len))\n _length.encodeStream(w, value.length);\n for (let i = 0; i < value.length; i++) {\n fieldFn(`${i}`, () => {\n const elm = value[i];\n const startPos = w.pos;\n inner.encodeStream(w, elm);\n if (isBytes(len)) {\n // Terminator is bigger than elm size, so skip\n if (len.length > _w.pos - startPos)\n return;\n const data = _w.finish(false).subarray(startPos, _w.pos);\n // There is still possible case when multiple elements create terminator,\n // but it is hard to catch here, will be very slow\n if (equalBytes(data.subarray(0, len.length), len))\n throw _w.err(`array: inner element encoding same as separator. elm=${elm} data=${data}`);\n }\n });\n }\n });\n if (isBytes(len))\n w.bytes(len);\n },\n decodeStream: (r) => {\n const res = [];\n r.pushObj(res, (fieldFn) => {\n if (len === null) {\n for (let i = 0; !r.isEnd(); i++) {\n fieldFn(`${i}`, () => res.push(inner.decodeStream(r)));\n if (inner.size && r.leftBytes < inner.size)\n break;\n }\n }\n else if (isBytes(len)) {\n for (let i = 0;; i++) {\n if (equalBytes(r.bytes(len.length, true), len)) {\n // Advance cursor position if terminator found\n r.bytes(len.length);\n break;\n }\n fieldFn(`${i}`, () => res.push(inner.decodeStream(r)));\n }\n }\n else {\n let length;\n fieldFn('arrayLen', () => (length = _length.decodeStream(r)));\n for (let i = 0; i < length; i++)\n fieldFn(`${i}`, () => res.push(inner.decodeStream(r)));\n }\n });\n return res;\n },\n validate: (value) => {\n if (!Array.isArray(value))\n throw new Error(`array: invalid value ${value}`);\n return value;\n },\n });\n}\n/**\n * Mapping between encoded values and string representations.\n * @param inner - CoderType for encoded values.\n * @param variants - Object mapping string representations to encoded values.\n * @returns CoderType representing the mapping.\n * @example\n * // Map between numbers and strings\n * const numberMap = P.map(P.U8, {\n * 'one': 1,\n * 'two': 2,\n * 'three': 3\n * });\n *\n * // Map between byte arrays and strings\n * const byteMap = P.map(P.bytes(2, false), {\n * 'ab': Uint8Array.from([0x61, 0x62]),\n * 'cd': Uint8Array.from([0x63, 0x64])\n * });\n */\nexport function map(inner, variants) {\n if (!isCoder(inner))\n throw new Error(`map: invalid inner value ${inner}`);\n if (!isPlainObject(variants))\n throw new Error(`map: variants should be plain object`);\n const variantNames = new Map();\n for (const k in variants)\n variantNames.set(variants[k], k);\n return wrap({\n size: inner.size,\n encodeStream: (w, value) => inner.encodeStream(w, variants[value]),\n decodeStream: (r) => {\n const variant = inner.decodeStream(r);\n const name = variantNames.get(variant);\n if (name === undefined)\n throw r.err(`Enum: unknown value: ${variant} ${Array.from(variantNames.keys())}`);\n return name;\n },\n validate: (value) => {\n if (typeof value !== 'string')\n throw new Error(`map: invalid value ${value}`);\n if (!(value in variants))\n throw new Error(`Map: unknown variant: ${value}`);\n return value;\n },\n });\n}\n/**\n * Tagged union of CoderTypes, where the tag value determines which CoderType to use.\n * The decoded value will have the structure `{ TAG: number, data: ... }`.\n * @param tag - CoderType for the tag value.\n * @param variants - Object mapping tag values to CoderTypes.\n * @returns CoderType representing the tagged union.\n * @example\n * // Tagged union of array, string, and number\n * // Depending on the value of the first byte, it will be decoded as an array, string, or number.\n * const taggedUnion = P.tag(P.U8, {\n * 0x01: P.array(P.U16LE, P.U8),\n * 0x02: P.string(P.U8),\n * 0x03: P.U32BE\n * });\n *\n * const encoded = taggedUnion.encode({ TAG: 0x01, data: 'hello' }); // Encodes the string 'hello' with tag 0x01\n * const decoded = taggedUnion.decode(encoded); // Decodes the encoded value back to { TAG: 0x01, data: 'hello' }\n */\nexport function tag(tag, variants) {\n if (!isCoder(tag))\n throw new Error(`tag: invalid tag value ${tag}`);\n if (!isPlainObject(variants))\n throw new Error(`tag: variants should be plain object`);\n for (const name in variants) {\n if (!isCoder(variants[name]))\n throw new Error(`tag: variant ${name} is not CoderType`);\n }\n return wrap({\n size: tag.size,\n encodeStream: (w, value) => {\n const { TAG, data } = value;\n const dataType = variants[TAG];\n tag.encodeStream(w, TAG);\n dataType.encodeStream(w, data);\n },\n decodeStream: (r) => {\n const TAG = tag.decodeStream(r);\n const dataType = variants[TAG];\n if (!dataType)\n throw r.err(`Tag: invalid tag ${TAG}`);\n return { TAG, data: dataType.decodeStream(r) };\n },\n validate: (value) => {\n const { TAG } = value;\n const dataType = variants[TAG];\n if (!dataType)\n throw new Error(`Tag: invalid tag ${TAG.toString()}`);\n return value;\n },\n });\n}\n/**\n * Mapping between encoded values, string representations, and CoderTypes using a tag CoderType.\n * @param tagCoder - CoderType for the tag value.\n * @param variants - Object mapping string representations to [tag value, CoderType] pairs.\n * * @returns CoderType representing the mapping.\n * @example\n * const cborValue: P.CoderType<CborValue> = P.mappedTag(P.bits(3), {\n * uint: [0, cborUint], // An unsigned integer in the range 0..264-1 inclusive.\n * negint: [1, cborNegint], // A negative integer in the range -264..-1 inclusive\n * bytes: [2, P.lazy(() => cborLength(P.bytes, cborValue))], // A byte string.\n * string: [3, P.lazy(() => cborLength(P.string, cborValue))], // A text string (utf8)\n * array: [4, cborArrLength(P.lazy(() => cborValue))], // An array of data items\n * map: [5, P.lazy(() => cborArrLength(P.tuple([cborValue, cborValue])))], // A map of pairs of data items\n * tag: [6, P.tuple([cborUint, P.lazy(() => cborValue)] as const)], // A tagged data item (\"tag\") whose tag number\n * simple: [7, cborSimple], // Floating-point numbers and simple values, as well as the \"break\" stop code\n * });\n */\nexport function mappedTag(tagCoder, variants) {\n if (!isCoder(tagCoder))\n throw new Error(`mappedTag: invalid tag value ${tag}`);\n if (!isPlainObject(variants))\n throw new Error(`mappedTag: variants should be plain object`);\n const mapValue = {};\n const tagValue = {};\n for (const key in variants) {\n const v = variants[key];\n mapValue[key] = v[0];\n tagValue[key] = v[1];\n }\n return tag(map(tagCoder, mapValue), tagValue);\n}\n/**\n * Bitset of boolean values with optional padding.\n * @param names - An array of string names for the bitset values.\n * @param pad - Whether to pad the bitset to a multiple of 8 bits.\n * @returns CoderType representing the bitset.\n * @template Names\n * @example\n * const myBitset = P.bitset(['flag1', 'flag2', 'flag3', 'flag4'], true);\n */\nexport function bitset(names, pad = false) {\n if (typeof pad !== 'boolean')\n throw new Error(`bitset/pad: expected boolean, got ${typeof pad}`);\n if (!Array.isArray(names))\n throw new Error('bitset/names: expected array');\n for (const name of names) {\n if (typeof name !== 'string')\n throw new Error('bitset/names: expected array of strings');\n }\n return wrap({\n encodeStream: (w, value) => {\n for (let i = 0; i < names.length; i++)\n w.bits(+value[names[i]], 1);\n if (pad && names.length % 8)\n w.bits(0, 8 - (names.length % 8));\n },\n decodeStream: (r) => {\n const out = {};\n for (let i = 0; i < names.length; i++)\n out[names[i]] = !!r.bits(1);\n if (pad && names.length % 8)\n r.bits(8 - (names.length % 8));\n return out;\n },\n validate: (value) => {\n if (!isPlainObject(value))\n throw new Error(`bitset: invalid value ${value}`);\n for (const v of Object.values(value)) {\n if (typeof v !== 'boolean')\n throw new Error('expected boolean');\n }\n return value;\n },\n });\n}\n/** Padding function which always returns zero */\nexport const ZeroPad = (_) => 0;\nfunction padLength(blockSize, len) {\n if (len % blockSize === 0)\n return 0;\n return blockSize - (len % blockSize);\n}\n/**\n * Pads a CoderType with a specified block size and padding function on the left side.\n * @param blockSize - Block size for padding (positive safe integer).\n * @param inner - Inner CoderType to pad.\n * @param padFn - Padding function to use. If not provided, zero padding is used.\n * @returns CoderType representing the padded value.\n * @example\n * // Pad a U32BE with a block size of 4 and zero padding\n * const paddedU32BE = P.padLeft(4, P.U32BE);\n *\n * // Pad a string with a block size of 16 and custom padding\n * const paddedString = P.padLeft(16, P.string(P.U8), (i) => i + 1);\n */\nexport function padLeft(blockSize, inner, padFn) {\n if (!isNum(blockSize) || blockSize <= 0)\n throw new Error(`padLeft: wrong blockSize=${blockSize}`);\n if (!isCoder(inner))\n throw new Error(`padLeft: invalid inner value ${inner}`);\n if (padFn !== undefined && typeof padFn !== 'function')\n throw new Error(`padLeft: wrong padFn=${typeof padFn}`);\n const _padFn = padFn || ZeroPad;\n if (!inner.size)\n throw new Error('padLeft cannot have dynamic size');\n return wrap({\n size: inner.size + padLength(blockSize, inner.size),\n encodeStream: (w, value) => {\n const padBytes = padLength(blockSize, inner.size);\n for (let i = 0; i < padBytes; i++)\n w.byte(_padFn(i));\n inner.encodeStream(w, value);\n },\n decodeStream: (r) => {\n r.bytes(padLength(blockSize, inner.size));\n return inner.decodeStream(r);\n },\n });\n}\n/**\n * Pads a CoderType with a specified block size and padding function on the right side.\n * @param blockSize - Block size for padding (positive safe integer).\n * @param inner - Inner CoderType to pad.\n * @param padFn - Padding function to use. If not provided, zero padding is used.\n * @returns CoderType representing the padded value.\n * @example\n * // Pad a U16BE with a block size of 2 and zero padding\n * const paddedU16BE = P.padRight(2, P.U16BE);\n *\n * // Pad a bytes with a block size of 8 and custom padding\n * const paddedBytes = P.padRight(8, P.bytes(null), (i) => i + 1);\n */\nexport function padRight(blockSize, inner, padFn) {\n if (!isCoder(inner))\n throw new Error(`padRight: invalid inner value ${inner}`);\n if (!isNum(blockSize) || blockSize <= 0)\n throw new Error(`padLeft: wrong blockSize=${blockSize}`);\n if (padFn !== undefined && typeof padFn !== 'function')\n throw new Error(`padRight: wrong padFn=${typeof padFn}`);\n const _padFn = padFn || ZeroPad;\n return wrap({\n size: inner.size ? inner.size + padLength(blockSize, inner.size) : undefined,\n encodeStream: (w, value) => {\n const _w = w;\n const pos = _w.pos;\n inner.encodeStream(w, value);\n const padBytes = padLength(blockSize, _w.pos - pos);\n for (let i = 0; i < padBytes; i++)\n w.byte(_padFn(i));\n },\n decodeStream: (r) => {\n const start = r.pos;\n const res = inner.decodeStream(r);\n r.bytes(padLength(blockSize, r.pos - start));\n return res;\n },\n });\n}\n1;\n/**\n * Pointer to a value using a pointer CoderType and an inner CoderType.\n * Pointers are scoped, and the next pointer in the dereference chain is offset by the previous one.\n * By default (if no 'allowMultipleReads' in ReaderOpts is set) is safe, since\n * same region of memory cannot be read multiple times.\n * @param ptr - CoderType for the pointer value.\n * @param inner - CoderType for encoding/decoding the pointed value.\n * @param sized - Whether the pointer should have a fixed size.\n * @returns CoderType representing the pointer to the value.\n * @example\n * const pointerToU8 = P.pointer(P.U16BE, P.U8); // Pointer to a single U8 value\n */\nexport function pointer(ptr, inner, sized = false) {\n if (!isCoder(ptr))\n throw new Error(`pointer: invalid ptr value ${ptr}`);\n if (!isCoder(inner))\n throw new Error(`pointer: invalid inner value ${inner}`);\n if (typeof sized !== 'boolean')\n throw new Error(`pointer/sized: expected boolean, got ${typeof sized}`);\n if (!ptr.size)\n throw new Error('unsized pointer');\n return wrap({\n size: sized ? ptr.size : undefined,\n encodeStream: (w, value) => {\n const _w = w;\n const start = _w.pos;\n ptr.encodeStream(w, 0);\n _w.ptrs.push({ pos: start, ptr, buffer: inner.encode(value) });\n },\n decodeStream: (r) => {\n const ptrVal = ptr.decodeStream(r);\n r._enablePointers();\n return inner.decodeStream(r.offsetReader(ptrVal));\n },\n });\n}\n// Internal methods for test purposes only\nexport const _TEST = { _bitset: Bitset, _Reader, _Writer, Path };\n//# sourceMappingURL=index.js.map","import { ed25519 } from '@noble/curves/ed25519';\nimport { base58, base64, hex, utf8 } from '@scure/base';\nimport { sha256 } from '@noble/hashes/sha256';\nimport * as P from 'micro-packed';\nexport const PRECISION = 9;\nexport const Decimal = P.coders.decimal(PRECISION);\n// first bit -- terminator (1 -- continue, 0 -- last)\nexport const shortVec = P.wrap({\n encodeStream: (w, value) => {\n if (!value)\n return w.byte(0);\n for (; value; value >>= 7) {\n w.bits(value > 0x7f ? 1 : 0, 1);\n w.bits(value & 0x7f, 7);\n }\n },\n decodeStream: (r) => {\n let len = 0;\n for (let pos = 0; !r.isEnd(); pos++) {\n const last = !r.bits(1);\n len |= r.bits(7) << (pos * 7);\n if (last)\n break;\n }\n return len;\n },\n});\nconst rustString = P.string(P.padRight(8, P.U32LE, undefined));\nconst b58 = () => {\n const inner = P.bytes(32);\n return P.wrap({\n size: inner.size,\n encodeStream: (w, value) => inner.encodeStream(w, base58.decode(value)),\n decodeStream: (r) => base58.encode(inner.decodeStream(r)),\n });\n};\nconst pubKey = b58();\nexport const Message = P.struct({\n requiredSignatures: P.U8,\n readSigned: P.U8,\n readUnsigned: P.U8,\n keys: P.array(shortVec, pubKey),\n blockhash: pubKey,\n instructions: P.array(shortVec, P.struct({ programIdx: P.U8, keys: P.array(shortVec, P.U8), data: P.bytes(shortVec) })),\n});\nexport function validateAddress(address) {\n const pubkey = base58.decode(address);\n if (pubkey.length !== 32)\n throw new Error('Invalid Solana address');\n}\nconst keyParams = (i, req, signed, unsigned, total) => ({\n sign: i < req ? true : false,\n write: i < req - signed || (i >= req && i < total - unsigned) ? true : false,\n});\nexport const TransactionRaw = P.struct({\n signatures: P.array(shortVec, P.bytes(64)),\n msg: Message,\n});\n// Keys position is implementation specific, Transaction.encode(Transaction.decode(tx)) not neccessary equals to tx,\n// since there is information loss for readability purposes. Use TransactionRaw in case you need exactly same encoding\nexport const Transaction = P.wrap({\n encodeStream: (w, value) => {\n const { msg, signatures } = value;\n const accounts = {};\n const add = (address, sign, write) => {\n let acc = accounts[address] || (accounts[address] = { sign: false, write: false });\n acc.write || (acc.write = write);\n acc.sign || (acc.sign = sign);\n };\n add(msg.feePayer, true, true);\n for (let i of msg.instructions)\n for (let k of i.keys)\n add(k.address, k.sign, k.write);\n // Same loop as above, but cannot be merged since it will change implementation specific key positions inside transaction.\n // This doesn't invalidate transaction, but can be used for fingerprinting.\n for (let i of msg.instructions)\n add(i.program, false, false);\n const _keys = Object.keys(accounts);\n // [feePayer, ...sign+write, ...sign+read, ...nosign+write, ...nosign+read]\n const keys = [\n msg.feePayer,\n ..._keys.filter((i) => accounts[i].sign && accounts[i].write && i !== msg.feePayer),\n ..._keys.filter((i) => accounts[i].sign && !accounts[i].write),\n ..._keys.filter((i) => !accounts[i].sign && accounts[i].write),\n ..._keys.filter((i) => !accounts[i].sign && !accounts[i].write),\n ];\n let requiredSignatures = 0;\n let readSigned = 0;\n let readUnsigned = 0;\n for (let k of keys) {\n if (accounts[k].sign)\n requiredSignatures++;\n if (accounts[k].write)\n continue;\n if (accounts[k].sign)\n readSigned++;\n else\n readUnsigned++;\n }\n TransactionRaw.encodeStream(w, {\n signatures: keys\n .filter((i) => accounts[i].sign)\n .map((i) => signatures[i] || new Uint8Array(64)),\n msg: {\n requiredSignatures,\n readSigned,\n readUnsigned,\n keys,\n // indexOf potentially can be slow, but for most tx there will be ~3-5 keys, so doesn't matter much\n instructions: msg.instructions.map((i) => ({\n programIdx: keys.indexOf(i.program),\n keys: i.keys.map((j) => keys.indexOf(j.address)),\n data: i.data,\n })),\n blockhash: msg.blockhash,\n },\n });\n },\n decodeStream: (r) => {\n const { signatures, msg } = TransactionRaw.decodeStream(r);\n if (signatures.length !== msg.requiredSignatures)\n throw new Error('SOL.tx: wrong signatures length');\n if (msg.keys.length < signatures.length)\n throw new Error('SOL.tx: invalid keys length');\n const sigs = {};\n for (let i = 0; i < signatures.length; i++)\n sigs[msg.keys[i]] = signatures[i];\n let accounts = [];\n for (let i = 0; i < msg.keys.length; i++) {\n accounts.push({\n address: msg.keys[i],\n ...keyParams(i, msg.requiredSignatures, msg.readSigned, msg.readUnsigned, msg.keys.length),\n });\n }\n if (!accounts.length)\n throw new Error('SOL.tx: empty accounts array');\n return {\n msg: {\n feePayer: accounts[0].address,\n blockhash: msg.blockhash,\n instructions: msg.instructions.map((i) => ({\n program: accounts[i.programIdx].address,\n keys: i.keys.map((j) => accounts[j]),\n data: i.data,\n })),\n },\n signatures: sigs,\n };\n },\n});\nconst registry = {};\n// Basic ABI thing. There is IDL which is kinda ABI, but not official and system accounts doesn't have offical types for it.\n// Later we can add support to conversion IDL -> defineProgram\nexport function defineProgram(address, tagType, methods) {\n if (registry[address])\n throw new Error('SOL: program for this address already defined');\n const variants = P.map(tagType, Object.keys(methods).reduce((acc, k, i) => ({ ...acc, [k]: i }), {}));\n const coders = Object.keys(methods).reduce((acc, k) => ({ ...acc, [k]: methods[k].coder }), {});\n const mainCoder = P.tag(variants, coders);\n registry[address] = (instr, tl) => {\n if (instr.program !== address)\n throw new Error('SOL.parseInstruction: Wrong instruction program address');\n const { TAG, data } = mainCoder.decode(instr.data);\n // Should be close to node parser (https://github.com/solana-labs/solana/tree/master/transaction-status/src)\n const res = { type: TAG, info: data };\n const keys = Object.keys(methods[TAG].keys);\n if (keys.length !== instr.keys.length)\n throw new Error('SOL.parseInstruction: Keys length mismatch');\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (methods[TAG].keys[key].address) {\n if (methods[TAG].keys[key].address !== instr.keys[i].address) {\n throw new Error(`SOL.parseInstruction(${address}/${TAG}): Invalid constant address for key exp=${methods[TAG].keys[key].address} got=${instr.keys[i].address}`);\n }\n continue;\n }\n res.info[keys[i]] = instr.keys[i].address;\n }\n if (methods[TAG].hint)\n res.hint = methods[TAG].hint(data, tl);\n return res;\n };\n const program = {};\n for (const m in methods) {\n program[m] = (data) => ({\n program: address,\n data: mainCoder.encode({ TAG: m, data }),\n keys: Object.keys(methods[m].keys).map((name) => {\n let { sign, write, address } = methods[m].keys[name];\n address || (address = data[name]);\n validateAddress(address);\n return { address, sign, write };\n }),\n });\n }\n return program;\n}\nexport function parseInstruction(instr, tl) {\n if (!registry[instr.program])\n return;\n return registry[instr.program](instr, tl);\n}\nexport const SYS_RECENT_BLOCKHASHES = 'SysvarRecentB1ockHashes11111111111111111111';\nexport const SYS_RENT = 'SysvarRent111111111111111111111111111111111';\nexport const SYS_PROGRAM = '11111111111111111111111111111111';\nexport const sys = defineProgram(SYS_PROGRAM, P.U32LE, {\n createAccount: {\n coder: P.struct({ lamports: P.U64LE, space: P.U64LE, owner: pubKey }),\n keys: {\n source: { sign: true, write: true },\n newAccount: { sign: true, write: true },\n },\n hint: (o) => `Create new account=${o.newAccount} with balance of ${Decimal.encode(o.lamports)} and owner program ${o.owner}, using funding account ${o.source}`,\n },\n assign: {\n coder: P.struct({ owner: pubKey }),\n keys: { account: { sign: true, write: true } },\n hint: (o) => `Assign account=${o.account} to owner program=${o.owner}`,\n },\n transfer: {\n coder: P.struct({ lamports: P.U64LE }),\n keys: { source: { sign: true, write: true }, destination: { sign: false, write: true } },\n hint: (o) => `Transfer ${Decimal.encode(o.lamports)} SOL from ${o.source} to ${o.destination}`,\n },\n createAccountWithSeed: {\n coder: P.struct({\n base: pubKey,\n seed: rustString,\n lamports: P.U64LE,\n space: P.U64LE,\n owner: pubKey,\n }),\n keys: {\n source: { sign: true, write: true },\n newAccount: { sign: false, write: true },\n base: { sign: true, write: false },\n },\n },\n advanceNonce: {\n coder: P.struct({}),\n keys: {\n nonceAccount: { sign: false, write: true },\n _recent_bh: { address: SYS_RECENT_BLOCKHASHES, sign: false, write: false },\n nonceAuthority: { sign: true, write: false },\n },\n hint: (o) => `Consume nonce in nonce account=${o.nonceAccount} (owner: ${o.nonceAuthority})`,\n },\n withdrawFromNonce: {\n coder: P.struct({ lamports: P.U64LE }),\n keys: {\n nonceAccount: { sign: false, write: true },\n destination: { sign: false, write: true },\n _recent_bh: { address: SYS_RECENT_BLOCKHASHES, sign: false, write: false },\n _rent: { address: SYS_RENT, sign: false, write: false },\n nonceAuthority: { sign: true, write: false },\n },\n hint: (o) => `Withdraw ${Decimal.encode(o.lamports)} SOL from nonce account=${o.nonceAccount} (owner: ${o.nonceAuthority}) to ${o.destination}`,\n },\n initializeNonce: {\n coder: P.struct({ nonceAuthority: pubKey }),\n keys: {\n nonceAccount: { sign: false, write: true },\n _recent_bh: { address: SYS_RECENT_BLOCKHASHES, sign: false, write: false },\n _rent: { address: SYS_RENT, sign: false, write: false },\n },\n },\n authorizeNonce: {\n coder: P.struct({ newAuthorized: pubKey }),\n keys: {\n nonceAccount: { sign: false, write: true },\n nonceAuthority: { sign: true, write: false },\n },\n hint: (o) => `Change owner of nonce account=${o.nonceAccount} from ${o.nonceAuthority} to ${o.newAuthorized}`,\n },\n allocate: {\n coder: P.struct({ space: P.U64LE }),\n keys: {\n account: { sign: true, write: true },\n },\n },\n allocateWithSeed: {\n coder: P.struct({\n base: pubKey,\n seed: rustString,\n space: P.U64LE,\n owner: pubKey,\n }),\n keys: {\n account: { sign: false, write: true },\n base: { sign: true, write: false },\n },\n },\n assignWithSeed: {\n coder: P.struct({\n base: pubKey,\n seed: rustString,\n owner: pubKey,\n }),\n keys: {\n account: { sign: false, write: true },\n base: { sign: true, write: false },\n },\n },\n transferWithSeed: {\n coder: P.struct({\n lamports: P.U64LE,\n sourceSeed: rustString,\n sourceOwner: pubKey,\n }),\n keys: {\n source: { sign: false, write: true },\n sourceBase: { sign: true, write: false },\n destination: { sign: false, write: true },\n },\n },\n});\n// Type tests\nconst assertType = (_value) => { };\nassertType(sys.transfer);\nassertType(sys.advanceNonce);\nconst authorityType = P.map(P.U8, {\n MintTokens: 0,\n FreezeAccount: 1,\n AccountOwner: 2,\n CloseAccount: 3,\n});\nconst tokenName = (address, tl) => tl[address]?.symbol || address;\nexport const TOKEN_PROGRAM = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';\nexport const token = defineProgram(TOKEN_PROGRAM, P.U8, {\n initializeMint: {\n coder: P.struct({\n decimals: P.U8,\n mintAuthority: pubKey,\n freezeAuthority: P.optional(P.bool, pubKey, '11111111111111111111111111111111'),\n }),\n keys: {\n mint: { sign: false, write: true },\n _rent: { address: SYS_RENT, sign: false, write: false },\n },\n },\n initializeAccount: {\n coder: P.struct({}),\n keys: {\n account: { sign: false, write: true },\n mint: { sign: false, write: false },\n owner: { sign: false, write: false },\n _rent: { address: SYS_RENT, sign: false, write: false },\n },\n hint: (o, tl) => `Initialize token account=${o.account} with owner=${o.owner} token=${tokenName(o.mint, tl)}`,\n },\n // TODO: multisig support?\n initializeMultisig: {\n coder: P.struct({ m: P.U8 }),\n keys: {\n account: { sign: false, write: true },\n _rent: { address: SYS_RENT, sign: false, write: false },\n },\n hint: (o, _) => `Initialize multi-sig token account=${o.account} with signatures=${o.m}`,\n },\n transfer: {\n coder: P.struct({ amount: P.U64LE }),\n keys: {\n source: { sign: false, write: true },\n destination: { sign: false, write: true },\n owner: { sign: true, write: false },\n },\n hint: (o, _) => `Transfer ${o.amount} from token account=${o.source} of owner=${o.owner} to ${o.destination}`,\n },\n approve: {\n coder: P.struct({ amount: P.U64LE }),\n keys: {\n account: { sign: false, write: true },\n delegate: { sign: false, write: false },\n owner: { sign: true, write: false },\n },\n hint: (o, _) => `Approve authority of delegate=${o.delegate} over tokens on account=${o.account} on behalf of owner=${o.owner}`,\n },\n revoke: {\n coder: P.struct({}),\n keys: {\n account: { sign: false, write: true },\n owner: { sign: true, write: false },\n },\n hint: (o, _) => `Revoke delegate's authority over tokens on account=${o.account} on behalf of owner=${o.owner}`,\n },\n setAuthority: {\n coder: P.struct({\n authorityType,\n newAuthority: P.optional(P.bool, pubKey, '11111111111111111111111111111111'),\n }),\n keys: {\n account: { sign: false, write: true },\n currentAuthority: { sign: true, write: false },\n },\n hint: (o, _) => `Sets a new authority=${o.newAuthority} of a mint or account=${o.account}. Current authority=${o.currentAuthority}. Authority Type: ${o.authorityType}`,\n },\n mintTo: {\n coder: P.struct({ amount: P.U64LE }),\n keys: {\n mint: { sign: false, write: true },\n dest: { sign: false, write: true },\n authority: { sign: true, write: false },\n },\n },\n burn: {\n coder: P.struct({ amount: P.U64LE }),\n keys: {\n account: { sign: false, write: true },\n mint: { sign: false, write: true },\n owner: { sign: true, write: false },\n },\n hint: (o, _) => `Burn ${o.amount} tokens from account=${o.account} of owner=${o.owner} mint=${o.mint}`,\n },\n closeAccount: {\n coder: P.struct({}),\n keys: {\n account: { sign: false, write: true },\n dest: { sign: false, write: true },\n owner: { sign: true, write: false },\n },\n hint: (o, _) => `Close token account=${o.account} of owner=${o.owner}, transferring all its SOL to destionation account=${o.dest}`,\n },\n freezeAccount: {\n coder: P.struct({}),\n keys: {\n account: { sign: false, write: true },\n mint: { sign: false, write: true },\n authority: { sign: true, write: false },\n },\n hint: (o, _) => `Freeze token account=${o.account} of mint=${o.mint} using freeze_authority=${o.authority}`,\n },\n thawAccount: {\n coder: P.struct({}),\n keys: {\n account: { sign: false, write: true },\n mint: { sign: false, write: false },\n authority: { sign: true, write: false },\n },\n hint: (o, _) => `Thaw a frozne token account=${o.account} of mint=${o.mint} using freeze_authority=${o.authority}`,\n },\n transferChecked: {\n coder: P.struct({ amount: P.U64LE, decimals: P.U8 }),\n keys: {\n source: { sign: false, write: true },\n mint: { sign: false, write: false },\n destination: { sign: false, write: true },\n owner: { sign: true, write: false },\n },\n hint: (o, tl) => `Transfer ${P.coders.decimal(o.decimals).encode(o.amount)} ${tokenName(o.mint, tl)} from token account=${o.source} of owner=${o.owner} to ${o.destination}`,\n },\n approveChecked: {\n coder: P.struct({ amount: P.U64LE, decimals: P.U8 }),\n keys: {\n source: { sign: false, write: true },\n mint: { sign: false, write: false },\n delegate: { sign: false, write: false },\n owner: { sign: true, write: false },\n },\n hint: (o, tl) => `Approve delgate=${o.delegate} authority on behalf account=${o.source} owner=${o.owner} over ${P.coders.decimal(o.decimals).encode(o.amount)} ${tokenName(o.mint, tl)}`,\n },\n mintToChecked: {\n coder: P.struct({ amount: P.U64LE, decimals: P.U8 }),\n keys: {\n mint: { sign: false, write: true },\n dest: { sign: false, write: true },\n authority: { sign: true, write: false },\n },\n hint: (o, tl) => `Mint new tokens (${P.coders.decimal(o.decimals).encode(o.amount)} ${tokenName(o.mint, tl)}) to account=${o.dest} using authority=${o.authority}`,\n },\n burnChecked: {\n coder: P.struct({ amount: P.U64LE, decimals: P.U8 }),\n keys: {\n mint: { sign: false, write: true },\n account: { sign: false, write: true },\n owner: { sign: true, write: false },\n },\n hint: (o, tl) => `Burn tokens (${P.coders.decimal(o.decimals).encode(o.amount)} ${tokenName(o.mint, tl)}) on account=${o.account} of owner=${o.owner}`,\n },\n initializeAccount2: {\n coder: P.struct({ owner: pubKey }),\n keys: {\n account: { sign: false, write: true },\n mint: { sign: false, write: false },\n _rent: { address: SYS_RENT, sign: false, write: false },\n },\n hint: (o, tl) => `Initialize token account=${o.account} with owner=${o.owner} token=${tokenName(o.mint, tl)}`,\n },\n syncNative: {\n coder: P.struct({}),\n keys: { nativeAccount: { sign: false, write: true } },\n hint: (o) => `Sync SOL balance for wrapped account ${o.nativeAccount}`,\n },\n});\nexport const NonceAccount = P.struct({\n version: P.U32LE,\n state: P.U32LE,\n authority: pubKey,\n nonce: pubKey,\n lamportPerSignature: P.U64LE,\n});\nfunction mod(a, b = ed25519.CURVE.Fp.ORDER) {\n const res = a % b;\n return res >= 0n ? res : b + res;\n}\nexport function isOnCurve(bytes) {\n if (typeof bytes === 'string')\n bytes = base58.decode(bytes);\n try {\n // noble-ed25519 checks that publicKey is < P, but dalek (ed25519-dalek.CompressedEdwardsY) is not, so we do modulo here.\n // first bit in last byte is x oddity flag\n const last = bytes[31];\n const normedLast = last & ~0x80;\n const normed = Uint8Array.from(Array.from(bytes.slice(0, 31)).concat(normedLast));\n const modBytes = P.U256LE.encode(mod(P.U256LE.decode(normed)));\n if ((last & 0x80) !== 0)\n modBytes[31] |= 0x80;\n ed25519.ExtendedPoint.fromHex(modBytes);\n return true;\n }\n catch (e) {\n return false;\n }\n}\nexport function programAddress(program, ...seeds) {\n let seed = P.utils.concatBytes(...seeds);\n const noncePos = seed.length;\n seed = P.utils.concatBytes(seed, new Uint8Array([0]), base58.decode(program), utf8.decode('ProgramDerivedAddress'));\n for (let i = 255; i >= 0; i--) {\n seed[noncePos] = i;\n const hash = sha256(seed);\n if (isOnCurve(hash))\n continue;\n return base58.encode(hash);\n }\n throw new Error('SOL.programAddress: nonce exhausted, cannot find program address');\n}\nexport const ASSOCIATED_TOKEN_PROGRAM = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';\nexport const associatedToken = defineProgram(ASSOCIATED_TOKEN_PROGRAM, P.constant(0), {\n create: {\n coder: P.struct({}),\n keys: {\n source: { sign: true, write: true },\n account: { sign: false, write: true },\n wallet: { sign: false, write: false },\n mint: { sign: false, write: false },\n _sys: { address: SYS_PROGRAM, sign: false, write: false },\n _token: { address: TOKEN_PROGRAM, sign: false, write: false },\n _rent: { address: SYS_RENT, sign: false, write: false },\n },\n hint: (o, tl) => `Initialize associated token account=${o.account} with owner=${o.wallet} for token=${tokenName(o.mint, tl)}, payed by ${o.source}`,\n },\n});\nexport function tokenAddress(mint, owner, allowOffCurveOwner = false) {\n if (!allowOffCurveOwner && !isOnCurve(owner))\n throw new Error('Owner is off curve (cannot sign)');\n return programAddress(ASSOCIATED_TOKEN_PROGRAM, ...[owner, TOKEN_PROGRAM, mint].map((i) => base58.decode(i)));\n}\n// https://raw.githubusercontent.com/solana-labs/token-list/main/src/tokens/solana.tokenlist.json\nexport const COMMON_TOKENS = {\n So11111111111111111111111111111111111111112: { decimals: 9, symbol: 'SOL' }, // Wrapped SOL\n Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB: { decimals: 6, symbol: 'USDT', price: 1 },\n EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: { decimals: 6, symbol: 'USDC', price: 1 },\n};\nexport function tokenFromSymbol(symbol, tokens = COMMON_TOKENS) {\n for (let c in tokens)\n if (tokens[c].symbol === symbol)\n return { ...tokens[c], contract: c };\n return;\n}\n// [1, 0, 0, 0] -> true\n// [0, 0, 0, 0] -> false\nconst U32LEBOOL = P.padRight(4, P.bool, () => 0);\nexport const TokenAccount = P.struct({\n mint: pubKey,\n owner: pubKey,\n amount: P.U64LE,\n delegate: P.optional(U32LEBOOL, pubKey, '11111111111111111111111111111111'),\n state: P.map(P.U8, {\n uninitialized: 0,\n initialized: 1,\n frozen: 2,\n }),\n isNative: P.optional(U32LEBOOL, P.U64LE, 0n),\n delegateAmount: P.U64LE,\n closeAuthority: P.optional(U32LEBOOL, pubKey, '11111111111111111111111111111111'),\n});\nexport const swapProgram = 'SwaPpA9LAaLfeLi3a68M4DjnLqgtticKg6CnyNwgAC8';\nexport function verifyTx(tx) {\n if (typeof tx === 'string')\n tx = base64.decode(tx);\n if (tx.length > 1280 - 40 - 8)\n throw new Error('sol: transaction too big');\n const parsed = Transaction.decode(tx);\n const raw = TransactionRaw.decode(tx);\n const msg = Message.encode(TransactionRaw.decode(tx).msg);\n for (let i = 0; i < raw.msg.requiredSignatures; i++) {\n const address = raw.msg.keys[i];\n const pubKey = base58.decode(address);\n const sig = parsed.signatures[address];\n if (!ed25519.verify(sig, msg, pubKey))\n throw new Error(`sol: invalid signature sig=${sig} msg=${msg}`);\n }\n}\nexport function getPublicKey(privateKey) {\n return ed25519.getPublicKey(privateKey);\n}\nexport function getAddress(privateKey) {\n const publicKey = getPublicKey(privateKey);\n return base58.encode(publicKey);\n}\nexport function getAddressFromPublicKey(publicKey) {\n return base58.encode(publicKey);\n}\nexport function formatPrivate(privateKey, format = 'base58') {\n const publicKey = getPublicKey(privateKey);\n const fullKey = P.utils.concatBytes(privateKey, publicKey);\n switch (format) {\n case 'base58': {\n return base58.encode(fullKey);\n }\n case 'hex': {\n return hex.encode(fullKey);\n }\n case 'array': {\n return Array.from(fullKey);\n }\n default: {\n throw new Error('sol: unsupported format');\n }\n }\n}\nexport function createTxComplex(address, instructions, blockhash) {\n if (!instructions.length)\n throw new Error('SOLPublic: empty instructions array');\n return base64.encode(Transaction.encode({\n msg: { feePayer: address, blockhash, instructions },\n signatures: {},\n }));\n}\nexport function createTx(from, to, amount, _fee, blockhash) {\n const amountNum = Decimal.decode(amount);\n return createTxComplex(from, [sys.transfer({ source: from, destination: to, lamports: amountNum })], blockhash);\n}\nexport function signTx(privateKey, data) {\n if (typeof data === 'string')\n data = base64.decode(data);\n const address = getAddress(privateKey);\n const raw = TransactionRaw.decode(data);\n const reqSignatures = raw.msg.keys.slice(0, raw.msg.requiredSignatures);\n if (!reqSignatures.filter((i) => i == address).length)\n throw new Error(`SOLPrivate: tx doesn't require signature for address=${address}`);\n const sig = ed25519.sign(Message.encode(raw.msg), privateKey);\n for (let i = 0; i < reqSignatures.length; i++)\n if (reqSignatures[i] === address)\n raw.signatures[i] = sig;\n // Base58 encoding for tx is deprecated\n const tx = base64.encode(TransactionRaw.encode(raw));\n // first signature is txHash\n return [base58.encode(sig), tx];\n}\n//# sourceMappingURL=index.js.map","// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n const BASE_MAP = new Uint8Array(256)\n for (let j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (let i = 0; i < ALPHABET.length; i++) {\n const x = ALPHABET.charAt(i)\n const xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n const BASE = ALPHABET.length\n const LEADER = ALPHABET.charAt(0)\n const FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n const iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n // eslint-disable-next-line no-empty\n if (source instanceof Uint8Array) { } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source)\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n let zeroes = 0\n let length = 0\n let pbegin = 0\n const pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n const size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n const b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n let carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n let i = 0\n for (let it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n let it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n let str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n let psz = 0\n // Skip and count leading '1's.\n let zeroes = 0\n let length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n const size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n const b256 = new Uint8Array(size)\n // Process the characters.\n while (psz < source.length) {\n // Find code of next character\n const charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n let carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n let i = 0\n for (let it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n let it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n const vch = new Uint8Array(zeroes + (size - it4))\n let j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n const buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode,\n decodeUnsafe,\n decode\n }\n}\nexport default base\n","import basex from 'base-x';\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\nexport default basex(ALPHABET);\n","import * as sol from \"micro-sol-signer\";\nimport bs58 from \"bs58\";\n\n// Re-export from micro-sol-signer\nexport * from \"micro-sol-signer\";\n\n// Export our custom utilities\nexport { Connection } from \"./connection\";\nexport * from \"./spl-token\";\n\n// Additional compatibility layer for easier migration\nexport class PublicKey {\n private _publicKey: string;\n\n constructor(value: string | Uint8Array | number[] | Buffer | PublicKey) {\n if (value instanceof PublicKey) {\n this._publicKey = value.toString();\n } else if (typeof value === \"string\") {\n this._publicKey = value;\n } else if (\n value instanceof Uint8Array ||\n Array.isArray(value) ||\n Buffer.isBuffer(value)\n ) {\n const bytes = value instanceof Uint8Array ? value : new Uint8Array(value);\n this._publicKey = bs58.encode(bytes);\n } else {\n throw new Error(\"Invalid public key input\");\n }\n }\n\n toString(): string {\n return this._publicKey;\n }\n\n toBytes(): Uint8Array {\n return bs58.decode(this._publicKey);\n }\n\n toBuffer(): Buffer {\n return Buffer.from(this.toBytes());\n }\n\n equals(other: PublicKey | string): boolean {\n const otherKey = other instanceof PublicKey ? other.toString() : other;\n return this._publicKey === otherKey;\n }\n\n toBase58(): string {\n return this._publicKey;\n }\n}\n\n// Transaction compatibility wrapper\nexport class Transaction {\n private _transaction: any;\n public signatures: Array<{\n signature: Uint8Array | null;\n publicKey: PublicKey;\n }> = [];\n public feePayer?: PublicKey;\n public recentBlockhash?: string;\n private _instructions: sol.Instruction[];\n\n constructor() {\n // We'll build instructions array and serialize using micro-sol-signer\n this._instructions = [];\n }\n\n add(...instructions: sol.Instruction[]): Transaction {\n this._instructions.push(...instructions);\n return this;\n }\n\n static from(buffer: Uint8Array | Buffer | number[]): Transaction {\n // Decode using micro-sol-signer\n const bytes =\n buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n const decoded = sol.Transaction.decode(bytes);\n\n // Create a new Transaction and populate it\n const tx = new Transaction();\n // Note: This would need proper mapping from decoded to our wrapper\n // For now, storing the raw decoded transaction\n tx._transaction = decoded;\n return tx;\n }\n\n serialize(_options?: { requireAllSignatures?: boolean }): Buffer {\n // Build transaction using micro-sol-signer\n if (this._transaction) {\n // If we have a decoded transaction, re-serialize it\n return Buffer.from(sol.Transaction.encode(this._transaction));\n }\n\n // Build from instructions\n if (!this.feePayer || !this.recentBlockhash) {\n throw new Error(\"Transaction requires feePayer and recentBlockhash\");\n }\n\n const txHex = sol.createTxComplex(\n this.feePayer.toString(),\n this._instructions,\n this.recentBlockhash,\n );\n\n return Buffer.from(txHex, \"hex\");\n }\n\n serializeMessage(): Buffer {\n // Serialize just the message part\n if (!this.feePayer || !this.recentBlockhash) {\n throw new Error(\"Transaction requires feePayer and recentBlockhash\");\n }\n\n const txHex = sol.createTxComplex(\n this.feePayer.toString(),\n this._instructions,\n this.recentBlockhash,\n );\n\n // Return the message part of the transaction\n return Buffer.from(txHex, \"hex\");\n }\n}\n\n// Versioned transaction support\nexport class VersionedTransaction {\n constructor(\n public message: any,\n public signatures: Uint8Array[],\n ) {}\n\n static deserialize(serialized: Uint8Array): VersionedTransaction {\n const decoded = sol.Transaction.decode(serialized);\n // Map to VersionedTransaction format\n return new VersionedTransaction(decoded, []);\n }\n\n serialize(): Uint8Array {\n return sol.Transaction.encode(this.message);\n }\n}\n","import {\n PublicKey,\n Transaction,\n VersionedTransaction,\n} from \"../../utils/solana\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\ninterface PhantomProvider {\n isPhantom: boolean;\n publicKey: PublicKey | null;\n isConnected: boolean;\n connect(opts?: { onlyIfTrusted: boolean }): Promise<{ publicKey: PublicKey }>;\n disconnect(): Promise<void>;\n signTransaction(\n transaction: Transaction | VersionedTransaction,\n ): Promise<Transaction | VersionedTransaction>;\n signAllTransactions(\n transactions: (Transaction | VersionedTransaction)[],\n ): Promise<(Transaction | VersionedTransaction)[]>;\n signAndSendTransaction(\n transaction: Transaction | VersionedTransaction,\n opts?: { skipPreflight?: boolean; maxRetries?: number },\n ): Promise<{ signature: string }>;\n signMessage(\n message: Uint8Array,\n display?: \"utf8\" | \"hex\",\n ): Promise<{ signature: Uint8Array }>;\n on(\n event: \"connect\" | \"disconnect\" | \"accountChanged\",\n handler: (args: unknown) => void,\n ): void;\n request(args: { method: string; params?: unknown }): Promise<unknown>;\n}\n\nexport class PhantomWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"phantom\";\n readonly platform: ExternalPlatform = \"solana\";\n private account: string | undefined = undefined;\n private connectedAccounts: string[] = [];\n\n private getProvider(): PhantomProvider {\n if (typeof window === \"undefined\") {\n throw new Error(\"Not ready\");\n }\n\n const provider = window.solana;\n\n if (!provider?.isPhantom) {\n throw new Error(\"Phantom is not available\");\n }\n\n return provider;\n }\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.solana?.isPhantom;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: \"Unknown\",\n name: \"Phantom\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Phantom is not available\");\n }\n\n const response = await this.getProvider().connect();\n if (response.publicKey) {\n this.account = response.publicKey.toString();\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n getConnectedAccounts(): string[] {\n return this.connectedAccounts;\n }\n\n async signMessage(message: string): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Phantom is not connected\");\n }\n\n const encodedMessage = new TextEncoder().encode(message);\n const result = await this.getProvider().signMessage(\n encodedMessage,\n \"utf8\",\n );\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing message with Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(\n serailized_txn: Uint8Array,\n ): Promise<ExternalWalletResponse<any>> {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Phantom is not connected\");\n }\n\n try {\n const txn = Transaction.from(serailized_txn);\n const provider = this.getProvider();\n const result = await provider.signAndSendTransaction(txn);\n return {\n success: true,\n wallet: this.type,\n result,\n };\n } catch (error) {\n console.error(`Error sending transaction with Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async switchChain(_chainId: string): Promise<boolean> {\n console.warn(\"Chain switching not supported for Phantom\");\n return false;\n }\n\n async getBalance(\n _tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Phantom is not connected\");\n }\n\n // TODO: Implement balance fetching based on Phantom's API\n return {\n success: true,\n wallet: this.type,\n result: \"Implement based on Phantom API\",\n };\n } catch (error) {\n console.error(`Error getting balance from Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async waitForTransaction(\n _txHash: string,\n _timeoutMs?: number,\n ): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"waitForTransaction not supported for Phantom wallet\",\n };\n }\n}\n","import { ExternalWalletType } from \"../types\";\nimport { EthereumWalletBase } from \"../ethereum-base\";\n\nexport class PhantomEVMWallet extends EthereumWalletBase {\n readonly type: ExternalWalletType = \"phantom-evm\";\n readonly rdns = \"app.phantom\";\n readonly displayName = \"Phantom\";\n}\n","import { ExternalWalletType } from \"../types\";\nimport { EthereumWalletBase } from \"../ethereum-base\";\n\nexport class RabbyWallet extends EthereumWalletBase {\n readonly type: ExternalWalletType = \"rabby\";\n readonly rdns = \"io.rabby\";\n readonly displayName = \"Rabby\";\n}\n","import { Call, TypedData, StarknetWindowObject } from \"@starknet-io/types-js\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\nexport class BraavosWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"braavos\";\n readonly platform: ExternalPlatform = \"starknet\";\n private wallet: StarknetWindowObject | undefined = undefined;\n private account: string | undefined = undefined;\n private connectedAccounts: string[] = [];\n private accountChangeListener: ((accounts?: string[]) => void) | undefined =\n undefined;\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.starknet_braavos;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available\n ? window.starknet_braavos?.version || \"Unknown\"\n : undefined,\n chainId: available ? window.starknet_braavos?.chainId : undefined,\n name: \"Braavos\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Braavos is not available\");\n }\n\n const wallet = window.starknet_braavos as StarknetWindowObject;\n if (!wallet) {\n throw new Error(\"No wallet found\");\n }\n\n // Request accounts from the wallet\n const accounts = await wallet.request({\n type: \"wallet_requestAccounts\",\n params: { silent_mode: false },\n });\n\n if (!accounts || accounts.length === 0) {\n throw new Error(\"No accounts found\");\n }\n\n this.removeAccountChangeListener();\n\n this.wallet = wallet;\n this.account = accounts[0];\n this.connectedAccounts = accounts;\n this.setupAccountChangeListener();\n return { success: true, wallet: this.type, account: this.account };\n } catch (error) {\n console.error(`Error connecting to Braavos:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n getConnectedAccounts(): string[] {\n return this.connectedAccounts;\n }\n\n async signTypedData(data: TypedData): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.wallet) {\n throw new Error(\"Braavos is not connected\");\n }\n\n const sig = await this.wallet.request({\n type: \"wallet_signTypedData\",\n params: data,\n });\n\n return { success: true, wallet: this.type, result: sig };\n } catch (error) {\n console.error(`Error signing typed data with Braavos:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(calls: Call[]): Promise<ExternalWalletResponse> {\n if (!this.wallet) {\n throw new Error(\"No wallet found\");\n }\n\n try {\n const result = await this.wallet.request({\n type: \"wallet_addInvokeTransaction\",\n params: {\n calls,\n },\n });\n\n return {\n success: true,\n wallet: this.type,\n result,\n };\n } catch (error) {\n console.error(`Error sending transaction with Braavos:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async switchChain(chainId: string): Promise<boolean> {\n if (!this.wallet) {\n throw new Error(\"No wallet found\");\n }\n\n const result = await this.wallet.request({\n type: \"wallet_switchStarknetChain\",\n params: {\n chainId,\n },\n });\n\n return result;\n }\n async getBalance(\n _tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.wallet) {\n throw new Error(\"Braavos is not connected\");\n }\n\n // TODO: Implement balance fetching based on Braavos's API\n return {\n success: true,\n wallet: this.type,\n result: \"Implement based on Braavos API\",\n };\n } catch (error) {\n console.error(`Error getting balance from Braavos:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async waitForTransaction(\n _txHash: string,\n _timeoutMs?: number,\n ): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"waitForTransaction not supported for Braavos wallet\",\n };\n }\n\n private setupAccountChangeListener(): void {\n if (!this.wallet) return;\n\n this.accountChangeListener = (accounts: string[] | undefined) => {\n if (accounts && accounts.length > 0) {\n this.account = accounts[0];\n this.connectedAccounts = accounts;\n } else {\n this.account = undefined;\n this.connectedAccounts = [];\n }\n };\n\n // Listen for account changes\n this.wallet.on(\"accountsChanged\", this.accountChangeListener);\n }\n\n private removeAccountChangeListener(): void {\n if (this.wallet && this.accountChangeListener) {\n this.wallet.off(\"accountsChanged\", this.accountChangeListener);\n this.accountChangeListener = undefined;\n }\n }\n\n disconnect(): void {\n this.removeAccountChangeListener();\n this.wallet = undefined;\n this.account = undefined;\n this.connectedAccounts = [];\n }\n}\n","import { getAddress } from \"ethers\";\nimport { ArgentWallet } from \"./argent\";\nimport { BaseWallet } from \"./base\";\nimport { MetaMaskWallet } from \"./metamask\";\nimport { PhantomWallet } from \"./phantom\";\nimport { PhantomEVMWallet } from \"./phantom-evm\";\nimport { RabbyWallet } from \"./rabby\";\nimport {\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"./types\";\nimport { BraavosWallet } from \"./braavos\";\n\nexport class WalletBridge {\n private readonly walletAdapters: Map<ExternalWalletType, WalletAdapter>;\n\n constructor() {\n this.walletAdapters = new Map<ExternalWalletType, WalletAdapter>();\n\n if (typeof window == \"undefined\") {\n return;\n }\n\n const metamask = new MetaMaskWallet();\n this.walletAdapters.set(\"metamask\", metamask);\n\n const phantom = new PhantomWallet();\n this.walletAdapters.set(\"phantom\", phantom);\n\n const phantomEvm = new PhantomEVMWallet();\n this.walletAdapters.set(\"phantom-evm\", phantomEvm);\n\n const argent = new ArgentWallet();\n this.walletAdapters.set(\"argent\", argent);\n\n const braavos = new BraavosWallet();\n this.walletAdapters.set(\"braavos\", braavos);\n\n const rabby = new RabbyWallet();\n this.walletAdapters.set(\"rabby\", rabby);\n\n const base = new BaseWallet();\n this.walletAdapters.set(\"base\", base);\n\n window.wallet_bridge = this;\n }\n\n getIFrameMethods() {\n return {\n externalDetectWallets: (_origin: string) => () => this.detectWallets(),\n externalConnectWallet: (_origin: string) => (type: ExternalWalletType) =>\n this.connectWallet(type),\n externalSignMessage:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, message: string) =>\n this.signMessage(identifier, message),\n externalSignTypedData:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, data: any) =>\n this.signTypedData(identifier, data),\n externalSendTransaction:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, txn: any) =>\n this.sendTransaction(identifier, txn),\n externalGetBalance:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, tokenAddress?: string) =>\n this.getBalance(identifier, tokenAddress),\n externalSwitchChain:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, chainId: string) =>\n this.switchChain(identifier, chainId),\n externalWaitForTransaction:\n (_origin: string) =>\n (\n identifier: ExternalWalletType | string,\n txHash: string,\n timeoutMs?: number,\n ) =>\n this.waitForTransaction(identifier, txHash, timeoutMs),\n };\n }\n\n async detectWallets(): Promise<ExternalWallet[]> {\n const wallets = Array.from(this.walletAdapters.values()).map((adapter) =>\n adapter.getInfo(),\n ) as ExternalWallet[];\n\n return wallets;\n }\n\n private getWalletAdapterByType(type: ExternalWalletType): WalletAdapter {\n const adapter = this.walletAdapters.get(type);\n if (!adapter) {\n throw new Error(`Unsupported wallet type: ${type}`);\n }\n return adapter;\n }\n\n private handleError(\n identifier: ExternalWalletType | string,\n error: unknown,\n operation: string,\n responseType?: ExternalWalletType,\n ): ExternalWalletResponse {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error\";\n let walletType: ExternalWalletType | string = \"unknown\";\n if (typeof identifier === \"string\") {\n const adapter = this.getConnectedWalletAdapter(identifier);\n walletType = responseType ?? adapter?.type ?? identifier;\n } else {\n walletType = identifier;\n }\n\n console.error(`Error ${operation} with ${identifier} wallet:`, error);\n return {\n success: false,\n wallet: walletType as ExternalWalletType,\n error: errorMessage,\n };\n }\n\n async connectWallet(\n type: ExternalWalletType,\n ): Promise<ExternalWalletResponse> {\n try {\n const wallet = this.getWalletAdapterByType(type);\n const response = await wallet.connect();\n\n if (response.success && response.account) {\n console.log(\n `Wallet ${type} connected with address ${response.account}`,\n );\n } else if (response.success && !response.account) {\n console.error(\n `Wallet ${type} connected successfully but did not provide an address.`,\n );\n return {\n ...response,\n success: false,\n error: \"Wallet connected but address not found.\",\n };\n }\n\n return response;\n } catch (error) {\n return this.handleError(type, error, \"connecting to\");\n }\n }\n\n private getConnectedWalletAdapter(\n identifier: ExternalWalletType | string,\n ): WalletAdapter {\n let wallet: WalletAdapter | undefined;\n let checkSummedAddress: string;\n\n try {\n checkSummedAddress = getAddress(identifier);\n } catch {\n // getAddress failed, so this must be a wallet type\n wallet = this.walletAdapters.get(identifier as ExternalWalletType);\n if (!wallet) {\n throw new Error(`Wallet ${identifier} is not connected or supported`);\n }\n return wallet;\n }\n\n wallet = this.walletAdapters.values().find((adapter) => {\n return adapter.getConnectedAccounts().includes(checkSummedAddress);\n });\n\n if (!wallet) {\n throw new Error(`No wallet found with connected address ${identifier}`);\n }\n\n return wallet;\n }\n\n async signMessage(\n identifier: ExternalWalletType | string,\n message: string,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n if (!wallet.signMessage) {\n throw new Error(\n `Wallet type ${wallet.type} (identifier: ${identifier}) does not support signing messages`,\n );\n }\n return await wallet.signMessage(message, identifier);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"signing message with\",\n wallet?.type,\n );\n }\n }\n\n async signTypedData(\n identifier: ExternalWalletType | string,\n data: any,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n if (!wallet.signTypedData) {\n throw new Error(\n `Wallet type ${wallet.type} (identifier: ${identifier}) does not support signing typed data`,\n );\n }\n return await wallet.signTypedData(data);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"signing typed data with\",\n wallet?.type,\n );\n }\n }\n\n async sendTransaction(\n identifier: ExternalWalletType | string,\n txn: any,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n return await wallet.sendTransaction(txn);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"sending transaction with\",\n wallet?.type,\n );\n }\n }\n\n async getBalance(\n identifier: ExternalWalletType | string,\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n return await wallet.getBalance(tokenAddress);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"getting balance from\",\n wallet?.type,\n );\n }\n }\n\n async switchChain(\n identifier: ExternalWalletType | string,\n chainId: string,\n ): Promise<boolean> {\n try {\n const wallet = this.getConnectedWalletAdapter(identifier);\n return await wallet.switchChain(chainId);\n } catch (error) {\n console.error(`Error switching chain for ${identifier} wallet:`, error);\n return false;\n }\n }\n\n async waitForTransaction(\n identifier: ExternalWalletType | string,\n txHash: string,\n timeoutMs?: number,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n return await wallet.waitForTransaction(txHash, timeoutMs);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"waiting for transaction with\",\n wallet?.type,\n );\n }\n }\n}\n\ndeclare global {\n interface Window {\n ethereum?: any;\n solana?: any;\n starknet_argentX?: any;\n starknet_braavos?: any;\n wallet_bridge?: WalletBridge;\n }\n}\n\nexport type {\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"./types\";\n","import { KEYCHAIN_URL } from \"../constants\";\nimport { Keychain, KeychainOptions } from \"../types\";\nimport { WalletBridge } from \"../wallets/bridge\";\nimport { IFrame, IFrameOptions } from \"./base\";\n\ntype KeychainIframeOptions = IFrameOptions<Keychain> &\n KeychainOptions & {\n version?: string;\n ref?: string;\n refGroup?: string;\n needsSessionCreation?: boolean;\n username?: string;\n onSessionCreated?: () => void;\n onStarterpackPlay?: () => void;\n encryptedBlob?: string;\n };\n\nconst STARTERPACK_PLAY_CALLBACK_DELAY_MS = 200;\n\nexport class KeychainIFrame extends IFrame<Keychain> {\n private walletBridge: WalletBridge;\n private onStarterpackPlay?: () => void;\n\n constructor({\n url,\n policies,\n version,\n slot,\n namespace,\n tokens,\n preset,\n shouldOverridePresetPolicies,\n rpcUrl,\n ref,\n refGroup,\n needsSessionCreation,\n username,\n onSessionCreated,\n onStarterpackPlay,\n encryptedBlob,\n propagateSessionErrors,\n errorDisplayMode,\n ...iframeOptions\n }: KeychainIframeOptions) {\n let onStarterpackPlayHandler: (() => Promise<void>) | undefined;\n const _url = new URL(url ?? KEYCHAIN_URL);\n const walletBridge = new WalletBridge();\n\n if (propagateSessionErrors) {\n _url.searchParams.set(\"propagate_error\", \"true\");\n }\n\n if (errorDisplayMode) {\n _url.searchParams.set(\"error_display_mode\", errorDisplayMode);\n }\n\n if (version) {\n _url.searchParams.set(\"v\", encodeURIComponent(version));\n }\n\n if (slot) {\n _url.searchParams.set(\"ps\", encodeURIComponent(slot));\n }\n\n if (namespace) {\n _url.searchParams.set(\"ns\", encodeURIComponent(namespace));\n }\n\n if (tokens?.erc20) {\n _url.searchParams.set(\n \"erc20\",\n encodeURIComponent(tokens.erc20.toString()),\n );\n }\n\n if (rpcUrl) {\n _url.searchParams.set(\"rpc_url\", encodeURIComponent(rpcUrl));\n }\n\n if (ref) {\n _url.searchParams.set(\"ref\", encodeURIComponent(ref));\n }\n\n if (refGroup) {\n _url.searchParams.set(\"ref_group\", encodeURIComponent(refGroup));\n }\n\n if (needsSessionCreation) {\n _url.searchParams.set(\"needs_session_creation\", \"true\");\n }\n\n if (username) {\n _url.searchParams.set(\"username\", encodeURIComponent(username));\n }\n\n // Policy precedence logic:\n // 1. If shouldOverridePresetPolicies is true and policies are provided, use policies\n // 2. Otherwise, if preset is defined, use empty object (let preset take precedence)\n // 3. Otherwise, use provided policies or empty object\n if ((!preset || shouldOverridePresetPolicies) && policies) {\n _url.searchParams.set(\n \"policies\",\n encodeURIComponent(JSON.stringify(policies)),\n );\n } else if (preset) {\n _url.searchParams.set(\"preset\", preset);\n }\n\n // Add encrypted blob to URL fragment (hash) if present\n // This contains the encrypted localStorage snapshot from keychain redirect\n if (encryptedBlob) {\n _url.hash = `kc=${encodeURIComponent(encryptedBlob)}`;\n }\n\n super({\n ...iframeOptions,\n id: \"controller-keychain\",\n url: _url,\n methods: {\n ...walletBridge.getIFrameMethods(),\n // Expose callback for keychain to notify parent that session was created and storage access granted\n onSessionCreated: (_origin: string) => () => onSessionCreated?.(),\n onStarterpackPlay: (_origin: string) => async () => {\n if (onStarterpackPlayHandler) {\n await onStarterpackPlayHandler();\n }\n },\n },\n });\n\n this.walletBridge = walletBridge;\n this.onStarterpackPlay = onStarterpackPlay;\n onStarterpackPlayHandler = async () => {\n this.close();\n const callback = this.onStarterpackPlay;\n this.onStarterpackPlay = undefined;\n if (!callback) {\n return;\n }\n await new Promise((resolve) =>\n setTimeout(resolve, STARTERPACK_PLAY_CALLBACK_DELAY_MS),\n );\n try {\n callback();\n } catch (error) {\n console.error(\"Failed to run starterpack play callback:\", error);\n }\n };\n\n // Expose the wallet bridge instance globally for WASM interop\n if (typeof window !== \"undefined\") {\n (window as any).external_wallets = this.walletBridge;\n }\n }\n\n getWalletBridge(): WalletBridge {\n return this.walletBridge;\n }\n\n setOnStarterpackPlay(callback?: () => void) {\n this.onStarterpackPlay = callback;\n }\n}\n","/**\n * Validates a redirect URL to prevent XSS and open redirect attacks.\n *\n * This validator is designed for the standalone auth flow where we want to\n * support redirecting to external game domains (e.g., lootsurvivor.io)\n * after authentication, while blocking dangerous attack vectors.\n *\n * @param redirectUrl - The URL to validate (from redirectUrl option)\n * @returns Object with isValid boolean and optional error message\n */\nexport function validateRedirectUrl(redirectUrl: string): {\n isValid: boolean;\n error?: string;\n} {\n // Check for empty or undefined\n if (!redirectUrl || redirectUrl.trim() === \"\") {\n return { isValid: false, error: \"Redirect URL is empty\" };\n }\n\n // Try to parse as URL\n let url: URL;\n try {\n url = new URL(redirectUrl);\n } catch {\n return {\n isValid: false,\n error: \"Invalid URL format\",\n };\n }\n\n // CRITICAL: Block dangerous protocols that can execute JavaScript\n const allowedProtocols = [\"http:\", \"https:\"];\n if (!allowedProtocols.includes(url.protocol)) {\n return {\n isValid: false,\n error: `Protocol \"${url.protocol}\" is not allowed. Only http: and https: are supported.`,\n };\n }\n\n // CRITICAL: Ensure URL has a valid hostname\n // This blocks edge cases like \"javascript:alert(1)\" being parsed as a URL\n if (!url.hostname || url.hostname === \"\") {\n return {\n isValid: false,\n error: \"URL must have a valid hostname\",\n };\n }\n\n // Additional validation: Block localhost in production\n // Allow localhost only for development (when current origin is also localhost)\n if (typeof window !== \"undefined\") {\n const isCurrentHostLocal =\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\";\n\n const isRedirectLocal =\n url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\";\n\n // If we're NOT on localhost but trying to redirect to localhost, block it\n if (!isCurrentHostLocal && isRedirectLocal) {\n return {\n isValid: false,\n error: \"Cannot redirect to localhost from production\",\n };\n }\n }\n\n // URL is safe to redirect to\n return { isValid: true };\n}\n","import { AsyncMethodReturns } from \"@cartridge/penpal\";\n\nimport { Policy } from \"@cartridge/presets\";\nimport { StarknetInjectedWallet } from \"@starknet-io/get-starknet-wallet-standard\";\nimport type { WalletWithStarknetFeatures } from \"@starknet-io/get-starknet-wallet-standard/features\";\nimport {\n AddInvokeTransactionResult,\n AddStarknetChainParameters,\n ChainId,\n} from \"@starknet-io/types-js\";\nimport { constants, shortString, WalletAccount } from \"starknet\";\nimport { version } from \"../package.json\";\nimport ControllerAccount from \"./account\";\nimport { KEYCHAIN_URL } from \"./constants\";\nimport { HeadlessAuthenticationError, NotReadyToConnect } from \"./errors\";\nimport { KeychainIFrame } from \"./iframe\";\nimport BaseProvider from \"./provider\";\nimport {\n AuthOptions,\n Chain,\n ConnectError,\n ConnectReply,\n ConnectOptions,\n ControllerOptions,\n IFrames,\n Keychain,\n ProbeReply,\n ProfileContextTypeVariant,\n ResponseCodes,\n OpenOptions,\n StarterpackOptions,\n} from \"./types\";\nimport { validateRedirectUrl } from \"./url-validator\";\nimport { parseChainId } from \"./utils\";\n\nexport default class ControllerProvider extends BaseProvider {\n private keychain?: AsyncMethodReturns<Keychain>;\n private options: ControllerOptions;\n private iframes?: IFrames;\n private selectedChain: ChainId;\n private chains: Map<ChainId, Chain>;\n private referral: { ref?: string; refGroup?: string };\n private encryptedBlob?: string;\n\n isReady(): boolean {\n return !!this.keychain;\n }\n\n constructor(options: ControllerOptions = {}) {\n super();\n\n // Default Cartridge chains that are always available\n const cartridgeChains: Chain[] = [\n { rpcUrl: \"https://api.cartridge.gg/x/starknet/sepolia/rpc/v0_9\" },\n { rpcUrl: \"https://api.cartridge.gg/x/starknet/mainnet/rpc/v0_9\" },\n ];\n\n // Merge user chains with default chains\n // User chains take precedence if they specify the same network\n const chains = [...cartridgeChains, ...(options.chains || [])];\n const defaultChainId =\n options.defaultChainId || constants.StarknetChainId.SN_MAIN;\n\n this.selectedChain = defaultChainId;\n this.chains = new Map<ChainId, Chain>();\n\n // Auto-extract referral parameters from URL\n // This allows games to pass referrals via their own URL: game.com/?ref=alice&ref_group=campaign1\n const urlParams =\n typeof window !== \"undefined\"\n ? new URLSearchParams(window.location.search)\n : null;\n this.referral = {\n ref: urlParams?.get(\"ref\") ?? undefined,\n refGroup: urlParams?.get(\"ref_group\") ?? undefined,\n };\n\n this.options = { ...options, chains, defaultChainId };\n\n // Auto-detect and set lastUsedConnector from URL parameter\n // This is set by the keychain after redirect flow completion\n if (typeof window !== \"undefined\" && typeof localStorage !== \"undefined\") {\n // Check our dedicated parameter to detect return from standalone auth flow\n const standaloneParam = urlParams?.get(\"controller_standalone\");\n if (standaloneParam === \"1\") {\n // Store a flag in sessionStorage so lazy-loaded iframes can detect this\n // Use sessionStorage instead of localStorage to avoid cross-tab issues\n sessionStorage.setItem(\"controller_standalone\", \"1\");\n }\n\n // Also handle lastUsedConnector for backwards compatibility\n const lastUsedConnector = urlParams?.get(\"lastUsedConnector\");\n if (lastUsedConnector) {\n localStorage.setItem(\"lastUsedConnector\", lastUsedConnector);\n }\n\n // Extract encrypted blob from URL fragment (#kc=...)\n // This contains the encrypted localStorage snapshot from keychain\n if (window.location.hash) {\n const hashParams = new URLSearchParams(window.location.hash.slice(1));\n const encryptedBlob = hashParams.get(\"kc\");\n if (encryptedBlob) {\n // Store encrypted blob as class variable to pass to iframe\n this.encryptedBlob = encryptedBlob;\n }\n }\n\n // Clean up the URL by removing controller flow parameters\n if (urlParams && window.history?.replaceState) {\n let needsCleanup = false;\n\n if (standaloneParam) {\n urlParams.delete(\"controller_standalone\");\n needsCleanup = true;\n }\n\n if (lastUsedConnector) {\n urlParams.delete(\"lastUsedConnector\");\n needsCleanup = true;\n }\n\n // Also clean up the fragment if it contains our encrypted blob\n let cleanHash = window.location.hash;\n if (cleanHash) {\n const hashParams = new URLSearchParams(cleanHash.slice(1));\n if (hashParams.has(\"kc\")) {\n hashParams.delete(\"kc\");\n cleanHash = hashParams.toString()\n ? `#${hashParams.toString()}`\n : \"\";\n needsCleanup = true;\n }\n }\n\n if (needsCleanup) {\n const newUrl =\n window.location.pathname +\n (urlParams.toString() ? \"?\" + urlParams.toString() : \"\") +\n cleanHash;\n window.history.replaceState({}, \"\", newUrl);\n }\n }\n }\n\n this.initializeChains(chains);\n\n this.iframes = {\n keychain: options.lazyload ? undefined : this.createKeychainIframe(),\n };\n\n if (typeof window !== \"undefined\") {\n (window as any).starknet_controller = this;\n }\n }\n\n async logout() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n try {\n // Disconnect the controller/keychain first\n await this.disconnect();\n\n // Close all controller iframes\n const iframes = document.querySelectorAll('iframe[id^=\"controller-\"]');\n iframes.forEach((iframe) => {\n const container = iframe.parentElement;\n if (container) {\n // Start fade-out transition\n container.style.opacity = \"0\";\n // Set display: none after transition completes\n setTimeout(() => {\n container.style.display = \"none\";\n }, 200);\n }\n });\n\n // Reset body overflow\n if (document.body) {\n document.body.style.overflow = \"auto\";\n }\n\n // Reload the page to complete logout\n window.location.reload();\n } catch (err) {\n console.error(\"Logout failed:\", err);\n throw err;\n }\n }\n\n async probe(): Promise<WalletAccount | undefined> {\n if (!this.iframes) {\n return;\n }\n\n try {\n // Ensure iframe is created if using lazy loading\n if (!this.iframes.keychain) {\n this.iframes.keychain = this.createKeychainIframe();\n }\n\n await this.waitForKeychain();\n\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n const response = (await this.keychain.probe(this.rpcUrl())) as ProbeReply;\n\n // For backwards compat with controller <=0.6.0\n let rpcUrl = response?.rpcUrl || this.rpcUrl();\n this.account = new ControllerAccount(\n this,\n rpcUrl,\n response.address,\n this.keychain,\n this.options,\n this.iframes.keychain,\n );\n } catch (e) {\n console.error(e);\n return;\n }\n\n return this.account;\n }\n\n async connect(\n options?: AuthOptions | ConnectOptions,\n ): Promise<WalletAccount | undefined> {\n const connectOptions = Array.isArray(options) ? undefined : options;\n const headless =\n connectOptions?.username && connectOptions?.signer\n ? {\n username: connectOptions.username,\n signer: connectOptions.signer,\n password: connectOptions.password,\n }\n : undefined;\n\n if (!this.iframes) {\n return;\n }\n\n if (this.account) {\n return this.account;\n }\n\n // Ensure iframe is created if using lazy loading\n if (!this.iframes.keychain) {\n this.iframes.keychain = this.createKeychainIframe();\n }\n\n // Always wait for the keychain connection to be established\n await this.waitForKeychain();\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n try {\n if (headless) {\n // Headless auth should not open the UI until the keychain determines\n // user interaction is required (e.g. session approval).\n const response = await this.keychain.connect({\n username: headless.username,\n signer: headless.signer,\n password: headless.password,\n });\n\n if (response.code !== ResponseCodes.SUCCESS) {\n throw new HeadlessAuthenticationError(\n \"message\" in response && response.message\n ? response.message\n : \"Headless authentication failed\",\n );\n }\n\n // Keychain will call onSessionCreated (awaitable) during headless connect,\n // which probes and updates this.account. Keep a fallback for older keychains.\n if (this.account) {\n return this.account;\n }\n\n const address =\n \"address\" in response && response.address ? response.address : null;\n if (!address) {\n throw new HeadlessAuthenticationError(\n \"Headless authentication failed\",\n );\n }\n\n this.account = new ControllerAccount(\n this,\n this.rpcUrl(),\n address,\n this.keychain,\n this.options,\n this.iframes.keychain,\n );\n this.emitAccountsChanged([address]);\n return this.account;\n }\n\n // Only open modal if NOT headless\n this.iframes.keychain.open();\n\n // Use connect() parameter if provided, otherwise fall back to constructor options\n const effectiveOptions = Array.isArray(options)\n ? options\n : (connectOptions?.signupOptions ?? this.options.signupOptions);\n\n // Pass options to keychain\n let response = await this.keychain.connect({\n signupOptions: effectiveOptions,\n });\n\n if (response.code !== ResponseCodes.SUCCESS) {\n throw new Error(response.message);\n }\n\n response = response as ConnectReply;\n this.account = new ControllerAccount(\n this,\n this.rpcUrl(),\n response.address,\n this.keychain,\n this.options,\n this.iframes.keychain,\n );\n\n return this.account;\n } catch (e) {\n if (headless) {\n if (e instanceof HeadlessAuthenticationError) {\n throw e;\n }\n\n const message =\n e instanceof Error\n ? e.message\n : typeof e === \"object\" && e && \"message\" in e\n ? String((e as any).message)\n : \"Headless authentication failed\";\n throw new HeadlessAuthenticationError(message);\n }\n console.log(e);\n } finally {\n // Only close modal if it was opened (not headless)\n if (!headless) {\n this.iframes.keychain.close();\n }\n }\n }\n\n async switchStarknetChain(chainId: string): Promise<boolean> {\n if (!this.iframes) {\n return false;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return false;\n }\n\n const currentChain = this.selectedChain;\n\n try {\n this.selectedChain = chainId;\n await this.keychain.switchChain(this.rpcUrl());\n } catch (e) {\n console.error(e);\n this.selectedChain = currentChain;\n return false;\n }\n\n this.emitNetworkChanged(chainId);\n return true;\n }\n\n addStarknetChain(_chain: AddStarknetChainParameters): Promise<boolean> {\n return Promise.resolve(true);\n }\n\n async disconnect() {\n this.account = undefined;\n this.emitAccountsChanged([]);\n\n try {\n if (typeof localStorage !== \"undefined\") {\n localStorage.removeItem(\"lastUsedConnector\");\n }\n } catch {\n // Ignore environments where localStorage is unavailable.\n }\n\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n return this.keychain.disconnect();\n }\n\n async openProfile(tab: ProfileContextTypeVariant = \"inventory\") {\n if (!this.iframes) {\n return;\n }\n\n // Profile functionality is now integrated into keychain\n // Navigate keychain iframe to profile page\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n const username = await this.keychain.username();\n\n // Navigate first, then open to avoid flash\n const options = [];\n if (this.options.slot) {\n options.push(`ps=${this.options.slot}`);\n }\n await this.keychain.navigate(\n `/account/${username}/${tab}?${options.join(\"&\")}`,\n );\n this.iframes.keychain.open();\n }\n\n async openProfileTo(to: string) {\n if (!this.iframes) {\n return;\n }\n\n // Profile functionality is now integrated into keychain\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n const username = await this.keychain.username();\n const options = [];\n if (this.options.slot) {\n options.push(`ps=${this.options.slot}`);\n }\n await this.keychain.navigate(\n `/account/${username}/${to}?${options.join(\"&\")}`,\n );\n this.iframes.keychain.open();\n }\n\n async openProfileAt(at: string) {\n if (!this.iframes) {\n return;\n }\n\n // Profile functionality is now integrated into keychain\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n await this.keychain.navigate(at);\n this.iframes.keychain.open();\n }\n\n openSettings() {\n if (!this.iframes) {\n return;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n this.iframes.keychain.open();\n this.keychain.openSettings();\n }\n\n async close() {\n if (!this.iframes || !this.iframes.keychain) {\n return;\n }\n this.iframes.keychain.close();\n }\n\n revoke(origin: string, _policy: Policy[]) {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n\n return this.keychain.revoke(origin);\n }\n\n rpcUrl(): string {\n const chain = this.chains.get(this.selectedChain);\n if (!chain) {\n const availableChains = Array.from(this.chains.keys()).map((chain) =>\n shortString.decodeShortString(chain),\n );\n throw new Error(\n `Chain not found: ${shortString.decodeShortString(this.selectedChain)}. Available chains: ${availableChains.join(\", \")}`,\n );\n }\n return chain.rpcUrl;\n }\n\n username() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n return this.keychain.username();\n }\n\n openPurchaseCredits() {\n if (!this.iframes) {\n return;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n this.keychain.navigate(\"/purchase/credits\").then(() => {\n this.iframes!.keychain?.open();\n });\n }\n\n async openStarterPack(\n id: string | number,\n options?: StarterpackOptions,\n ): Promise<void> {\n if (!this.iframes) {\n return;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n const { onPurchaseComplete, ...starterpackOptions } = options ?? {};\n this.iframes.keychain.setOnStarterpackPlay(onPurchaseComplete);\n const sanitizedOptions =\n Object.keys(starterpackOptions).length > 0\n ? (starterpackOptions as Omit<StarterpackOptions, \"onPurchaseComplete\">)\n : undefined;\n\n await this.keychain.openStarterPack(id, sanitizedOptions);\n this.iframes.keychain?.open();\n }\n\n async openExecute(calls: any, chainId?: string) {\n if (!this.iframes) {\n return;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n // Switch to the chain if provided\n let currentChainId = this.selectedChain;\n if (chainId) {\n this.switchStarknetChain(chainId);\n }\n // Open keychain\n this.iframes.keychain.open();\n // Invoke execute\n const res = await this.keychain.execute(calls, undefined, undefined, true);\n // Close keychain\n this.iframes.keychain.close();\n // Switch back to the original chain\n if (chainId) {\n this.switchStarknetChain(currentChainId);\n }\n const status = !(\n res &&\n ((res as ConnectError).code === ResponseCodes.NOT_CONNECTED ||\n (res as ConnectError).code === ResponseCodes.CANCELED)\n );\n return {\n status,\n transactionHash: (res as AddInvokeTransactionResult)?.transaction_hash,\n };\n }\n\n async delegateAccount() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n\n return await this.keychain.delegateAccount();\n }\n\n /**\n * Returns a wallet standard interface for the controller.\n * This allows using the controller with libraries that expect the wallet standard interface.\n */\n asWalletStandard(): WalletWithStarknetFeatures {\n if (typeof window !== \"undefined\") {\n console.warn(\n `Casting Controller to WalletWithStarknetFeatures is an experimental feature. ` +\n `Please report any issues at https://github.com/cartridge-gg/controller/issues`,\n );\n }\n\n const controller = this;\n const inner = new StarknetInjectedWallet(controller);\n\n // Override disconnect to also disconnect controller\n const disconnect = {\n \"standard:disconnect\": {\n version: \"1.0.0\" as const,\n disconnect: async () => {\n await inner.features[\"standard:disconnect\"].disconnect();\n await controller.disconnect();\n },\n },\n };\n\n return {\n get version() {\n return inner.version;\n },\n get name() {\n return inner.name;\n },\n get icon() {\n return inner.icon;\n },\n get chains() {\n return inner.chains;\n },\n get accounts() {\n return inner.accounts;\n },\n get features() {\n return { ...inner.features, ...disconnect };\n },\n };\n }\n\n /**\n * Opens the keychain in standalone mode (first-party context) for authentication.\n * This establishes first-party storage, enabling seamless iframe access across all games.\n * @param options - Configuration for redirect after authentication\n */\n open(options: OpenOptions = {}) {\n if (typeof window === \"undefined\") {\n console.error(\"open can only be called in browser context\");\n return;\n }\n\n const keychainUrl = new URL(this.options.url || KEYCHAIN_URL);\n\n // Add redirect target (defaults to current page)\n const redirectUrl = options.redirectUrl || window.location.href;\n\n // Validate redirect URL to prevent XSS and open redirect attacks\n const validation = validateRedirectUrl(redirectUrl);\n if (!validation.isValid) {\n console.error(\n `Invalid redirect URL: ${validation.error}`,\n `URL: ${redirectUrl}`,\n );\n return;\n }\n\n keychainUrl.searchParams.set(\"redirect_url\", redirectUrl);\n\n // Add preset if provided\n if (this.options.preset) {\n keychainUrl.searchParams.set(\"preset\", this.options.preset);\n }\n\n // Add controller configuration parameters\n if (this.options.slot) {\n keychainUrl.searchParams.set(\"ps\", this.options.slot);\n }\n\n if (this.options.namespace) {\n keychainUrl.searchParams.set(\"ns\", this.options.namespace);\n }\n\n if (this.options.tokens?.erc20) {\n keychainUrl.searchParams.set(\n \"erc20\",\n this.options.tokens.erc20.toString(),\n );\n }\n\n if (this.rpcUrl()) {\n keychainUrl.searchParams.set(\"rpc_url\", this.rpcUrl());\n }\n\n // Navigate to standalone keychain\n window.location.href = keychainUrl.toString();\n }\n\n private initializeChains(chains: Chain[]) {\n for (const chain of chains) {\n try {\n const url = new URL(chain.rpcUrl);\n const chainId = parseChainId(url);\n\n this.chains.set(chainId, chain);\n } catch (error) {\n console.error(`Failed to parse chainId for ${chain.rpcUrl}:`, error);\n throw error; // Re-throw to ensure invalid chains fail fast\n }\n }\n\n if (!this.chains.has(this.selectedChain)) {\n console.warn(\n `Selected chain ${this.selectedChain} not found in configured chains. ` +\n `Available chains: ${Array.from(this.chains.keys()).join(\", \")}`,\n );\n }\n }\n\n private createKeychainIframe(): KeychainIFrame {\n // Check if we're returning from standalone auth flow\n const isReturningFromRedirect =\n typeof window !== \"undefined\" &&\n typeof sessionStorage !== \"undefined\" &&\n sessionStorage.getItem(\"controller_standalone\") === \"1\";\n\n // Extract username from URL if present (passed from keychain after auth)\n const urlParams =\n typeof window !== \"undefined\"\n ? new URLSearchParams(window.location.search)\n : undefined;\n const username = urlParams?.get(\"username\") ?? undefined;\n\n // Extract encrypted blob from class variable (stored during URL parsing)\n const encryptedBlob = this.encryptedBlob;\n\n // Clear the flag after detecting it\n if (isReturningFromRedirect) {\n sessionStorage.removeItem(\"controller_standalone\");\n }\n\n // Clear encrypted blob after using it\n if (encryptedBlob) {\n this.encryptedBlob = undefined;\n }\n\n const iframe = new KeychainIFrame({\n ...this.options,\n rpcUrl: this.rpcUrl(),\n onClose: () => {\n this.keychain?.reset?.();\n },\n onConnect: (keychain) => {\n this.keychain = keychain;\n },\n version: version,\n ref: this.referral.ref,\n refGroup: this.referral.refGroup,\n needsSessionCreation: isReturningFromRedirect,\n encryptedBlob: encryptedBlob ?? undefined,\n username: username,\n onSessionCreated: async () => {\n const previousAddress = this.account?.address;\n const account = await this.probe();\n\n if (account?.address && account.address !== previousAddress) {\n this.emitAccountsChanged([account.address]);\n }\n },\n });\n\n // If we're returning from redirect, open the modal immediately to show session creation prompt\n if (isReturningFromRedirect) {\n // Open after a short delay to ensure iframe is ready\n setTimeout(() => {\n iframe.open();\n }, 100);\n }\n\n return iframe;\n }\n\n private waitForKeychain({\n timeout = 50000,\n interval = 100,\n }:\n | {\n timeout?: number;\n interval?: number;\n }\n | undefined = {}) {\n return new Promise<void>((resolve, reject) => {\n const startTime = Date.now();\n const id = setInterval(() => {\n if (Date.now() - startTime > timeout) {\n clearInterval(id);\n reject(new Error(\"Timeout waiting for keychain\"));\n return;\n }\n\n if (!this.keychain) return;\n\n clearInterval(id);\n resolve();\n }, interval);\n });\n }\n}\n","import { LookupRequest, LookupResponse } from \"./types\";\nimport { num } from \"starknet\";\nimport { API_URL } from \"./constants\";\n\nconst cache = new Map<string, string>();\n\nasync function lookup(request: LookupRequest): Promise<LookupResponse> {\n if (!request.addresses?.length && !request.usernames?.length) {\n return { results: [] };\n }\n\n const response = await fetch(`${API_URL}/lookup`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n return response.json();\n}\n\nexport async function lookupUsernames(\n usernames: string[],\n): Promise<Map<string, string>> {\n const uncachedUsernames = usernames.filter((name) => !cache.has(name));\n\n if (uncachedUsernames.length > 0) {\n const response = await lookup({ usernames: uncachedUsernames });\n\n response.results.forEach((result) => {\n cache.set(result.username, result.addresses[0]); // TODO: handle multiple controller addresses\n });\n }\n\n return new Map(\n usernames\n .map((name) => [name, cache.get(name)] as [string, string])\n .filter((entry): entry is [string, string] => entry[1] !== undefined),\n );\n}\n\nexport async function lookupAddresses(\n addresses: string[],\n): Promise<Map<string, string>> {\n addresses = addresses.map(num.toHex);\n const uncachedAddresses = addresses.filter((addr) => !cache.has(addr));\n\n if (uncachedAddresses.length > 0) {\n const response = await lookup({\n addresses: uncachedAddresses,\n });\n\n response.results.forEach((result) => {\n cache.set(result.addresses[0], result.username); // TODO: handle multiple controller addresses\n });\n }\n\n return new Map(\n addresses\n .map((addr) => [addr, cache.get(addr)] as [string, string])\n .filter((entry): entry is [string, string] => entry[1] !== undefined),\n );\n}\n","import {\n Approval,\n ContractPolicy,\n Method,\n SessionPolicies,\n SignMessagePolicy,\n} from \"@cartridge/presets\";\n\nexport type ParsedSessionPolicies = {\n verified: boolean;\n contracts?: SessionContracts;\n messages?: SessionMessages;\n};\n\nexport type SessionContracts = Record<\n string,\n Omit<ContractPolicy, \"methods\"> & {\n methods: ((Method | Approval) & { authorized?: boolean })[];\n }\n>;\n\nexport type SessionMessages = (SignMessagePolicy & {\n authorized?: boolean;\n})[];\n\nexport function parsePolicies(\n policies: SessionPolicies,\n): ParsedSessionPolicies {\n return {\n verified: false,\n contracts: policies.contracts\n ? Object.fromEntries(\n Object.entries(policies.contracts).map(([address, contract]) => [\n address,\n {\n ...contract,\n methods: contract.methods.map((method) => ({\n ...method,\n authorized: true,\n })),\n },\n ]),\n )\n : undefined,\n messages: policies.messages?.map((message) => ({\n ...message,\n authorized: true,\n })),\n };\n}\n","export const TOAST_CONTAINER_ID = \"cartridge-toast-container\";\nexport const DEFAULT_DURATION = 3000;\nexport const DEFAULT_POSITION = \"bottom-right\";\nexport const TOAST_MESSAGE_TYPE = \"cartridge-toast-show\";\n\n// Check if we're in an iframe\nexport function isInIframe(): boolean {\n try {\n return typeof window !== \"undefined\" && window.self !== window.top;\n } catch {\n return true; // If we can't access window.top, we're likely in an iframe\n }\n}\n\n// Get the target document (parent if in iframe, current if not)\nexport function getTargetDocument(): Document | null {\n if (typeof document === \"undefined\") {\n return null;\n }\n\n if (isInIframe()) {\n try {\n // Try to access parent document\n if (window.parent && window.parent.document) {\n return window.parent.document;\n }\n } catch (e) {\n console.warn(\"Failed to access parent document:\", e);\n return null;\n }\n }\n\n return document;\n}\n\n// Get or create toast container\nexport function getToastContainer(\n targetDoc: Document,\n position: string,\n): HTMLElement {\n let container = targetDoc.getElementById(TOAST_CONTAINER_ID);\n\n if (!container) {\n container = targetDoc.createElement(\"div\");\n container.id = TOAST_CONTAINER_ID;\n if (targetDoc.body) {\n targetDoc.body.appendChild(container);\n }\n }\n\n // Update position class\n container.className = position;\n\n return container;\n}\n\n// Remove toast with animation\nexport function removeToast(toast: HTMLElement): void {\n toast.classList.add(\"closing\");\n setTimeout(() => {\n if (toast.parentNode) {\n toast.parentNode.removeChild(toast);\n }\n }, 200);\n}\n","import { TOAST_CONTAINER_ID } from \"./utils\";\n\n// Inject CSS styles if not already present\nexport function injectStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-styles\";\n style.textContent = getCommonStyles();\n targetDoc.head.appendChild(style);\n}\n\nfunction getCommonStyles(): string {\n return `\n #${TOAST_CONTAINER_ID} {\n position: fixed;\n z-index: 999999;\n pointer-events: none;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 12px;\n }\n\n #${TOAST_CONTAINER_ID}.top-left {\n top: 20px;\n left: 20px;\n align-items: flex-start;\n }\n\n #${TOAST_CONTAINER_ID}.top-right {\n top: 20px;\n right: 20px;\n align-items: flex-end;\n }\n\n #${TOAST_CONTAINER_ID}.top-center {\n top: 20px;\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n }\n\n #${TOAST_CONTAINER_ID}.bottom-left {\n bottom: 20px;\n left: 20px;\n align-items: flex-start;\n }\n\n #${TOAST_CONTAINER_ID}.bottom-right {\n bottom: 20px;\n right: 20px;\n align-items: flex-end;\n }\n\n #${TOAST_CONTAINER_ID}.bottom-center {\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n }\n\n .cartridge-toast {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n display: flex;\n align-items: center;\n animation: cartridge-toast-slide-in 0.3s ease-out;\n overflow: hidden;\n pointer-events: auto;\n }\n\n #${TOAST_CONTAINER_ID}.top-right .cartridge-toast,\n #${TOAST_CONTAINER_ID}.bottom-right .cartridge-toast {\n align-self: flex-end;\n }\n\n #${TOAST_CONTAINER_ID}.top-left .cartridge-toast,\n #${TOAST_CONTAINER_ID}.bottom-left .cartridge-toast {\n align-self: flex-start;\n }\n\n #${TOAST_CONTAINER_ID}.top-center .cartridge-toast,\n #${TOAST_CONTAINER_ID}.bottom-center .cartridge-toast {\n align-self: center;\n }\n\n @keyframes cartridge-toast-slide-in {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .cartridge-toast.closing {\n animation: cartridge-toast-slide-out 0.2s ease-in forwards;\n }\n\n @keyframes cartridge-toast-slide-out {\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(10px);\n }\n }\n\n @media (max-width: 640px) {\n .cartridge-toast {\n min-width: calc(100vw - 40px);\n max-width: calc(100vw - 40px);\n }\n\n #${TOAST_CONTAINER_ID}.top-left,\n #${TOAST_CONTAINER_ID}.top-right,\n #${TOAST_CONTAINER_ID}.top-center {\n top: 10px;\n left: 20px;\n right: 20px;\n transform: none;\n align-items: stretch;\n }\n\n #${TOAST_CONTAINER_ID}.bottom-left,\n #${TOAST_CONTAINER_ID}.bottom-right,\n #${TOAST_CONTAINER_ID}.bottom-center {\n bottom: 10px;\n left: 20px;\n right: 20px;\n transform: none;\n align-items: stretch;\n }\n }\n `;\n}\n","export const CloseButton = (translucent = false): HTMLDivElement => {\n const container = document.createElement(\"div\");\n container.id = \"close-button\";\n container.style.display = \"flex\";\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n\n const button = document.createElement(\"button\");\n button.className = translucent\n ? \"cartridge-close-button translucent\"\n : \"cartridge-close-button\";\n\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"width\", \"20\");\n svg.setAttribute(\"height\", \"20\");\n svg.setAttribute(\"viewBox\", \"0 0 20 20\");\n svg.setAttribute(\"fill\", \"none\");\n svg.style.pointerEvents = \"none\"; // Ensure clicks pass through to button\n\n const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n path.setAttribute(\n \"d\",\n \"M15.5465 14.343C15.8881 14.6837 15.8881 15.2364 15.5465 15.5772C15.2049 15.9179 14.6506 15.9178 14.309 15.5772L10.0006 11.2484L5.66162 15.5757C5.32001 15.9164 4.76575 15.9164 4.4241 15.5757C4.08245 15.235 4.08249 14.6822 4.4241 14.3415L8.76455 10.0157L4.4229 5.65573C4.08128 5.31504 4.08128 4.76227 4.4229 4.42155C4.76451 4.08082 5.31877 4.08086 5.66042 4.42155L10.0006 8.78299L14.3396 4.45573C14.6812 4.11504 15.2355 4.11504 15.5771 4.45573C15.9188 4.79642 15.9187 5.34918 15.5771 5.68991L11.2367 10.0157L15.5465 14.343Z\",\n );\n path.setAttribute(\"class\", \"cartridge-close-icon\");\n\n svg.appendChild(path);\n button.appendChild(svg);\n\n // Inline critical button styles\n button.style.display = \"flex\";\n button.style.alignItems = \"center\";\n button.style.justifyContent = \"center\";\n button.style.border = \"none\";\n button.style.background = \"transparent\";\n button.style.cursor = \"pointer\";\n button.style.borderRadius = \"4px\";\n button.style.padding = \"10px\";\n button.style.gap = \"4px\";\n button.style.transition = \"background-color 0.2s ease\";\n\n // Add styles dynamically to the correct document\n const targetDoc = container.ownerDocument;\n if (!targetDoc.getElementById(\"cartridge-close-button-style\")) {\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-close-button-style\";\n style.textContent = `\n .cartridge-close-button .cartridge-close-icon {\n fill: rgba(0, 0, 0, 0.48);\n transition: fill 0.2s ease;\n }\n\n .cartridge-close-button:not(.translucent):hover {\n background-color: #181c19;\n }\n\n .cartridge-close-button:not(.translucent):hover .cartridge-close-icon {\n fill: rgba(255, 255, 255, 0.72);\n }\n\n .cartridge-close-button.translucent .cartridge-close-icon {\n fill: rgba(0, 0, 0, 0.48);\n }\n\n .cartridge-close-button.translucent:hover {\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n .cartridge-close-button.translucent:hover .cartridge-close-icon {\n fill: rgba(0, 0, 0, 0.72);\n }\n\n .cartridge-close-button:active {\n transform: scale(0.95);\n }\n `;\n targetDoc.head.appendChild(style);\n }\n\n container.appendChild(button);\n return container;\n};\n","import { ErrorToastOptions } from \"../types\";\nimport { CloseButton } from \"../components/close-button\";\n\n// Inject error toast specific styles\nexport function injectErrorStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-error-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-error-styles\";\n style.textContent = `\n /* Error Toast */\n .cartridge-toast.error {\n background-color: #E66666;\n border-radius: 8px;\n width: 360px;\n display: flex;\n align-items: flex-start;\n position: relative;\n overflow: hidden;\n box-sizing: border-box;\n transition: background-color 0.2s ease, transform 0.1s ease;\n }\n\n /* Clickable state */\n .cartridge-toast.error[style*=\"cursor: pointer\"]:hover {\n background-color: #D85555;\n transform: translateY(-2px);\n }\n\n .cartridge-toast.error[style*=\"cursor: pointer\"]:active {\n transform: translateY(0);\n }\n\n .cartridge-toast.error .label-bar {\n display: flex;\n padding: 12px 12px 16px 12px;\n align-items: center;\n gap: 8px;\n flex: 1 0 0;\n }\n\n .cartridge-toast.error .label-bar .label-container {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .cartridge-toast.error .label-bar .icon-container {\n width: 24px;\n height: 24px;\n aspect-ratio: 1/1;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n }\n\n .cartridge-toast.error .label-bar p {\n color: #0F1410;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n }\n\n .cartridge-toast.error .close-button-container {\n display: flex;\n padding: 4px;\n align-items: center;\n gap: 10px;\n }\n\n .cartridge-toast.error {\n position: relative;\n overflow: hidden;\n }\n `;\n targetDoc.head.appendChild(style);\n}\n\n// Create error toast element\nexport function createErrorToast(options: ErrorToastOptions): HTMLElement {\n const toast = document.createElement(\"div\");\n toast.className = \"cartridge-toast error\";\n\n const labelBar = document.createElement(\"div\");\n labelBar.className = \"label-bar\";\n toast.appendChild(labelBar);\n\n const labelContainer = document.createElement(\"div\");\n labelContainer.className = \"label-container\";\n labelBar.appendChild(labelContainer);\n\n const icon = document.createElement(\"div\");\n icon.className = \"icon-container\";\n icon.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.79313 0.326989L17.673 8.20771C18.109 8.6437 18.109 9.35713 17.673 9.79229L9.79229 17.673C9.3563 18.109 8.6437 18.109 8.20771 17.673L0.326989 9.79229C-0.108996 9.35713 -0.108996 8.6437 0.326989 8.20771L8.20856 0.326989C8.64454 -0.108996 9.35715 -0.108996 9.79313 0.326989ZM8.26159 4.84378C8.26159 4.37794 8.63953 4 9.10537 4C9.57121 4 9.94915 4.3797 9.94915 4.84378V9.34394C9.94915 9.80978 9.57121 10.1877 9.13701 10.1877C8.70282 10.1877 8.26159 9.81154 8.26159 9.34394V4.84378ZM9.10537 13.5628C8.49503 13.5628 8.00002 13.0678 8.00002 12.4575C8.00002 11.8472 8.49468 11.3521 9.10537 11.3521C9.71605 11.3521 10.2107 11.8472 10.2107 12.4575C10.2093 13.0671 9.71711 13.5628 9.10537 13.5628Z\" fill=\"#0F1410\"/>\n </svg>\n`;\n labelContainer.appendChild(icon);\n\n const content = document.createElement(\"p\");\n content.className = \"content\";\n content.textContent = options.message || \"Error\";\n labelContainer.appendChild(content);\n\n const closeButtonContainer = document.createElement(\"div\");\n closeButtonContainer.className = \"close-button-container\";\n const closeButton = CloseButton(true);\n closeButtonContainer.appendChild(closeButton);\n toast.appendChild(closeButtonContainer);\n\n return toast;\n}\n","import { TransactionToastOptions } from \"../types\";\nimport { CloseButton } from \"../components/close-button\";\n\n// Inject transaction toast specific styles\nexport function injectTransactionStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-transaction-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-transaction-styles\";\n style.textContent = `\n /* Transaction Toast */\n .cartridge-toast.transaction {\n background-color: #161A17;\n border-radius: 8px;\n position: relative;\n overflow: hidden;\n }\n\n /* Expanded State */\n .cartridge-toast.transaction.expanded {\n width: 360px;\n }\n\n .cartridge-toast.transaction.expanded .toast-content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n gap: 8px;\n box-sizing: border-box;\n }\n\n .cartridge-toast.transaction.expanded .label-bar {\n display: flex;\n align-items: center;\n padding: 12px;\n gap: 8px;\n flex: 1 0 0;\n }\n\n .cartridge-toast.transaction.expanded .label-bar .label-container {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .cartridge-toast.transaction.expanded .label-bar .icon-container {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .cartridge-toast.transaction.expanded .label-bar p.status {\n color: #FFF;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n margin: 0;\n }\n\n .cartridge-toast.transaction.expanded .label-bar .activity-feed-container {\n display: flex;\n padding: 2px;\n align-items: center;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.08);\n }\n\n .cartridge-toast.transaction.expanded .label-bar .activity-icon {\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .cartridge-toast.transaction.expanded .label-bar .activity-label-container {\n display: flex;\n padding: 0 2px;\n justify-content: center;\n align-items: center;\n }\n\n .cartridge-toast.transaction.expanded .label-bar span.activity-label {\n color: #3F3;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 16px;\n }\n\n .cartridge-toast.transaction.expanded .close-button-container {\n display: flex;\n align-items: center;\n }\n\n /* Progress Bar - will be added dynamically */\n .cartridge-toast.transaction .cartridge-toast-progress-bar {\n background: rgba(255, 255, 255, 0.1);\n }\n\n .cartridge-toast.transaction .cartridge-toast-progress-bar-fill {\n background: #3F3;\n }\n\n /* Collapsed State */\n .cartridge-toast.transaction.collapsed {\n display: inline-flex;\n padding: 10px;\n align-items: center;\n justify-content: center;\n }\n\n .cartridge-toast.transaction.collapsed .collapsed-icon {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n /* Spinner Animation */\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n\n .cartridge-toast.transaction .icon-container.spinning,\n .cartridge-toast.transaction .collapsed-icon.spinning {\n animation: spin 1s linear infinite;\n }\n `;\n targetDoc.head.appendChild(style);\n}\n\n// Create transaction toast element\nexport function createTransactionToast(\n options: TransactionToastOptions,\n): HTMLElement {\n const toast = document.createElement(\"div\");\n toast.className = `cartridge-toast transaction ${options.isExpanded ? \"expanded\" : \"collapsed\"}`;\n\n if (options.isExpanded) {\n // Create main content container\n const toastContent = document.createElement(\"div\");\n toastContent.className = \"toast-content\";\n\n // Create label bar\n const labelBar = document.createElement(\"div\");\n labelBar.className = \"label-bar\";\n\n const labelContainer = document.createElement(\"div\");\n labelContainer.className = \"label-container\";\n\n // Create icon container\n const iconContainer = document.createElement(\"div\");\n iconContainer.className = \"icon-container\";\n if (options.status === \"confirming\") {\n iconContainer.classList.add(\"spinning\");\n iconContainer.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M11.1111 5.77756C11.1111 5.28673 11.5083 4.88867 12 4.88867C15.9278 4.88867 19.1111 8.07201 19.1111 11.9998C19.1111 13.2942 18.7639 14.5109 18.1583 15.5553C17.9139 15.9803 17.3694 16.1276 16.9194 15.8803C16.5194 15.6359 16.375 15.0914 16.6194 14.6414C17.0722 13.8831 17.3333 12.972 17.3333 11.9748C17.3333 9.03034 14.9444 6.64145 12 6.64145C11.5083 6.64145 11.1111 6.26839 11.1111 5.75256V5.77756Z\" fill=\"white\"/>\n <path opacity=\"0.25\" d=\"M11.975 6.66645C9.03058 6.66645 6.64169 9.03034 6.64169 11.9998C6.64169 14.9442 9.03058 17.3331 11.975 17.3331C13.9472 17.3331 15.6472 16.2914 16.5806 14.7331L16.5834 14.7359C16.3917 15.1498 16.5417 15.647 16.9195 15.8803C17.3695 16.1276 17.9139 15.9803 18.1584 15.5553C18.1639 15.547 18.1695 15.5387 18.1722 15.5303C16.9472 17.6692 14.6417 19.1109 12 19.1109C8.07225 19.1109 4.88892 15.9276 4.88892 11.9998C4.88892 8.07201 8.07225 4.88867 12 4.88867C11.5084 4.88867 11.1111 5.28673 11.1111 5.77756C11.1111 6.26839 11.5084 6.66645 12 6.66645H11.975Z\" fill=\"white\" fill-opacity=\"0.64\"/>\n </svg>\n `;\n } else {\n iconContainer.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M8.36382 18.5465L4 14.1827L5.45427 12.7284L8.36382 15.638L18.5457 5.45508L20 6.91032L8.36382 18.5465Z\" fill=\"#33FF33\"/>\n </svg>\n `;\n }\n\n // Create status text\n const status = document.createElement(\"p\");\n status.className = \"status\";\n status.textContent =\n options.status === \"confirming\" ? \"Confirming\" : \"Confirmed\";\n\n labelContainer.appendChild(iconContainer);\n labelContainer.appendChild(status);\n\n // Add activity label if provided\n if (options.label) {\n const activityFeedContainer = document.createElement(\"div\");\n activityFeedContainer.className = \"activity-feed-container\";\n\n const activityIcon = document.createElement(\"div\");\n activityIcon.className = \"activity-icon\";\n activityIcon.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M7.985 4.0002C8.23167 3.99353 8.45 4.1552 8.515 4.39353L9.74833 8.91353L10.0433 8.32353C10.2233 7.96187 10.5933 7.73353 10.9967 7.73353H12.8C13.095 7.73353 13.3333 7.97187 13.3333 8.26687C13.3333 8.56187 13.095 8.8002 12.8 8.8002H10.9967L10.0767 10.6385C9.97833 10.8369 9.76667 10.9519 9.54667 10.9302C9.32667 10.9085 9.14333 10.7535 9.085 10.5402L8.06167 6.78853L6.92167 12.1119C6.87 12.3519 6.66333 12.5252 6.41833 12.5335C6.17333 12.5419 5.955 12.3819 5.88833 12.1469L4.93167 8.8002H3.2C2.905 8.8002 2.66667 8.56187 2.66667 8.26687C2.66667 7.97187 2.905 7.73353 3.2 7.73353H4.93167C5.40833 7.73353 5.82667 8.04853 5.95667 8.50687L6.32667 9.8002L7.47833 4.42187C7.53 4.18187 7.74 4.00687 7.985 4.0002Z\" fill=\"#33FF33\"/>\n </svg>\n `;\n\n const activityLabelContainer = document.createElement(\"div\");\n activityLabelContainer.className = \"activity-label-container\";\n\n const activityLabel = document.createElement(\"span\");\n activityLabel.className = \"activity-label\";\n activityLabel.textContent = options.label;\n\n activityLabelContainer.appendChild(activityLabel);\n activityFeedContainer.appendChild(activityIcon);\n activityFeedContainer.appendChild(activityLabelContainer);\n labelContainer.appendChild(activityFeedContainer);\n }\n\n labelBar.appendChild(labelContainer);\n toastContent.appendChild(labelBar);\n\n // Create close button\n const closeButtonContainer = document.createElement(\"div\");\n closeButtonContainer.className = \"close-button-container\";\n const closeButton = CloseButton();\n closeButtonContainer.appendChild(closeButton);\n toastContent.appendChild(closeButtonContainer);\n\n toast.appendChild(toastContent);\n } else {\n // Collapsed state\n const collapsedIcon = document.createElement(\"div\");\n collapsedIcon.className = \"collapsed-icon\";\n\n if (options.status === \"confirming\") {\n collapsedIcon.classList.add(\"spinning\");\n collapsedIcon.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\">\n <path d=\"M12.9629 6.74016C12.9629 6.16752 13.4264 5.70312 14 5.70312C18.5824 5.70312 22.2963 9.41701 22.2963 13.9994C22.2963 15.5096 21.8912 16.9291 21.1847 18.1476C20.8995 18.6434 20.2643 18.8152 19.7393 18.5267C19.2727 18.2416 19.1041 17.6064 19.3893 17.0814C19.9176 16.1966 20.2222 15.1337 20.2222 13.9703C20.2222 10.5351 17.4352 7.74803 14 7.74803C13.4264 7.74803 12.9629 7.3128 12.9629 6.711V6.74016Z\" fill=\"white\"/>\n <path opacity=\"0.25\" d=\"M13.9709 7.7772C10.5357 7.7772 7.74864 10.5351 7.74864 13.9994C7.74864 17.4346 10.5357 20.2216 13.9709 20.2216C16.2718 20.2216 18.2551 19.0064 19.344 17.1883L19.3473 17.1916C19.1236 17.6744 19.2986 18.2545 19.7394 18.5267C20.2644 18.8152 20.8996 18.6434 21.1848 18.1476C21.1912 18.1378 21.1977 18.1281 21.201 18.1184C19.7718 20.6138 17.082 22.2957 14 22.2957C9.41762 22.2957 5.70374 18.5818 5.70374 13.9994C5.70374 9.41701 9.41762 5.70312 14 5.70312C13.4264 5.70312 12.963 6.16752 12.963 6.74016C12.963 7.3128 13.4264 7.7772 14 7.7772H13.9709Z\" fill=\"white\" fill-opacity=\"0.64\"/>\n </svg>\n `;\n } else {\n collapsedIcon.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\">\n <path d=\"M9.75779 21.6366L4.66667 16.5455L6.36332 14.8489L9.75779 18.2433L21.6367 6.36328L23.3333 8.06107L9.75779 21.6366Z\" fill=\"#33FF33\"/>\n </svg>\n `;\n }\n\n toast.appendChild(collapsedIcon);\n }\n\n return toast;\n}\n","import { sanitizeImageSrc } from \"../../utils\";\nimport { NetworkSwitchToastOptions } from \"../types\";\n\n// Inject network switch toast specific styles\nexport function injectNetworkSwitchStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-network-switch-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-network-switch-styles\";\n style.textContent = `\n /* Network Switch Toast */\n .cartridge-toast.network-switch {\n background-color: #161A17;\n border-radius: 8px;\n width: 360px;\n padding: 14px;\n gap: 12px;\n }\n\n .cartridge-toast.network-switch p.content {\n color: #ffffff;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px; /* 142.857% */\n }\n `;\n targetDoc.head.appendChild(style);\n}\n\n// Create network switch toast element\nexport function createNetworkSwitchToast(\n options: NetworkSwitchToastOptions,\n): HTMLElement {\n const toast = document.createElement(\"div\");\n toast.className = \"cartridge-toast network-switch\";\n\n const icon = document.createElement(options.networkIcon ? \"img\" : \"div\");\n icon.className = \"icon\";\n icon.style.width = \"24px\";\n icon.style.height = \"24px\";\n icon.style.aspectRatio = \"1/1\";\n if (options.networkIcon) {\n (icon as HTMLImageElement).src = sanitizeImageSrc(options.networkIcon);\n (icon as HTMLImageElement).alt = options.networkName;\n } else {\n (icon as HTMLDivElement).style.backgroundColor = \"#161A17\";\n (icon as HTMLDivElement).innerHTML = options.networkName\n .charAt(0)\n .toUpperCase();\n (icon as HTMLDivElement).style.color = \"#ffffff\";\n (icon as HTMLDivElement).style.fontWeight = \"600\";\n (icon as HTMLDivElement).style.fontSize = \"12px\";\n (icon as HTMLDivElement).style.lineHeight = \"16px\";\n (icon as HTMLDivElement).style.textAlign = \"center\";\n (icon as HTMLDivElement).style.textTransform = \"uppercase\";\n (icon as HTMLDivElement).style.borderRadius = \"4px\";\n (icon as HTMLDivElement).style.padding = \"4px\";\n }\n\n const content = document.createElement(\"p\");\n content.className = \"content\";\n content.textContent = `Switched to ${options.networkName}`;\n\n toast.appendChild(icon);\n toast.appendChild(content);\n\n return toast;\n}\n","import { AchievementToastOptions } from \"../types\";\nimport { CloseButton } from \"../components/close-button\";\n\n// Inject achievement toast specific styles\nexport function injectAchievementStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-achievement-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-achievement-styles\";\n style.textContent = `\n /* Achievement Toast */\n .cartridge-toast.achievement {\n background-color: #161A17;\n border-radius: 8px;\n width: 360px;\n padding: 12px;\n padding-bottom: 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: relative;\n overflow: hidden;\n min-height: 52px;\n box-sizing: border-box;\n }\n\n .cartridge-toast.achievement .image-content-container {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n }\n\n .cartridge-toast.achievement .image {\n width: 30px;\n height: 30px;\n aspect-ratio: 1/1;\n }\n\n .cartridge-toast.achievement .image-container {\n display: flex;\n padding: 5px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 4px;\n background: #161A17;\n }\n\n .cartridge-toast.achievement .content {\n display: flex;\n height: 40px;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n gap: 2px;\n }\n\n .cartridge-toast.achievement .title {\n color: #FFF;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n }\n\n .cartridge-toast.achievement .subtitle {\n color: #808080;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 16px;\n }\n\n .cartridge-toast.achievement .xp-section-container {\n display: flex;\n padding: 10px;\n flex-direction: column;\n align-items: flex-start;\n gap: 10px;\n }\n\n .cartridge-toast.achievement .xp-section {\n display: flex;\n align-items: center;\n gap: 2px;\n align-self: stretch;\n }\n\n .cartridge-toast.achievement .xp-section .xp-icon {\n width: 20px;\n height: 20px;\n aspect-ratio: 1/1;\n }\n\n .cartridge-toast.achievement .xp-section .xp-amount {\n color: #FFF;\n /* Inter/Regular 14px */\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px; /* 142.857% */\n }\n `;\n targetDoc.head.appendChild(style);\n}\n\n// Create achievement toast element\nexport function createAchievementToast(\n options: AchievementToastOptions,\n): HTMLElement {\n const toast = document.createElement(\"div\");\n toast.className = \"cartridge-toast achievement\";\n\n const imageContentContainer = document.createElement(\"div\");\n imageContentContainer.className = \"image-content-container\";\n\n const imageContainer = document.createElement(\"div\");\n imageContainer.className = \"image-container\";\n\n const icon = getAchievementIcon(options.isDraft);\n icon.className = \"image\";\n imageContainer.appendChild(icon);\n\n const content = document.createElement(\"div\");\n content.className = \"content\";\n\n const title = document.createElement(\"p\");\n title.className = \"title\";\n title.textContent = options.title;\n\n const subtitle = document.createElement(\"p\");\n subtitle.className = \"subtitle\";\n subtitle.textContent = options.subtitle || \"Earned!\";\n\n content.appendChild(title);\n content.appendChild(subtitle);\n\n imageContentContainer.appendChild(imageContainer);\n imageContentContainer.appendChild(content);\n\n // XP section on the right (icon + amount)\n const xpSectionContainer = document.createElement(\"div\");\n xpSectionContainer.className = \"xp-section-container\";\n\n const xpSection = document.createElement(\"div\");\n xpSection.className = \"xp-section\";\n\n const xpIcon = getXPIcon(!options.isDraft);\n xpIcon.setAttribute(\"class\", \"xp-icon\");\n xpSection.appendChild(xpIcon);\n\n const xpAmount = document.createElement(\"span\");\n xpAmount.className = \"xp-amount\";\n xpAmount.textContent = `${options.xpAmount}`;\n xpSection.appendChild(xpAmount);\n\n xpSectionContainer.appendChild(xpSection);\n\n const closeButton = CloseButton(false);\n\n toast.appendChild(imageContentContainer);\n toast.appendChild(xpSectionContainer);\n toast.appendChild(closeButton);\n\n return toast;\n}\n\nconst getAchievementIcon = (isDraft = false) => {\n const container = document.createElement(\"div\");\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"width\", \"34\");\n svg.setAttribute(\"height\", \"34\");\n svg.setAttribute(\"viewBox\", \"0 0 30 30\");\n svg.style.width = \"100%\";\n svg.style.height = \"100%\";\n\n switch (isDraft) {\n case true:\n svg.innerHTML = `\n <path d=\"M26.25 5.15625C26.25 10.1484 22.5322 14.2749 17.7158 14.9121C17.4038 12.5654 16.3711 10.4473 14.8462 8.79053C16.5293 5.78467 19.7461 3.75 23.4375 3.75H24.8438C25.6216 3.75 26.25 4.37842 26.25 5.15625ZM3.75 7.96875C3.75 7.19092 4.37842 6.5625 5.15625 6.5625H6.5625C11.9985 6.5625 16.4062 10.9702 16.4062 16.4062V17.8125V24.8438C16.4062 25.6216 15.7778 26.25 15 26.25C14.2222 26.25 13.5938 25.6216 13.5938 24.8438V17.8125C8.15771 17.8125 3.75 13.4048 3.75 7.96875Z\" fill=\"#33FF33\"/>\n `;\n break;\n default:\n svg.innerHTML = `\n <path d=\"M9.559 6.47461C9.73478 6.23633 10.016 6.0918 10.3129 6.0918H19.688C19.9848 6.0918 20.2661 6.23242 20.4419 6.47461L24.8169 12.4121C25.0825 12.7715 25.0552 13.2676 24.7583 13.5996L15.6957 23.5997C15.5161 23.795 15.2661 23.9083 15.0004 23.9083C14.7348 23.9083 14.4848 23.795 14.3051 23.5997L5.24257 13.5996C4.94179 13.2676 4.91835 12.7715 5.18398 12.4121L9.559 6.47461ZM11.0629 8.02931C10.934 8.12696 10.8988 8.30275 10.9809 8.43946L13.2231 12.1739L7.47305 12.6543C7.31289 12.666 7.18789 12.8028 7.18789 12.9668C7.18789 13.1309 7.31289 13.2637 7.47305 13.2793L14.9731 13.9043C14.9887 13.9043 15.0082 13.9043 15.0239 13.9043L22.5239 13.2793C22.6841 13.2676 22.8091 13.1309 22.8091 12.9668C22.8091 12.8028 22.6841 12.67 22.5239 12.6543L16.7778 12.1778L19.02 8.44337C19.102 8.30665 19.0669 8.12696 18.9379 8.03321C18.809 7.93946 18.6294 7.95509 18.52 8.07228L15.0004 11.8809L11.4809 8.06837C11.3715 7.95118 11.1918 7.93556 11.0629 8.02931Z\" fill=\"#D3A4E5\"/>\n `;\n }\n\n container.appendChild(svg);\n return container;\n};\n\n/**\n *\n * @param isMainnet isMainnet = !isDraft\n * @returns\n */\nconst getXPIcon = (isMainnet: boolean) => {\n const container = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"svg\",\n );\n container.setAttribute(\"width\", \"12\");\n container.setAttribute(\"height\", \"12\");\n container.setAttribute(\"viewBox\", \"0 0 20 20\");\n\n switch (isMainnet) {\n case true:\n container.innerHTML = `\n <path d=\"M15 12.5C15.125 12.5 15.2373 12.5781 15.2815 12.6953L15.8333 14.1667L17.3046 14.7184C17.4218 14.7627 17.5 14.875 17.5 15C17.5 15.125 17.4218 15.2373 17.3046 15.2816L15.8333 15.8333L15.2815 17.3047C15.2373 17.4219 15.125 17.5 15 17.5C14.875 17.5 14.7627 17.4219 14.7184 17.3047L14.1666 15.8333L12.6953 15.2816C12.5781 15.2373 12.5 15.125 12.5 15C12.5 14.875 12.5781 14.7627 12.6953 14.7184L14.1666 14.1667L14.7184 12.6953C14.7627 12.5781 14.875 12.5 15 12.5Z\" fill=\"white\"/>\n <path d=\"M8.33492 3.33333C8.55184 3.33333 8.75177 3.45943 8.84273 3.65885L10.6217 7.51139C10.6632 7.60119 10.7353 7.67335 10.8252 7.71484L14.6744 9.49056C14.8739 9.58152 15 9.78146 15 9.99837C14.9999 10.2152 14.8738 10.4144 14.6744 10.5054L10.8219 12.2852C10.7321 12.3267 10.66 12.3988 10.6184 12.4886L8.83866 16.3411C8.74772 16.5405 8.54853 16.6666 8.33167 16.6667C8.11475 16.6667 7.91482 16.5406 7.82385 16.3411L6.04814 12.4919C6.00665 12.402 5.93449 12.3299 5.84469 12.2884L1.99215 10.5094C1.79272 10.4185 1.66663 10.222 1.66663 10.0016C1.66667 9.78126 1.79276 9.58151 1.99215 9.49056L5.84143 7.71159C5.93113 7.67013 6.00335 7.59781 6.04488 7.50814L7.82792 3.65885C7.91887 3.45947 8.11805 3.33338 8.33492 3.33333Z\" fill=\"white\"/>\n <path d=\"M15 2.5C15.125 2.5 15.2373 2.57812 15.2815 2.69531L15.8333 4.16667L17.3046 4.71842C17.4218 4.7627 17.5 4.875 17.5 5C17.5 5.125 17.4218 5.2373 17.3046 5.28158L15.8333 5.83333L15.2815 7.30469C15.2373 7.42188 15.125 7.5 15 7.5C14.875 7.5 14.7627 7.42188 14.7184 7.30469L14.1666 5.83333L12.6953 5.28158C12.5781 5.2373 12.5 5.125 12.5 5C12.5 4.875 12.5781 4.7627 12.6953 4.71842L14.1666 4.16667L14.7184 2.69531C14.7627 2.57812 14.875 2.5 15 2.5Z\" fill=\"white\"/>\n `;\n break;\n default:\n container.innerHTML = `\n <path d=\"M10.4094 15.4897C10.411 15.4905 10.4126 15.4914 10.4143 15.4922L10.4314 15.4995C10.6358 15.6012 10.726 15.8431 10.6397 16.0537L10.6356 16.0635C10.6329 16.0701 10.6305 16.0772 10.6275 16.0838L10.5087 16.3418C10.495 16.3716 10.478 16.3992 10.4598 16.4256C10.4582 16.428 10.4558 16.4306 10.4541 16.4329C10.4476 16.4421 10.4389 16.4494 10.4322 16.4582C10.4242 16.4681 10.4164 16.4781 10.4078 16.4875C10.402 16.4939 10.3962 16.5004 10.3907 16.507C10.3874 16.5102 10.3843 16.5136 10.3809 16.5168C10.3787 16.5181 10.377 16.5201 10.3752 16.5216C10.373 16.5236 10.3701 16.5246 10.3679 16.5265C10.3542 16.5386 10.3395 16.5492 10.3247 16.5599C10.303 16.5758 10.2802 16.5897 10.2564 16.6022C10.2458 16.6077 10.2356 16.6137 10.2246 16.6185C10.2214 16.6199 10.218 16.6215 10.2149 16.6234C10.2122 16.6245 10.2095 16.6255 10.2067 16.6266C10.201 16.6289 10.1954 16.6294 10.1897 16.6315C10.1684 16.6393 10.1468 16.6459 10.1246 16.651C10.1207 16.6519 10.1169 16.6529 10.1132 16.6543C10.1085 16.6552 10.104 16.6567 10.0993 16.6576C10.0969 16.6576 10.0944 16.658 10.092 16.6584C10.0653 16.6629 10.0382 16.6651 10.0106 16.6657C10.0076 16.6657 10.0047 16.6673 10.0017 16.6673L10 16.6665L9.99841 16.6673C9.99542 16.6673 9.99245 16.6657 9.98946 16.6657C9.96191 16.6651 9.93482 16.6629 9.90808 16.6584C9.90541 16.6579 9.90266 16.6577 9.89994 16.6576C9.89527 16.6567 9.89075 16.6553 9.88611 16.6543C9.88265 16.653 9.87909 16.6519 9.87553 16.651C9.85329 16.6459 9.83172 16.6393 9.81042 16.6315C9.80464 16.6294 9.79825 16.6289 9.79252 16.6266C9.7898 16.6255 9.78709 16.6245 9.78438 16.6234C9.78147 16.6216 9.77852 16.6199 9.77543 16.6185C9.76453 16.6137 9.75425 16.6077 9.74369 16.6022C9.71984 16.5897 9.69713 16.5758 9.67533 16.5599C9.66058 16.5492 9.64588 16.5386 9.6322 16.5265C9.63002 16.5246 9.62704 16.5236 9.62488 16.5216C9.62295 16.5199 9.6207 16.5182 9.61837 16.5168C9.61499 16.5136 9.6119 16.5102 9.6086 16.507L9.56791 16.4582C9.56115 16.4494 9.55246 16.4421 9.54594 16.4329C9.54426 16.4306 9.54187 16.428 9.54024 16.4256C9.52204 16.3992 9.50507 16.3716 9.49141 16.3418L9.37179 16.0838C9.36875 16.0772 9.36715 16.0701 9.36446 16.0635L9.35958 16.0537C9.27358 15.8434 9.36397 15.6014 9.56791 15.4995L9.58582 15.4922C9.58746 15.4914 9.58904 15.4905 9.5907 15.4897L9.82237 15.3823C9.93257 15.3312 10.0596 15.3307 10.1702 15.381L10.4094 15.4897Z\" fill=\"white\"/>\n <path d=\"M8.6711 13.4959C8.89565 13.3923 9.16217 13.4896 9.26599 13.714L9.50281 14.23C9.58063 14.3981 9.54569 14.5899 9.42875 14.7191C9.40896 14.741 9.38639 14.7606 9.36202 14.7785C9.33856 14.7956 9.31368 14.8114 9.28634 14.8241C9.22958 14.8502 9.17014 14.8624 9.11137 14.8639C9.0348 14.8666 8.95986 14.8483 8.89246 14.8143C8.80654 14.7705 8.73345 14.7003 8.68982 14.606L8.45219 14.09L8.45138 14.0892L8.45056 14.0868C8.35597 13.8818 8.42976 13.6441 8.61414 13.5252C8.6199 13.5235 8.62553 13.5214 8.63123 13.5195C8.64439 13.5117 8.6569 13.5025 8.6711 13.4959Z\" fill=\"white\"/>\n <path d=\"M10.7341 13.714C10.8379 13.4896 11.1044 13.3923 11.329 13.4959C11.3432 13.5025 11.3557 13.5117 11.3689 13.5195C11.3743 13.5213 11.3796 13.5236 11.3851 13.5252C11.5699 13.644 11.6442 13.8816 11.5495 14.0868L11.5487 14.0892L11.5479 14.09L11.3103 14.606C11.2666 14.7003 11.1935 14.7705 11.1076 14.8143C11.0402 14.8483 10.9653 14.8666 10.8887 14.8639C10.8299 14.8624 10.7705 14.8502 10.7137 14.8241C10.6862 14.8113 10.6609 14.7957 10.6372 14.7785C10.6131 14.7607 10.591 14.7409 10.5713 14.7191C10.5643 14.7113 10.5582 14.7028 10.5518 14.6947C10.5296 14.6666 10.5113 14.6365 10.4965 14.6043C10.4442 14.4895 10.4401 14.3534 10.4973 14.23L10.7341 13.714Z\" fill=\"white\"/>\n <path d=\"M7.17289 11.6388C7.27684 11.4148 7.54356 11.318 7.76778 11.4215L8.02576 11.5404L8.13888 11.5916C8.25956 11.6472 8.35637 11.7446 8.41231 11.8651L8.5824 12.2337C8.68602 12.4579 8.5892 12.7239 8.36511 12.8278C8.34249 12.8382 8.31926 12.8455 8.29594 12.8514L8.29106 12.8522C8.26967 12.8573 8.24828 12.8613 8.22677 12.8636C8.2011 12.8667 8.1757 12.8673 8.15027 12.866C7.98977 12.8578 7.83918 12.7648 7.76697 12.6089L7.72953 12.5283C7.67627 12.4133 7.58336 12.3211 7.4683 12.2679L7.38936 12.2313C7.17378 12.1316 7.07701 11.8826 7.1615 11.6641C7.16304 11.6616 7.16492 11.6593 7.16638 11.6567C7.16879 11.6509 7.17021 11.6446 7.17289 11.6388Z\" fill=\"white\"/>\n <path d=\"M12.2323 11.4215C12.4565 11.318 12.7232 11.4148 12.8272 11.6388C12.8299 11.6446 12.8313 11.6509 12.8337 11.6567C12.8351 11.6592 12.8363 11.6617 12.8378 11.6641C12.9224 11.8827 12.8264 12.1315 12.6107 12.2313L12.5318 12.2679C12.4167 12.3211 12.3238 12.4133 12.2705 12.5283L12.2331 12.6089C12.1505 12.7873 11.9652 12.8837 11.7798 12.8644C11.7774 12.8642 11.775 12.8639 11.7725 12.8636C11.7261 12.8585 11.6796 12.8484 11.635 12.8278C11.4109 12.7239 11.3141 12.4579 11.4177 12.2337L11.5878 11.8651C11.6437 11.7446 11.7405 11.6472 11.8612 11.5916L11.9743 11.5404L12.2323 11.4215Z\" fill=\"white\"/>\n <path d=\"M10 7.50065C10.125 7.50065 10.2373 7.57878 10.2816 7.69596L10.7666 8.98991C10.8089 9.10259 10.8981 9.1918 11.0108 9.23405L12.3047 9.71908C12.4219 9.76335 12.5 9.87565 12.5 10.0007C12.5 10.1257 12.4219 10.238 12.3047 10.2822L11.0108 10.7673C10.8981 10.8095 10.8089 10.8987 10.7666 11.0114L10.2816 12.3053C10.2373 12.4225 10.125 12.5007 10 12.5007C9.87504 12.5007 9.76274 12.4225 9.71846 12.3053L9.23344 11.0114C9.19119 10.8987 9.10197 10.8095 8.9893 10.7673L7.69535 10.2822C7.57817 10.238 7.50004 10.1257 7.50004 10.0007C7.50004 9.87565 7.57817 9.76335 7.69535 9.71908L8.9893 9.23405C9.10197 9.1918 9.19119 9.10259 9.23344 8.98991L9.71846 7.69596C9.76274 7.57878 9.87504 7.50065 10 7.50065Z\" fill=\"white\"/>\n <path d=\"M5.17582 10.7184C5.27971 10.4938 5.54608 10.3957 5.77071 10.4995L5.87162 10.5459L5.87325 10.5467L6.28992 10.738C6.5069 10.8384 6.60331 11.0913 6.51534 11.3109C6.51294 11.3167 6.5115 11.323 6.50883 11.3288C6.50648 11.3339 6.50321 11.3385 6.50069 11.3434C6.48189 11.3813 6.45788 11.4144 6.4307 11.4443C6.36347 11.5167 6.2748 11.5643 6.17924 11.5811C6.09138 11.5974 5.998 11.5887 5.91069 11.5485L5.39473 11.3109C5.19818 11.22 5.09874 11.0044 5.14653 10.8014L5.17582 10.7184Z\" fill=\"white\"/>\n <path d=\"M14.2294 10.4995C14.454 10.3957 14.7204 10.4938 14.8243 10.7184L14.8536 10.8014C14.9013 11.0044 14.8019 11.22 14.6053 11.3109L14.0894 11.5485C14.0021 11.5887 13.9087 11.5974 13.8208 11.5811C13.6811 11.5566 13.5551 11.4671 13.4913 11.3288C13.4886 11.3231 13.4879 11.3166 13.4856 11.3109C13.3974 11.0913 13.4931 10.8384 13.7102 10.738L14.1268 10.5467L14.1285 10.5459L14.2294 10.4995Z\" fill=\"white\"/>\n <path d=\"M3.96651 9.35205C4.17017 9.274 4.401 9.36373 4.49711 9.56201L4.51013 9.59049C4.51134 9.593 4.51303 9.59528 4.5142 9.59782L4.61902 9.83038C4.66826 9.93964 4.66807 10.0648 4.61849 10.1739L4.5142 10.4035C4.51313 10.4058 4.51123 10.4077 4.51013 10.41L4.49548 10.4409C4.39952 10.6364 4.17327 10.7248 3.97139 10.6501L3.94698 10.6387C3.93704 10.6351 3.92689 10.6319 3.91687 10.6281L3.65889 10.5093C3.63045 10.4963 3.60365 10.4809 3.57833 10.4637C3.57288 10.46 3.56816 10.4554 3.56287 10.4515C3.53866 10.4339 3.51543 10.4147 3.49451 10.3937C3.48924 10.3884 3.48408 10.383 3.47904 10.3774C3.47489 10.3729 3.47165 10.3675 3.46765 10.3628C3.4513 10.3437 3.43652 10.3236 3.42289 10.3026C3.41862 10.2959 3.41467 10.2891 3.41069 10.2822C3.39638 10.2579 3.38371 10.2329 3.37325 10.2065C3.37142 10.2019 3.36926 10.1974 3.36755 10.1927C3.35907 10.1698 3.35269 10.1461 3.34721 10.1219C3.34543 10.1138 3.34375 10.1057 3.34233 10.0975C3.33705 10.0664 3.33337 10.0346 3.33337 10.0023C3.33337 10.0004 3.33417 9.99848 3.33419 9.99658C3.33437 9.96506 3.33718 9.93408 3.34233 9.90381C3.34408 9.89365 3.34653 9.8837 3.34884 9.8737C3.3539 9.8524 3.35932 9.83138 3.36674 9.81104C3.37028 9.80114 3.37405 9.7914 3.37813 9.78174C3.38778 9.75923 3.39902 9.73761 3.4115 9.71663C3.41532 9.71013 3.41882 9.70344 3.42289 9.6971C3.43664 9.67601 3.45197 9.65601 3.46847 9.63688C3.47209 9.63263 3.47529 9.62801 3.47904 9.62386V9.62223C3.48395 9.61685 3.48938 9.61196 3.49451 9.60677C3.51639 9.58487 3.54076 9.56475 3.56612 9.54655C3.57053 9.54339 3.57463 9.53982 3.57914 9.53678C3.60419 9.51987 3.6308 9.50487 3.65889 9.49202L3.9185 9.37158C3.92793 9.368 3.9376 9.36521 3.94698 9.36182L3.96651 9.35205Z\" fill=\"white\"/>\n <path d=\"M15.5022 9.56201C15.5981 9.36374 15.8292 9.27444 16.0328 9.35205L16.0531 9.36182C16.0622 9.36513 16.0716 9.36813 16.0808 9.37158L16.3412 9.49202C16.3691 9.50477 16.3952 9.52002 16.4201 9.53678C16.4248 9.53994 16.4294 9.54326 16.434 9.54655C16.4592 9.56464 16.483 9.58503 16.5048 9.60677C16.5099 9.61196 16.5153 9.61685 16.5202 9.62223L16.521 9.62386C16.5248 9.62801 16.528 9.63263 16.5316 9.63688C16.5481 9.65601 16.5634 9.67601 16.5772 9.6971C16.5813 9.70344 16.5848 9.71013 16.5886 9.71663C16.601 9.73751 16.6115 9.75934 16.6211 9.78174C16.6377 9.82081 16.6504 9.86145 16.6578 9.90381C16.6629 9.93408 16.6657 9.96506 16.6659 9.99658C16.6659 9.99848 16.6667 10.0004 16.6667 10.0023C16.6667 10.0735 16.6521 10.1423 16.6268 10.2065C16.6164 10.2329 16.6037 10.2579 16.5894 10.2822C16.5854 10.2891 16.5815 10.2959 16.5772 10.3026C16.5636 10.3236 16.5488 10.3437 16.5324 10.3628C16.5284 10.3675 16.5244 10.3729 16.5202 10.3774C16.4909 10.4096 16.4584 10.4389 16.4218 10.4637C16.3964 10.4809 16.3696 10.4963 16.3412 10.5093L16.0824 10.6281C16.0726 10.6317 16.0628 10.6352 16.0531 10.6387L16.0279 10.6501C15.8261 10.7244 15.5995 10.6363 15.5038 10.4409L15.4899 10.41C15.4888 10.4077 15.4869 10.4058 15.4859 10.4035L15.3814 10.176C15.3309 10.0662 15.3306 9.93988 15.3806 9.82986L15.4859 9.59782C15.4871 9.59528 15.4887 9.593 15.4899 9.59049L15.5022 9.56201Z\" fill=\"white\"/>\n <path d=\"M6.17354 8.41781C6.24076 8.42866 6.30491 8.45486 6.36072 8.4943C6.36594 8.49804 6.37111 8.50173 6.37618 8.5057C6.39298 8.51868 6.40844 8.5334 6.42338 8.54883C6.45414 8.58106 6.48087 8.61756 6.50151 8.6595C6.50346 8.6634 6.50616 8.66693 6.50802 8.6709C6.6098 8.89465 6.51325 9.16001 6.28992 9.26335L5.87325 9.45459L5.77071 9.50179C5.54608 9.60561 5.27971 9.50747 5.17582 9.28288C5.16739 9.26458 5.16208 9.24546 5.15629 9.22673C5.09213 9.01602 5.18924 8.78544 5.39473 8.69043L5.91069 8.4528C5.99604 8.41351 6.08742 8.40301 6.17354 8.41781Z\" fill=\"white\"/>\n <path d=\"M13.8265 8.41781C13.9127 8.40301 14.004 8.41351 14.0894 8.4528L14.6053 8.69043C14.8108 8.78544 14.9079 9.01602 14.8438 9.22673C14.838 9.24546 14.8327 9.26458 14.8243 9.28288C14.7204 9.50747 14.454 9.60561 14.2294 9.50179L14.1268 9.45459L13.7102 9.26335C13.4869 9.16006 13.3897 8.89459 13.4913 8.6709C13.5562 8.53141 13.6849 8.44067 13.8265 8.41781Z\" fill=\"white\"/>\n <path d=\"M8.08191 7.14258C8.12914 7.13285 8.17781 7.13014 8.22677 7.13607C8.24823 7.1384 8.26974 7.14218 8.29106 7.14746L8.29594 7.14827C8.31935 7.15435 8.34238 7.16303 8.36511 7.1735C8.56102 7.26434 8.65923 7.47893 8.61169 7.68131C8.60496 7.70958 8.59583 7.73771 8.58321 7.76514L8.41231 8.13623C8.35637 8.25674 8.25956 8.35409 8.13888 8.40967L8.02576 8.46094L7.76778 8.57975C7.54356 8.6833 7.27684 8.58647 7.17289 8.36247C7.17011 8.35645 7.16888 8.34982 7.16638 8.34375C7.16463 8.34069 7.16259 8.33779 7.16069 8.3348C7.07785 8.11681 7.17457 7.86935 7.38936 7.77002L7.4683 7.7334C7.58336 7.68022 7.67627 7.58801 7.72953 7.47298L7.76697 7.39242C7.82881 7.25894 7.9481 7.17047 8.08191 7.14258Z\" fill=\"white\"/>\n <path d=\"M11.7798 7.13525C11.9651 7.11604 12.1505 7.21406 12.2331 7.39242L12.2705 7.47298C12.3238 7.58801 12.4167 7.68022 12.5318 7.7334L12.6107 7.77002C12.8256 7.86939 12.9216 8.11674 12.8386 8.3348C12.8368 8.33767 12.8354 8.34081 12.8337 8.34375C12.8312 8.34982 12.83 8.35645 12.8272 8.36247C12.8018 8.41716 12.7665 8.46398 12.7246 8.50244C12.7224 8.50452 12.7197 8.5061 12.7173 8.50814C12.588 8.62224 12.3988 8.65664 12.2323 8.57975L11.9743 8.46094L11.8612 8.40967C11.7405 8.35409 11.6437 8.25674 11.5878 8.13623L11.4169 7.76514C11.4042 7.73766 11.3943 7.70964 11.3876 7.68131C11.3401 7.47899 11.4391 7.26431 11.635 7.1735C11.6797 7.1529 11.7261 7.14117 11.7725 7.13607C11.7749 7.13577 11.7774 7.13551 11.7798 7.13525Z\" fill=\"white\"/>\n <path d=\"M9.18949 5.14632C9.1935 5.14715 9.19771 5.14701 9.2017 5.14795C9.22997 5.15459 9.25812 5.16391 9.28552 5.17643C9.31373 5.18956 9.33961 5.20577 9.36365 5.22363C9.45286 5.28964 9.51067 5.38576 9.53292 5.49056C9.55232 5.58202 9.54494 5.67999 9.50281 5.77132L9.26599 6.28727C9.16217 6.5117 8.89565 6.60897 8.6711 6.50537C8.65677 6.49874 8.6445 6.48886 8.63123 6.48096C8.62472 6.47885 8.61831 6.47634 8.61169 6.47445C8.42914 6.35505 8.35639 6.11858 8.45056 5.91455L8.51648 5.77214L8.68982 5.39534C8.71856 5.33319 8.75929 5.2802 8.80863 5.23909C8.8927 5.16966 9.00036 5.13309 9.10974 5.13656H9.11381C9.13907 5.13735 9.16427 5.14113 9.18949 5.14632Z\" fill=\"white\"/>\n <path d=\"M10.8903 5.13656C10.9995 5.13309 11.1066 5.16992 11.1906 5.23909C11.2402 5.28026 11.2814 5.33298 11.3103 5.39534L11.4836 5.77214L11.5495 5.91455C11.6438 6.1188 11.5706 6.35517 11.3876 6.47445C11.3812 6.47627 11.3751 6.47893 11.3689 6.48096C11.3556 6.48886 11.3433 6.49874 11.329 6.50537C11.1044 6.60897 10.8379 6.5117 10.7341 6.28727L10.4973 5.77132C10.4551 5.67999 10.4478 5.58202 10.4672 5.49056C10.4894 5.38576 10.5472 5.28964 10.6364 5.22363C10.6603 5.20591 10.6858 5.1895 10.7137 5.17643C10.7696 5.15079 10.8284 5.13837 10.8863 5.13656H10.8903Z\" fill=\"white\"/>\n <path d=\"M10.0106 3.3348C10.0381 3.3354 10.0653 3.33759 10.092 3.34212H10.0953C10.1029 3.34343 10.1105 3.34539 10.118 3.34701C10.1203 3.34772 10.1223 3.34892 10.1246 3.34945C10.1468 3.3546 10.1684 3.36122 10.1897 3.36898C10.1952 3.37101 10.2012 3.37179 10.2067 3.37386C10.2103 3.37525 10.2138 3.37647 10.2173 3.37793C10.2198 3.37925 10.2221 3.38088 10.2246 3.382C10.2355 3.38682 10.2458 3.39278 10.2564 3.39827C10.2802 3.41078 10.303 3.42474 10.3247 3.44059C10.3395 3.45123 10.3542 3.46189 10.3679 3.47396C10.3702 3.47599 10.3729 3.47758 10.3752 3.47965C10.3769 3.48116 10.3789 3.4825 10.3809 3.48372C10.3847 3.48725 10.3886 3.49067 10.3923 3.4943C10.3975 3.50048 10.4024 3.50699 10.4078 3.51302C10.4164 3.52234 10.4242 3.53238 10.4322 3.54232C10.4391 3.55124 10.4475 3.55906 10.4541 3.56836C10.4558 3.5707 10.4582 3.57333 10.4598 3.57568C10.478 3.60208 10.495 3.62965 10.5087 3.65951L10.6283 3.91748C10.6312 3.92383 10.633 3.9306 10.6356 3.93701L10.6389 3.94434C10.7268 4.15432 10.6373 4.39518 10.4346 4.49854L10.4167 4.50749C10.4142 4.5087 10.4119 4.51039 10.4094 4.51156L10.1763 4.61897C10.0664 4.66962 9.93997 4.67 9.82978 4.62002L9.5907 4.51156C9.58816 4.51039 9.58588 4.5087 9.58337 4.50749L9.56466 4.49854C9.36247 4.39504 9.2728 4.15403 9.36039 3.94434L9.36446 3.93701C9.36707 3.9306 9.36886 3.92383 9.37179 3.91748L9.49141 3.65951C9.50507 3.62965 9.52204 3.60208 9.54024 3.57568C9.54187 3.57333 9.54426 3.5707 9.54594 3.56836C9.55259 3.55906 9.56101 3.55124 9.56791 3.54232C9.57592 3.53238 9.5837 3.52234 9.59233 3.51302C9.59759 3.50712 9.60188 3.50036 9.60697 3.4943C9.61067 3.49066 9.61457 3.48725 9.61837 3.48372C9.62059 3.48237 9.62305 3.48131 9.62488 3.47965C9.62717 3.47758 9.62988 3.47599 9.6322 3.47396C9.64588 3.46189 9.66058 3.45123 9.67533 3.44059C9.69711 3.42474 9.71986 3.41078 9.74369 3.39827C9.75424 3.39278 9.76454 3.38682 9.77543 3.382C9.77776 3.38097 9.77969 3.37914 9.78194 3.37793C9.78543 3.37647 9.78901 3.37525 9.79252 3.37386C9.79826 3.37162 9.80465 3.3711 9.81042 3.36898C9.8317 3.36122 9.85332 3.3546 9.87553 3.34945C9.87753 3.34898 9.87926 3.34763 9.88123 3.34701C9.88881 3.34538 9.89634 3.34344 9.90401 3.34212H9.90808C9.93478 3.33759 9.96195 3.3354 9.98946 3.3348C9.99245 3.33474 9.99542 3.33398 9.99841 3.33398H10.0017C10.0047 3.33398 10.0076 3.33474 10.0106 3.3348Z\" fill=\"white\"/>\n `;\n }\n\n return container;\n};\n","import { MarketplaceToastOptions } from \"../types\";\nimport { CloseButton } from \"../components/close-button\";\nimport { sanitizeImageSrc } from \"../../utils\";\n\n// Inject marketplace toast specific styles\nexport function injectMarketplaceStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-marketplace-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-marketplace-styles\";\n style.textContent = `\n /* Marketplace Toast */\n .cartridge-toast.marketplace {\n background-color: #1E221F;\n border-radius: 4px;\n width: 400px;\n padding: 12px;\n padding-bottom: 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: relative;\n overflow: hidden;\n box-sizing: border-box;\n }\n\n .cartridge-toast.marketplace .image-container {\n display: flex;\n padding: 3px;\n align-items: center;\n gap: 10px;\n border-radius: 4px;\n background: #161A17;\n }\n\n .cartridge-toast.marketplace .image-content-container {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .cartridge-toast.marketplace .image {\n display: flex;\n width: 34px;\n height: 34px;\n padding: 2px;\n justify-content: center;\n align-items: center;\n aspect-ratio: 1/1;\n border-radius: 2px;\n background: #000;\n flex-shrink: 0;\n }\n\n .cartridge-toast.marketplace .content {\n display: flex;\n height: 40px;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n gap: 2px;\n }\n\n .cartridge-toast.marketplace .title {\n color: #FFF;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px; /* 142.857% */\n }\n\n .cartridge-toast.marketplace .item-name {\n color: #808080;\n text-align: center;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 16px; /* 133.333% */\n }\n\n .cartridge-toast.marketplace .close-button-container {\n display: flex;\n padding: 4px;\n align-items: center;\n gap: 10px;\n }\n `;\n targetDoc.head.appendChild(style);\n}\n\n// Create marketplace toast element\nexport function createMarketplaceToast(\n options: MarketplaceToastOptions,\n): HTMLElement {\n const toast = document.createElement(\"div\");\n toast.className = \"cartridge-toast marketplace\";\n\n const imageContentContainer = document.createElement(\"div\");\n imageContentContainer.className = \"image-content-container\";\n\n const imageContainer = document.createElement(\"div\");\n imageContainer.className = \"image-container\";\n\n const image = document.createElement(\"img\");\n image.className = \"image\";\n image.src = sanitizeImageSrc(options.itemImages[0]);\n image.alt = options.itemNames[0];\n imageContainer.appendChild(image);\n\n const content = document.createElement(\"div\");\n content.className = \"content\";\n\n const actionText = {\n purchased: \"Purchased!\",\n sold: \"Sold!\",\n sent: \"Sent!\",\n listed: \"Listed!\",\n unlisted: \"Unlisted!\",\n };\n\n const title = document.createElement(\"p\");\n title.className = \"title\";\n title.textContent = actionText[options.action];\n\n const itemName = document.createElement(\"p\");\n itemName.className = \"item-name\";\n itemName.textContent = options.itemNames[0];\n\n content.appendChild(title);\n content.appendChild(itemName);\n\n imageContentContainer.appendChild(imageContainer);\n imageContentContainer.appendChild(content);\n\n const closeButtonContainer = document.createElement(\"div\");\n closeButtonContainer.className = \"close-button-container\";\n const closeButton = CloseButton(false);\n closeButtonContainer.appendChild(closeButton);\n\n toast.appendChild(imageContentContainer);\n toast.appendChild(closeButtonContainer);\n\n return toast;\n}\n","import { QuestToastOptions } from \"../types\";\nimport { CloseButton } from \"../components/close-button\";\n\n// Inject quest toast specific styles\nexport function injectQuestStyles(targetDoc: Document): void {\n if (targetDoc.getElementById(\"cartridge-toast-quest-styles\")) {\n return;\n }\n\n const style = targetDoc.createElement(\"style\");\n style.id = \"cartridge-toast-quest-styles\";\n style.textContent = `\n /* Quest Toast */\n .cartridge-toast.quest {\n background-color: #161A17;\n border-radius: 8px;\n width: 360px;\n padding: 12px;\n padding-bottom: 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: relative;\n overflow: hidden;\n min-height: 52px;\n box-sizing: border-box;\n }\n\n .cartridge-toast.quest .image-content-container {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n }\n\n .cartridge-toast.quest .image {\n width: 30px;\n height: 30px;\n aspect-ratio: 1/1;\n }\n\n .cartridge-toast.quest .image-container {\n display: flex;\n padding: 5px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 4px;\n background: #161A17;\n }\n\n .cartridge-toast.quest .content {\n display: flex;\n height: 40px;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n gap: 2px;\n }\n\n .cartridge-toast.quest .title {\n color: #FFF;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n }\n\n .cartridge-toast.quest .subtitle {\n color: #808080;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 16px;\n }\n\n .cartridge-toast.quest .xp-section-container {\n display: flex;\n padding: 10px;\n flex-direction: column;\n align-items: flex-start;\n gap: 10px;\n }\n\n .cartridge-toast.quest .xp-section {\n display: flex;\n align-items: center;\n gap: 2px;\n align-self: stretch;\n }\n\n .cartridge-toast.quest .xp-section .xp-icon {\n width: 20px;\n height: 20px;\n aspect-ratio: 1/1;\n }\n\n .cartridge-toast.quest .xp-section .xp-amount {\n color: #FFF;\n /* Inter/Regular 14px */\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px; /* 142.857% */\n }\n `;\n targetDoc.head.appendChild(style);\n}\n\n// Create quest toast element\nexport function createQuestToast(options: QuestToastOptions): HTMLElement {\n const toast = document.createElement(\"div\");\n toast.className = \"cartridge-toast quest\";\n\n const imageContentContainer = document.createElement(\"div\");\n imageContentContainer.className = \"image-content-container\";\n\n const imageContainer = document.createElement(\"div\");\n imageContainer.className = \"image-container\";\n\n const icon = getQuestIcon();\n icon.className = \"image\";\n imageContainer.appendChild(icon);\n\n const content = document.createElement(\"div\");\n content.className = \"content\";\n\n const title = document.createElement(\"p\");\n title.className = \"title\";\n title.textContent = options.title;\n\n const subtitle = document.createElement(\"p\");\n subtitle.className = \"subtitle\";\n subtitle.textContent = options.subtitle || \"Earned!\";\n\n content.appendChild(title);\n content.appendChild(subtitle);\n\n imageContentContainer.appendChild(imageContainer);\n imageContentContainer.appendChild(content);\n\n const closeButton = CloseButton(false);\n\n toast.appendChild(imageContentContainer);\n toast.appendChild(closeButton);\n\n return toast;\n}\n\nconst getQuestIcon = () => {\n const container = document.createElement(\"div\");\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"width\", \"34\");\n svg.setAttribute(\"height\", \"34\");\n svg.setAttribute(\"viewBox\", \"0 0 30 30\");\n svg.style.width = \"100%\";\n svg.style.height = \"100%\";\n svg.innerHTML = `<path d=\"M3 6.5V8C3 8.55312 3.44687 9 4 9H4.5H6V6.5C6 5.67188 5.32812 5 4.5 5C3.67188 5 3 5.67188 3 6.5ZM6.5 5C6.8125 5.41875 7 5.9375 7 6.5V16C7 17.1031 7.89687 18 9 18C10.1031 18 11 17.1031 11 16V15.8344C11 14.8219 11.8219 14 12.8344 14H18V8C18 6.34375 16.6562 5 15 5H6.5ZM17.5 19C19.4344 19 21 17.4344 21 15.5C21 15.225 20.775 15 20.5 15H12.8344C12.375 15 12 15.3719 12 15.8344V16C12 17.6562 10.6562 19 9 19H14.5H17.5Z\" fill=\"white\"/>`;\n container.appendChild(svg);\n return container;\n};\n","export interface ProgressBarOptions {\n duration: number; // in milliseconds (0 or Infinity for static full bar)\n onComplete?: () => void;\n borderRadius?: number; // Optional border radius in pixels (default: 8px)\n}\n\nexport const ProgressBar = (options: ProgressBarOptions): HTMLDivElement => {\n const borderRadius = options.borderRadius ?? 8;\n const isInfiniteDuration =\n !isFinite(options.duration) || options.duration <= 0;\n\n const container = document.createElement(\"div\");\n container.className = \"cartridge-toast-progress-bar\";\n container.style.position = \"absolute\";\n container.style.bottom = \"0\";\n container.style.left = \"0\";\n container.style.right = \"0\";\n container.style.height = \"4px\";\n container.style.overflow = \"hidden\";\n container.style.borderBottomLeftRadius = `${borderRadius}px`;\n container.style.borderBottomRightRadius = `${borderRadius}px`;\n container.style.backgroundColor = \"rgba(255, 255, 255, 0.2)\";\n\n const inside = document.createElement(\"div\");\n inside.className = \"cartridge-toast-progress-bar-fill\";\n inside.style.position = \"absolute\";\n inside.style.bottom = \"0\";\n inside.style.left = \"0\";\n inside.style.height = \"100%\";\n inside.style.backgroundColor = \"rgba(255, 255, 255, 0.8)\";\n inside.style.borderBottomLeftRadius = `${borderRadius}px`;\n\n if (isInfiniteDuration) {\n // For infinite duration, show full bar immediately without animation\n inside.style.width = \"100%\";\n inside.style.transition = \"none\";\n } else {\n // For finite duration, animate the progress bar\n inside.style.width = \"0%\";\n inside.style.transition = `width ${options.duration}ms linear`;\n\n // Start animation after a brief delay to ensure styles are applied\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n inside.style.width = \"100%\";\n });\n });\n\n // Call onComplete when animation finishes\n if (options.onComplete) {\n setTimeout(() => {\n options.onComplete?.();\n }, options.duration);\n }\n }\n\n container.appendChild(inside);\n\n return container;\n};\n","import { ProgressBar } from \"../components/progress-bar\";\n\n/**\n * Add a progress bar to a toast element\n *\n * @param toast - The toast element to add the progress bar to\n * @param duration - Duration in milliseconds\n * @param onComplete - Callback when progress completes\n * @param borderRadius - Optional border radius in pixels (default: 8px)\n */\nexport function addProgressBarToToast(\n toast: HTMLElement,\n duration: number,\n onComplete: () => void,\n borderRadius?: number,\n): void {\n const progressBar = ProgressBar({\n duration,\n onComplete,\n borderRadius,\n });\n toast.appendChild(progressBar);\n}\n","import { ToastOptions } from \"./types\";\nimport {\n isInIframe,\n getTargetDocument,\n getToastContainer,\n DEFAULT_DURATION,\n DEFAULT_POSITION,\n TOAST_MESSAGE_TYPE,\n removeToast,\n} from \"./utils\";\nimport { injectStyles } from \"./styles\";\nimport {\n injectErrorStyles,\n createErrorToast,\n injectTransactionStyles,\n createTransactionToast,\n injectNetworkSwitchStyles,\n createNetworkSwitchToast,\n injectAchievementStyles,\n createAchievementToast,\n injectQuestStyles,\n createQuestToast,\n injectMarketplaceStyles,\n createMarketplaceToast,\n} from \"./variants\";\nimport { addProgressBarToToast } from \"./utils/progress-bar\";\n\n// Create toast element based on variant\nfunction createToastElement(options: ToastOptions): HTMLElement {\n switch (options.variant) {\n case \"error\":\n return createErrorToast(options);\n case \"transaction\":\n return createTransactionToast(options);\n case \"network-switch\":\n return createNetworkSwitchToast(options);\n case \"achievement\":\n return createAchievementToast(options);\n case \"quest\":\n return createQuestToast(options);\n case \"marketplace\":\n return createMarketplaceToast(options);\n }\n}\n\n// Inject variant-specific styles\nfunction injectVariantStyles(\n targetDoc: Document,\n variant: ToastOptions[\"variant\"],\n): void {\n switch (variant) {\n case \"error\":\n injectErrorStyles(targetDoc);\n break;\n case \"transaction\":\n injectTransactionStyles(targetDoc);\n break;\n case \"network-switch\":\n injectNetworkSwitchStyles(targetDoc);\n break;\n case \"achievement\":\n injectAchievementStyles(targetDoc);\n break;\n case \"quest\":\n injectQuestStyles(targetDoc);\n break;\n case \"marketplace\":\n injectMarketplaceStyles(targetDoc);\n break;\n }\n}\n\n// Show toast on target document (parent or current)\nfunction showToastOnDocument(\n targetDoc: Document,\n options: ToastOptions,\n): () => void {\n // Inject common styles if needed\n injectStyles(targetDoc);\n\n // Inject variant-specific styles\n injectVariantStyles(targetDoc, options.variant);\n\n // Get container\n const position = options.position || DEFAULT_POSITION;\n const container = getToastContainer(targetDoc, position);\n\n // Create toast element\n const toastElement = createToastElement(options);\n\n // Set up dismiss function\n const dismiss = () => removeToast(toastElement);\n\n // Add to container\n container.appendChild(toastElement);\n\n // Setup click handler if provided\n if (options.onClick) {\n toastElement.style.cursor = \"pointer\";\n toastElement.addEventListener(\"click\", (e) => {\n // Don't trigger onClick if clicking close button\n const target = e.target as HTMLElement;\n const isCloseButton = target.closest(\"#close-button\");\n if (!isCloseButton && options.onClick) {\n options.onClick();\n }\n });\n }\n\n // Setup close button\n const closeButton = toastElement.querySelector(\"#close-button\");\n if (closeButton) {\n closeButton.addEventListener(\"click\", (e) => {\n e.stopPropagation(); // Prevent onClick from firing\n dismiss();\n });\n }\n\n // Handle duration and progress bar\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n const duration = options.duration ?? DEFAULT_DURATION;\n const isInfiniteDuration = !isFinite(duration) || duration <= 0;\n\n // Add progress bar to all variants except network-switch\n if (options.variant !== \"network-switch\") {\n // Determine border radius based on variant\n const borderRadius =\n options.variant === \"error\" || options.variant === \"transaction\" ? 8 : 4;\n\n if (isInfiniteDuration) {\n // Show static progress bar for infinite duration (no animation, no auto-dismiss)\n addProgressBarToToast(toastElement, Infinity, () => {}, borderRadius);\n } else {\n // Animated progress bar with auto-dismiss\n addProgressBarToToast(toastElement, duration, dismiss, borderRadius);\n }\n } else if (!isInfiniteDuration) {\n // Network-switch variant uses setTimeout instead of progress bar\n timeoutId = setTimeout(dismiss, duration);\n }\n\n // Return dismiss function\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n dismiss();\n };\n}\n\n// Set up message listener on parent window to handle toast requests from iframes\nlet messageListenerSetup = false;\nfunction setupMessageListener(): void {\n if (messageListenerSetup || typeof window === \"undefined\") {\n return;\n }\n\n // Only set up listener on parent window (not in iframe)\n if (isInIframe()) {\n return;\n }\n\n window.addEventListener(\"message\", (event) => {\n // Basic origin check - in production, you might want stricter checks\n if (event.data?.type === TOAST_MESSAGE_TYPE && event.data?.options) {\n const targetDoc = document;\n if (targetDoc) {\n showToastOnDocument(targetDoc, event.data.options);\n }\n }\n });\n\n messageListenerSetup = true;\n}\n\n/**\n * Show a toast notification\n *\n * The toast will always appear on the parent page, even if called from within an iframe.\n * This ensures toasts are visible above all content, including the keychain iframe.\n *\n * @param options - Toast options with variant-specific properties\n * @returns A function to manually dismiss the toast\n *\n * @example\n * ```ts\n * import { toast } from \"@cartridge/controller\";\n *\n * // Error toast\n * toast({\n * variant: \"error\",\n * message: \"Transaction failed\",\n * });\n *\n * // Transaction toast\n * toast({\n * variant: \"transaction\",\n * hash: \"0x1234...\",\n * status: \"success\",\n * amount: \"100\",\n * token: \"ETH\"\n * });\n *\n * // Network switch toast\n * toast({\n * variant: \"network-switch\",\n * networkName: \"Mainnet\",\n * networkIcon: <url to icon image>\n * });\n *\n * // Achievement toast\n * toast({\n * variant: \"achievement\",\n * itemName: \"First Achievement\",\n * itemImage: \"https://example.com/trophy.png\"\n * action: \"purchased\" | \"sold\",\n * });\n *\n * // Marketplace toast\n * toast({\n * variant: \"marketplace\",\n * itemName: \"Cool NFT #123\",\n * action: \"purchased\",\n * price: \"0.5\",\n * currency: \"ETH\",\n * image: \"https://example.com/nft.png\"\n * });\n * ```\n */\nexport function toast(options: ToastOptions): () => void {\n // Ensure we're in a browser environment\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n console.warn(\"Toast can only be used in a browser environment\");\n return () => {};\n }\n\n // Set up message listener on parent window if not already set up\n setupMessageListener();\n\n // Check if we're in an iframe\n if (isInIframe()) {\n // Try to get parent document\n const targetDoc = getTargetDocument();\n\n if (targetDoc) {\n // Same-origin iframe, can access parent document directly\n return showToastOnDocument(targetDoc, options);\n } else {\n // Cross-origin iframe, use postMessage\n try {\n if (window.parent) {\n window.parent.postMessage(\n {\n type: TOAST_MESSAGE_TYPE,\n options: options,\n },\n \"*\", // In production, specify target origin\n );\n }\n } catch (e) {\n console.warn(\"Failed to send toast message to parent:\", e);\n }\n\n // Return a no-op dismiss function for cross-origin case\n return () => {};\n }\n } else {\n // Not in iframe, show toast directly on current document\n const targetDoc = document;\n return showToastOnDocument(targetDoc, options);\n }\n}\n\nexport * from \"./types\";\n\n// Initialize message listener when module loads (if in browser environment)\nif (typeof window !== \"undefined\") {\n setupMessageListener();\n}\n","// src/generated/erc20-metadata.ts\nvar metadata = [\n {\n name: \"Wrapped BTC\",\n symbol: \"WBTC\",\n decimals: 8,\n l2_token_address: \"0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac\",\n sort_order: 0,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/7dcb2db2-a7a7-44af-660b-8262e057a100/logo\"\n },\n {\n name: \"USD Coin\",\n symbol: \"USDC\",\n decimals: 6,\n l2_token_address: \"0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8\",\n sort_order: 5,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e5aaa970-a998-47e8-bd43-4a3b56b87200/logo\"\n },\n {\n name: \"LUSD Stablecoin\",\n symbol: \"LUSD\",\n decimals: 18,\n l2_token_address: \"0x070a76fd48ca0ef910631754d77dd822147fe98a569b826ec85e3c33fde586ac\",\n sort_order: 3,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dc0ae733-5498-4afa-f475-48dba677aa00/logo\"\n },\n {\n name: \"Tether USD\",\n symbol: \"USDT\",\n decimals: 6,\n l2_token_address: \"0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8\",\n sort_order: 4,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c8a721d1-07c3-46e4-ab4e-523977c30b00/logo\"\n },\n {\n name: \"Ether\",\n symbol: \"ETH\",\n decimals: 18,\n l2_token_address: \"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n sort_order: 3,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e07829b7-0382-4e03-7ecd-a478c5aa9f00/logo\"\n },\n {\n name: \"Dai Stablecoin\",\n symbol: \"DAIv0\",\n decimals: 18,\n l2_token_address: \"0x00da114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3\",\n sort_order: 4,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/919e761b-56f7-4f53-32aa-5e066f7f6200/logo\"\n },\n {\n name: \"Dai Stablecoin\",\n symbol: \"DAI\",\n decimals: 18,\n l2_token_address: \"0x05574eb6b8789a91466f902c380d978e472db68170ff82a5b650b95a58ddf4ad\",\n sort_order: 4,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/919e761b-56f7-4f53-32aa-5e066f7f6200/logo\"\n },\n {\n name: \"Legacy Starknet Wrapped Staked Ether\",\n symbol: \"wstETH-legacy\",\n decimals: 18,\n l2_token_address: \"0x042b8f0484674ca266ac5d08e4ac6a3fe65bd3129795def2dca5c34ecc5f96d2\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/26162dcc-29c2-4f5e-3acd-5e6be1f07a00/logo\"\n },\n {\n name: \"Wrapped Staked Ether\",\n symbol: \"wstETH\",\n decimals: 18,\n l2_token_address: \"0x0057912720381af14b0e5c87aa4718ed5e527eab60b3801ebf702ab09139e38b\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dbbcbdea-1a92-437d-3701-4a5ee129d000/logo\"\n },\n {\n name: \"Rocket Pool ETH\",\n symbol: \"rETH\",\n decimals: 18,\n l2_token_address: \"0x0319111a5037cbec2b3e638cc34a3474e2d2608299f3e62866e9cc683208c610\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c9f2d6fe-fbc6-4384-0990-923dfcb7a200/logo\"\n },\n {\n name: \"LORDS\",\n symbol: \"LORDS\",\n decimals: 18,\n l2_token_address: \"0x0124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49\",\n sort_order: 1,\n total_supply: 509e5,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/a3bfe959-50c4-4f89-0aef-b19207d82a00/logo\"\n },\n {\n name: \"R Stablecoin\",\n symbol: \"R\",\n decimals: 18,\n l2_token_address: \"0x01fa2fb85f624600112040e1f3a848f53a37ed5a7385810063d5fe6887280333\",\n sort_order: 3,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/77612e4e-f7ee-4dba-2066-af321843ef00/logo\"\n },\n {\n name: \"Frax\",\n symbol: \"FRAX\",\n decimals: 18,\n l2_token_address: \"0x009c6b4fb13dfaa025c1383ed6190af8ed8cbb09d9588a3bb020feb152442406\",\n sort_order: 1,\n total_supply: 649462235,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/eeaf0779-e492-474c-ef19-b27843525600/logo\"\n },\n {\n name: \"Frax Share\",\n symbol: \"FXS\",\n decimals: 18,\n l2_token_address: \"0x0058efd0e73c33a848ffaa88738d128ebf0af98ea78cf3c14dc757bb02d39ffb\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/98bea621-1e4f-4d63-9689-bdaef0d56500/logo\"\n },\n {\n name: \"Staked Frax Ether\",\n symbol: \"sfrxETH\",\n decimals: 18,\n l2_token_address: \"0x04578fffc279e61b5cb0267a5f8e24b6089d40f93158fbbad2cb23b8622c9233\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/cd6fe18a-25db-4de9-758a-daf3b364ea00/logo\"\n },\n {\n name: \"Uniswap\",\n symbol: \"UNI\",\n decimals: 18,\n l2_token_address: \"0x049210ffc442172463f3177147c1aeaa36c51d152c1b0630f2364c300d4f48ee\",\n sort_order: 1,\n total_supply: 1e9,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/361b018e-bd53-4019-27c8-7cf8d9031b00/logo\"\n },\n {\n name: \"Paper\",\n symbol: \"PAPER\",\n decimals: 18,\n l2_token_address: \"0x0410466536b5ae074f7fea81e5533b8134a9fa08b3dd077dd9db08f64997d113\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/811f019a-0461-4cff-6c1e-442102863f00/logo\"\n },\n {\n name: \"StarkPepe\",\n symbol: \"xSPEPE\",\n decimals: 18,\n l2_token_address: \"0x06f15ec4b6ff0b7f7a216c4b2ccdefc96cbf114d6242292ca82971592f62273b\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n disabled: true\n },\n {\n name: \"StarkNet Token\",\n symbol: \"STRK\",\n decimals: 18,\n l2_token_address: \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\",\n sort_order: 2,\n total_supply: 1e10,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1b126320-367c-48ed-cf5a-ba7580e49600/logo\"\n },\n {\n name: \"zkLend Token\",\n symbol: \"ZEND\",\n decimals: 18,\n l2_token_address: \"0x00585c32b625999e6e5e78645ff8df7a9001cf5cf3eb6b80ccdd16cb64bd3a34\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/95515b0e-1230-4158-10f1-56888f613c00/logo\"\n },\n {\n name: \"Ekubo Protocol\",\n symbol: \"EKUBO\",\n decimals: 18,\n l2_token_address: \"0x075afe6402ad5a5c20dd25e10ec3b3986acaa647b77e4ae24b0cbc9a54a27a87\",\n sort_order: 1,\n total_supply: 1e7,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/634d9c36-2f0b-4781-93e6-72d701b5af00/logo\"\n },\n {\n name: \"SOCKS\",\n symbol: \"SOCKS\",\n decimals: 18,\n l2_token_address: \"0x023ed2ba4fb5709302c5dfd739fa7613359042f143286c115b6c7f7dc2601015\",\n sort_order: 1,\n total_supply: 1e11,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/2db5a2a6-c98e-4b80-35e0-31b489132100/logo\"\n },\n {\n name: \"Nostra\",\n symbol: \"NSTR\",\n decimals: 18,\n l2_token_address: \"0x00c530f2c0aa4c16a0806365b0898499fba372e5df7a7172dc6fe9ba777e8007\",\n sort_order: 1,\n total_supply: 1e8,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/a45c2224-17a7-4269-ea7e-3924e9755800/logo\"\n },\n {\n name: \"Carmine\",\n symbol: \"CRM\",\n decimals: 18,\n l2_token_address: \"0x51c4b1fe3bf6774b87ad0b15ef5d1472759076e42944fff9b9f641ff13e5bbe\",\n sort_order: 1,\n total_supply: 1e8,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6ab817f1-8075-4a94-6e14-f112f1f89d00/logo\"\n },\n {\n name: \"Cash\",\n symbol: \"CASH\",\n decimals: 18,\n l2_token_address: \"0x498edfaf50ca5855666a700c25dd629d577eb9afccdf3b5977aec79aee55ada\",\n sort_order: 3,\n total_supply: null,\n hidden: false,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bd6d156-f509-4b51-5dfc-3ee566143600/logo\"\n },\n {\n name: \"Nums\",\n symbol: \"NUMS\",\n decimals: 18,\n l2_token_address: \"0xe5f10eddc01699dc899a30dbc3c9858148fa4aa0a47c0ffd85f887ffc4653e\",\n sort_order: 1,\n total_supply: 1,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/90868d05-cb75-4c42-278c-5a540db2cf00/logo\"\n },\n {\n name: \"Flip\",\n symbol: \"FLIP\",\n decimals: 18,\n l2_token_address: \"0x01bfe97d729138fc7c2d93c77d6d1d8a24708d5060608017d9b384adf38f04c7\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/275f0fa8-a691-471c-ace6-0eb0315dde00/logo\"\n },\n {\n name: \"Eternum Stone\",\n symbol: \"STONE\",\n decimals: 18,\n l2_token_address: \"0x439a1c010e3e1bb2d43d43411000893c0042bd88f6c701611a0ea914d426da4\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/932e7f83-a4c2-40f0-3048-35af3b194100/logo\"\n },\n {\n name: \"Eternum Coal\",\n symbol: \"COAL\",\n decimals: 18,\n l2_token_address: \"0xce635e3f241b0ae78c46a929d84a9101910188f9c4024eaa7559556503c31a\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/cf2ee180-06bf-4443-e3aa-724d7c28e800/logo\"\n },\n {\n name: \"Eternum Wood\",\n symbol: \"WOOD\",\n decimals: 18,\n l2_token_address: \"0x40d8907cec0f7ae9c364dfb12485a1314d84c129bf1898d2f3d4b7fcc7d44f4\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1db5f954-c1ef-447e-9f8f-05bd9f3b2b00/logo\"\n },\n {\n name: \"Eternum Copper\",\n symbol: \"COPPER\",\n decimals: 18,\n l2_token_address: \"0x66ed5c928ee027a9419ace1cbea8389885161db5572a7c5c4fef2310e9bf494\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bbcdcc9-6146-404d-9501-92a664cf3100/logo\"\n },\n {\n name: \"Eternum Ironwood\",\n symbol: \"IRONWOOD\",\n decimals: 18,\n l2_token_address: \"0x1720cf6318bff45e62acc588680ae3cd4d5f8465b1d52cb710533c9299b031a\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/5af7c03b-e4ae-4aee-eba4-a4e2160a1d00/logo\"\n },\n {\n name: \"Eternum Obsidian\",\n symbol: \"OBSIDIAN\",\n decimals: 18,\n l2_token_address: \"0x3b6448d09dcd023507376402686261f5d6739455fa02f804907b066e488da66\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/8be9bc66-486b-4181-6804-725a1db8ad00/logo\"\n },\n {\n name: \"Eternum Gold\",\n symbol: \"GOLD\",\n decimals: 18,\n l2_token_address: \"0xdff9dca192609c4e86ab3be22c7ec1e968876c992d21986f3c542be97fa2f\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/fb9e90f7-3c2f-4c64-7e43-c3f694f35e00/logo\"\n },\n {\n name: \"Eternum Silver\",\n symbol: \"SILVER\",\n decimals: 18,\n l2_token_address: \"0x6fe21d2d4a8a05bdb70f09c9250af9870020d5dcc35f410b4a39d6605c3e353\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e443afeb-850b-46a0-a7ba-a473306d6b00/logo\"\n },\n {\n name: \"Eternum Mithral\",\n symbol: \"MITHRAL\",\n decimals: 18,\n l2_token_address: \"0x67ba235c569c23877064b2ac6ebd4d79f32d3c00f5fab8e28a3b5700b957f6\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/33dc517f-8a66-45eb-f2c5-de5388e47500/logo\"\n },\n {\n name: \"Eternum Alchemical Silver\",\n symbol: \"ALCHEMICALSILVER\",\n decimals: 18,\n l2_token_address: \"0x3956a5301e99522038a2e7dcb9c2a89bf087ffa79310ee0a508b5538efd8ddd\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/3d2e0fd8-4af8-49a0-4bdb-691a4d6ef800/logo\"\n },\n {\n name: \"Eternum Cold Iron\",\n symbol: \"COLDIRON\",\n decimals: 18,\n l2_token_address: \"0x555d713e59d4ff96b7960447e9bc9e79bfdeab5b0eea74e3df81bce61cfbc77\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/878c0d8a-8e2c-4281-0896-9cbbb2ef9400/logo\"\n },\n {\n name: \"Eternum Deep Crystal\",\n symbol: \"DEEPCRYSTAL\",\n decimals: 18,\n l2_token_address: \"0x1d655ac834d38df7921074fc1588411e202b1af83307cbd996983aff52db3a8\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1c2c954f-448c-476b-a4a6-19b52efe3e00/logo\"\n },\n {\n name: \"Eternum Ruby\",\n symbol: \"RUBY\",\n decimals: 18,\n l2_token_address: \"0x3d9b66720959d0e7687b898292c10e62e78626f2dba5e1909961a2ce3f86612\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6a45b34d-3bfe-4994-45b0-f2bee8abac00/logo\"\n },\n {\n name: \"Eternum Diamonds\",\n symbol: \"DIAMONDS\",\n decimals: 18,\n l2_token_address: \"0xe03ea8ae385f64754820af5c01c36abf1b8130dd6797d3fd9d430e4114e876\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/b1fa609d-8799-4754-cdea-ab69514ca700/logo\"\n },\n {\n name: \"Eternum Hartwood\",\n symbol: \"HARTWOOD\",\n decimals: 18,\n l2_token_address: \"0x5620aa7170cd66dbcbc37d03087bfe4633ffef91d3e4d97b501de906004f79b\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/27e37e85-91bd-4ee1-0552-1e0795077400/logo\"\n },\n {\n name: \"Eternum Ignium\",\n symbol: \"IGNIUM\",\n decimals: 18,\n l2_token_address: \"0x625c1f789b03ebebc7a9322366f38ebad1f693b84b2abd8cb8f5b2748b0cdd5\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/58591e20-24fb-4353-417a-81d877a5a200/logo\"\n },\n {\n name: \"Eternum Twilight Quartz\",\n symbol: \"TWILIGHTQUARTZ\",\n decimals: 18,\n l2_token_address: \"0x35e24c02409c3cfe8d5646399a62c4d102bb782938d5f5180e92c9c62d3faf7\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/2f8cb892-e82a-4af3-bd09-316061faec00/logo\"\n },\n {\n name: \"Eternum True Ice\",\n symbol: \"TRUEICE\",\n decimals: 18,\n l2_token_address: \"0x4485f5a6e16562e1c761cd348e63256d00389e3ddf4f5d98afe7ab44c57c481\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/fe4bfc17-6553-4dc5-58d2-f452b4aa8a00/logo\"\n },\n {\n name: \"Eternum Adamantine\",\n symbol: \"ADAMANTINE\",\n decimals: 18,\n l2_token_address: \"0x367f838f85a2f5e1580d6f011e4476f581083314cff8721ba3dda9706076eed\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/13bd026b-3612-480e-0119-04cf4c505a00/logo\"\n },\n {\n name: \"Eternum Sapphire\",\n symbol: \"SAPPHIRE\",\n decimals: 18,\n l2_token_address: \"0x2f8dd022568af8f9f718aa37707a9b858529db56910633a160456838b6cbcbc\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/0ebf555f-e732-4054-f8e5-55b2ed49ba00/logo\"\n },\n {\n name: \"Eternum Ethereal Silica\",\n symbol: \"ETHEREALSILICA\",\n decimals: 18,\n l2_token_address: \"0x68b6e23cbbd58a644700f55e96c83580921e9f521b6e5175396b53ba7910e7d\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/f02a5b43-bfcf-408c-7d1b-fcfe68b02d00/logo\"\n },\n {\n name: \"Eternum Dragon Hide\",\n symbol: \"DRAGONHIDE\",\n decimals: 18,\n l2_token_address: \"0x3bf856515bece3c93f5061b7941b8645f817a0acab93c758b8c7b4bc0afa3c6\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e74955fc-5c8a-4dff-4882-a49a46a5a800/logo\"\n },\n {\n name: \"Eternum Ancient Fragment\",\n symbol: \"ANCIENTFRAGMENT\",\n decimals: 18,\n l2_token_address: \"0x0695b08ecdfdd828c2e6267da62f59e6d7543e690ef56a484df25c8566b332a5\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/9af855b7-4790-4390-9466-6bed4481ab00/logo\"\n },\n {\n name: \"Eternum Donkey\",\n symbol: \"DONKEY\",\n decimals: 18,\n l2_token_address: \"0x264be95a4a2ace20add68cb321acdccd2f9f8440ee1c7abd85da44ddab01085\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/20817378-a45e-4521-f464-10f6dd13c500/logo\"\n },\n {\n name: \"Eternum Knight\",\n symbol: \"KNIGHT\",\n decimals: 18,\n l2_token_address: \"0xac965f9e67164723c16735a9da8dbc9eb8e43b1bd0323591e87c056badf606\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/8787ed1f-af5c-4873-c01a-55f05e999a00/logo\"\n },\n {\n name: \"Eternum Crossbowman\",\n symbol: \"CROSSBOWMAN\",\n decimals: 18,\n l2_token_address: \"0x67e4ac00a241be06ba6afc11fa2715ec7da0c42c05a67ef6ecfcfeda725aaa8\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dec7f31b-4b1d-46bb-4fca-c0253cf55a00/logo\"\n },\n {\n name: \"Eternum Paladin\",\n symbol: \"PALADIN\",\n decimals: 18,\n l2_token_address: \"0x3bc86299bee061c7c8d7546ccb62b9daf9bffc653b1508facb722c6593874bc\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/7d2cd5a5-f38a-49f6-11f8-ba3b59a59e00/logo\"\n },\n {\n name: \"Eternum Wheat\",\n symbol: \"WHEAT\",\n decimals: 18,\n l2_token_address: \"0x57a3f1ee475e072ce3be41785c0e889b7295d7a0dcc22b992c5b9408dbeb280\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c338b6a8-77c4-4dd6-34f5-1af0d3fb1e00/logo\"\n },\n {\n name: \"Eternum Fish\",\n symbol: \"FISH\",\n decimals: 18,\n l2_token_address: \"0x27719173cfe10f1aa38d2aaed0a075b6077290f1e817aa3485d2b828394f4d9\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6deef27f-df40-4248-4e1b-ed1d79a3f000/logo\"\n },\n {\n name: \"Fools\",\n symbol: \"FOOLS\",\n decimals: 18,\n l2_token_address: \"0x068a7a07e08fc3e723a878223d00f669106780d5ea6665eb15d893476d47bf3b\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://assets.underware.gg/pistols/fools.svg\"\n },\n {\n name: \"Fame\",\n symbol: \"FAME\",\n decimals: 18,\n l2_token_address: \"0x02549653a4ae1ff8d04a20b8820a49cbe97486c536ec0e4c8f68aa33d80067cf\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://assets.underware.gg/pistols/fame.svg\"\n },\n {\n name: \"Survivor\",\n symbol: \"SURVIVOR\",\n decimals: 18,\n l2_token_address: \"0x42dd777885ad2c116be96d4d634abc90a26a790ffb5871e037dd5ae7d2ec86b\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/399cb277-f675-4efe-97fb-fac94a236a00/logo\"\n },\n {\n name: \"Dungeon Ticket\",\n symbol: \"TICKET\",\n decimals: 18,\n l2_token_address: \"0x035f581b050a39958b7188ab5c75daaa1f9d3571a0c032203038c898663f31f8\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"\thttps://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/f96b51e2-e978-42e2-c67a-e84159015000/logo\"\n }\n];\n\n// configs/cartridge/config.json\nvar config_default = {\n origin: \"*\",\n theme: {\n name: \"Cartridge\",\n icon: \"icon.svg\"\n },\n \"apple-app-site-association\": {\n webcredentials: {\n apps: [\n \"FAKETEAMID.com.cartridge.marketplace\",\n \"F9U4Y5YSTN.com.cartridge.marketplace\"\n ]\n }\n }\n};\n\n// src/config-loader.ts\nvar CONFIG_BASE_URL = \"https://static.cartridge.gg/presets\";\nasync function getConfigsIndex() {\n try {\n const response = await fetch(`${CONFIG_BASE_URL}/index.json`);\n if (!response.ok) {\n throw new Error(`Failed to load configs index: ${response.statusText}`);\n }\n return await response.json();\n } catch (error) {\n console.error(\"Error loading configs index:\", error);\n return { configs: [], baseUrl: CONFIG_BASE_URL };\n }\n}\nasync function getAvailableConfigs() {\n const indexData = await getConfigsIndex();\n return indexData.configs;\n}\nasync function loadConfig(configName) {\n try {\n const indexData = await getConfigsIndex();\n const baseUrl = indexData.baseUrl || CONFIG_BASE_URL;\n const prefix = `${baseUrl}/${configName}`;\n const response = await fetch(`${prefix}/config.json`);\n if (!response.ok) {\n throw new Error(\n `Failed to load config ${configName}: ${response.statusText}`\n );\n }\n const config = await response.json();\n if (config && config.theme) {\n if (config.theme.icon && !config.theme.icon.startsWith(\"http\")) {\n config.theme.icon = `${prefix}/${config.theme.icon}`;\n }\n if (config.theme.cover) {\n if (typeof config.theme.cover === \"string\") {\n if (!config.theme.cover.startsWith(\"http\")) {\n config.theme.cover = `${prefix}/${config.theme.cover}`;\n }\n } else {\n if (config.theme.cover.light && !config.theme.cover.light.startsWith(\"http\")) {\n config.theme.cover.light = `${prefix}/${config.theme.cover.light}`;\n }\n if (config.theme.cover.dark && !config.theme.cover.dark.startsWith(\"http\")) {\n config.theme.cover.dark = `${prefix}/${config.theme.cover.dark}`;\n }\n }\n }\n const prefixOptimizedImageSet = (imageSet) => {\n if (!imageSet) return;\n for (const format in imageSet) {\n if (imageSet[format]) {\n for (const size in imageSet[format]) {\n if (imageSet[format][size] && !imageSet[format][size].startsWith(\"http\")) {\n imageSet[format][size] = `${prefix}/${imageSet[format][size]}`;\n }\n }\n }\n }\n };\n if (config.theme.optimizedIcon) {\n prefixOptimizedImageSet(config.theme.optimizedIcon);\n }\n if (config.theme.optimizedCover) {\n if (typeof config.theme.optimizedCover === \"string\") {\n if (!config.theme.optimizedCover.startsWith(\"http\")) {\n config.theme.optimizedCover = `${prefix}/${config.theme.optimizedCover}`;\n }\n } else if (config.theme.optimizedCover.light || config.theme.optimizedCover.dark) {\n const themeVal = config.theme.optimizedCover;\n if (themeVal.light) {\n prefixOptimizedImageSet(themeVal.light);\n }\n if (themeVal.dark) {\n prefixOptimizedImageSet(themeVal.dark);\n }\n } else {\n prefixOptimizedImageSet(config.theme.optimizedCover);\n }\n }\n }\n return config;\n } catch (error) {\n console.error(`Error loading config ${configName}:`, error);\n return null;\n }\n}\nasync function loadAllConfigs() {\n const indexData = await getConfigsIndex();\n const availableConfigs = indexData.configs;\n const baseUrl = indexData.baseUrl || CONFIG_BASE_URL;\n const configsMap = {};\n await Promise.all(\n availableConfigs.map(async (configName) => {\n try {\n const response = await fetch(`${baseUrl}/${configName}/config.json`);\n if (response.ok) {\n const config = await response.json();\n configsMap[configName] = config;\n }\n } catch (error) {\n console.error(`Error loading config ${configName}:`, error);\n }\n })\n );\n return configsMap;\n}\n\n// src/index.ts\nconfig_default.theme.icon = \"https://static.cartridge.gg/presets/cartridge/icon.svg\";\nvar erc20Metadata = metadata;\nvar defaultTheme = config_default.theme;\nexport {\n defaultTheme,\n erc20Metadata,\n getAvailableConfigs,\n getConfigsIndex,\n loadAllConfigs,\n loadConfig\n};\n//# sourceMappingURL=index.js.map"],"names":["StandardConnect","StandardDisconnect","StandardEvents","version","getVersion","BaseError","shortMessage","options","details","docsPath","docs","message","x","fn","walk","err","isBytes","a","anumber","n","abytes","b","lengths","aexists","instance","checkFinished","aoutput","out","min","u32","arr","clean","arrays","i","isLE","byteSwap","word","byteSwap32","swap32IfBE","u","utf8ToBytes","str","toBytes","data","Hash","createHasher","hashCons","hashC","msg","tmp","U32_MASK64","_32n","fromBig","le","split","lst","len","Ah","Al","h","l","rotlSH","s","rotlSL","rotlBH","rotlBL","_0n","_1n","_2n","_7n","_256n","_0x71n","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","round","R","y","t","j","IOTAS","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","rotlL","keccakP","rounds","B","idx1","idx0","B0","B1","Th","Tl","curH","curL","shift","PI","Keccak","blockLen","suffix","outputLen","enableXOF","state","pos","take","bufferOut","bytes","to","gen","keccak_256","bigIntSuffix","stringify","value","replacer","space","key","assert","strict","InvalidHexTypeError","InvalidHexValueError","validate","Errors.BaseError","Json.stringify","STARKNET_CHAIN_PREFIX","StarknetChainError","WELL_KNOWN_STARKNET_CHAINS","isStarknetChain","chain","parts","Hex.validate","formatStarknetChainId","chainId","StarknetWalletApi","__accessCheck","obj","member","__privateGet","getter","__privateAdd","__privateSet","setter","__privateMethod","method","_listeners","_account","_connect","_disconnect","_on","_emit","emit_fn","_off","off_fn","_disconnected","disconnected_fn","_onAccountsChanged","onAccountsChanged_fn","_onNetworkChanged","onNetworkChanged_fn","_updateAccount","updateAccount_fn","_request","request_fn","_getStarknetChain","getStarknetChain_fn","StarknetInjectedWallet","injected","silent","accounts","event","listener","args","existingListener","account","ControllerAccount","WalletAccount","provider","rpcUrl","address","keychain","modal","calls","toArray","resolve","reject","sessionExecute","ResponseCodes","errorDisplayMode","error","requiresUI","toast","index","isHandled","dismissFn","manualExecute","typedData","sessionSign","manualSign","MessageType","Resolution","ErrorCode","NativeErrorName","NativeEventType","createDestructor","localName","log","callbacks","destroyed","callback","createLogger","debug","DEFAULT_PORT_BY_PROTOCOL","URL_REGEX","opaqueOriginSchemes","getOriginFromSrc","src","scheme","location","regexResult","protocol","hostname","port","portSuffix","serializeError","name","stack","deserializeError","deserializedError","connectCallReceiver","info","serializedMethods","local","remote","originForSending","originForReceiving","handleMessageEvent","callMessage","methodName","id","createPromiseHandler","resolution","returnValue","errorReplyMessage","generateId","KEY_PATH_DELIMITER","keyPathToSegments","keyPath","segmentsToKeyPath","segments","createKeyPath","prefix","setAtKeyPath","subject","prevSubject","idx","serializeMethods","methods","flattenedMethods","deserializeMethods","connectCallSender","callSender","methodKeyPaths","destroyConnection","createMethodProxy","iframeRemoved","replyMessage","api","handleAckMessageFactory","childOrigin","destructor","destroy","onDestroy","destroyCallReceiver","receiverMethodNames","receiverMethodName","destroyCallSender","handleSynMessageFactory","synAckMessage","CHECK_IFRAME_IN_DOC_INTERVAL","monitorIframeRemoval","iframe","checkIframeInDocIntervalId","startConnectionTimeout","timeout","timeoutId","validateIframeHasSrcOrSrcDoc","connectToChild","handleSynMessage","handleAckMessage","stopConnectionTimeout","handleMessage","LOCALHOST_HOSTNAMES","isLocalhostHostname","normalized","validateKeychainIframeUrl","url","buildIframeAllowList","allowFeatures","IFrame","onClose","onConnect","docHead","meta","container","e","_origin","observer","existingController","defineProperties","target","values","types","HEX","result","keys","k","makeError","code","check","assertArgument","accum","form","_getBytes","copy","offset","getBytes","HexCharacters","hexlify","v","locked","_keccak256","__keccak256","keccak256","_data","func","BN_0","BN_36","getChecksumAddress","chars","expanded","hashed","ibanLookup","safeDigits","ibanChecksum","c","block","checksum","Base36","fromBase36","getAddress","ArgentWallet","available","wallet","sig","_tokenAddress","_txHash","_timeoutMs","requestProviders","handler","createStore","listeners","providerDetails","request","providerDetail","unwatch","rdns","emitImmediately","PLATFORMS","constants","chainIdToPlatform","hex","num","platform","EthereumWalletBase","isMobile","ethereum","transaction","txn","tokenAddress","balance","txHash","timeoutMs","startTime","pollInterval","receipt","BaseWallet","MetaMaskWallet","isArrayOf","isString","item","afn","input","astr","label","aArr","astrArr","anumArr","wrap","encode","decode","alphabet","letters","lettersA","indexes","digits","letter","join","separator","from","padding","bits","chr","end","normalize","convertRadix","res","d","dlen","carry","done","digit","fromCarry","digitBase","div","rounded","gcd","radix2carry","powers","convertRadix2","max","mask","pow","radix","_256","radix2","revPadding","hasBase64Builtin","base64","genBase58","abc","base58","utf8","hasHexBuiltin","hexBuiltin","equalBytes","createView","isPlainObject","isNum","lengthCoder","isCoder","w","byteLen","Path","r","Bitset","bs","bsLen","chunk","allowRewrite","invert","FULL_MASK","BITS","left","lastMask","m","cur","first","lastPos","last","start","objFn","field","fieldFn","path","objPath","_Reader","opts","parent","parentOffset","baseHex","notRead","formatted","length","peek","slice","needle","_Writer","buffers","sum","buf","pad","ptr","p","swapEndianness","checkBounds","signed","signBit","_wrap","inner","isBaseCoder","elm","dict","numberBigint","tsEnum","decimal","precision","decimalMask","sep","int","frac","neg","intS","fracS","fracLen","match","reverse","coder","coders","bigint","size","sized","bLen","U64LE","view","intView","validateSigned","maxVal","validateUnsigned","U32LE","U8","bool","createBytes","_length","_isb","tPos","string","apply","base","innerValue","optional","flag","def","constant","_w","_r","sizeof","fields","f","struct","array","startPos","map","variants","variantNames","variant","tag","TAG","dataType","ZeroPad","_","padLength","blockSize","padRight","padFn","_padFn","padBytes","PRECISION","Decimal","P.coders","shortVec","P.wrap","rustString","P.string","P.padRight","P.U32LE","b58","P.bytes","pubKey","Message","P.struct","P.U8","P.array","validateAddress","keyParams","req","unsigned","total","TransactionRaw","Transaction","signatures","add","sign","write","acc","_keys","requiredSignatures","readSigned","readUnsigned","sigs","registry","defineProgram","tagType","P.map","mainCoder","P.tag","instr","tl","program","SYS_RECENT_BLOCKHASHES","SYS_RENT","SYS_PROGRAM","sys","P.U64LE","o","assertType","_value","authorityType","tokenName","TOKEN_PROGRAM","P.optional","P.bool","ASSOCIATED_TOKEN_PROGRAM","P.constant","U32LEBOOL","createTxComplex","instructions","blockhash","ALPHABET","BASE_MAP","xc","BASE","LEADER","FACTOR","iFACTOR","source","zeroes","pbegin","pend","it1","it2","decodeUnsafe","psz","b256","charCode","it3","it4","vch","buffer","basex","decoded","sol.Transaction","tx","_options","txHex","sol.createTxComplex","PhantomWallet","response","encodedMessage","serailized_txn","_chainId","PhantomEVMWallet","RabbyWallet","BraavosWallet","WalletBridge","metamask","phantom","phantomEvm","argent","braavos","rabby","type","identifier","adapter","operation","responseType","errorMessage","walletType","checkSummedAddress","STARTERPACK_PLAY_CALLBACK_DELAY_MS","KeychainIFrame","policies","slot","namespace","tokens","preset","shouldOverridePresetPolicies","ref","refGroup","needsSessionCreation","username","onSessionCreated","onStarterpackPlay","encryptedBlob","propagateSessionErrors","iframeOptions","onStarterpackPlayHandler","_url","KEYCHAIN_URL","walletBridge","validateRedirectUrl","redirectUrl","isCurrentHostLocal","isRedirectLocal","ControllerProvider","BaseProvider","chains","defaultChainId","urlParams","standaloneParam","lastUsedConnector","needsCleanup","cleanHash","hashParams","newUrl","NotReadyToConnect","connectOptions","headless","HeadlessAuthenticationError","effectiveOptions","currentChain","_chain","tab","at","origin","_policy","availableChains","shortString","onPurchaseComplete","starterpackOptions","sanitizedOptions","currentChainId","controller","disconnect","keychainUrl","validation","parseChainId","isReturningFromRedirect","previousAddress","interval","cache","lookup","API_URL","lookupUsernames","usernames","uncachedUsernames","entry","lookupAddresses","addresses","uncachedAddresses","addr","parsePolicies","contract","TOAST_CONTAINER_ID","DEFAULT_DURATION","DEFAULT_POSITION","TOAST_MESSAGE_TYPE","isInIframe","getTargetDocument","getToastContainer","targetDoc","position","removeToast","injectStyles","style","getCommonStyles","CloseButton","translucent","button","svg","injectErrorStyles","createErrorToast","labelBar","labelContainer","icon","content","closeButtonContainer","closeButton","injectTransactionStyles","createTransactionToast","toastContent","iconContainer","status","activityFeedContainer","activityIcon","activityLabelContainer","activityLabel","collapsedIcon","injectNetworkSwitchStyles","createNetworkSwitchToast","sanitizeImageSrc","injectAchievementStyles","createAchievementToast","imageContentContainer","imageContainer","getAchievementIcon","title","subtitle","xpSectionContainer","xpSection","xpIcon","getXPIcon","xpAmount","isDraft","isMainnet","injectMarketplaceStyles","createMarketplaceToast","image","actionText","itemName","injectQuestStyles","createQuestToast","getQuestIcon","ProgressBar","borderRadius","isInfiniteDuration","inside","addProgressBarToToast","duration","onComplete","progressBar","createToastElement","injectVariantStyles","showToastOnDocument","toastElement","dismiss","messageListenerSetup","setupMessageListener","metadata","config_default","CONFIG_BASE_URL","getConfigsIndex","getAvailableConfigs","loadConfig","configName","config","prefixOptimizedImageSet","imageSet","format","themeVal","loadAllConfigs","indexData","availableConfigs","baseUrl","configsMap","erc20Metadata","defaultTheme"],"mappings":";;;AACO,MAAMA,KAAkB,oBCAlBC,KAAqB,uBCArBC,KAAiB,mBCAjBC,KAAU;ACKhB,SAASC,KAAa;AACzB,SAAOD;AACX;ACEO,MAAME,WAAkB,MAAM;AAAA,EACjC,YAAYC,GAAcC,IAAU,IAAI;AACpC,UAAMC,KAAW,MAAM;AACnB,UAAID,EAAQ,iBAAiBF,IAAW;AACpC,YAAIE,EAAQ,MAAM;AACd,iBAAOA,EAAQ,MAAM;AACzB,YAAIA,EAAQ,MAAM;AACd,iBAAOA,EAAQ,MAAM;AAAA,MACzC;AACY,aAAIA,EAAQ,OAAO,UACRA,EAAQ,MAAM,UAClBA,EAAQ;AAAA,IAC3B,GAAY,GACEE,IACEF,EAAQ,iBAAiBF,MAClBE,EAAQ,MAAM,YAAYA,EAAQ,UAI3CG,IAAO,mBAAiBD,KAAY,EAAE,IACtCE,IAAU;AAAA,MACZL,KAAgB;AAAA,MAChB,GAAIC,EAAQ,eAAe,CAAC,IAAI,GAAGA,EAAQ,YAAY,IAAI;MAC3D,GAAIC,KAAWC,IACT;AAAA,QACE;AAAA,QACAD,IAAU,YAAYA,CAAO,KAAK;AAAA,QAClCC,IAAW,QAAQC,CAAI,KAAK;AAAA,MAChD,IACkB;IAClB,EACa,OAAO,CAACE,MAAM,OAAOA,KAAM,QAAQ,EACnC,KAAK;AAAA,CAAI;AACd,UAAMD,GAASJ,EAAQ,QAAQ,EAAE,OAAOA,EAAQ,MAAO,IAAG,MAAS,GACnE,OAAO,eAAe,MAAM,WAAW;AAAA,MACnC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS,GACD,OAAO,eAAe,MAAM,QAAQ;AAAA,MAChC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS,GACD,OAAO,eAAe,MAAM,YAAY;AAAA,MACpC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS,GACD,OAAO,eAAe,MAAM,gBAAgB;AAAA,MACxC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS,GACD,OAAO,eAAe,MAAM,SAAS;AAAA,MACjC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS,GACD,OAAO,eAAe,MAAM,QAAQ;AAAA,MAChC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS,GACD,OAAO,eAAe,MAAM,WAAW;AAAA,MACnC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO,MAAMH,IAAY;AAAA,IACrC,CAAS,GACD,KAAK,QAAQG,EAAQ,OACrB,KAAK,UAAUC,GACf,KAAK,OAAOE,GACZ,KAAK,WAAWD,GAChB,KAAK,eAAeH;AAAA,EAC5B;AAAA,EACI,KAAKO,GAAI;AACL,WAAOC,GAAK,MAAMD,CAAE;AAAA,EAC5B;AACA;AAEA,SAASC,GAAKC,GAAKF,GAAI;AACnB,SAAIA,IAAKE,CAAG,IACDA,IACPA,KAAO,OAAOA,KAAQ,YAAY,WAAWA,KAAOA,EAAI,QACjDD,GAAKC,EAAI,OAAOF,CAAE,IACtBA,IAAK,OAAOE;AACvB;ACnGA;AASO,SAASC,GAAQC,GAAG;AAChB,SAAAA,aAAa,cAAe,YAAY,OAAOA,CAAC,KAAKA,EAAE,YAAY,SAAS;AACvF;AAEO,SAASC,GAAQC,GAAG;AACvB,MAAI,CAAC,OAAO,cAAcA,CAAC,KAAKA,IAAI;AAC1B,UAAA,IAAI,MAAM,oCAAoCA,CAAC;AAC7D;AAEgB,SAAAC,GAAOC,MAAMC,GAAS;AAC9B,MAAA,CAACN,GAAQK,CAAC;AACJ,UAAA,IAAI,MAAM,qBAAqB;AACzC,MAAIC,EAAQ,SAAS,KAAK,CAACA,EAAQ,SAASD,EAAE,MAAM;AAChD,UAAM,IAAI,MAAM,mCAAmCC,IAAU,kBAAkBD,EAAE,MAAM;AAC/F;AASgB,SAAAE,GAAQC,GAAUC,IAAgB,IAAM;AACpD,MAAID,EAAS;AACH,UAAA,IAAI,MAAM,kCAAkC;AACtD,MAAIC,KAAiBD,EAAS;AACpB,UAAA,IAAI,MAAM,uCAAuC;AAC/D;AAEgB,SAAAE,GAAQC,GAAKH,GAAU;AACnCJ,EAAAA,GAAOO,CAAG;AACV,QAAMC,IAAMJ,EAAS;AACjB,MAAAG,EAAI,SAASC;AACP,UAAA,IAAI,MAAM,2DAA2DA,CAAG;AAEtF;AAMO,SAASC,GAAIC,GAAK;AACd,SAAA,IAAI,YAAYA,EAAI,QAAQA,EAAI,YAAY,KAAK,MAAMA,EAAI,aAAa,CAAC,CAAC;AACrF;AAEO,SAASC,MAASC,GAAQ;AAC7B,WAASC,IAAI,GAAGA,IAAID,EAAO,QAAQC;AACxB,IAAAD,EAAAC,CAAC,EAAE,KAAK,CAAC;AAExB;AAcO,MAAMC,KAA8B,IAAI,WAAW,IAAI,YAAY,CAAC,SAAU,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM;AAEhG,SAASC,GAASC,GAAM;AACjB,SAAAA,KAAQ,KAAM,aAClBA,KAAQ,IAAK,WACbA,MAAS,IAAK,QACdA,MAAS,KAAM;AACzB;AAQO,SAASC,GAAWP,GAAK;AAC5B,WAASG,IAAI,GAAGA,IAAIH,EAAI,QAAQG;AAC5B,IAAAH,EAAIG,CAAC,IAAIE,GAASL,EAAIG,CAAC,CAAC;AAErB,SAAAH;AACX;AACO,MAAMQ,KAAaJ,KACpB,CAACK,MAAMA,IACPF;AAmFC,SAASG,GAAYC,GAAK;AAC7B,MAAI,OAAOA,KAAQ;AACT,UAAA,IAAI,MAAM,iBAAiB;AACrC,SAAO,IAAI,WAAW,IAAI,YAAc,EAAA,OAAOA,CAAG,CAAC;AACvD;AAaO,SAASC,GAAQC,GAAM;AAC1B,SAAI,OAAOA,KAAS,aAChBA,IAAOH,GAAYG,CAAI,IAC3BvB,GAAOuB,CAAI,GACJA;AACX;AAkCO,MAAMC,GAAK;AAClB;AAEO,SAASC,GAAaC,GAAU;AAC7B,QAAAC,IAAQ,CAACC,MAAQF,EAAS,EAAE,OAAOJ,GAAQM,CAAG,CAAC,EAAE,OAAO,GACxDC,IAAMH,EAAS;AACrB,SAAAC,EAAM,YAAYE,EAAI,WACtBF,EAAM,WAAWE,EAAI,UACfF,EAAA,SAAS,MAAMD,EAAS,GACvBC;AACX;ACpPA,MAAMG,KAA6B,uBAAO,KAAK,KAAK,CAAC,GAC/CC,KAAuB,uBAAO,EAAE;AACtC,SAASC,GAAQjC,GAAGkC,IAAK,IAAO;AAC5B,SAAIA,IACO,EAAE,GAAG,OAAOlC,IAAI+B,EAAU,GAAG,GAAG,OAAQ/B,KAAKgC,KAAQD,EAAU,EAAG,IACtE,EAAE,GAAG,OAAQ/B,KAAKgC,KAAQD,EAAU,IAAI,GAAG,GAAG,OAAO/B,IAAI+B,EAAU,IAAI,EAAG;AACrF;AACA,SAASI,GAAMC,GAAKF,IAAK,IAAO;AAC5B,QAAMG,IAAMD,EAAI;AAChB,MAAIE,IAAK,IAAI,YAAYD,CAAG,GACxBE,IAAK,IAAI,YAAYF,CAAG;AAC5B,WAASvB,IAAI,GAAGA,IAAIuB,GAAKvB,KAAK;AAC1B,UAAM,EAAE,GAAA0B,GAAG,GAAAC,EAAG,IAAGR,GAAQG,EAAItB,CAAC,GAAGoB,CAAE;AACnC,KAACI,EAAGxB,CAAC,GAAGyB,EAAGzB,CAAC,CAAC,IAAI,CAAC0B,GAAGC,CAAC;AAAA,EAC9B;AACI,SAAO,CAACH,GAAIC,CAAE;AAClB;AAeA,MAAMG,KAAS,CAACF,GAAGC,GAAGE,MAAOH,KAAKG,IAAMF,MAAO,KAAKE,GAC9CC,KAAS,CAACJ,GAAGC,GAAGE,MAAOF,KAAKE,IAAMH,MAAO,KAAKG,GAE9CE,KAAS,CAACL,GAAGC,GAAGE,MAAOF,KAAME,IAAI,KAAQH,MAAO,KAAKG,GACrDG,KAAS,CAACN,GAAGC,GAAGE,MAAOH,KAAMG,IAAI,KAAQF,MAAO,KAAKE,GCvBrDI,KAAM,OAAO,CAAC,GACdC,KAAM,OAAO,CAAC,GACdC,KAAM,OAAO,CAAC,GACdC,KAAM,OAAO,CAAC,GACdC,KAAQ,OAAO,GAAG,GAClBC,KAAS,OAAO,GAAI,GACpBC,KAAU,CAAE,GACZC,KAAY,CAAE,GACdC,KAAa,CAAE;AACrB,SAASC,IAAQ,GAAGC,IAAIT,IAAKvD,IAAI,GAAGiE,IAAI,GAAGF,IAAQ,IAAIA,KAAS;AAE5D,GAAC/D,GAAGiE,CAAC,IAAI,CAACA,IAAI,IAAIjE,IAAI,IAAIiE,KAAK,CAAC,GAChCL,GAAQ,KAAK,KAAK,IAAIK,IAAIjE,EAAE,GAE5B6D,GAAU,MAAQE,IAAQ,MAAMA,IAAQ,KAAM,IAAK,EAAE;AAErD,MAAIG,IAAIZ;AACR,WAASa,IAAI,GAAGA,IAAI,GAAGA;AACnB,IAAAH,KAAMA,KAAKT,MAASS,KAAKP,MAAOE,MAAWD,IACvCM,IAAIR,OACJU,KAAKX,OAASA,MAAuB,uBAAOY,CAAC,KAAKZ;AAE1D,EAAAO,GAAW,KAAKI,CAAC;AACrB;AACA,MAAME,KAAQ1B,GAAMoB,IAAY,EAAI,GAC9BO,KAAcD,GAAM,CAAC,GACrBE,KAAcF,GAAM,CAAC,GAErBG,KAAQ,CAACxB,GAAGC,GAAGE,MAAOA,IAAI,KAAKE,GAAOL,GAAGC,GAAGE,CAAC,IAAID,GAAOF,GAAGC,GAAGE,CAAC,GAC/DsB,KAAQ,CAACzB,GAAGC,GAAGE,MAAOA,IAAI,KAAKG,GAAON,GAAGC,GAAGE,CAAC,IAAIC,GAAOJ,GAAGC,GAAGE,CAAC;AAE9D,SAASuB,GAAQvB,GAAGwB,IAAS,IAAI;AACpC,QAAMC,IAAI,IAAI,YAAY,EAAK;AAE/B,WAASZ,IAAQ,KAAKW,GAAQX,IAAQ,IAAIA,KAAS;AAE/C,aAAS/D,IAAI,GAAGA,IAAI,IAAIA;AACpB,MAAA2E,EAAE3E,CAAC,IAAIkD,EAAElD,CAAC,IAAIkD,EAAElD,IAAI,EAAE,IAAIkD,EAAElD,IAAI,EAAE,IAAIkD,EAAElD,IAAI,EAAE,IAAIkD,EAAElD,IAAI,EAAE;AAC9D,aAASA,IAAI,GAAGA,IAAI,IAAIA,KAAK,GAAG;AAC5B,YAAM4E,KAAQ5E,IAAI,KAAK,IACjB6E,KAAQ7E,IAAI,KAAK,IACjB8E,IAAKH,EAAEE,CAAI,GACXE,IAAKJ,EAAEE,IAAO,CAAC,GACfG,IAAKT,GAAMO,GAAIC,GAAI,CAAC,IAAIJ,EAAEC,CAAI,GAC9BK,IAAKT,GAAMM,GAAIC,GAAI,CAAC,IAAIJ,EAAEC,IAAO,CAAC;AACxC,eAASX,IAAI,GAAGA,IAAI,IAAIA,KAAK;AACzB,QAAAf,EAAElD,IAAIiE,CAAC,KAAKe,GACZ9B,EAAElD,IAAIiE,IAAI,CAAC,KAAKgB;AAAA,IAEhC;AAEQ,QAAIC,IAAOhC,EAAE,CAAC,GACViC,IAAOjC,EAAE,CAAC;AACd,aAASgB,IAAI,GAAGA,IAAI,IAAIA,KAAK;AACzB,YAAMkB,IAAQvB,GAAUK,CAAC,GACnBc,IAAKT,GAAMW,GAAMC,GAAMC,CAAK,GAC5BH,IAAKT,GAAMU,GAAMC,GAAMC,CAAK,GAC5BC,IAAKzB,GAAQM,CAAC;AACpB,MAAAgB,IAAOhC,EAAEmC,CAAE,GACXF,IAAOjC,EAAEmC,IAAK,CAAC,GACfnC,EAAEmC,CAAE,IAAIL,GACR9B,EAAEmC,IAAK,CAAC,IAAIJ;AAAA,IACxB;AAEQ,aAAShB,IAAI,GAAGA,IAAI,IAAIA,KAAK,IAAI;AAC7B,eAASjE,IAAI,GAAGA,IAAI,IAAIA;AACpB,QAAA2E,EAAE3E,CAAC,IAAIkD,EAAEe,IAAIjE,CAAC;AAClB,eAASA,IAAI,GAAGA,IAAI,IAAIA;AACpB,QAAAkD,EAAEe,IAAIjE,CAAC,KAAK,CAAC2E,GAAG3E,IAAI,KAAK,EAAE,IAAI2E,GAAG3E,IAAI,KAAK,EAAE;AAAA,IAC7D;AAEQ,IAAAkD,EAAE,CAAC,KAAKmB,GAAYN,CAAK,GACzBb,EAAE,CAAC,KAAKoB,GAAYP,CAAK;AAAA,EACjC;AACI,EAAA5C,GAAMwD,CAAC;AACX;AAEO,MAAMW,WAAetD,GAAK;AAAA;AAAA,EAE7B,YAAYuD,GAAUC,GAAQC,GAAWC,IAAY,IAAOhB,IAAS,IAAI;AAgBrE,QAfA,MAAO,GACP,KAAK,MAAM,GACX,KAAK,SAAS,GACd,KAAK,WAAW,IAChB,KAAK,YAAY,IACjB,KAAK,YAAY,IACjB,KAAK,WAAWa,GAChB,KAAK,SAASC,GACd,KAAK,YAAYC,GACjB,KAAK,YAAYC,GACjB,KAAK,SAAShB,GAEdpE,GAAQmF,CAAS,GAGb,EAAE,IAAIF,KAAYA,IAAW;AAC7B,YAAM,IAAI,MAAM,yCAAyC;AAC7D,SAAK,QAAQ,IAAI,WAAW,GAAG,GAC/B,KAAK,UAAUtE,GAAI,KAAK,KAAK;AAAA,EACrC;AAAA,EACI,QAAQ;AACJ,WAAO,KAAK,WAAY;AAAA,EAChC;AAAA,EACI,SAAS;AACL,IAAAS,GAAW,KAAK,OAAO,GACvB+C,GAAQ,KAAK,SAAS,KAAK,MAAM,GACjC/C,GAAW,KAAK,OAAO,GACvB,KAAK,SAAS,GACd,KAAK,MAAM;AAAA,EACnB;AAAA,EACI,OAAOK,GAAM;AACT,IAAApB,GAAQ,IAAI,GACZoB,IAAOD,GAAQC,CAAI,GACnBvB,GAAOuB,CAAI;AACX,UAAM,EAAE,UAAAwD,GAAU,OAAAI,EAAK,IAAK,MACtB/C,IAAMb,EAAK;AACjB,aAAS6D,IAAM,GAAGA,IAAMhD,KAAM;AAC1B,YAAMiD,IAAO,KAAK,IAAIN,IAAW,KAAK,KAAK3C,IAAMgD,CAAG;AACpD,eAAS,IAAI,GAAG,IAAIC,GAAM;AACtB,QAAAF,EAAM,KAAK,KAAK,KAAK5D,EAAK6D,GAAK;AACnC,MAAI,KAAK,QAAQL,KACb,KAAK,OAAQ;AAAA,IAC7B;AACQ,WAAO;AAAA,EACf;AAAA,EACI,SAAS;AACL,QAAI,KAAK;AACL;AACJ,SAAK,WAAW;AAChB,UAAM,EAAE,OAAAI,GAAO,QAAAH,GAAQ,KAAAI,GAAK,UAAAL,EAAU,IAAG;AAEzC,IAAAI,EAAMC,CAAG,KAAKJ,IACTA,IAAS,SAAU,KAAKI,MAAQL,IAAW,KAC5C,KAAK,OAAQ,GACjBI,EAAMJ,IAAW,CAAC,KAAK,KACvB,KAAK,OAAQ;AAAA,EACrB;AAAA,EACI,UAAUxE,GAAK;AACX,IAAAJ,GAAQ,MAAM,EAAK,GACnBH,GAAOO,CAAG,GACV,KAAK,OAAQ;AACb,UAAM+E,IAAY,KAAK,OACjB,EAAE,UAAAP,EAAQ,IAAK;AACrB,aAASK,IAAM,GAAGhD,IAAM7B,EAAI,QAAQ6E,IAAMhD,KAAM;AAC5C,MAAI,KAAK,UAAU2C,KACf,KAAK,OAAQ;AACjB,YAAMM,IAAO,KAAK,IAAIN,IAAW,KAAK,QAAQ3C,IAAMgD,CAAG;AACvD,MAAA7E,EAAI,IAAI+E,EAAU,SAAS,KAAK,QAAQ,KAAK,SAASD,CAAI,GAAGD,CAAG,GAChE,KAAK,UAAUC,GACfD,KAAOC;AAAA,IACnB;AACQ,WAAO9E;AAAA,EACf;AAAA,EACI,QAAQA,GAAK;AAET,QAAI,CAAC,KAAK;AACN,YAAM,IAAI,MAAM,uCAAuC;AAC3D,WAAO,KAAK,UAAUA,CAAG;AAAA,EACjC;AAAA,EACI,IAAIgF,GAAO;AACPzF,WAAAA,GAAQyF,CAAK,GACN,KAAK,QAAQ,IAAI,WAAWA,CAAK,CAAC;AAAA,EACjD;AAAA,EACI,WAAWhF,GAAK;AAEZ,QADAD,GAAQC,GAAK,IAAI,GACb,KAAK;AACL,YAAM,IAAI,MAAM,6BAA6B;AACjD,gBAAK,UAAUA,CAAG,GAClB,KAAK,QAAS,GACPA;AAAA,EACf;AAAA,EACI,SAAS;AACL,WAAO,KAAK,WAAW,IAAI,WAAW,KAAK,SAAS,CAAC;AAAA,EAC7D;AAAA,EACI,UAAU;AACN,SAAK,YAAY,IACjBI,GAAM,KAAK,KAAK;AAAA,EACxB;AAAA,EACI,WAAW6E,GAAI;AACX,UAAM,EAAE,UAAAT,GAAU,QAAAC,GAAQ,WAAAC,GAAW,QAAAf,GAAQ,WAAAgB,EAAS,IAAK;AAC3D,WAAAM,MAAOA,IAAK,IAAIV,GAAOC,GAAUC,GAAQC,GAAWC,GAAWhB,CAAM,IACrEsB,EAAG,QAAQ,IAAI,KAAK,OAAO,GAC3BA,EAAG,MAAM,KAAK,KACdA,EAAG,SAAS,KAAK,QACjBA,EAAG,WAAW,KAAK,UACnBA,EAAG,SAAStB,GAEZsB,EAAG,SAASR,GACZQ,EAAG,YAAYP,GACfO,EAAG,YAAYN,GACfM,EAAG,YAAY,KAAK,WACbA;AAAA,EACf;AACA;AACA,MAAMC,KAAM,CAACT,GAAQD,GAAUE,MAAcxD,GAAa,MAAM,IAAIqD,GAAOC,GAAUC,GAAQC,CAAS,CAAC,GAY1FS,KAAoCD,GAAI,GAAM,KAAK,MAAM,CAAC,GC/NjEE,KAA6B;AA8C5B,SAASC,GAAUC,GAAOC,GAAUC,GAAO;AAC9C,SAAO,KAAK,UAAUF,GAAO,CAACG,GAAKH,MAG3B,OAAOA,KAAU,WACVA,EAAM,SAAQ,IAAKF,KACvBE,GACRE,CAAK;AACZ;AC9BO,SAASE,GAAOJ,GAAO1G,IAAU,IAAI;AACxC,QAAM,EAAE,QAAA+G,IAAS,GAAK,IAAK/G;AAC3B,MAAI,CAAC0G;AACD,UAAM,IAAIM,GAAoBN,CAAK;AACvC,MAAI,OAAOA,KAAU;AACjB,UAAM,IAAIM,GAAoBN,CAAK;AACvC,MAAIK,KACI,CAAC,mBAAmB,KAAKL,CAAK;AAC9B,UAAM,IAAIO,GAAqBP,CAAK;AAE5C,MAAI,CAACA,EAAM,WAAW,IAAI;AACtB,UAAM,IAAIO,GAAqBP,CAAK;AAC5C;AA6dO,SAASQ,GAASR,GAAO1G,IAAU,IAAI;AAC1C,QAAM,EAAE,QAAA+G,IAAS,GAAK,IAAK/G;AAC3B,MAAI;AACA8G,WAAAA,GAAOJ,GAAO,EAAE,QAAAK,GAAQ,GACjB;AAAA,EACf,QACU;AACF,WAAO;AAAA,EACf;AACA;AA6DO,MAAMC,WAA4BG,GAAiB;AAAA,EACtD,YAAYT,GAAO;AACf,UAAM,WAAW,OAAOA,KAAU,WAAWU,GAAeV,CAAK,IAAIA,CAAK,gBAAgB,OAAOA,CAAK,8BAA8B;AAAA,MAChI,cAAc,CAAC,mDAAmD;AAAA,IAC9E,CAAS,GACD,OAAO,eAAe,MAAM,QAAQ;AAAA,MAChC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS;AAAA,EACT;AACA;AAaO,MAAMO,WAA6BE,GAAiB;AAAA,EACvD,YAAYT,GAAO;AACf,UAAM,WAAWA,CAAK,+BAA+B;AAAA,MACjD,cAAc;AAAA,QACV;AAAA,MACH;AAAA,IACb,CAAS,GACD,OAAO,eAAe,MAAM,QAAQ;AAAA,MAChC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS;AAAA,EACT;AACA;AC5mBA,MAAMW,KAAwB;AAC9B,MAAMC,WAA2B,MAAM;AAAA,EACrC,YAAYlH,GAAS;AACnB,UAAMA,CAAO,GACb,KAAK,OAAO;AAAA,EAChB;AACA;AACA,MAAMmH,KAA6B;AAAA,EACjC;AAAA;AAAA,EAEA;AAAA;AAEF;AACA,SAASC,GAAgBC,GAAO;AAC9B,QAAMC,IAAQD,EAAM,MAAM,GAAG;AAC7B,SAAIC,EAAM,WAAW,KAAKA,EAAM,CAAC,MAAM,aAC9B,KAEFC,GAAaD,EAAM,CAAC,CAAC;AAC9B;AACA,SAASE,GAAsBC,GAAS;AACtC,MAAI,CAACF,GAAaE,CAAO;AACvB,UAAM,IAAIP,GAAmB,8BAA8BO,CAAO,EAAE;AAEtE,SAAO,GAAGR,EAAqB,GAAGQ,CAAO;AAC3C;ACzBA,MAAMC,KAAoB;ACG1B,IAAIC,KAAgB,CAACC,GAAKC,GAAQxF,MAAQ;AACxC,MAAI,CAACwF,EAAO,IAAID,CAAG;AACjB,UAAM,UAAU,YAAYvF,CAAG;AACnC,GACIyF,IAAe,CAACF,GAAKC,GAAQE,OAC/BJ,GAAcC,GAAKC,GAAQ,yBAAyB,GAC7CE,IAASA,EAAO,KAAKH,CAAG,IAAIC,EAAO,IAAID,CAAG,IAE/CI,IAAe,CAACJ,GAAKC,GAAQvB,MAAU;AACzC,MAAIuB,EAAO,IAAID,CAAG;AAChB,UAAM,UAAU,mDAAmD;AACrE,EAAAC,aAAkB,UAAUA,EAAO,IAAID,CAAG,IAAIC,EAAO,IAAID,GAAKtB,CAAK;AACrE,GACI2B,KAAe,CAACL,GAAKC,GAAQvB,GAAO4B,OACtCP,GAAcC,GAAKC,GAAQ,wBAAwB,GAChBA,EAAO,IAAID,GAAKtB,CAAK,GACjDA,IAEL6B,IAAkB,CAACP,GAAKC,GAAQO,OAClCT,GAAcC,GAAKC,GAAQ,uBAAuB,GAC3CO,IAELC,GAAYC,GAAUC,IAAUC,IAAaC,IAAKC,GAAOC,GAASC,IAAMC,IAAQC,IAAeC,IAAiBC,IAAoBC,IAAsBC,IAAmBC,IAAqBC,IAAgBC,IAAkBC,IAAUC,IAAYC,IAAmBC;AACjR,MAAMC,GAAuB;AAAA,EAC3B,YAAYC,GAAU;AACpB,SAAK,WAAWA,GAChB3B,EAAa,MAAMU,CAAK,GACxBV,EAAa,MAAMY,EAAI,GACvBZ,EAAa,MAAMc,EAAa,GAChCd,EAAa,MAAMgB,EAAkB,GACrChB,EAAa,MAAMkB,EAAiB,GACpClB,EAAa,MAAMoB,EAAc,GACjCpB,EAAa,MAAMsB,EAAQ,GAC3BtB,EAAa,MAAMwB,EAAiB,GACpCxB,EAAa,MAAMK,GAAY,EAAE,GACjCL,EAAa,MAAMM,GAAU,IAAI,GACjCN,EAAa,MAAMO,IAAU,OAAO,EAAE,QAAAqB,EAAM,MAAO;AACjD,UAAI,CAAC9B,EAAa,MAAMQ,CAAQ,GAAG;AACjC,cAAMuB,IAAW,MAAM,KAAK,SAAS,QAAQ;AAAA,UAC3C,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,aAAaD;AAAA,UACzB;AAAA,QACA,CAAS;AACD,YAAIC,EAAS,WAAW;AACtB,iBAAO,EAAE,UAAU,GAAI;AAEzB,cAAM1B,EAAgB,MAAMiB,IAAgBC,EAAgB,EAAE,KAAK,MAAMQ,CAAQ;AAAA,MACzF;AACM,aAAO,EAAE,UAAU,KAAK,SAAU;AAAA,IACxC,CAAK,GACD7B,EAAa,MAAMQ,IAAa,YAAY;AAC1C,MAAAL,EAAgB,MAAMW,IAAeC,EAAe,EAAE,KAAK,IAAI;AAAA,IACrE,CAAK,GACDf,EAAa,MAAMS,IAAK,CAACqB,GAAOC,OACzBjC,EAAa,MAAMO,CAAU,EAAEyB,CAAK,MACvChC,EAAa,MAAMO,CAAU,EAAEyB,CAAK,IAAI,CAAE,IAE5ChC,EAAa,MAAMO,CAAU,EAAEyB,CAAK,EAAE,KAAKC,CAAQ,GAC5C,MAAM5B,EAAgB,MAAMS,IAAMC,EAAM,EAAE,KAAK,MAAMiB,GAAOC,CAAQ,EAC5E,GACD,KAAK,SAAS,GAAG,mBAAmB5B,EAAgB,MAAMa,IAAoBC,EAAoB,EAAE,KAAK,IAAI,CAAC,GAC9G,KAAK,SAAS,GAAG,kBAAkBd,EAAgB,MAAMe,IAAmBC,EAAmB,EAAE,KAAK,IAAI,CAAC;AAAA,EAC/G;AAAA,EACE,IAAI,UAAU;AACZ,WAAO;AAAA,EACX;AAAA,EACE,IAAI,OAAO;AACT,WAAO,KAAK,SAAS;AAAA,EACzB;AAAA,EACE,IAAI,OAAO;AACT,WAAI,OAAO,KAAK,SAAS,QAAS,WACzB,KAAK,SAAS,OAEhB,KAAK,SAAS,KAAK;AAAA,EAC9B;AAAA,EACE,IAAI,WAAW;AACb,WAAO;AAAA,MACL,CAAC9J,EAAe,GAAG;AAAA,QACjB,SAAS;AAAA,QACT,SAASyI,EAAa,MAAMS,EAAQ,EAAE,KAAK,IAAI;AAAA,MAChD;AAAA,MACD,CAACjJ,EAAkB,GAAG;AAAA,QACpB,SAAS;AAAA,QACT,YAAYwI,EAAa,MAAMU,EAAW,EAAE,KAAK,IAAI;AAAA,MACtD;AAAA,MACD,CAACjJ,EAAc,GAAG;AAAA,QAChB,SAAS;AAAA,QACT,IAAIuI,EAAa,MAAMW,EAAG,EAAE,KAAK,IAAI;AAAA,MACtC;AAAA,MACD,CAACf,EAAiB,GAAG;AAAA,QACnB,SAAS;AAAA,QACT,SAASS,EAAgB,MAAMmB,IAAUC,EAAU,EAAE,KAAK,IAAI;AAAA,QAC9D,eAAe,KAAK,SAAS;AAAA,MACrC;AAAA,IACK;AAAA,EACL;AAAA,EACE,IAAI,SAAS;AACX,WAAOpC,GAA2B,MAAO;AAAA,EAC7C;AAAA,EACE,IAAI,WAAW;AACb,WAAIW,EAAa,MAAMQ,CAAQ,IACtB;AAAA,MACL;AAAA,QACE,SAASR,EAAa,MAAMQ,CAAQ,EAAE;AAAA,QACtC,WAAW,IAAI,WAAY;AAAA,QAC3B,QAAQ,CAACR,EAAa,MAAMQ,CAAQ,EAAE,KAAK;AAAA,QAC3C,UAAU,CAAA;AAAA,MACpB;AAAA,IACO,IAEI,CAAE;AAAA,EACb;AACA;AACAD,IAAa,oBAAI,QAAS;AAC1BC,IAAW,oBAAI,QAAS;AACxBC,KAAW,oBAAI,QAAS;AACxBC,KAAc,oBAAI,QAAS;AAC3BC,KAAM,oBAAI,QAAS;AACnBC,IAAQ,oBAAI,QAAS;AACrBC,IAAU,SAASmB,MAAUE,GAAM;AACjC,MAAKlC,EAAa,MAAMO,CAAU,EAAEyB,CAAK;AAEzC,eAAWC,KAAYjC,EAAa,MAAMO,CAAU,EAAEyB,CAAK;AACzD,MAAAC,EAAS,MAAM,MAAMC,CAAI;AAE7B;AACApB,KAAO,oBAAI,QAAS;AACpBC,KAAS,SAASiB,GAAOC,GAAU;AACjC,EAAAjC,EAAa,MAAMO,CAAU,EAAEyB,CAAK,IAAIhC,EAAa,MAAMO,CAAU,EAAEyB,CAAK,GAAG;AAAA,IAC7E,CAACG,MAAqBF,MAAaE;AAAA,EACpC;AACH;AACAnB,KAAgB,oBAAI,QAAS;AAC7BC,KAAkB,WAAW;AAC3B,EAAIjB,EAAa,MAAMQ,CAAQ,MAC7BL,GAAa,MAAMK,GAAU,IAAI,GACjCH,EAAgB,MAAMO,GAAOC,CAAO,EAAE,KAAK,MAAM,UAAU,EAAE,UAAU,KAAK,SAAQ,CAAE;AAE1F;AACAK,KAAqB,oBAAI,QAAS;AAClCC,KAAuB,eAAeY,GAAU;AAC9C,MAAI,CAACA,KAAYA,EAAS,WAAW,GAAG;AACtC,IAAA1B,EAAgB,MAAMW,IAAeC,EAAe,EAAE,KAAK,IAAI;AAC/D;AAAA,EACJ;AACE,EAAKjB,EAAa,MAAMQ,CAAQ,KAGhC,MAAMH,EAAgB,MAAMiB,IAAgBC,EAAgB,EAAE,KAAK,MAAMQ,CAAQ;AACnF;AACAX,KAAoB,oBAAI,QAAS;AACjCC,KAAsB,SAAS1B,GAASoC,GAAU;AAChD,MAAI,CAACpC,GAAS;AACZ,IAAAU,EAAgB,MAAMW,IAAeC,EAAe,EAAE,KAAK,IAAI;AAC/D;AAAA,EACJ;AACE,MAAI,CAACjB,EAAa,MAAMQ,CAAQ;AAC9B;AAEF,QAAMjB,IAAQG,GAAsBC,CAAO;AAC3C,MAAI,CAACL,GAAgBC,CAAK;AACxB,UAAM,IAAI,MAAM,2BAA2BA,CAAK,EAAE;AAEpD,MAAIwC,GAAU,SAAS,GAAG;AACxB,UAAM,CAACK,CAAO,IAAIL;AAClB,IAAA5B,GAAa,MAAMK,GAAU,EAAE,SAAS4B,GAAS,OAAA7C,GAAO,GACxDc,EAAgB,MAAMO,GAAOC,CAAO,EAAE,KAAK,MAAM,UAAU,EAAE,UAAU,KAAK,SAAQ,CAAE;AAAA,EAC1F;AACI,IAAAV,GAAa,MAAMK,GAAU,EAAE,SAASR,EAAa,MAAMQ,CAAQ,GAAG,SAAS,OAAAjB,GAAO,GACtFc,EAAgB,MAAMO,GAAOC,CAAO,EAAE,KAAK,MAAM,UAAU,EAAE,UAAU,KAAK,SAAQ,CAAE;AAE1F;AACAS,KAAiB,oBAAI,QAAS;AAC9BC,KAAmB,eAAeQ,GAAU;AAC1C,MAAIA,EAAS,WAAW;AACtB;AAEF,QAAM,CAACK,CAAO,IAAIL;AAClB,MAAI/B,EAAa,MAAMQ,CAAQ,GAAG;AAChC,IAAAR,EAAa,MAAMQ,CAAQ,EAAE,UAAU4B,GACvC/B,EAAgB,MAAMO,GAAOC,CAAO,EAAE,KAAK,MAAM,UAAU,EAAE,UAAU,KAAK,SAAQ,CAAE;AAAA,OACjF;AACL,UAAMtB,IAAQ,MAAMc,EAAgB,MAAMqB,IAAmBC,EAAmB,EAAE,KAAK,IAAI;AAC3F,IAAAxB,GAAa,MAAMK,GAAU,EAAE,SAAS4B,GAAS,OAAA7C,GAAO,GACxDc,EAAgB,MAAMO,GAAOC,CAAO,EAAE,KAAK,MAAM,UAAU,EAAE,UAAU,KAAK,SAAQ,CAAE;AAAA,EAC1F;AACA;AACAW,KAAW,oBAAI,QAAS;AACxBC,KAAa,YAAYS,GAAM;AAC7B,SAAO,KAAK,SAAS,QAAQ,GAAGA,CAAI;AACtC;AACAR,KAAoB,oBAAI,QAAS;AACjCC,KAAsB,iBAAiB;AACrC,QAAMhC,IAAU,MAAM,KAAK,SAAS,QAAQ;AAAA,IAC1C,MAAM;AAAA,EACV,CAAG,GACKJ,IAAQG,GAAsBC,CAAO;AAC3C,MAAI,CAACL,GAAgBC,CAAK;AACxB,UAAM,IAAI,MAAM,2BAA2BA,CAAK,EAAE;AAEpD,SAAOA;AACT;AC3LA,MAAM8C,WAA0BC,GAAc;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EAER,YACEC,GACAC,GACAC,GACAC,GACA5K,GACA6K,GACA;AACM,UAAA;AAAA,MACJ,UAAU,EAAE,SAASH,EAAO;AAAA,MAC5B,gBAAgBD;AAAA,MAChB,SAAAE;AAAA,IAAA,CACD,GAED,KAAK,WAAWC,GAChB,KAAK,UAAU5K,GACf,KAAK,QAAQ6K;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAef,MAAM,QAAQC,GAA0D;AACtE,WAAAA,IAAQC,GAAQD,CAAK,GAEd,IAAI,QAAQ,OAAOE,GAASC,MAAW;AACtC,YAAAC,IAAiB,MAAM,KAAK,SAAS;AAAA,QACzCJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK,SAAS;AAAA,MAChB;AAGI,UAAAI,EAAe,SAASC,EAAc,SAAS;AACjD,QAAAH,EAAQE,CAAwC;AAChD;AAAA,MAAA;AAIF,UACE,KAAK,SAAS,0BACdA,EAAe,SAASC,EAAc,2BACtC;AACA,QAAAF,EAAQC,EAAgC,KAAK;AAC7C;AAAA,MAAA;AAII,YAAAE,IAAmB,KAAK,SAAS,oBAAoB,SACrDC,IAASH,EAAgC,OAIzCI,IACJJ,EAAe,SAASC,EAAc;AAIpC,UAAAC,MAAqB,YAAY,CAACE,GAAY;AACxC,gBAAA;AAAA,UACN;AAAA,UACAD;AAAA,QACF,GACAJ,EAAOI,CAAK;AACZ;AAAA,MAAA;AAKE,UAAAD,MAAqB,kBAAkB,CAACE,GAAY;AACtD,cAAM,EAAE,OAAAC,EAAU,IAAA,MAAM,QAAgB,QAAA,EAAA,KAAA,MAAAC,EAAA;AAExC,YAAIC,IAAY,IACZC;AAEJ,QAAAA,IAAYH,EAAM;AAAA,UAChB,SAAS;AAAA,UACT,SAASF,GAAO,WAAW;AAAA,UAC3B,UAAU;AAAA,UACV,SAAS,MAAM;AAED,YAAAI,IAAA,IACRC,KAAqBA,EAAA,GAGzB,KAAK,MAAM,KAAK,GACX,KAAA,SACF,QAAQZ,GAAO,QAAW,QAAW,IAAMO,CAAK,EAChD,KAAK,CAACM,MAAkB;AACnBA,cAAAA,EAAc,SAASR,EAAc,WACvCH,EAAQW,CAAuC,GAC/C,KAAK,MAAM,MAAM,KAEjBV,EAAQU,EAA+B,KAAK;AAAA,YAC9C,CACD;AAAA,UAAA;AAAA,QACL,CACD,GAID,WAAW,MAAM;AACf,UAAKF,KACHR,EAAOI,CAAK;AAAA,WAEb,KAAK;AAER;AAAA,MAAA;AAMF,WAAK,MAAM,KAAK;AACV,YAAAM,IAAgB,MAAM,KAAK,SAAS;AAAA,QACxCb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAO;AAAA,MACF;AAGI,UAAAM,EAAc,SAASR,EAAc,SAAS;AAChD,QAAAH,EAAQW,CAAuC,GAC/C,KAAK,MAAM,MAAM;AACjB;AAAA,MAAA;AAGF,MAAAV,EAAQU,EAA+B,KAAK;AAAA,IAC5C,CACD;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWH,MAAM,YAAYC,GAA0C;AAC1D,WAAO,IAAI,QAAQ,OAAOZ,GAASC,MAAW;AAC5C,YAAMY,IAAc,MAAM,KAAK,SAAS,YAAYD,GAAW,IAAI,EAAI;AAGnE,UAAA,EAAE,UAAUC,IAAc;AAC5B,QAAAb,EAAQa,CAAwB;AAChC;AAAA,MAAA;AAIF,WAAK,MAAM,KAAK;AAChB,YAAMC,IAAa,MAAM,KAAK,SAAS,YAAYF,GAAW,IAAI,EAAK;AAEnE,MAAE,UAAUE,IAGdb,EAAQa,EAA4B,KAAK,IAFzCd,EAAQc,CAAuB,GAIjC,KAAK,MAAM,MAAM;AAAA,IAAA,CAClB;AAAA,EAAA;AAEL;ACxMO,IAAIC;AAAA,CACV,SAAUA,GAAa;AACpB,EAAAA,EAAY,OAAU,QACtBA,EAAY,QAAW,SACvBA,EAAY,MAAS,OACrBA,EAAY,SAAY,UACxBA,EAAY,MAAS;AACzB,GAAGA,MAAgBA,IAAc,CAAA,EAAG;AAC7B,IAAIC;AAAA,CACV,SAAUA,GAAY;AACnB,EAAAA,EAAW,YAAe,aAC1BA,EAAW,WAAc;AAC7B,GAAGA,MAAeA,IAAa,CAAA,EAAG;AAC3B,IAAIC;AAAA,CACV,SAAUA,GAAW;AAClB,EAAAA,EAAU,sBAAyB,uBACnCA,EAAU,oBAAuB,qBACjCA,EAAU,cAAiB;AAC/B,GAAGA,OAAcA,KAAY,CAAA,EAAG;AACzB,IAAIC;AAAA,CACV,SAAUA,GAAiB;AACxB,EAAAA,EAAgB,iBAAoB;AACxC,GAAGA,OAAoBA,KAAkB,CAAA,EAAG;AACrC,IAAIC;AAAA,CACV,SAAUA,GAAiB;AACxB,EAAAA,EAAgB,UAAa;AACjC,GAAGA,MAAoBA,IAAkB,CAAA,EAAG;AC1B5C,MAAAC,KAAe,CAACC,GAAWC,MAAQ;AAC/B,QAAMC,IAAY,CAAE;AACpB,MAAIC,IAAY;AAChB,SAAO;AAAA,IACH,QAAQnB,GAAO;AACX,MAAKmB,MACDA,IAAY,IACZF,EAAI,GAAGD,CAAS,yBAAyB,GACzCE,EAAU,QAAQ,CAACE,MAAa;AAC5B,QAAAA,EAASpB,CAAK;AAAA,MAClC,CAAiB;AAAA,IAER;AAAA,IACD,UAAUoB,GAAU;AAChB,MAAAD,IAAYC,EAAU,IAAGF,EAAU,KAAKE,CAAQ;AAAA,IACnD;AAAA,EACJ;AACL,GCjBeC,KAAA,CAACC,MAIL,IAAIvC,MAAS;AAChB,EAAIuC,KACA,QAAQ,IAAI,YAAY,GAAGvC,CAAI;AAEtC,GCRCwC,KAA2B;AAAA,EAC7B,SAAS;AAAA,EACT,UAAU;AACd,GACMC,KAAY,qCACZC,KAAsB,CAAC,SAAS,OAAO,GAI9BC,KAAA,CAACC,MAAQ;AACpB,MAAIA,KAAOF,GAAoB,KAAK,CAACG,MAAWD,EAAI,WAAWC,CAAM,CAAC;AAIlE,WAAO;AAKX,QAAMC,IAAW,SAAS,UACpBC,IAAcN,GAAU,KAAKG,CAAG;AACtC,MAAII,GACAC,GACAC;AACJ,EAAIH,KAGAC,IAAWD,EAAY,CAAC,IAAIA,EAAY,CAAC,IAAID,EAAS,UACtDG,IAAWF,EAAY,CAAC,GACxBG,IAAOH,EAAY,CAAC,MAIpBC,IAAWF,EAAS,UACpBG,IAAWH,EAAS,UACpBI,IAAOJ,EAAS;AAIpB,QAAMK,IAAaD,KAAQA,MAASV,GAAyBQ,CAAQ,IAAI,IAAIE,CAAI,KAAK;AACtF,SAAO,GAAGF,CAAQ,KAAKC,CAAQ,GAAGE,CAAU;AAChD,GCtCaC,KAAiB,CAAC,EAAE,MAAAC,GAAM,SAAArN,GAAS,OAAAsN,EAAK,OAAS;AAAA,EAC1D,MAAAD;AAAA,EACA,SAAArN;AAAA,EACA,OAAAsN;AACJ,IAIaC,KAAmB,CAAC3F,MAAQ;AACrC,QAAM4F,IAAoB,IAAI,MAAO;AAErC,gBAAO,KAAK5F,CAAG,EAAE,QAAQ,CAACnB,MAAS+G,EAAkB/G,CAAG,IAAImB,EAAInB,CAAG,CAAE,GAC9D+G;AACX,GCVAC,KAAe,CAACC,GAAMC,GAAmBzB,MAAQ;AAC7C,QAAM,EAAE,WAAAD,GAAW,OAAA2B,GAAO,QAAAC,GAAQ,kBAAAC,GAAkB,oBAAAC,EAAkB,IAAML;AAC5E,MAAItB,IAAY;AAChB,QAAM4B,IAAqB,CAAClE,MAAU;AAClC,QAAIA,EAAM,WAAW+D,KAAU/D,EAAM,KAAK,WAAW6B,EAAY;AAC7D;AAEJ,QAAIoC,MAAuB,OAAOjE,EAAM,WAAWiE,GAAoB;AACnE,MAAA7B,EAAI,GAAGD,CAAS,iCAAiCnC,EAAM,MAAM,wCAAwCiE,CAAkB,EAAE;AACzH;AAAA,IACZ;AACQ,UAAME,IAAcnE,EAAM,MACpB,EAAE,YAAAoE,GAAY,MAAAlE,GAAM,IAAAmE,EAAI,IAAGF;AACjC,IAAA/B,EAAI,GAAGD,CAAS,cAAciC,CAAU,SAAS;AACjD,UAAME,IAAuB,CAACC,MACnB,CAACC,MAAgB;AAEpB,UADApC,EAAI,GAAGD,CAAS,aAAaiC,CAAU,UAAU,GAC7C9B,GAAW;AAMX,QAAAF,EAAI,GAAGD,CAAS,oBAAoBiC,CAAU,sCAAsC;AACpF;AAAA,MACpB;AACgB,YAAMlO,IAAU;AAAA,QACZ,QAAQ2L,EAAY;AAAA,QACpB,IAAAwC;AAAA,QACA,YAAAE;AAAA,QACA,aAAAC;AAAA,MACH;AACD,MAAID,MAAezC,EAAW,YAC1B0C,aAAuB,UACvBtO,EAAQ,cAAcoN,GAAekB,CAAW,GAChDtO,EAAQ,qBAAqB;AAEjC,UAAI;AACA,QAAA6N,EAAO,YAAY7N,GAAS8N,CAAgB;AAAA,MAChE,SACuB1N,GAAK;AAGR,YAAIA,EAAI,SAAS0L,GAAgB,gBAAgB;AAC7C,gBAAMyC,IAAoB;AAAA,YACtB,QAAQ5C,EAAY;AAAA,YACpB,IAAAwC;AAAA,YACA,YAAYvC,EAAW;AAAA,YACvB,aAAawB,GAAehN,CAAG;AAAA,YAC/B,oBAAoB;AAAA,UACvB;AACD,UAAAyN,EAAO,YAAYU,GAAmBT,CAAgB;AAAA,QAC9E;AACoB,cAAM1N;AAAA,MAC1B;AAAA,IACa;AAEL,QAAI,QAAQ,CAACwK,MAAYA,EAAQ+C,EAAkBO,CAAU,EACxD,KAAKP,GAAmB7D,EAAM,MAAM,EACpC,MAAM6D,GAAmB3D,CAAI,CAAC,CAAC,EAAE,KAAKoE,EAAqBxC,EAAW,SAAS,GAAGwC,EAAqBxC,EAAW,QAAQ,CAAC;AAAA,EACnI;AACD,SAAAgC,EAAM,iBAAiB7B,EAAgB,SAASiC,CAAkB,GAC3D,MAAM;AACT,IAAA5B,IAAY,IACZwB,EAAM,oBAAoB7B,EAAgB,SAASiC,CAAkB;AAAA,EACxE;AACL;ACxEA,IAAIG,KAAK;AAIT,MAAeK,KAAA,MAAM,EAAEL,ICJjBM,KAAqB,KACrBC,KAAoB,CAACC,MAAYA,IAAUA,EAAQ,MAAMF,EAAkB,IAAI,CAAE,GACjFG,KAAoB,CAACC,MAAaA,EAAS,KAAKJ,EAAkB,GAClEK,KAAgB,CAACrI,GAAKsI,MAAW;AACnC,QAAMF,IAAWH,GAAkBK,KAAU,EAAE;AAC/C,SAAAF,EAAS,KAAKpI,CAAG,GACVmI,GAAkBC,CAAQ;AACrC,GAUaG,KAAe,CAACC,GAASN,GAASrI,MAAU;AACrD,QAAMuI,IAAWH,GAAkBC,CAAO;AAC1C,SAAAE,EAAS,OAAO,CAACK,GAAazI,GAAK0I,OAC3B,OAAOD,EAAYzI,CAAG,IAAM,QAC5ByI,EAAYzI,CAAG,IAAI,CAAE,IAErB0I,MAAQN,EAAS,SAAS,MAC1BK,EAAYzI,CAAG,IAAIH,IAEhB4I,EAAYzI,CAAG,IACvBwI,CAAO,GACHA;AACX,GASaG,KAAmB,CAACC,GAASN,MAAW;AACjD,QAAMO,IAAmB,CAAE;AAC3B,gBAAO,KAAKD,CAAO,EAAE,QAAQ,CAAC5I,MAAQ;AAClC,UAAMH,IAAQ+I,EAAQ5I,CAAG,GACnBkI,IAAUG,GAAcrI,GAAKsI,CAAM;AACzC,IAAI,OAAOzI,KAAU,YAEjB,OAAO,OAAOgJ,GAAkBF,GAAiB9I,GAAOqI,CAAO,CAAC,GAEhE,OAAOrI,KAAU,eAEjBgJ,EAAiBX,CAAO,IAAIrI;AAAA,EAExC,CAAK,GACMgJ;AACX,GAOaC,KAAqB,CAACD,MAAqB;AACpD,QAAMD,IAAU,CAAE;AAClB,aAAWV,KAAWW;AAClB,IAAAN,GAAaK,GAASV,GAASW,EAAiBX,CAAO,CAAC;AAE5D,SAAOU;AACX,GCnDeG,KAAA,CAACC,GAAY/B,GAAMgC,GAAgBC,GAAmBzD,MAAQ;AACzE,QAAM,EAAE,WAAAD,GAAW,OAAA2B,GAAO,QAAAC,GAAQ,kBAAAC,GAAkB,oBAAAC,EAAkB,IAAML;AAC5E,MAAItB,IAAY;AAChB,EAAAF,EAAI,GAAGD,CAAS,0BAA0B;AAC1C,QAAM2D,IAAoB,CAAC1B,MAChB,IAAIlE,MAAS;AAChB,IAAAkC,EAAI,GAAGD,CAAS,aAAaiC,CAAU,SAAS;AAUhD,QAAI2B;AACJ,QAAI;AACA,MAAIhC,EAAO,WACPgC,IAAgB;AAAA,IAEpC,QACsB;AACN,MAAAA,IAAgB;AAAA,IAChC;AAIY,QAHIA,KACAF,EAAmB,GAEnBvD,GAAW;AACX,YAAMnB,IAAQ,IAAI,MAAM,kBAAkBiD,CAAU,qCAA0C;AAC9F,YAAAjD,EAAM,OAAOY,GAAU,qBACjBZ;AAAA,IACtB;AACY,WAAO,IAAI,QAAQ,CAACL,GAASC,MAAW;AACpC,YAAMsD,IAAKK,GAAY,GACjBR,IAAqB,CAAClE,MAAU;AAClC,YAAIA,EAAM,WAAW+D,KACjB/D,EAAM,KAAK,WAAW6B,EAAY,SAClC7B,EAAM,KAAK,OAAOqE;AAClB;AAEJ,YAAIJ,MAAuB,OACvBjE,EAAM,WAAWiE,GAAoB;AACrC,UAAA7B,EAAI,GAAGD,CAAS,iCAAiCnC,EAAM,MAAM,wCAAwCiE,CAAkB,EAAE;AACzH;AAAA,QACxB;AACoB,cAAM+B,IAAehG,EAAM;AAC3B,QAAAoC,EAAI,GAAGD,CAAS,cAAciC,CAAU,UAAU,GAClDN,EAAM,oBAAoB7B,EAAgB,SAASiC,CAAkB;AACrE,YAAIM,IAAcwB,EAAa;AAC/B,QAAIA,EAAa,uBACbxB,IAAcf,GAAiBe,CAAW,KAE7CwB,EAAa,eAAelE,EAAW,YAAYhB,IAAUC,GAAQyD,CAAW;AAAA,MACpF;AACD,MAAAV,EAAM,iBAAiB7B,EAAgB,SAASiC,CAAkB;AAClE,YAAMC,IAAc;AAAA,QAChB,QAAQtC,EAAY;AAAA,QACpB,IAAAwC;AAAA,QACA,YAAAD;AAAA,QACA,MAAAlE;AAAA,MACH;AACD,MAAA6D,EAAO,YAAYI,GAAaH,CAAgB;AAAA,IAChE,CAAa;AAAA,EACJ,GAGCwB,IAAmBI,EAAe,OAAO,CAACK,GAAK1C,OACjD0C,EAAI1C,CAAI,IAAIuC,EAAkBvC,CAAI,GAC3B0C,IACR,EAAE;AAGL,gBAAO,OAAON,GAAYF,GAAmBD,CAAgB,CAAC,GACvD,MAAM;AACT,IAAAlD,IAAY;AAAA,EACf;AACL,GCvFe4D,KAAA,CAACrC,GAAmBsC,GAAanC,GAAkBoC,GAAYhE,MAAQ;AAClF,QAAM,EAAE,SAAAiE,GAAS,WAAAC,EAAS,IAAKF;AAC/B,MAAIG,GACAC;AAKJ,QAAMb,IAAa,CAAE;AACrB,SAAO,CAAC3F,MAAU;AACd,QAAImG,MAAgB,OAAOnG,EAAM,WAAWmG,GAAa;AACrD,MAAA/D,EAAI,wDAAwDpC,EAAM,MAAM,wCAAwCmG,CAAW,EAAE;AAC7H;AAAA,IACZ;AACQ,IAAA/D,EAAI,kCAAkC;AACtC,UAAMwB,IAAO;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,MACP,QAAQ5D,EAAM;AAAA,MACd,kBAAkBgE;AAAA,MAClB,oBAAoBmC;AAAA,IACvB;AAGD,IAAII,KACAA,EAAqB,GAEzBA,IAAsB5C,GAAoBC,GAAMC,GAAmBzB,CAAG,GACtEkE,EAAUC,CAAmB,GAGzBC,KACAA,EAAoB,QAAQ,CAACC,MAAuB;AAChD,aAAOd,EAAWc,CAAkB;AAAA,IACpD,CAAa,GAELD,IAAsBxG,EAAM,KAAK;AACjC,UAAM0G,IAAoBhB,GAAkBC,GAAY/B,GAAM4C,GAAqBH,GAASjE,CAAG;AAC/F,WAAAkE,EAAUI,CAAiB,GACpBf;AAAA,EACV;AACL,GC1CegB,KAAA,CAACvE,GAAKyB,GAAmBsC,GAAanC,MAC1C,CAAChE,MAAU;AAKd,MAAI,CAACA,EAAM;AACP;AAEJ,MAAImG,MAAgB,OAAOnG,EAAM,WAAWmG,GAAa;AACrD,IAAA/D,EAAI,wDAAwDpC,EAAM,MAAM,wCAAwCmG,CAAW,EAAE;AAC7H;AAAA,EACZ;AACQ,EAAA/D,EAAI,2DAA2D;AAC/D,QAAMwE,IAAgB;AAAA,IAClB,QAAQ/E,EAAY;AAAA,IACpB,aAAa,OAAO,KAAKgC,CAAiB;AAAA,EAC7C;AACD,EAAA7D,EAAM,OAAO,YAAY4G,GAAe5C,CAAgB;AAC3D,GCvBC6C,KAA+B,KAUrCC,KAAe,CAACC,GAAQX,MAAe;AACnC,QAAM,EAAE,SAAAC,GAAS,WAAAC,EAAS,IAAKF,GACzBY,IAA6B,YAAY,MAAM;AACjD,IAAKD,EAAO,gBACR,cAAcC,CAA0B,GACxCX,EAAS;AAAA,EAEhB,GAAEQ,EAA4B;AAC/B,EAAAP,EAAU,MAAM;AACZ,kBAAcU,CAA0B;AAAA,EAChD,CAAK;AACL,GChBAC,KAAe,CAACC,GAAS3E,MAAa;AAClC,MAAI4E;AACJ,SAAID,MAAY,WACZC,IAAY,OAAO,WAAW,MAAM;AAChC,UAAMhG,IAAQ,IAAI,MAAM,8BAA8B+F,CAAO,IAAI;AACjE,IAAA/F,EAAM,OAAOY,GAAU,mBACvBQ,EAASpB,CAAK;AAAA,EACjB,GAAE+F,CAAO,IAEP,MAAM;AACT,iBAAaC,CAAS;AAAA,EACzB;AACL,GChBeC,KAAA,CAACL,MAAW;AACvB,MAAI,CAACA,EAAO,OAAO,CAACA,EAAO,QAAQ;AAC/B,UAAM5F,IAAQ,IAAI,MAAM,kDAAkD;AAC1E,UAAAA,EAAM,OAAOY,GAAU,aACjBZ;AAAA,EACd;AACA,GCMekG,KAAA,CAACvR,MAAY;AACxB,MAAI,EAAE,QAAAiR,GAAQ,SAAAxB,IAAU,CAAE,GAAE,aAAAY,GAAa,SAAAe,GAAS,OAAAzE,IAAQ,GAAK,IAAK3M;AACpE,QAAMsM,IAAMI,GAAaC,CAAK,GACxB2D,IAAalE,GAAiB,UAAUE,CAAG,GAC3C,EAAE,WAAAkE,GAAW,SAAAD,EAAO,IAAKD;AAC/B,EAAKD,MACDiB,GAA6BL,CAAM,GACnCZ,IAActD,GAAiBkE,EAAO,GAAG;AAK7C,QAAM/C,IAAmBmC,MAAgB,SAAS,MAAMA,GAClDtC,IAAoByB,GAAiBC,CAAO,GAC5C+B,IAAmBX,GAAwBvE,GAAKyB,GAAmBsC,GAAanC,CAAgB,GAChGuD,IAAmBrB,GAAwBrC,GAAmBsC,GAAanC,GAAkBoC,GAAYhE,CAAG;AA8BlH,SAAO;AAAA,IACH,SA9BY,IAAI,QAAQ,CAACtB,GAASC,MAAW;AAC7C,YAAMyG,IAAwBP,GAAuBC,GAASb,CAAO,GAC/DoB,IAAgB,CAACzH,MAAU;AAC7B,YAAI,EAAAA,EAAM,WAAW+G,EAAO,iBAAiB,CAAC/G,EAAM,OAGpD;AAAA,cAAIA,EAAM,KAAK,WAAW6B,EAAY,KAAK;AACvC,YAAAyF,EAAiBtH,CAAK;AACtB;AAAA,UAChB;AACY,cAAIA,EAAM,KAAK,WAAW6B,EAAY,KAAK;AACvC,kBAAM8D,IAAa4B,EAAiBvH,CAAK;AACzC,YAAI2F,MACA6B,EAAuB,GACvB1G,EAAQ6E,CAAU;AAEtB;AAAA,UAChB;AAAA;AAAA,MACS;AACD,aAAO,iBAAiB1D,EAAgB,SAASwF,CAAa,GAC9DrF,EAAI,4BAA4B,GAChC0E,GAAqBC,GAAQX,CAAU,GACvCE,EAAU,CAACnF,MAAU;AACjB,eAAO,oBAAoBc,EAAgB,SAASwF,CAAa,GAC7DtG,KACAJ,EAAOI,CAAK;AAAA,MAE5B,CAAS;AAAA,IACT,CAAK;AAAA,IAGG,UAAU;AAEN,MAAAkF,EAAS;AAAA,IACZ;AAAA,EACJ;AACL,GCjEMqB,yBAA0B,IAAI,CAAC,aAAa,aAAa,OAAO,OAAO,CAAC;AAEvE,SAASC,GAAoBxE,GAA2B;AACvD,QAAAyE,IAAazE,EAAS,YAAY;AACxC,SACEuE,GAAoB,IAAIE,CAAU,KAAKA,EAAW,SAAS,YAAY;AAE3E;AAKO,SAASC,GAA0BC,GAAgB;AACpD,MAAAA,EAAI,YAAYA,EAAI;AAChB,UAAA,IAAI,MAAM,0DAA0D;AAGxE,MAAAA,EAAI,aAAa,YAIjB,EAAAA,EAAI,aAAa,WAAWH,GAAoBG,EAAI,QAAQ;AAIhE,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF;AAMO,SAASC,GAAqBD,GAAkB;AACrD,QAAME,IAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEI,SAAAL,GAAoBG,EAAI,QAAQ,KAClCE,EAAc,KAAK,wBAAwB,GAGtCA,EAAc,KAAK,IAAI;AAChC;ACnCO,MAAMC,GAA+C;AAAA,EAC1D;AAAA,EACQ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY;AAAA,IACV,IAAA5D;AAAA,IACA,KAAAyD;AAAA,IACA,SAAAI;AAAA,IACA,WAAAC;AAAA,IACA,SAAA5C,IAAU,CAAA;AAAA,EAAC,GAOV;AACD,QAAI,OAAO,WAAa,OAAe,OAAO,SAAW;AACvD;AAGF,SAAK,MAAMuC,GACXD,GAA0BC,CAAG;AAE7B,UAAMM,IAAU,SAAS,MAEnBC,IAAO,SAAS,cAAc,MAAM;AAC1C,IAAAA,EAAK,OAAO,YACZA,EAAK,KAAK,uBACVA,EAAK,UACH,8GACFD,EAAQ,YAAYC,CAAI;AAElB,UAAAtB,IAAS,SAAS,cAAc,QAAQ;AACvC,IAAAA,EAAA,MAAMe,EAAI,SAAS,GAC1Bf,EAAO,KAAK1C,GACZ0C,EAAO,MAAM,SAAS,QACfA,EAAA,QAAQ,IAAI,aAAa,GACzBA,EAAA,QAAQ,IAAI,cAAc,GAC1BA,EAAA,QAAQ,IAAI,gCAAgC,GAC5CA,EAAA,QAAQ,IAAI,eAAe,GAC3BA,EAAA,QAAQ,IAAI,mBAAmB,GAC/BA,EAAA,QAAQgB,GAAqBD,CAAG,GACvCf,EAAO,iBAAiB,eACxBA,EAAO,MAAM,iBAAiB,QACvBA,EAAA,MAAM,YAAY,sBAAsB,MAAM,GAC9CA,EAAA,MAAM,YAAY,qBAAqB,MAAM,GAI9C,SAAS,oBACNA,EAAA,QAAQ,IAAI,yCAAyC;AAGxD,UAAAuB,IAAY,SAAS,cAAc,KAAK;AAC9C,IAAAA,EAAU,KAAK,cACfA,EAAU,MAAM,WAAW,SAC3BA,EAAU,MAAM,SAAS,QACzBA,EAAU,MAAM,QAAQ,QACxBA,EAAU,MAAM,MAAM,KACtBA,EAAU,MAAM,OAAO,KACvBA,EAAU,MAAM,SAAS,SACzBA,EAAU,MAAM,kBAAkB,mBAClCA,EAAU,MAAM,UAAU,QAC1BA,EAAU,MAAM,aAAa,UAC7BA,EAAU,MAAM,iBAAiB,UACjCA,EAAU,MAAM,aAAa,qBAC7BA,EAAU,MAAM,UAAU,KAC1BA,EAAU,MAAM,gBAAgB,QAChCA,EAAU,MAAM,sBAAsB,WACtCA,EAAU,MAAM,iBAAiB,QACvBA,EAAA,MAAM,YAAY,sBAAsB,MAAM,GAC9CA,EAAA,MAAM,YAAY,qBAAqB,MAAM,GACvDA,EAAU,YAAYvB,CAAM,GAGlBuB,EAAA;AAAA,MACR;AAAA,MACA,CAACC,MAAM;AACD,QAAAA,EAAE,QAAQ,SAAS,KACrBA,EAAE,eAAe;AAAA,MAErB;AAAA,MACA,EAAE,SAAS,GAAM;AAAA,IACnB,GAEUD,EAAA;AAAA,MACR;AAAA,MACA,CAACC,MAAM;AACD,QAAAA,EAAE,QAAQ,SAAS,KACrBA,EAAE,eAAe;AAAA,MAErB;AAAA,MACA,EAAE,SAAS,GAAM;AAAA,IACnB,GAEUD,EAAA;AAAA,MACR;AAAA,MACA,CAACC,MAAM;AACD,QAAAA,EAAE,QAAQ,SAAS,KACrBA,EAAE,eAAe;AAAA,MAErB;AAAA,MACA,EAAE,SAAS,GAAM;AAAA,IACnB,GAEA,KAAK,SAASxB,GACd,KAAK,YAAYuB,GAEUjB,GAAA;AAAA,MACzB,QAAQ,KAAK;AAAA,MACb,aAAaS,EAAI;AAAA,MACjB,SAAS;AAAA,QACP,MAAM,CAACU,MAAoB,MAAM,KAAK,KAAK;AAAA,QAC3C,OAAO,CAACA,MAAoB,MAAM,KAAK,MAAM;AAAA,QAC7C,QAAQ,CAACA,MAAoB,MAAM,OAAO,SAAS,OAAO;AAAA,QAC1D,GAAGjD;AAAA,MAAA;AAAA,IACL,CACD,EACE,QAAQ,KAAK4C,CAAS,EACtB,MAAM,CAAChH,MAAU;AAChB,cAAQ,MAAM,yDAAyD;AAAA,QACrE,OAAAA;AAAA,QACA,aAAa2G,EAAI;AAAA,MAAA,CAClB;AAAA,IAAA,CACF,GAEH,KAAK,OAAO,GACZ,OAAO,iBAAiB,UAAU,MAAM,KAAK,QAAQ;AAE/C,UAAAW,IAAW,IAAI,iBAAiB,MAAM;AACtC,UAAA,OAAO,WAAa,IAAa;AAC/BC,YAAAA,IAAqB,SAAS,eAAe,YAAY;AAC/D,MAAI,SAAS,QACPrE,MAAO,yBAAyB,CAACqE,MAC1B,SAAA,KAAK,YAAYJ,CAAS,GACnCG,EAAS,WAAW;AAAA,IAExB,CACD;AAEQ,IAAAA,EAAA,QAAQ,SAAS,iBAAiB;AAAA,MACzC,WAAW;AAAA,MACX,SAAS;AAAA,IAAA,CACV;AAEK,UAAAC,IAAqB,SAAS,eAAe,YAAY;AAC/D,IAAI,SAAS,QACPrE,MAAO,yBAAyB,CAACqE,KAC1B,SAAA,KAAK,YAAYJ,CAAS,GAIvC,KAAK,UAAUJ;AAAA,EAAA;AAAA,EAGjB,OAAO;AACL,IAAI,CAAC,KAAK,aAAa,OAAO,WAAa,OAAe,CAAC,SAAS,SAIhE,KAAK,iBACP,aAAa,KAAK,YAAY,GAC9B,KAAK,eAAe,SAGb,SAAA,KAAK,MAAM,WAAW,UAE1B,KAAA,UAAU,MAAM,UAAU,QAE/B,sBAAsB,MAAM;AAC1B,MAAI,KAAK,cACF,KAAA,UAAU,MAAM,UAAU;AAAA,IACjC,CACD;AAAA,EAAA;AAAA,EAGH,QAAQ;AACN,IAAI,CAAC,KAAK,aAAa,OAAO,WAAa,OAAe,CAAC,SAAS,SAEpE,KAAK,UAAU,GAEN,SAAA,KAAK,MAAM,WAAW,QAG1B,KAAA,UAAU,MAAM,UAAU,KAG1B,KAAA,eAAe,WAAW,MAAM;AACnC,MAAI,KAAK,cACF,KAAA,UAAU,MAAM,UAAU,SAEjC,KAAK,eAAe;AAAA,OACnB,GAAG;AAAA,EAAA;AAAA,EAGR,eAAe;AACT,IAAC,KAAK,cACL,KAAA,UAAU,MAAM,SAAS;AAAA,EAAA;AAAA,EAGhC,cAAc;AACR,IAAC,KAAK,cACL,KAAA,UAAU,MAAM,SAAS;AAAA,EAAA;AAAA,EAGxB,SAAS;AACf,QAAI,GAAC,KAAK,UAAU,OAAO,SAAW,MAIlC;AAAA,UAFC,KAAA,OAAO,MAAM,aAAa,QAE3B,OAAO,aAAa,KAAK;AACtB,aAAA,OAAO,MAAM,SAAS,QACtB,KAAA,OAAO,MAAM,QAAQ,QACrB,KAAA,OAAO,MAAM,eAAe;AACjC;AAAA,MAAA;AAGG,WAAA,OAAO,MAAM,SAAS,SACtB,KAAA,OAAO,MAAM,QAAQ,SACrB,KAAA,OAAO,MAAM,eAAe;AAAA;AAAA,EAAA;AAAA,EAGnC,SAAS;AACA,WAAA,KAAK,WAAW,MAAM,YAAY;AAAA,EAAA;AAE7C;AC7OO,MAAMxS,KAAU;ACuChB,SAASiT,GAAiBC,GAAQC,GAAQC,GAAO;AACpD,WAASnM,KAAOkM,GAAQ;AACpB,QAAIrM,IAAQqM,EAAOlM,CAAG;AAKtB,WAAO,eAAeiM,GAAQjM,GAAK,EAAE,YAAY,IAAM,OAAAH,GAAO,UAAU,IAAO;AAAA,EACvF;AACA;ACzCA,SAASD,EAAUC,GAAO;AACtB,MAAIA,KAAS;AACT,WAAO;AAEX,MAAI,MAAM,QAAQA,CAAK;AACnB,WAAO,OAAQA,EAAM,IAAID,CAAS,EAAG,KAAK,IAAI,IAAI;AAEtD,MAAIC,aAAiB,YAAY;AAC7B,UAAMuM,IAAM;AACZ,QAAIC,IAAS;AACb,aAASxR,IAAI,GAAGA,IAAIgF,EAAM,QAAQhF;AAC9B,MAAAwR,KAAUD,EAAIvM,EAAMhF,CAAC,KAAK,CAAC,GAC3BwR,KAAUD,EAAIvM,EAAMhF,CAAC,IAAI,EAAG;AAEhC,WAAOwR;AAAA,EACf;AACI,MAAI,OAAQxM,KAAW,YAAY,OAAQA,EAAM,UAAY;AACzD,WAAOD,EAAUC,EAAM,QAAQ;AAEnC,UAAQ,OAAQA,GAAM;AAAA,IAClB,KAAK;AAAA,IACL,KAAK;AACD,aAAOA,EAAM,SAAU;AAAA,IAC3B,KAAK;AACD,aAAO,OAAOA,CAAK,EAAE,SAAU;AAAA,IACnC,KAAK;AACD,aAAQA,EAAO,SAAU;AAAA,IAC7B,KAAK;AACD,aAAO,KAAK,UAAUA,CAAK;AAAA,IAC/B,KAAK,UAAU;AACX,YAAMyM,IAAO,OAAO,KAAKzM,CAAK;AAC9B,aAAAyM,EAAK,KAAM,GACJ,OAAOA,EAAK,IAAI,CAACC,MAAM,GAAG3M,EAAU2M,CAAC,CAAC,KAAK3M,EAAUC,EAAM0M,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,IAAI;AAAA,IAClG;AAAA,EACA;AACI,SAAO;AACX;AAuCO,SAASC,GAAUjT,GAASkT,GAAMxF,GAAM;AAC3C,MAAI/N,IAAeK;AACnB;AACI,UAAMH,IAAU,CAAE;AAClB,QAAI6N,GAAM;AACN,UAAI,aAAaA,KAAQ,UAAUA,KAAQ,UAAUA;AACjD,cAAM,IAAI,MAAM,0CAA0CrH,EAAUqH,CAAI,CAAC,EAAE;AAE/E,iBAAWjH,KAAOiH,GAAM;AACpB,YAAIjH,MAAQ;AACR;AAEJ,cAAMH,IAASoH,EAAKjH,CAAG;AAEvB,QAAA5G,EAAQ,KAAK4G,IAAM,MAAMJ,EAAUC,CAAK,CAAC;AAAA,MAKzD;AAAA,IACA;AACQ,IAAAzG,EAAQ,KAAK,QAAQqT,CAAI,EAAE,GAC3BrT,EAAQ,KAAK,WAAWL,EAAO,EAAE,GAC7BK,EAAQ,WACRG,KAAW,OAAOH,EAAQ,KAAK,IAAI,IAAI;AAAA,EAEnD;AACI,MAAIoL;AACJ,UAAQiI,GAAI;AAAA,IACR,KAAK;AACD,MAAAjI,IAAQ,IAAI,UAAUjL,CAAO;AAC7B;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AACD,MAAAiL,IAAQ,IAAI,WAAWjL,CAAO;AAC9B;AAAA,IACJ;AACI,MAAAiL,IAAQ,IAAI,MAAMjL,CAAO;AAAA,EACrC;AACI,SAAAyS,GAAiBxH,GAAO,EAAE,MAAAiI,GAAM,GAC5BxF,KACA,OAAO,OAAOzC,GAAOyC,CAAI,GAEzBzC,EAAM,gBAAgB,QACtBwH,GAAiBxH,GAAO,EAAE,cAAAtL,GAAc,GAErCsL;AACX;AAOO,SAASvE,GAAOyM,GAAOnT,GAASkT,GAAMxF,GAAM;AAC/C,MAAI,CAACyF;AACD,UAAMF,GAAUjT,GAASkT,GAAMxF,CAAI;AAE3C;AAQO,SAAS0F,GAAeD,GAAOnT,GAASqN,GAAM/G,GAAO;AACxD,EAAAI,GAAOyM,GAAOnT,GAAS,oBAAoB,EAAE,UAAUqN,GAAM,OAAO/G,GAAO;AAC/E;AAiBwB,CAAC,OAAO,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC+M,GAAOC,MAAS;AAC3E,MAAI;AAGA,QAAI,OAAO,UAAUA,CAAI,MAAM;AAC3B,YAAM,IAAI,MAAM,KAAK;AAIzB,QAAIA,MAAS,SACK,IAA0B,UAAU,KAAK,MACtC;AAGb,YAAM,IAAI,MAAM,QAAQ;AAIhC,IAAAD,EAAM,KAAKC,CAAI;AAAA,EACvB,QACkB;AAAA,EAAA;AACd,SAAOD;AACX,GAAG,CAAE,CAAA;AC1LL,SAASE,GAAUjN,GAAO+G,GAAMmG,GAAM;AAClC,MAAIlN,aAAiB;AAIjB,WAAOA;AAEX,MAAI,OAAQA,KAAW,YAAYA,EAAM,MAAM,4BAA4B,GAAG;AAC1E,UAAMwM,IAAS,IAAI,YAAYxM,EAAM,SAAS,KAAK,CAAC;AACpD,QAAImN,IAAS;AACb,aAASnS,IAAI,GAAGA,IAAIwR,EAAO,QAAQxR;AAC/B,MAAAwR,EAAOxR,CAAC,IAAI,SAASgF,EAAM,UAAUmN,GAAQA,IAAS,CAAC,GAAG,EAAE,GAC5DA,KAAU;AAEd,WAAOX;AAAA,EACf;AACI,EAAAM,GAAe,IAAO,2BAA2B/F,KAAQ,SAAS/G,CAAK;AAC3E;AAQO,SAASoN,GAASpN,GAAO+G,GAAM;AAClC,SAAOkG,GAAUjN,GAAO+G,CAAW;AACvC;AAqCA,MAAMsG,KAAgB;AAIf,SAASC,GAAQ5R,GAAM;AAC1B,QAAMgE,IAAQ0N,GAAS1R,CAAI;AAC3B,MAAI8Q,IAAS;AACb,WAASxR,IAAI,GAAGA,IAAI0E,EAAM,QAAQ1E,KAAK;AACnC,UAAMuS,IAAI7N,EAAM1E,CAAC;AACjB,IAAAwR,KAAUa,IAAeE,IAAI,QAAS,CAAC,IAAIF,GAAcE,IAAI,EAAI;AAAA,EACzE;AACI,SAAOf;AACX;AC5EA,IAAIgB,KAAS;AACb,MAAMC,KAAa,SAAU/R,GAAM;AAC/B,SAAOmE,GAAWnE,CAAI;AAC1B;AACA,IAAIgS,KAAcD;AAuBX,SAASE,GAAUC,GAAO;AAC7B,QAAMlS,IAAO0R,GAASQ,GAAO,MAAM;AACnC,SAAON,GAAQI,GAAYhS,CAAI,CAAC;AACpC;AACAiS,GAAU,IAAIF;AACdE,GAAU,OAAO,WAAY;AAAE,EAAAH,KAAS;AAAO;AAC/CG,GAAU,WAAW,SAAUE,GAAM;AACjC,MAAIL;AACA,UAAM,IAAI,UAAU,qBAAqB;AAE7C,EAAAE,KAAcG;AAClB;AACA,OAAO,OAAOF,EAAS;AC5CvB,MAAMG,KAAO,OAAO,CAAC,GACfC,KAAQ,OAAO,EAAE;AACvB,SAASC,GAAmB/J,GAAS;AAIjC,EAAAA,IAAUA,EAAQ,YAAa;AAC/B,QAAMgK,IAAQhK,EAAQ,UAAU,CAAC,EAAE,MAAM,EAAE,GACrCiK,IAAW,IAAI,WAAW,EAAE;AAClC,WAASlT,IAAI,GAAGA,IAAI,IAAIA;AACpB,IAAAkT,EAASlT,CAAC,IAAIiT,EAAMjT,CAAC,EAAE,WAAW,CAAC;AAEvC,QAAMmT,IAASf,GAASO,GAAUO,CAAQ,CAAC;AAC3C,WAASlT,IAAI,GAAGA,IAAI,IAAIA,KAAK;AACzB,IAAKmT,EAAOnT,KAAK,CAAC,KAAK,KAAM,MACzBiT,EAAMjT,CAAC,IAAIiT,EAAMjT,CAAC,EAAE,YAAa,KAEhCmT,EAAOnT,KAAK,CAAC,IAAI,OAAS,MAC3BiT,EAAMjT,IAAI,CAAC,IAAIiT,EAAMjT,IAAI,CAAC,EAAE,YAAa;AAGjD,SAAO,OAAOiT,EAAM,KAAK,EAAE;AAC/B;AAGA,MAAMG,KAAa,CAAE;AACrB,SAASpT,IAAI,GAAGA,IAAI,IAAIA;AACpB,EAAAoT,GAAW,OAAOpT,CAAC,CAAC,IAAI,OAAOA,CAAC;AAEpC,SAASA,IAAI,GAAGA,IAAI,IAAIA;AACpB,EAAAoT,GAAW,OAAO,aAAa,KAAKpT,CAAC,CAAC,IAAI,OAAO,KAAKA,CAAC;AAI3D,MAAMqT,KAAa;AACnB,SAASC,GAAarK,GAAS;AAC3B,EAAAA,IAAUA,EAAQ,YAAa,GAC/BA,IAAUA,EAAQ,UAAU,CAAC,IAAIA,EAAQ,UAAU,GAAG,CAAC,IAAI;AAC3D,MAAIiK,IAAWjK,EAAQ,MAAM,EAAE,EAAE,IAAI,CAACsK,MAAeH,GAAWG,CAAC,CAAI,EAAE,KAAK,EAAE;AAE9E,SAAOL,EAAS,UAAUG,MAAY;AAClC,QAAIG,IAAQN,EAAS,UAAU,GAAGG,EAAU;AAC5C,IAAAH,IAAW,SAASM,GAAO,EAAE,IAAI,KAAKN,EAAS,UAAUM,EAAM,MAAM;AAAA,EAC7E;AACI,MAAIC,IAAW,OAAO,KAAM,SAASP,GAAU,EAAE,IAAI,EAAG;AACxD,SAAOO,EAAS,SAAS;AACrB,IAAAA,IAAW,MAAMA;AAErB,SAAOA;AACX;AAEA,MAAMC,KAAU,WAAY;AAExB,QAAMlC,IAAS,CAAE;AACjB,WAASxR,IAAI,GAAGA,IAAI,IAAIA,KAAK;AACzB,UAAMmF,IAAM,uCAAuCnF,CAAC;AACpD,IAAAwR,EAAOrM,CAAG,IAAI,OAAOnF,CAAC;AAAA,EAC9B;AACI,SAAOwR;AACX,EAAI;AACJ,SAASmC,GAAW3O,GAAO;AACvB,EAAAA,IAAQA,EAAM,YAAa;AAC3B,MAAIwM,IAASsB;AACb,WAAS9S,IAAI,GAAGA,IAAIgF,EAAM,QAAQhF;AAC9B,IAAAwR,IAASA,IAASuB,KAAQW,GAAO1O,EAAMhF,CAAC,CAAC;AAE7C,SAAOwR;AACX;AAoCO,SAASoC,EAAW3K,GAAS;AAEhC,MADA6I,GAAe,OAAQ7I,KAAa,UAAU,mBAAmB,WAAWA,CAAO,GAC/EA,EAAQ,MAAM,wBAAwB,GAAG;AAEzC,IAAKA,EAAQ,WAAW,IAAI,MACxBA,IAAU,OAAOA;AAErB,UAAMuI,IAASwB,GAAmB/J,CAAO;AAEzC,WAAA6I,GAAe,CAAC7I,EAAQ,MAAM,+BAA+B,KAAKuI,MAAWvI,GAAS,wBAAwB,WAAWA,CAAO,GACzHuI;AAAA,EACf;AAEI,MAAIvI,EAAQ,MAAM,gCAAgC,GAAG;AAEjD,IAAA6I,GAAe7I,EAAQ,UAAU,GAAG,CAAC,MAAMqK,GAAarK,CAAO,GAAG,qBAAqB,WAAWA,CAAO;AACzG,QAAIuI,IAASmC,GAAW1K,EAAQ,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE;AACzD,WAAOuI,EAAO,SAAS;AACnB,MAAAA,IAAS,MAAMA;AAEnB,WAAOwB,GAAmB,OAAOxB,CAAM;AAAA,EAC/C;AACI,EAAAM,GAAe,IAAO,mBAAmB,WAAW7I,CAAO;AAC/D;ACvHO,MAAM4K,GAAsC;AAAA,EACxC,OAA2B;AAAA,EAC3B,WAA6B;AAAA,EAC9B,SAA2C;AAAA,EAC3C,UAA8B;AAAA,EAC9B,oBAA8B,CAAC;AAAA,EAC/B,wBACN;AAAA,EAEF,cAAuB;AACrB,WAAO,OAAO,SAAW,OAAe,CAAC,CAAC,OAAO;AAAA,EAAA;AAAA,EAGnD,UAA0B;AAClB,UAAAC,IAAY,KAAK,YAAY;AAE5B,WAAA;AAAA,MACL,MAAM,KAAK;AAAA,MACX,WAAAA;AAAA,MACA,SAASA,IACL,OAAO,kBAAkB,WAAW,YACpC;AAAA,MACJ,SAASA,IAAY,OAAO,kBAAkB,UAAU;AAAA,MACxD,MAAM;AAAA,MACN,UAAU,KAAK;AAAA,IACjB;AAAA,EAAA;AAAA,EAGF,MAAM,UAAgD;AACpD,QAAI,KAAK;AACA,aAAA,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,SAAS,KAAK,QAAQ;AAG/D,QAAA;AACE,UAAA,CAAC,KAAK;AACF,cAAA,IAAI,MAAM,yBAAyB;AAG3C,YAAMC,IAAS,OAAO;AACtB,UAAI,CAACA;AACG,cAAA,IAAI,MAAM,iBAAiB;AAI7B,YAAAxL,IAAW,MAAMwL,EAAO,QAAQ;AAAA,QACpC,MAAM;AAAA,QACN,QAAQ,EAAE,aAAa,GAAM;AAAA,MAAA,CAC9B;AAED,UAAI,CAACxL,KAAYA,EAAS,WAAW;AAC7B,cAAA,IAAI,MAAM,mBAAmB;AAGrC,kBAAK,4BAA4B,GAEjC,KAAK,SAASwL,GACT,KAAA,UAAUxL,EAAS,CAAC,GACzB,KAAK,oBAAoBA,GACzB,KAAK,2BAA2B,GACzB,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,SAAS,KAAK,QAAQ;AAAA,aAC1DoB,GAAO;AACN,qBAAA,MAAM,+BAA+BA,CAAK,GAC3C;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,uBAAiC;AAC/B,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,MAAM,cAAcjJ,GAAuD;AACrE,QAAA;AACF,UAAI,CAAC,KAAK,YAAiB,KAAA,CAAC,KAAK;AACzB,cAAA,IAAI,MAAM,yBAAyB;AAG3C,YAAMsT,IAAM,MAAM,KAAK,OAAO,QAAQ;AAAA,QACpC,MAAM;AAAA,QACN,QAAQtT;AAAA,MAAA,CACT;AAED,aAAO,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,QAAQsT,EAAI;AAAA,aAChDrK,GAAO;AACN,qBAAA,MAAM,yCAAyCA,CAAK,GACrD;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,gBAAgBP,GAAgD;AAChE,QAAA,CAAC,KAAK;AACF,YAAA,IAAI,MAAM,iBAAiB;AAG/B,QAAA;AACF,YAAMoI,IAAS,MAAM,KAAK,OAAO,QAAQ;AAAA,QACvC,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,OAAApI;AAAA,QAAA;AAAA,MACF,CACD;AAEM,aAAA;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,QAAAoI;AAAA,MACF;AAAA,aACO7H,GAAO;AACN,qBAAA,MAAM,0CAA0CA,CAAK,GACtD;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,YAAYxD,GAAmC;AAC/C,QAAA,CAAC,KAAK;AACF,YAAA,IAAI,MAAM,iBAAiB;AAU5B,WAPQ,MAAM,KAAK,OAAO,QAAQ;AAAA,MACvC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,SAAAA;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EAEM;AAAA,EAGT,MAAM,WACJ8N,GACsC;AAClC,QAAA;AACF,UAAI,CAAC,KAAK,YAAiB,KAAA,CAAC,KAAK;AACzB,cAAA,IAAI,MAAM,yBAAyB;AAIpC,aAAA;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,QAAQ;AAAA,MACV;AAAA,aACOtK,GAAO;AACN,qBAAA,MAAM,sCAAsCA,CAAK,GAClD;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,mBACJuK,GACAC,GACsC;AAC/B,WAAA;AAAA,MACL,SAAS;AAAA,MACT,QAAQ,KAAK;AAAA,MACb,OAAO;AAAA,IACT;AAAA,EAAA;AAAA,EAGM,6BAAmC;AACrC,IAAC,KAAK,WAEL,KAAA,wBAAwB,CAAC5L,MAAmC;AAC3D,MAAAA,KAAYA,EAAS,SAAS,KAC3B,KAAA,UAAUA,EAAS,CAAC,GACzB,KAAK,oBAAoBA,MAEzB,KAAK,UAAU,QACf,KAAK,oBAAoB,CAAC;AAAA,IAE9B,GAGA,KAAK,OAAO,GAAG,mBAAmB,KAAK,qBAAqB;AAAA,EAAA;AAAA,EAGtD,8BAAoC;AACtC,IAAA,KAAK,UAAU,KAAK,0BACtB,KAAK,OAAO,IAAI,mBAAmB,KAAK,qBAAqB,GAC7D,KAAK,wBAAwB;AAAA,EAC/B;AAAA,EAGF,aAAmB;AACjB,SAAK,4BAA4B,GACjC,KAAK,SAAS,QACd,KAAK,UAAU,QACf,KAAK,oBAAoB,CAAC;AAAA,EAAA;AAE9B;ACxMO,SAAS6L,GAAiB3L,GAAU;AACvC,MAAI,OAAO,SAAW;AAClB;AACJ,QAAM4L,IAAU,CAAC7L,MAAUC,EAASD,EAAM,MAAM;AAChD,gBAAO,iBAAiB,4BAA4B6L,CAAO,GAC3D,OAAO,cAAc,IAAI,YAAY,yBAAyB,CAAC,GACxD,MAAM,OAAO,oBAAoB,4BAA4BA,CAAO;AAC/E;ACnBO,SAASC,KAAc;AAC1B,QAAMC,IAAY,oBAAI,IAAK;AAC3B,MAAIC,IAAkB,CAAE;AACxB,QAAMC,IAAU,MAAML,GAAiB,CAACM,MAAmB;AACvD,IAAIF,EAAgB,KAAK,CAAC,EAAE,MAAApI,EAAI,MAAOA,EAAK,SAASsI,EAAe,KAAK,IAAI,MAE7EF,IAAkB,CAAC,GAAGA,GAAiBE,CAAc,GACrDH,EAAU,QAAQ,CAAC9L,MAAaA,EAAS+L,GAAiB,EAAE,OAAO,CAACE,CAAc,EAAC,CAAE,CAAC;AAAA,EAC9F,CAAK;AACD,MAAIC,IAAUF,EAAS;AACvB,SAAO;AAAA,IACH,aAAa;AACT,aAAOF;AAAA,IACV;AAAA,IACD,QAAQ;AACJ,MAAAA,EAAU,QAAQ,CAAC9L,MAAaA,EAAS,CAAA,GAAI,EAAE,SAAS,CAAC,GAAG+L,CAAe,EAAC,CAAE,CAAC,GAC/EA,IAAkB,CAAE;AAAA,IACvB;AAAA,IACD,UAAU;AACN,WAAK,MAAO,GACZD,EAAU,MAAO,GACjBI,IAAW;AAAA,IACd;AAAA,IACD,aAAa,EAAE,MAAAC,KAAQ;AACnB,aAAOJ,EAAgB,KAAK,CAACE,MAAmBA,EAAe,KAAK,SAASE,CAAI;AAAA,IACpF;AAAA,IACD,eAAe;AACX,aAAOJ;AAAA,IACV;AAAA,IACD,QAAQ;AACJ,WAAK,MAAO,GACZG,IAAW,GACXA,IAAUF,EAAS;AAAA,IACtB;AAAA,IACD,UAAUhM,GAAU,EAAE,iBAAAoM,EAAe,IAAK,CAAA,GAAI;AAC1C,aAAAN,EAAU,IAAI9L,CAAQ,GAClBoM,KACApM,EAAS+L,GAAiB,EAAE,OAAOA,EAAe,CAAE,GACjD,MAAMD,EAAU,OAAO9L,CAAQ;AAAA,IACzC;AAAA,EACJ;AACL;ACvCA,MAAMqM,KAA8C;AAAA,EAClD,OAAO;AAAA;AAAA,EACP,YAAY;AAAA;AAAA,EACZ,WAAW;AAAA;AAAA,EACX,UAAU;AAAA;AAAA,EACV,WAAW;AAAA;AAAA,EACX,UAAU;AAAA;AAAA,EACV,OAAO;AAAA;AAAA,EACP,YAAY;AAAA;AAAA,EACZ,CAACC,GAAU,gBAAgB,OAAO,GAAG;AAAA,EACrC,CAACA,GAAU,gBAAgB,UAAU,GAAG;AAC1C,GAEaC,KAAoB,CAC/B7O,MACiC;AAC3B,QAAA8O,IAAMC,GAAI,MAAM/O,CAAO,GACvBgP,IAAWL,GAAUG,CAAG;AAC9B,SAAKE,KACK,QAAA,KAAK,qBAAqBF,CAAG,EAAE,GAElCE;AACT;ACbO,MAAeC,GAA4C;AAAA,EAKhE;AAAA,EACU,UAA8B;AAAA,EAC9B,QAAQd,GAAY;AAAA,EACpB;AAAA,EACA,oBAA8B,CAAC;AAAA,EAEzC,cAAc;AACZ,SAAK,sBAAsB;AAAA,EAAA;AAAA,EAGrB,cAAiD;AACnD,WAAC,KAAK,aACR,KAAK,WAAW,KAAK,MAClB,aAAA,EACA,KAAK,CAACvL,MAAaA,EAAS,KAAK,SAAS,KAAK,IAAI,IAEjD,KAAK;AAAA,EAAA;AAAA,EAGN,sBAA2B;AAC3B,UAAAA,IAAW,KAAK,YAAY;AAClC,WAAIA,IACKA,EAAS,WAKhB,KAAK,SAAS,iBACd,OAAO,SAAW,OACjB,OAAe,UAAU,aAElB,OAAe,WAGlB;AAAA,EAAA;AAAA,EAGD,wBAA8B;AAEhC,IADa,KAAK,YAAY,KAClB,CAAC,KAAK,gBACpB,KAAK,cAAc,IACnB,KAAK,mBAAmB;AAAA,EAC1B;AAAA,EAGM,cAAc;AAAA,EAEd,qBAA2B;AAC3B,UAAAA,IAAW,KAAK,YAAY;AAClC,IAAKA,MAELA,EAAS,SACN,QAAQ;AAAA,MACP,QAAQ;AAAA,IAAA,CACT,EACA,KAAK,CAACR,MAAa;AACb,WAAA,oBAAoBA,EAAS,IAAIqL,CAAU,GAC5CrL,EAAS,SAAS,MACpB,KAAK,UAAUqL,EAAWrL,EAAS,CAAC,CAAC;AAAA,IACvC,CACD,EACA,MAAM,QAAQ,KAAK,GAEtBQ,EAAS,SACN,QAAQ;AAAA,MACP,QAAQ;AAAA,IAAA,CACT,EACA,KAAK,CAAC5C,MAAY;AACZ,WAAA,WAAW6O,GAAkB7O,CAAO;AAAA,IAAA,CAC1C,EACA,MAAM,QAAQ,KAAK,GAEtB4C,EAAS,UAAU,GAAG,gBAAgB,CAAC5C,MAAoB;AACpD,WAAA,WAAW6O,GAAkB7O,CAAO;AAAA,IAAA,CAC1C,GAED4C,EAAS,UAAU,GAAG,mBAAmB,CAACR,MAAuB;AAC/D,MAAIA,MACF,KAAK,oBAAoBA,EAAS,IAAI,CAACK,MAAYgL,EAAWhL,CAAO,CAAC,GACjE,KAAA,UACHL,EAAS,SAAS,IAAIqL,EAAWrL,EAAS,CAAC,CAAC,IAAI;AAAA,IACpD,CACD;AAAA,EAAA;AAAA,EAGH,cAAuB;AACrB,QAAI8M;AACK,aAAA;AAIH,UAAAtM,IAAW,KAAK,YAAY;AAGlC,WACE,CAACA,KACD,KAAK,SAAS,iBACd,OAAO,SAAW,MAGX,CAAC,CAAE,OAAe,UAAU,cAIjCA,KAAY,CAAC,KAAK,eACpB,KAAK,sBAAsB,GAGtB,OAAO,SAAW,OAAe,CAAC,CAACA;AAAA,EAAA;AAAA,EAG5C,UAA0B;AAClB,UAAA+K,IAAY,KAAK,YAAY;AAE5B,WAAA;AAAA,MACL,MAAM,KAAK;AAAA,MACX,WAAAA;AAAA,MACA,SAASA,IAAY,OAAO,UAAU,WAAW,YAAY;AAAA,MAC7D,SAASA,IAAY,OAAO,UAAU,UAAU;AAAA,MAChD,MAAM,KAAK;AAAA,MACX,UAAU,KAAK;AAAA,MACf,mBAAmB,KAAK;AAAA,IAC1B;AAAA,EAAA;AAAA,EAGF,uBAAiC;AAC/B,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,MAAM,QAAQ7K,GAAwD;AAKpE,QAJIA,KAAW,KAAK,kBAAkB,SAAS2K,EAAW3K,CAAO,CAAC,MAC3D,KAAA,UAAU2K,EAAW3K,CAAO,IAG/B,KAAK;AACA,aAAA,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,SAAS,KAAK,QAAQ;AAG/D,QAAA;AACE,UAAA,CAAC,KAAK;AACR,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGpD,UAAAqM;AACE,YAAAvM,IAAW,KAAK,YAAY;AAYlC,UAVIA,IACFuM,IAAWvM,EAAS,WAEpB,KAAK,SAAS,iBACb,OAAe,UAAU,eAG1BuM,IAAY,OAAe,WAGzB,CAACA;AACH,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,qBAAqB;AAGpD,YAAA/M,IAAW,MAAM+M,EAAS,QAAQ;AAAA,QACtC,QAAQ;AAAA,MAAA,CACT;AAEG,UAAA/M,KAAYA,EAAS,SAAS;AAChC,oBAAK,UAAUqL,EAAWrL,EAAS,CAAC,CAAC,GAChC,KAAA,oBAAoBA,EAAS,IAAIqL,CAAU,GAG5C,CAAC7K,KAAY,KAAK,SAAS,kBAE7B,KAAK,WAAW;AAAA,UACd,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,UAAUuM;AAAA,QACZ,GACA,KAAK,sBAAsB,IAGtB,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,SAAS,KAAK,QAAQ;AAG7D,YAAA,IAAI,MAAM,mBAAmB;AAAA,aAC5B3L,GAAO;AACd,qBAAQ,MAAM,uBAAuB,KAAK,WAAW,KAAKA,CAAK,GACxD;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,gBACJ4L,GACsC;AAClC,QAAA;AACF,UAAI,CAAC,KAAK,YAAiB,KAAA,CAAC,KAAK;AAC/B,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGlD,YAAAD,IAAW,KAAK,oBAAoB;AAC1C,UAAI,CAACA;AACH,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGlD,YAAA9D,IAAS,MAAM8D,EAAS,QAAQ;AAAA,QACpC,QAAQ;AAAA,QACR,QAAQ,CAACC,CAAW;AAAA,MAAA,CACrB;AAED,aAAO,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,QAAA/D,EAAO;AAAA,aAC3C7H,GAAO;AACN,qBAAA;AAAA,QACN,kCAAkC,KAAK,WAAW;AAAA,QAClDA;AAAA,MACF,GACO;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,YACJjL,GACAuK,GACsC;AAClC,QAAA;AACF,UAAI,CAAC,KAAK,YAAiB,KAAA,CAAC,KAAK;AAC/B,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGlD,YAAAqM,IAAW,KAAK,oBAAoB;AAC1C,UAAI,CAACA;AACH,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,qBAAqB;AAEpD,YAAA9D,IAAS,MAAM8D,EAAS,QAAQ;AAAA,QACpC,QAAQ;AAAA,QACR,QAAQ,CAAC5W,GAASuK,KAAW,KAAK,OAAO;AAAA,MAAA,CAC1C;AAED,aAAO,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,QAAAuI,EAAO;AAAA,aAC3C7H,GAAO;AACd,qBAAQ,MAAM,8BAA8B,KAAK,WAAW,KAAKA,CAAK,GAC/D;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,cAAcjJ,GAAiD;AAC/D,QAAA;AACF,UAAI,CAAC,KAAK,YAAiB,KAAA,CAAC,KAAK;AAC/B,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGlD,YAAA4U,IAAW,KAAK,oBAAoB;AAC1C,UAAI,CAACA;AACH,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGlD,YAAA9D,IAAS,MAAM8D,EAAS,QAAQ;AAAA,QACpC,QAAQ;AAAA,QACR,QAAQ,CAAC,KAAK,SAAS,KAAK,UAAU5U,CAAI,CAAC;AAAA,MAAA,CAC5C;AAED,aAAO,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,QAAA8Q,EAAO;AAAA,aAC3C7H,GAAO;AACN,qBAAA;AAAA,QACN,iCAAiC,KAAK,WAAW;AAAA,QACjDA;AAAA,MACF,GACO;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,gBAAgB6L,GAAgD;AAChE,QAAA;AACF,UAAI,CAAC,KAAK,YAAiB,KAAA,CAAC,KAAK;AAC/B,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGlD,YAAAF,IAAW,KAAK,oBAAoB;AAC1C,UAAI,CAACA;AACH,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGlD,YAAA9D,IAAS,MAAM8D,EAAS,QAAQ;AAAA,QACpC,QAAQ;AAAA,QACR,QAAQ,CAACE,CAAG;AAAA,MAAA,CACb;AAED,aAAO,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,QAAAhE,EAAO;AAAA,aAC3C7H,GAAO;AACN,qBAAA;AAAA,QACN,kCAAkC,KAAK,WAAW;AAAA,QAClDA;AAAA,MACF,GACO;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,YAAYxD,GAAmC;AAC/C,QAAA;AACE,UAAA,CAAC,KAAK;AACR,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGlD,YAAAmP,IAAW,KAAK,oBAAoB;AAC1C,UAAI,CAACA;AACH,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGpD,UAAA;AACF,qBAAMA,EAAS,QAAQ;AAAA,UACrB,QAAQ;AAAA,UACR,QAAQ,CAAC,EAAE,SAAAnP,EAAS,CAAA;AAAA,QAAA,CACrB,GAEI,KAAA,WAAW6O,GAAkB7O,CAAO,GAClC;AAAA,eACAwD,GAAO;AACT,cAAAA,EAAc,SAAS,QAC1B,QAAQ,KAAK,sBAAsB,KAAK,WAAW,EAAE,GAEjDA;AAAA,MAAA;AAAA,aAEDA,GAAO;AACd,qBAAQ,MAAM,6BAA6B,KAAK,WAAW,KAAKA,CAAK,GAC9D;AAAA,IAAA;AAAA,EACT;AAAA,EAGF,MAAM,WACJ8L,GACsC;AAClC,QAAA;AACF,UAAI,CAAC,KAAK,YAAiB,KAAA,CAAC,KAAK;AAC/B,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGxD,UAAIA;AACK,eAAA;AAAA,UACL,SAAS;AAAA,UACT,QAAQ,KAAK;AAAA,UACb,OAAO;AAAA,QACT;AACK;AACC,cAAAH,IAAW,KAAK,oBAAoB;AAC1C,YAAI,CAACA;AACH,gBAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGlD,cAAAI,IAAU,MAAMJ,EAAS,QAAQ;AAAA,UACrC,QAAQ;AAAA,UACR,QAAQ,CAAC,KAAK,SAAS,QAAQ;AAAA,QAAA,CAChC;AACD,eAAO,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,QAAQI,EAAQ;AAAA,MAAA;AAAA,aAEtD/L,GAAO;AACd,qBAAQ,MAAM,8BAA8B,KAAK,WAAW,KAAKA,CAAK,GAC/D;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,mBACJgM,GACAC,IAAoB,KACkB;AAClC,QAAA;AACE,UAAA,CAAC,KAAK;AACR,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGlD,YAAAN,IAAW,KAAK,oBAAoB;AAC1C,UAAI,CAACA;AACH,cAAM,IAAI,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAGlD,YAAAO,IAAY,KAAK,IAAI,GACrBC,IAAe;AAErB,aAAO,KAAK,QAAQD,IAAYD,KAAW;AACnC,cAAAG,IAAU,MAAMT,EAAS,QAAQ;AAAA,UACrC,QAAQ;AAAA,UACR,QAAQ,CAACK,CAAuB;AAAA,QAAA,CACjC;AAED,YAAII;AACK,iBAAA;AAAA,YACL,SAAS;AAAA,YACT,QAAQ,KAAK;AAAA,YACb,QAAQA;AAAA,UACV;AAIF,cAAM,IAAI,QAAQ,CAACzM,MAAY,WAAWA,GAASwM,CAAY,CAAC;AAAA,MAAA;AAG5D,YAAA,IAAI,MAAM,oCAAoC;AAAA,aAC7CnM,GAAO;AACN,qBAAA;AAAA,QACN,sCAAsC,KAAK,WAAW;AAAA,QACtDA;AAAA,MACF,GACO;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAEJ;AC/bO,MAAMqM,WAAmBZ,GAAmB;AAAA,EACxC,OAA2B;AAAA,EAC3B,OAAO;AAAA,EACP,cAAc;AACzB;ACJO,MAAMa,WAAuBb,GAAmB;AAAA,EAC5C,OAA2B;AAAA,EAC3B,OAAO;AAAA,EACP,cAAc;AACzB;ACPA;AACA,SAASrW,GAAQC,GAAG;AAChB,SAAOA,aAAa,cAAe,YAAY,OAAOA,CAAC,KAAKA,EAAE,YAAY,SAAS;AACvF;AAEA,SAASG,GAAOC,MAAMC,GAAS;AAC3B,MAAI,CAACN,GAAQK,CAAC;AACV,UAAM,IAAI,MAAM,qBAAqB;AACzC,MAAIC,EAAQ,SAAS,KAAK,CAACA,EAAQ,SAASD,EAAE,MAAM;AAChD,UAAM,IAAI,MAAM,mCAAmCC,IAAU,kBAAkBD,EAAE,MAAM;AAC/F;AACA,SAAS8W,GAAUC,GAAUtW,GAAK;AAC9B,SAAK,MAAM,QAAQA,CAAG,IAElBA,EAAI,WAAW,IACR,KACPsW,IACOtW,EAAI,MAAM,CAACuW,MAAS,OAAOA,KAAS,QAAQ,IAG5CvW,EAAI,MAAM,CAACuW,MAAS,OAAO,cAAcA,CAAI,CAAC,IAP9C;AASf;AAEA,SAASC,GAAIC,GAAO;AAChB,MAAI,OAAOA,KAAU;AACjB,UAAM,IAAI,MAAM,mBAAmB;AACvC,SAAO;AACX;AACA,SAASC,EAAKC,GAAOF,GAAO;AACxB,MAAI,OAAOA,KAAU;AACjB,UAAM,IAAI,MAAM,GAAGE,CAAK,mBAAmB;AAC/C,SAAO;AACX;AACA,SAASvX,GAAQC,GAAG;AAChB,MAAI,CAAC,OAAO,cAAcA,CAAC;AACvB,UAAM,IAAI,MAAM,oBAAoBA,CAAC,EAAE;AAC/C;AACA,SAASuX,GAAKH,GAAO;AACjB,MAAI,CAAC,MAAM,QAAQA,CAAK;AACpB,UAAM,IAAI,MAAM,gBAAgB;AACxC;AACA,SAASI,GAAQF,GAAOF,GAAO;AAC3B,MAAI,CAACJ,GAAU,IAAMI,CAAK;AACtB,UAAM,IAAI,MAAM,GAAGE,CAAK,6BAA6B;AAC7D;AACA,SAASG,GAAQH,GAAOF,GAAO;AAC3B,MAAI,CAACJ,GAAU,IAAOI,CAAK;AACvB,UAAM,IAAI,MAAM,GAAGE,CAAK,6BAA6B;AAC7D;AAAA;AAIA,SAASzQ,MAAS2C,GAAM;AACpB,QAAMmE,IAAK,CAAC7N,MAAMA,GAEZ4X,IAAO,CAAC5X,GAAGI,MAAM,CAACmU,MAAMvU,EAAEI,EAAEmU,CAAC,CAAC,GAE9BsD,IAASnO,EAAK,IAAI,CAAC/J,MAAMA,EAAE,MAAM,EAAE,YAAYiY,GAAM/J,CAAE,GAEvDiK,IAASpO,EAAK,IAAI,CAAC/J,MAAMA,EAAE,MAAM,EAAE,OAAOiY,GAAM/J,CAAE;AACxD,SAAO,EAAE,QAAAgK,GAAQ,QAAAC,EAAQ;AAC7B;AAAA;AAMA,SAASC,GAASC,GAAS;AAEvB,QAAMC,IAAW,OAAOD,KAAY,WAAWA,EAAQ,MAAM,EAAE,IAAIA,GAC7DzV,IAAM0V,EAAS;AACrB,EAAAP,GAAQ,YAAYO,CAAQ;AAE5B,QAAMC,IAAU,IAAI,IAAID,EAAS,IAAI,CAACtV,GAAG3B,MAAM,CAAC2B,GAAG3B,CAAC,CAAC,CAAC;AACtD,SAAO;AAAA,IACH,QAAQ,CAACmX,OACLV,GAAKU,CAAM,GACJA,EAAO,IAAI,CAACnX,MAAM;AACrB,UAAI,CAAC,OAAO,cAAcA,CAAC,KAAKA,IAAI,KAAKA,KAAKuB;AAC1C,cAAM,IAAI,MAAM,kDAAkDvB,CAAC,eAAegX,CAAO,EAAE;AAC/F,aAAOC,EAASjX,CAAC;AAAA,IACjC,CAAa;AAAA,IAEL,QAAQ,CAACsW,OACLG,GAAKH,CAAK,GACHA,EAAM,IAAI,CAACc,MAAW;AACzB,MAAAb,EAAK,mBAAmBa,CAAM;AAC9B,YAAMpX,IAAIkX,EAAQ,IAAIE,CAAM;AAC5B,UAAIpX,MAAM;AACN,cAAM,IAAI,MAAM,oBAAoBoX,CAAM,eAAeJ,CAAO,EAAE;AACtE,aAAOhX;AAAA,IACvB,CAAa;AAAA,EAER;AACL;AAAA;AAIA,SAASqX,GAAKC,IAAY,IAAI;AAC1B,SAAAf,EAAK,QAAQe,CAAS,GACf;AAAA,IACH,QAAQ,CAACC,OACLb,GAAQ,eAAea,CAAI,GACpBA,EAAK,KAAKD,CAAS;AAAA,IAE9B,QAAQ,CAAC3S,OACL4R,EAAK,eAAe5R,CAAE,GACfA,EAAG,MAAM2S,CAAS;AAAA,EAEhC;AACL;AAAA;AAKA,SAASE,GAAQC,GAAMC,IAAM,KAAK;AAC9B,SAAAzY,GAAQwY,CAAI,GACZlB,EAAK,WAAWmB,CAAG,GACZ;AAAA,IACH,OAAOhX,GAAM;AAET,WADAgW,GAAQ,kBAAkBhW,CAAI,GACtBA,EAAK,SAAS+W,IAAQ;AAC1B,QAAA/W,EAAK,KAAKgX,CAAG;AACjB,aAAOhX;AAAA,IACV;AAAA,IACD,OAAO4V,GAAO;AACV,MAAAI,GAAQ,kBAAkBJ,CAAK;AAC/B,UAAIqB,IAAMrB,EAAM;AAChB,UAAKqB,IAAMF,IAAQ;AACf,cAAM,IAAI,MAAM,4DAA4D;AAChF,aAAOE,IAAM,KAAKrB,EAAMqB,IAAM,CAAC,MAAMD,GAAKC;AAGtC,aAFaA,IAAM,KACCF,IACT,MAAM;AACb,gBAAM,IAAI,MAAM,+CAA+C;AAEvE,aAAOnB,EAAM,MAAM,GAAGqB,CAAG;AAAA,IAC5B;AAAA,EACJ;AACL;AAAA;AAIA,SAASC,GAAUhZ,GAAI;AACnB,SAAAyX,GAAIzX,CAAE,GACC,EAAE,QAAQ,CAAC2Y,MAASA,GAAM,QAAQ,CAAC5S,MAAO/F,EAAG+F,CAAE,EAAG;AAC7D;AAIA,SAASkT,GAAanX,GAAM6W,GAAM5S,GAAI;AAElC,MAAI4S,IAAO;AACP,UAAM,IAAI,MAAM,8BAA8BA,CAAI,8BAA8B;AACpF,MAAI5S,IAAK;AACL,UAAM,IAAI,MAAM,4BAA4BA,CAAE,8BAA8B;AAEhF,MADA8R,GAAK/V,CAAI,GACL,CAACA,EAAK;AACN,WAAO,CAAE;AACb,MAAI6D,IAAM;AACV,QAAMuT,IAAM,CAAE,GACRX,IAAS,MAAM,KAAKzW,GAAM,CAACqX,MAAM;AAEnC,QADA9Y,GAAQ8Y,CAAC,GACLA,IAAI,KAAKA,KAAKR;AACd,YAAM,IAAI,MAAM,oBAAoBQ,CAAC,EAAE;AAC3C,WAAOA;AAAA,EACf,CAAK,GACKC,IAAOb,EAAO;AACpB,aAAa;AACT,QAAIc,IAAQ,GACRC,IAAO;AACX,aAASlY,IAAIuE,GAAKvE,IAAIgY,GAAMhY,KAAK;AAC7B,YAAMmY,IAAQhB,EAAOnX,CAAC,GAChBoY,IAAYb,IAAOU,GACnBI,IAAYD,IAAYD;AAC9B,UAAI,CAAC,OAAO,cAAcE,CAAS,KAC/BD,IAAYb,MAASU,KACrBI,IAAYF,MAAUC;AACtB,cAAM,IAAI,MAAM,8BAA8B;AAElD,YAAME,IAAMD,IAAY1T;AACxB,MAAAsT,IAAQI,IAAY1T;AACpB,YAAM4T,IAAU,KAAK,MAAMD,CAAG;AAE9B,UADAnB,EAAOnX,CAAC,IAAIuY,GACR,CAAC,OAAO,cAAcA,CAAO,KAAKA,IAAU5T,IAAKsT,MAAUI;AAC3D,cAAM,IAAI,MAAM,8BAA8B;AAClD,UAAKH;AAEA,QAAKK,IAGNL,IAAO,KAFP3T,IAAMvE;AAAA,UAFN;AAAA,IAKhB;AAEQ,QADA8X,EAAI,KAAKG,CAAK,GACVC;AACA;AAAA,EACZ;AACI,WAAS,IAAI,GAAG,IAAIxX,EAAK,SAAS,KAAKA,EAAK,CAAC,MAAM,GAAG;AAClD,IAAAoX,EAAI,KAAK,CAAC;AACd,SAAOA,EAAI,QAAS;AACxB;AACA,MAAMU,KAAM,CAACxZ,GAAGI,MAAOA,MAAM,IAAIJ,IAAIwZ,GAAIpZ,GAAGJ,IAAII,CAAC,GAC3CqZ,gCAAyC,CAAClB,GAAM5S,MAAO4S,KAAQ5S,IAAK6T,GAAIjB,GAAM5S,CAAE,IAChF+T,KAA0B,uBAAM;AAClC,MAAIZ,IAAM,CAAE;AACZ,WAAS9X,IAAI,GAAGA,IAAI,IAAIA;AACpB,IAAA8X,EAAI,KAAK,KAAK9X,CAAC;AACnB,SAAO8X;AACX,GAAI;AAIJ,SAASa,GAAcjY,GAAM6W,GAAM5S,GAAI6S,GAAS;AAE5C,MADAf,GAAK/V,CAAI,GACL6W,KAAQ,KAAKA,IAAO;AACpB,UAAM,IAAI,MAAM,6BAA6BA,CAAI,EAAE;AACvD,MAAI5S,KAAM,KAAKA,IAAK;AAChB,UAAM,IAAI,MAAM,2BAA2BA,CAAE,EAAE;AACnD,MAAI,gBAAA8T,GAAYlB,GAAM5S,CAAE,IAAI;AACxB,UAAM,IAAI,MAAM,sCAAsC4S,CAAI,OAAO5S,CAAE,cAAc,gBAAA8T,GAAYlB,GAAM5S,CAAE,CAAC,EAAE;AAE5G,MAAIsT,IAAQ,GACR1T,IAAM;AACV,QAAMqU,IAAMF,GAAOnB,CAAI,GACjBsB,IAAOH,GAAO/T,CAAE,IAAI,GACpBmT,IAAM,CAAE;AACd,aAAW5Y,KAAKwB,GAAM;AAElB,QADAzB,GAAQC,CAAC,GACLA,KAAK0Z;AACL,YAAM,IAAI,MAAM,oCAAoC1Z,CAAC,SAASqY,CAAI,EAAE;AAExE,QADAU,IAASA,KAASV,IAAQrY,GACtBqF,IAAMgT,IAAO;AACb,YAAM,IAAI,MAAM,qCAAqChT,CAAG,SAASgT,CAAI,EAAE;AAE3E,SADAhT,KAAOgT,GACAhT,KAAOI,GAAIJ,KAAOI;AACrB,MAAAmT,EAAI,MAAOG,KAAU1T,IAAMI,IAAOkU,OAAU,CAAC;AACjD,UAAMC,IAAMJ,GAAOnU,CAAG;AACtB,QAAIuU,MAAQ;AACR,YAAM,IAAI,MAAM,eAAe;AACnC,IAAAb,KAASa,IAAM;AAAA,EACvB;AAEI,MADAb,IAASA,KAAUtT,IAAKJ,IAAQsU,GAC5B,CAACrB,KAAWjT,KAAOgT;AACnB,UAAM,IAAI,MAAM,gBAAgB;AACpC,MAAI,CAACC,KAAWS,IAAQ;AACpB,UAAM,IAAI,MAAM,qBAAqBA,CAAK,EAAE;AAChD,SAAIT,KAAWjT,IAAM,KACjBuT,EAAI,KAAKG,MAAU,CAAC,GACjBH;AACX;AAAA;AAIA,SAASiB,GAAM7D,GAAK;AAChB,EAAAjW,GAAQiW,CAAG;AACX,QAAM8D,IAAO,KAAK;AAClB,SAAO;AAAA,IACH,QAAQ,CAACtU,MAAU;AACf,UAAI,CAAC3F,GAAQ2F,CAAK;AACd,cAAM,IAAI,MAAM,yCAAyC;AAC7D,aAAOmT,GAAa,MAAM,KAAKnT,CAAK,GAAGsU,GAAM9D,CAAG;AAAA,IACnD;AAAA,IACD,QAAQ,CAACiC,OACLR,GAAQ,gBAAgBQ,CAAM,GACvB,WAAW,KAAKU,GAAaV,GAAQjC,GAAK8D,CAAI,CAAC;AAAA,EAE7D;AACL;AAAA;AAMA,SAASC,GAAOxB,GAAMyB,IAAa,IAAO;AAEtC,MADAja,GAAQwY,CAAI,GACRA,KAAQ,KAAKA,IAAO;AACpB,UAAM,IAAI,MAAM,mCAAmC;AACvD,MAAI,gBAAAgB,GAAY,GAAGhB,CAAI,IAAI,MAAM,gBAAAgB,GAAYhB,GAAM,CAAC,IAAI;AACpD,UAAM,IAAI,MAAM,wBAAwB;AAC5C,SAAO;AAAA,IACH,QAAQ,CAAC/S,MAAU;AACf,UAAI,CAAC3F,GAAQ2F,CAAK;AACd,cAAM,IAAI,MAAM,0CAA0C;AAC9D,aAAOiU,GAAc,MAAM,KAAKjU,CAAK,GAAG,GAAG+S,GAAM,CAACyB,CAAU;AAAA,IAC/D;AAAA,IACD,QAAQ,CAAC/B,OACLR,GAAQ,iBAAiBQ,CAAM,GACxB,WAAW,KAAKwB,GAAcxB,GAAQM,GAAM,GAAGyB,CAAU,CAAC;AAAA,EAExE;AACL;AAoHA,MAAMC,KAA0C,OAAO,WAAW,KAAK,CAAE,CAAA,EAAE,YAAa,cACpF,OAAO,WAAW,cAAe,YAexBC,KAASD,KAAmB;AAAA,EACrC,OAAO/Z,GAAG;AAAE,WAAAD,GAAOC,CAAC,GAAUA,EAAE,SAAQ;AAAA,EAAK;AAAA,EAC7C,OAAOyC,GAAG;AACN,WAAA0U,EAAK,UAAU1U,CAAC,GACT,WAAW,WAAWA,GAAG,EAAE,mBAAmB,SAAQ,CAAE;AAAA,EAClE;AACL,IAAI,gBAAAkE,GAAM,gBAAAkT,GAAO,CAAC,GAAG,gBAAAlC,GAAS,kEAAkE,GAAG,gBAAAS,GAAQ,CAAC,GAAG,gBAAAH,GAAK,EAAE,CAAC,GA4CjHgC,gCAAuC,CAACC,MAAQ,gBAAAvT,GAAM,gBAAAgT,GAAM,EAAE,GAAG,gBAAAhC,GAASuC,CAAG,GAAG,gBAAAjC,GAAK,EAAE,CAAC,GAUjFkC,KAAS,gBAAAF,GAAU,4DAA4D,GAsK/EG,KAAO;AAAA,EAChB,QAAQ,CAAC9Y,MAAS,IAAI,YAAW,EAAG,OAAOA,CAAI;AAAA,EAC/C,QAAQ,CAACF,MAAQ,IAAI,YAAW,EAAG,OAAOA,CAAG;AACjD,GAGMiZ,KAAuC,OAAO,WAAW,KAAK,CAAE,CAAA,EAAE,SAAU,cAC9E,OAAO,WAAW,WAAY,YAE5BC,KAAa;AAAA,EACf,OAAOhZ,GAAM;AAAE,WAAAvB,GAAOuB,CAAI,GAAUA,EAAK,MAAK;AAAA,EAAK;AAAA,EACnD,OAAOmB,GAAG;AAAE,WAAA0U,EAAK,OAAO1U,CAAC,GAAU,WAAW,QAAQA,CAAC;AAAA,EAAI;AAC/D,GASaoT,KAAMwE,KACbC,KACA,gBAAA3T,GAAM,gBAAAkT,GAAO,CAAC,GAAG,gBAAAlC,GAAS,kBAAkB,GAAG,gBAAAM,GAAK,EAAE,GAAG,gBAAAO,GAAU,CAAC/V,MAAM;AACxE,MAAI,OAAOA,KAAM,YAAYA,EAAE,SAAS,MAAM;AAC1C,UAAM,IAAI,UAAU,oCAAoC,OAAOA,CAAC,gBAAgBA,EAAE,MAAM,EAAE;AAC9F,SAAOA,EAAE,YAAa;AAC9B,CAAK,CAAC;AC5nBN,SAAS8X,GAAW3a,GAAGI,GAAG;AACtB,MAAIJ,EAAE,WAAWI,EAAE;AACf,WAAO;AACX,WAASY,IAAI,GAAGA,IAAIhB,EAAE,QAAQgB;AAC1B,QAAIhB,EAAEgB,CAAC,MAAMZ,EAAEY,CAAC;AACZ,aAAO;AACf,SAAO;AACX;AAEA,SAASjB,EAAQC,GAAG;AAChB,SAAOA,aAAa,cAAe,YAAY,OAAOA,CAAC,KAAKA,EAAE,YAAY,SAAS;AACvF;AA4BA,MAAM4a,KAAa,CAAC/Z,MAAQ,IAAI,SAASA,EAAI,QAAQA,EAAI,YAAYA,EAAI,UAAU;AAMnF,SAASga,EAAcvT,GAAK;AACxB,SAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,MAAM;AACnD;AACA,SAASwT,EAAM5E,GAAK;AAChB,SAAO,OAAO,cAAcA,CAAG;AACnC;AAwBA,MAAM6E,KAAc,CAACxY,MAAQ;AACzB,MAAIA,MAAQ,QAAQ,OAAOA,KAAQ,YAAY,CAACyY,EAAQzY,CAAG,KAAK,CAACxC,EAAQwC,CAAG,KAAK,CAACuY,EAAMvY,CAAG;AACvF,UAAM,IAAI,MAAM,qEAAqEA,CAAG,KAAK,OAAOA,CAAG,GAAG;AAE9G,SAAO;AAAA,IACH,aAAa0Y,GAAGjV,GAAO;AACnB,UAAIzD,MAAQ;AACR;AACJ,UAAIyY,EAAQzY,CAAG;AACX,eAAOA,EAAI,aAAa0Y,GAAGjV,CAAK;AACpC,UAAIkV;AAOJ,UANI,OAAO3Y,KAAQ,WACf2Y,IAAU3Y,IACL,OAAOA,KAAQ,aACpB2Y,IAAUC,EAAK,QAAQF,EAAE,OAAO1Y,CAAG,IACnC,OAAO2Y,KAAY,aACnBA,IAAU,OAAOA,CAAO,IACxBA,MAAY,UAAaA,MAAYlV;AACrC,cAAMiV,EAAE,IAAI,iBAAiBC,CAAO,QAAQ3Y,CAAG,QAAQyD,CAAK,KAAK,OAAOA,CAAK,GAAG;AAAA,IACvF;AAAA,IACD,aAAaoV,GAAG;AACZ,UAAIF;AASJ,UARIF,EAAQzY,CAAG,IACX2Y,IAAU,OAAO3Y,EAAI,aAAa6Y,CAAC,CAAC,IAC/B,OAAO7Y,KAAQ,WACpB2Y,IAAU3Y,IACL,OAAOA,KAAQ,aACpB2Y,IAAUC,EAAK,QAAQC,EAAE,OAAO7Y,CAAG,IACnC,OAAO2Y,KAAY,aACnBA,IAAU,OAAOA,CAAO,IACxB,OAAOA,KAAY;AACnB,cAAME,EAAE,IAAI,iBAAiBF,CAAO,EAAE;AAC1C,aAAOA;AAAA,IACV;AAAA,EACJ;AACL,GASMG,IAAS;AAAA,EACX,MAAM;AAAA,EACN,WAAW,OAAO;AAAA;AAAA,EAClB,KAAK,CAAC9Y,MAAQ,KAAK,KAAKA,IAAM,EAAE;AAAA,EAChC,QAAQ,CAACA,MAAQ,IAAI,YAAY8Y,EAAO,IAAI9Y,CAAG,CAAC;AAAA,EAChD,OAAO,CAAC+Y,MAAOA,EAAG,KAAK,CAAC;AAAA,EACxB,OAAO,CAACA,MAAO,MAAM,KAAKA,CAAE,EAAE,IAAI,CAACta,OAAOA,MAAM,GAAG,SAAS,CAAC,EAAE,SAAS,IAAI,GAAG,CAAC;AAAA,EAChF,UAAU,CAACsa,GAAI/Y,MAAQ;AACnB,QAAI8Y,EAAO,IAAI9Y,CAAG,MAAM+Y,EAAG;AAE3B,YAAM,IAAI,MAAM,gBAAgBA,EAAG,MAAM,eAAeD,EAAO,IAAI9Y,CAAG,CAAC,EAAE;AAAA,EAC5E;AAAA,EACD,UAAU,CAACgZ,GAAOhW,GAAKhD,MAAQ;AAC3B,QAAIgD,IAAM;AACN,YAAM,IAAI,MAAM,aAAaA,CAAG,EAAE;AACtC,QAAIA,IAAMhD,IAAMgZ;AACZ,YAAM,IAAI,MAAM,eAAehW,CAAG,IAAIhD,CAAG,OAAOgZ,CAAK,EAAE;AAAA,EAC9D;AAAA,EACD,KAAK,CAACD,GAAIE,GAAOxV,GAAOyV,IAAe,OAC/B,CAACA,MAAiBH,EAAGE,CAAK,IAAIxV,OAAW,IAClC,MACXsV,EAAGE,CAAK,KAAKxV,GACN;AAAA,EAEX,KAAK,CAACT,GAAKvE,OAAO;AAAA,IACd,OAAO,KAAK,OAAOuE,IAAMvE,KAAK,EAAE;AAAA,IAChC,MAAM,KAAM,MAAOuE,IAAMvE,KAAK,KAAM;AAAA,EAC5C;AAAA,EACI,SAAS,CAACsa,GAAI/Y,GAAKmZ,IAAS,OAAU;AAClC,IAAAL,EAAO,SAASC,GAAI/Y,CAAG;AACvB,UAAM,EAAE,WAAAoZ,GAAW,MAAAC,EAAI,IAAKP,GACtBQ,IAAOD,IAAQrZ,IAAMqZ,GACrBE,IAAWD,IAAQF,MAAcE,KAASA,IAAOF,GACjD7C,IAAM,CAAE;AACd,aAAS9X,IAAI,GAAGA,IAAIsa,EAAG,QAAQta,KAAK;AAChC,UAAI,IAAIsa,EAAGta,CAAC;AAMZ,UALI0a,MACA,IAAI,CAAC,IAEL1a,MAAMsa,EAAG,SAAS,MAClB,KAAKQ,IACL,MAAM;AAEV,iBAAShY,IAAI,GAAGA,IAAI8X,GAAM9X,KAAK;AAC3B,gBAAMiY,IAAI,KAAMH,IAAO9X,IAAI;AAC3B,UAAI,IAAIiY,KACJjD,EAAI,KAAK9X,IAAI4a,IAAO9X,CAAC;AAAA,QACzC;AAAA,IACA;AACQ,WAAOgV;AAAA,EACV;AAAA,EACD,OAAO,CAACjY,MAAQ;AACZ,UAAMiY,IAAM,CAAE;AACd,QAAIkD;AACJ,eAAWhb,KAAKH;AACZ,MAAImb,MAAQ,UAAahb,MAAMgb,EAAI,MAAMA,EAAI,SACzClD,EAAI,KAAMkD,IAAM,EAAE,KAAKhb,GAAG,QAAQ,GAAK,IAEvCgb,EAAI,UAAU;AAEtB,WAAOlD;AAAA,EACV;AAAA,EACD,YAAY,CAACwC,GAAI/Y,GAAKmZ,IAAS,OAAU,IAAIL,EAAO,MAAMA,EAAO,QAAQC,GAAI/Y,GAAKmZ,CAAM,CAAC,EACpF,IAAI,CAAC1a,MAAM,IAAIA,EAAE,GAAG,IAAIA,EAAE,MAAM,GAAG,EACnC,KAAK,IAAI,CAAC;AAAA,EACf,UAAU,CAACsa,GAAIC,GAAOhW,GAAKhD,GAAKkZ,IAAe,OAAS;AACpD,IAAAJ,EAAO,SAASE,GAAOhW,GAAKhD,CAAG;AAC/B,UAAM,EAAE,WAAAoZ,GAAW,MAAAC,EAAI,IAAKP,GAMtBY,IAAQ1W,IAAMqW,IAAO,KAAK,MAAMrW,IAAMqW,CAAI,IAAI,QAC9CM,IAAU3W,IAAMhD,GAChB4Z,IAAOD,IAAUN,IAAO,KAAK,MAAMM,IAAUN,CAAI,IAAI;AAE3D,QAAIK,MAAU,UAAaA,MAAUE;AACjC,aAAOd,EAAO,IAAIC,GAAIW,GAAQN,MAAeC,IAAOrZ,KAAUqZ,IAAOrZ,IAAMgD,GAAMkW,CAAY;AACjG,QAAIQ,MAAU,UACN,CAACZ,EAAO,IAAIC,GAAIW,GAAON,MAAcpW,IAAMqW,GAAMH,CAAY;AAC7D,aAAO;AAGf,UAAMW,IAAQH,MAAU,SAAYA,IAAQ,IAAI1W,IAAMqW,GAChDjD,IAAMwD,MAAS,SAAYA,IAAOD,IAAUN;AAClD,aAAS5a,IAAIob,GAAOpb,IAAI2X,GAAK3X;AACzB,UAAI,CAACqa,EAAO,IAAIC,GAAIta,GAAG2a,GAAWF,CAAY;AAC1C,eAAO;AACf,WAAI,EAAAU,MAAS,UAAaF,MAAUE,KAC5B,CAACd,EAAO,IAAIC,GAAIa,GAAMR,KAAcC,IAAQM,IAAUN,GAAQH,CAAY;AAAA,EAGrF;AACL,GACMN,IAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAST,SAAS,CAACnO,GAAO1F,GAAK+U,MAAU;AAC5B,UAAMF,IAAO,EAAE,KAAA7U,EAAK;AACpB,IAAA0F,EAAM,KAAKmP,CAAI,GACfE,EAAM,CAACC,GAAOC,MAAY;AACtB,MAAAJ,EAAK,QAAQG,GACbC,EAAS,GACTJ,EAAK,QAAQ;AAAA,IACzB,CAAS,GACDnP,EAAM,IAAK;AAAA,EACd;AAAA,EACD,MAAM,CAACA,MAAU;AACb,UAAM8L,IAAM,CAAE;AACd,eAAW9X,KAAKgM;AACZ,MAAIhM,EAAE,UAAU,UACZ8X,EAAI,KAAK9X,EAAE,KAAK;AACxB,WAAO8X,EAAI,KAAK,GAAG;AAAA,EACtB;AAAA,EACD,KAAK,CAAC/L,GAAMC,GAAOjL,MAAQ;AACvB,UAAMjC,IAAM,IAAI,MAAM,GAAGiN,CAAI,IAAIoO,EAAK,KAAKnO,CAAK,CAAC,MAAM,OAAOjL,KAAQ,WAAWA,IAAMA,EAAI,OAAO,EAAE;AACpG,WAAIA,aAAe,SAASA,EAAI,UAC5BjC,EAAI,QAAQiC,EAAI,QACbjC;AAAA,EACV;AAAA,EACD,SAAS,CAACkN,GAAOwP,MAAS;AACtB,UAAMxV,IAAQwV,EAAK,MAAM,GAAG,GACtBC,IAAUzP,EAAM,IAAI,CAAChM,MAAMA,EAAE,GAAG;AACtC,QAAIA,IAAI;AACR,WAAOA,IAAIgG,EAAM,UACTA,EAAMhG,CAAC,MAAM,MADIA;AAEjB,MAAAyb,EAAQ,IAAK;AAIrB,QAAIT,IAAMS,EAAQ,IAAK;AACvB,WAAOzb,IAAIgG,EAAM,QAAQhG,KAAK;AAC1B,UAAI,CAACgb,KAAOA,EAAIhV,EAAMhG,CAAC,CAAC,MAAM;AAC1B;AACJ,MAAAgb,IAAMA,EAAIhV,EAAMhG,CAAC,CAAC;AAAA,IAC9B;AACQ,WAAOgb;AAAA,EACV;AACL;AAMA,MAAMU,GAAQ;AAAA,EACV,YAAYhb,GAAMib,IAAO,IAAI3P,IAAQ,CAAE,GAAE4P,IAAS,QAAWC,IAAe,GAAG;AAC3E,SAAK,MAAM,GACX,KAAK,SAAS,GACd,KAAK,SAAS,GACd,KAAK,OAAOnb,GACZ,KAAK,OAAOib,GACZ,KAAK,QAAQ3P,GACb,KAAK,SAAS4P,GACd,KAAK,eAAeC,GACpB,KAAK,OAAOjC,GAAWlZ,CAAI;AAAA,EACnC;AAAA;AAAA,EAEI,kBAAkB;AACd,QAAI,KAAK;AACL,aAAO,KAAK,OAAO,gBAAiB;AACxC,IAAI,KAAK,OAET,KAAK,KAAK2Z,EAAO,OAAO,KAAK,KAAK,MAAM,GACxCA,EAAO,SAAS,KAAK,IAAI,KAAK,KAAK,QAAQ,GAAG,KAAK,KAAK,KAAK,KAAK,kBAAkB;AAAA,EAC5F;AAAA,EACI,YAAY9V,GAAKhD,GAAK;AAClB,WAAI,KAAK,SACE,KAAK,OAAO,YAAY,KAAK,eAAegD,GAAKhD,CAAG,IAC3D,CAACA,KAED,CAAC,KAAK,KACC,KACJ8Y,EAAO,SAAS,KAAK,IAAI,KAAK,KAAK,QAAQ9V,GAAKhD,GAAK,EAAK;AAAA,EACzE;AAAA,EACI,UAAUA,GAAK;AACX,UAAMgD,IAAM,KAAK;AACjB,SAAK,OAAOhD;AACZ,UAAMuW,IAAM,KAAK,YAAYvT,GAAKhD,CAAG;AACrC,QAAI,CAAC,KAAK,KAAK,sBAAsB,CAACuW;AAClC,YAAM,KAAK,IAAI,qBAAqB,KAAK,GAAG,QAAQvW,CAAG,EAAE;AAC7D,WAAOuW;AAAA,EACf;AAAA,EACI,QAAQxR,GAAK+U,GAAO;AAChB,WAAOlB,EAAK,QAAQ,KAAK,OAAO7T,GAAK+U,CAAK;AAAA,EAClD;AAAA,EACI,SAASnc,GAAGN,GAAI;AACZ,QAAI,CAAC,OAAO,SAASM,CAAC;AAClB,YAAM,KAAK,IAAI,0BAA0BA,CAAC,EAAE;AAChD,QAAI,KAAK,MAAMA,IAAI,KAAK,KAAK;AACzB,YAAM,KAAK,IAAI,oCAAoC;AACvD,UAAM4Y,IAAMlZ,EAAG,KAAK,MAAM,KAAK,GAAG;AAClC,gBAAK,UAAUM,CAAC,GACT4Y;AAAA,EACf;AAAA;AAAA,EAEI,SAAS5Y,GAAG;AACR,QAAIA,IAAI,KAAK,KAAK;AACd,YAAM,IAAI,MAAM,0BAA0B;AAC9C,WAAO,KAAK,KAAK,SAASA,CAAC;AAAA,EACnC;AAAA,EACI,SAAS;AACL,QAAI,MAAK,KAAK,kBAEd;AAAA,UAAI,KAAK;AACL,cAAM,KAAK,IAAI,GAAG,KAAK,MAAM,4BAA4B4c,GAAQ,OAAO,KAAK,KAAK,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE;AAExG,UAAI,KAAK,MAAM,CAAC,KAAK,QAAQ;AACzB,cAAMC,IAAU1B,EAAO,QAAQ,KAAK,IAAI,KAAK,KAAK,QAAQ,EAAI;AAC9D,YAAI0B,EAAQ,QAAQ;AAChB,gBAAMC,IAAY3B,EAAO,MAAM0B,CAAO,EACjC,IAAI,CAAC,EAAE,KAAAxX,GAAK,QAAA0X,EAAM,MAAO,IAAI1X,CAAG,IAAI0X,CAAM,KAAKH,GAAQ,OAAO,KAAK,KAAK,SAASvX,GAAKA,IAAM0X,CAAM,CAAC,CAAC,GAAG,EACvG,KAAK,IAAI;AACd,gBAAM,KAAK,IAAI,uBAAuBD,CAAS,WAAW,KAAK,KAAK,MAAM,GAAG;AAAA,QAC7F;AAEgB;AAAA,MAChB;AAEQ,UAAI,CAAC,KAAK;AACN,cAAM,KAAK,IAAI,GAAG,KAAK,SAAS,UAAU,KAAK,MAAM,4BAA4BF,GAAQ,OAAO,KAAK,KAAK,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE;AAAA;AAAA,EAExI;AAAA;AAAA,EAEI,IAAI/a,GAAK;AACL,WAAOoZ,EAAK,IAAI,UAAU,KAAK,OAAOpZ,CAAG;AAAA,EACjD;AAAA,EACI,aAAa7B,GAAG;AACZ,QAAIA,IAAI,KAAK,KAAK;AACd,YAAM,KAAK,IAAI,wCAAwC;AAC3D,WAAO,IAAIwc,GAAQ,KAAK,SAASxc,CAAC,GAAG,KAAK,MAAM,KAAK,OAAO,MAAMA,CAAC;AAAA,EAC3E;AAAA,EACI,MAAMA,GAAGgd,IAAO,IAAO;AACnB,QAAI,KAAK;AACL,YAAM,KAAK,IAAI,6BAA6B;AAChD,QAAI,CAAC,OAAO,SAAShd,CAAC;AAClB,YAAM,KAAK,IAAI,2BAA2BA,CAAC,EAAE;AACjD,QAAI,KAAK,MAAMA,IAAI,KAAK,KAAK;AACzB,YAAM,KAAK,IAAI,qCAAqC;AACxD,UAAMid,IAAQ,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,MAAMjd,CAAC;AACvD,WAAKgd,KACD,KAAK,UAAUhd,CAAC,GACbid;AAAA,EACf;AAAA,EACI,KAAKD,IAAO,IAAO;AACf,QAAI,KAAK;AACL,YAAM,KAAK,IAAI,4BAA4B;AAC/C,QAAI,KAAK,MAAM,IAAI,KAAK,KAAK;AACzB,YAAM,KAAK,IAAI,qCAAqC;AACxD,UAAMxb,IAAO,KAAK,KAAK,KAAK,GAAG;AAC/B,WAAKwb,KACD,KAAK,UAAU,CAAC,GACbxb;AAAA,EACf;AAAA,EACI,IAAI,YAAY;AACZ,WAAO,KAAK,KAAK,SAAS,KAAK;AAAA,EACvC;AAAA,EACI,IAAI,aAAa;AACb,WAAO,KAAK,KAAK;AAAA,EACzB;AAAA,EACI,QAAQ;AACJ,WAAO,KAAK,OAAO,KAAK,KAAK,UAAU,CAAC,KAAK;AAAA,EACrD;AAAA;AAAA,EAEI,KAAK+W,GAAM;AACP,QAAIA,IAAO;AACP,YAAM,KAAK,IAAI,yDAAyD;AAC5E,QAAI/X,IAAM;AACV,WAAO+X,KAAM;AACT,MAAK,KAAK,WACN,KAAK,SAAS,KAAK,KAAM,GACzB,KAAK,SAAS;AAElB,YAAMjT,IAAO,KAAK,IAAIiT,GAAM,KAAK,MAAM;AACvC,WAAK,UAAUjT,GACf9E,IAAOA,KAAO8E,IAAU,KAAK,UAAU,KAAK,SAAW,KAAKA,IAAO,GACnE,KAAK,UAAU,KAAK,KAAK,SAAS,GAClCiT,KAAQjT;AAAA,IACpB;AAEQ,WAAO9E,MAAQ;AAAA,EACvB;AAAA,EACI,KAAK0c,GAAQ7X,IAAM,KAAK,KAAK;AACzB,QAAI,CAACxF,EAAQqd,CAAM;AACf,YAAM,KAAK,IAAI,8BAA8BA,CAAM,EAAE;AACzD,QAAI,KAAK;AACL,YAAM,KAAK,IAAI,4BAA4B;AAC/C,QAAI,CAACA,EAAO;AACR,YAAM,KAAK,IAAI,uBAAuB;AAE1C,aAASvO,IAAMtJ,IAAMsJ,IAAM,KAAK,KAAK,QAAQuO,EAAO,CAAC,GAAGvO,CAAG,OAAO,IAAIA,KAAO;AAIzE,UAHIA,MAAQ,MAEM,KAAK,KAAK,SAASA,IACrBuO,EAAO;AACnB;AACJ,UAAIzC,GAAWyC,GAAQ,KAAK,KAAK,SAASvO,GAAKA,IAAMuO,EAAO,MAAM,CAAC;AAC/D,eAAOvO;AAAA,IACvB;AAAA,EAEA;AACA;AAMA,MAAMwO,GAAQ;AAAA,EACV,YAAYrQ,IAAQ,IAAI;AACpB,SAAK,MAAM,GAIX,KAAK,UAAU,CAAE,GACjB,KAAK,OAAO,CAAE,GACd,KAAK,SAAS,GACd,KAAK,SAAS,GACd,KAAK,UAAU,IAAI,WAAW,CAAC,GAC/B,KAAK,WAAW,IAChB,KAAK,QAAQA,GACb,KAAK,OAAO4N,GAAW,KAAK,OAAO;AAAA,EAC3C;AAAA,EACI,QAAQtT,GAAK+U,GAAO;AAChB,WAAOlB,EAAK,QAAQ,KAAK,OAAO7T,GAAK+U,CAAK;AAAA,EAClD;AAAA,EACI,UAAU9Z,GAAK3C,GAAI;AACf,QAAI,KAAK;AACL,YAAM,KAAK,IAAI,kBAAkB;AACrC,QAAI,CAACkb,EAAMvY,CAAG,KAAKA,IAAM;AACrB,YAAM,IAAI,MAAM,0BAA0BA,CAAG,EAAE;AACnD,IAAA3C,EAAG,KAAK,IAAI,GACZ,KAAK,MAAM,KAAK,QAAQ,MAAM,GAAG2C,CAAG,CAAC,GACrC,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC3B;AAAA;AAAA,EAEI,IAAIR,GAAK;AACL,QAAI,KAAK;AACL,YAAM,KAAK,IAAI,kBAAkB;AACrC,WAAOoZ,EAAK,IAAI,UAAU,KAAK,OAAOpZ,CAAG;AAAA,EACjD;AAAA,EACI,MAAM3B,GAAG;AACL,QAAI,KAAK;AACL,YAAM,KAAK,IAAI,kBAAkB;AACrC,QAAI,KAAK;AACL,YAAM,KAAK,IAAI,4CAA4C;AAC/D,SAAK,QAAQ,KAAKA,CAAC,GACnB,KAAK,OAAOA,EAAE;AAAA,EACtB;AAAA,EACI,KAAKA,GAAG;AACJ,QAAI,KAAK;AACL,YAAM,KAAK,IAAI,kBAAkB;AACrC,QAAI,KAAK;AACL,YAAM,KAAK,IAAI,2CAA2C;AAC9D,SAAK,QAAQ,KAAK,IAAI,WAAW,CAACA,CAAC,CAAC,CAAC,GACrC,KAAK;AAAA,EACb;AAAA,EACI,OAAOU,IAAQ,IAAM;AACjB,QAAI,KAAK;AACL,YAAM,KAAK,IAAI,kBAAkB;AACrC,QAAI,KAAK;AACL,YAAM,KAAK,IAAI,wCAAwC;AAE3D,UAAMwc,IAAU,KAAK,QAAQ,OAAO,KAAK,KAAK,IAAI,CAACtc,MAAMA,EAAE,MAAM,CAAC,GAC5Duc,IAAMD,EAAQ,IAAI,CAACld,MAAMA,EAAE,MAAM,EAAE,OAAO,CAACJ,GAAGI,MAAMJ,IAAII,GAAG,CAAC,GAC5Dod,IAAM,IAAI,WAAWD,CAAG;AAC9B,aAASvc,IAAI,GAAGyc,IAAM,GAAGzc,IAAIsc,EAAQ,QAAQtc,KAAK;AAC9C,YAAMhB,IAAIsd,EAAQtc,CAAC;AACnB,MAAAwc,EAAI,IAAIxd,GAAGyd,CAAG,GACdA,KAAOzd,EAAE;AAAA,IACrB;AACQ,aAASuF,IAAM,KAAK,KAAKvE,IAAI,GAAGA,IAAI,KAAK,KAAK,QAAQA,KAAK;AACvD,YAAM0c,IAAM,KAAK,KAAK1c,CAAC;AACvB,MAAAwc,EAAI,IAAIE,EAAI,IAAI,OAAOnY,CAAG,GAAGmY,EAAI,GAAG,GACpCnY,KAAOmY,EAAI,OAAO;AAAA,IAC9B;AAEQ,QAAI5c,GAAO;AAIP,WAAK,UAAU,CAAE;AACjB,iBAAW6c,KAAK,KAAK;AACjB,QAAAA,EAAE,OAAO,KAAK,CAAC;AACnB,WAAK,OAAO,CAAE,GACd,KAAK,WAAW,IAChB,KAAK,SAAS;AAAA,IAC1B;AACQ,WAAOH;AAAA,EACf;AAAA,EACI,KAAKxX,GAAOyS,GAAM;AACd,QAAIA,IAAO;AACP,YAAM,KAAK,IAAI,0DAA0D;AAC7E,QAAIzS,KAAS,KAAKyS;AACd,YAAM,KAAK,IAAI,qBAAqBzS,CAAK,iBAAiByS,CAAI,GAAG;AACrE,WAAOA,KAAM;AACT,YAAMjT,IAAO,KAAK,IAAIiT,GAAM,IAAI,KAAK,MAAM;AAC3C,WAAK,SAAU,KAAK,UAAUjT,IAASQ,KAAUyS,IAAOjT,GACxD,KAAK,UAAUA,GACfiT,KAAQjT,GACRQ,KAAS,KAAKyS,IAAO,GACjB,KAAK,WAAW,MAChB,KAAK,SAAS,GACd,KAAK,QAAQ,KAAK,IAAI,WAAW,CAAC,KAAK,MAAM,CAAC,CAAC,GAC/C,KAAK;AAAA,IAErB;AAAA,EACA;AACA;AAEA,MAAMmF,KAAiB,CAACxd,MAAM,WAAW,KAAKA,CAAC,EAAE,QAAS;AAE1D,SAASyd,GAAY7X,GAAOyS,GAAMqF,GAAQ;AACtC,MAAIA,GAAQ;AAER,UAAMC,IAAU,OAAOtF,IAAO;AAC9B,QAAIzS,IAAQ,CAAC+X,KAAW/X,KAAS+X;AAC7B,YAAM,IAAI,MAAM,wCAAwC,CAACA,CAAO,OAAO/X,CAAK,MAAM+X,CAAO,EAAE;AAAA,EACvG,WAGY,KAAK/X,KAASA,KAAS,MAAMyS;AAC7B,UAAM,IAAI,MAAM,+CAA+CzS,CAAK,MAAM,MAAMyS,CAAI,EAAE;AAElG;AACA,SAASuF,GAAMC,GAAO;AAClB,SAAO;AAAA;AAAA,IAEH,cAAcA,EAAM;AAAA,IACpB,cAAcA,EAAM;AAAA,IACpB,MAAMA,EAAM;AAAA,IACZ,QAAQ,CAACjY,MAAU;AACf,YAAMiV,IAAI,IAAIoC,GAAS;AACvB,aAAAY,EAAM,aAAahD,GAAGjV,CAAK,GACpBiV,EAAE,OAAQ;AAAA,IACpB;AAAA,IACD,QAAQ,CAACvZ,GAAMib,IAAO,OAAO;AACzB,YAAMvB,IAAI,IAAIsB,GAAQhb,GAAMib,CAAI,GAC1B7D,IAAMmF,EAAM,aAAa7C,CAAC;AAChC,aAAAA,EAAE,OAAQ,GACHtC;AAAA,IACV;AAAA,EACJ;AACL;AAcO,SAAStS,GAASyX,GAAOre,GAAI;AAChC,MAAI,CAACob,EAAQiD,CAAK;AACd,UAAM,IAAI,MAAM,iCAAiCA,CAAK,EAAE;AAC5D,MAAI,OAAOre,KAAO;AACd,UAAM,IAAI,MAAM,iCAAiC;AACrD,SAAOoe,GAAM;AAAA,IACT,MAAMC,EAAM;AAAA,IACZ,cAAc,CAAChD,GAAGjV,MAAU;AACxB,UAAI8S;AACJ,UAAI;AACA,QAAAA,IAAMlZ,EAAGoG,CAAK;AAAA,MAC9B,SACmB+L,GAAG;AACN,cAAMkJ,EAAE,IAAIlJ,CAAC;AAAA,MAC7B;AACY,MAAAkM,EAAM,aAAahD,GAAGnC,CAAG;AAAA,IAC5B;AAAA,IACD,cAAc,CAAC,MAAM;AACjB,YAAMA,IAAMmF,EAAM,aAAa,CAAC;AAChC,UAAI;AACA,eAAOre,EAAGkZ,CAAG;AAAA,MAC7B,SACmB/G,GAAG;AACN,cAAM,EAAE,IAAIA,CAAC;AAAA,MAC7B;AAAA,IACS;AAAA,EACT,CAAK;AACL;AAmBO,MAAM6F,IAAO,CAACqG,MAAU;AAC3B,QAAMnF,IAAMkF,GAAMC,CAAK;AACvB,SAAOA,EAAM,WAAWzX,GAASsS,GAAKmF,EAAM,QAAQ,IAAInF;AAC5D,GACMoF,KAAc,CAACC,MAAQtD,EAAcsD,CAAG,KAAK,OAAOA,EAAI,UAAW,cAAc,OAAOA,EAAI,UAAW;AAMtG,SAASnD,EAAQmD,GAAK;AACzB,SAAQtD,EAAcsD,CAAG,KACrBD,GAAYC,CAAG,KACf,OAAOA,EAAI,gBAAiB,cAC5B,OAAOA,EAAI,gBAAiB,eAC3BA,EAAI,SAAS,UAAarD,EAAMqD,EAAI,IAAI;AACjD;AAYA,SAASC,KAAO;AACZ,SAAO;AAAA,IACH,QAAQ,CAAC7F,MAAS;AACd,UAAI,CAAC,MAAM,QAAQA,CAAI;AACnB,cAAM,IAAI,MAAM,gBAAgB;AACpC,YAAM5S,IAAK,CAAE;AACb,iBAAWyR,KAAQmB,GAAM;AACrB,YAAI,CAAC,MAAM,QAAQnB,CAAI,KAAKA,EAAK,WAAW;AACxC,gBAAM,IAAI,MAAM,gCAAgC;AACpD,cAAMrK,IAAOqK,EAAK,CAAC,GACbpR,IAAQoR,EAAK,CAAC;AACpB,YAAIzR,EAAGoH,CAAI,MAAM;AACb,gBAAM,IAAI,MAAM,OAAOA,CAAI,2BAA2B;AAC1D,QAAApH,EAAGoH,CAAI,IAAI/G;AAAA,MAC3B;AACY,aAAOL;AAAA,IACV;AAAA,IACD,QAAQ,CAACA,MAAO;AACZ,UAAI,CAACkV,EAAclV,CAAE;AACjB,cAAM,IAAI,MAAM,8BAA8BA,CAAE,EAAE;AACtD,aAAO,OAAO,QAAQA,CAAE;AAAA,IAC3B;AAAA,EACJ;AACL;AAMA,MAAM0Y,KAAe;AAAA,EACjB,QAAQ,CAAC9F,MAAS;AACd,QAAI,OAAOA,KAAS;AAChB,YAAM,IAAI,MAAM,wBAAwB,OAAOA,CAAI,EAAE;AACzD,QAAIA,IAAO,OAAO,OAAO,gBAAgB;AACrC,YAAM,IAAI,MAAM,wCAAwCA,CAAI,EAAE;AAClE,WAAO,OAAOA,CAAI;AAAA,EACrB;AAAA,EACD,QAAQ,CAAC5S,MAAO;AACZ,QAAI,CAACmV,EAAMnV,CAAE;AACT,YAAM,IAAI,MAAM,+BAA+B;AACnD,WAAO,OAAOA,CAAE;AAAA,EACnB;AACL;AAWA,SAAS2Y,GAAOvM,GAAG;AACf,MAAI,CAAC8I,EAAc9I,CAAC;AAChB,UAAM,IAAI,MAAM,uBAAuB;AAC3C,SAAO;AAAA,IACH,QAAQ,CAACwG,MAAS;AACd,UAAI,CAACuC,EAAMvC,CAAI,KAAK,EAAEA,KAAQxG;AAC1B,cAAM,IAAI,MAAM,eAAewG,CAAI,EAAE;AACzC,aAAOxG,EAAEwG,CAAI;AAAA,IAChB;AAAA,IACD,QAAQ,CAAC5S,MAAO;AACZ,UAAI,OAAOA,KAAO;AACd,cAAM,IAAI,MAAM,eAAe,OAAOA,CAAE,EAAE;AAC9C,aAAOoM,EAAEpM,CAAE;AAAA,IACd;AAAA,EACJ;AACL;AAWA,SAAS4Y,GAAQC,GAAW9a,IAAQ,IAAO;AACvC,MAAI,CAACoX,EAAM0D,CAAS;AAChB,UAAM,IAAI,MAAM,kCAAkCA,CAAS,EAAE;AACjE,MAAI,OAAO9a,KAAU;AACjB,UAAM,IAAI,MAAM,wCAAwC,OAAOA,CAAK,EAAE;AAC1E,QAAM+a,IAAc,OAAO,OAAOD,CAAS;AAC3C,SAAO;AAAA,IACH,QAAQ,CAACjG,MAAS;AACd,UAAI,OAAOA,KAAS;AAChB,cAAM,IAAI,MAAM,wBAAwB,OAAOA,CAAI,EAAE;AACzD,UAAI,KAAKA,IAAO,KAAK,CAACA,IAAOA,GAAM,SAAS,EAAE,GAC1CmG,IAAM,EAAE,SAASF;AACrB,MAAIE,IAAM,MACN,IAAI,EAAE,SAAS,EAAE,SAASA,GAAK,GAAG,GAClCA,IAAM;AAEV,UAAI1d,IAAI,EAAE,SAAS;AACnB,aAAOA,KAAK0d,KAAO,EAAE1d,CAAC,MAAM,KAAKA;AAC7B;AACJ,UAAI2d,IAAM,EAAE,MAAM,GAAGD,CAAG,GACpBE,IAAO,EAAE,MAAMF,GAAK1d,IAAI,CAAC;AAK7B,aAJK2d,MACDA,IAAM,MACNpG,IAAO,OACPoG,IAAM,MAAMA,IACXC,IAEE,GAAGD,CAAG,IAAIC,CAAI,KADVD;AAAA,IAEd;AAAA,IACD,QAAQ,CAAChZ,MAAO;AACZ,UAAI,OAAOA,KAAO;AACd,cAAM,IAAI,MAAM,wBAAwB,OAAOA,CAAE,EAAE;AACvD,UAAIA,MAAO;AACP,cAAM,IAAI,MAAM,8BAA8B;AAClD,UAAIkZ,IAAM;AAKV,UAJIlZ,EAAG,WAAW,GAAG,MACjBkZ,IAAM,IACNlZ,IAAKA,EAAG,MAAM,CAAC,IAEf,CAAC,yBAAyB,KAAKA,CAAE;AACjC,cAAM,IAAI,MAAM,sBAAsBA,CAAE,EAAE;AAC9C,UAAI+Y,IAAM/Y,EAAG,QAAQ,GAAG;AACxB,MAAA+Y,IAAMA,MAAQ,KAAK/Y,EAAG,SAAS+Y;AAE/B,YAAMI,IAAOnZ,EAAG,MAAM,GAAG+Y,CAAG,GACtBK,IAAQpZ,EAAG,MAAM+Y,IAAM,CAAC,EAAE,QAAQ,OAAO,EAAE,GAC3CC,IAAM,OAAOG,CAAI,IAAIL;AAC3B,UAAI,CAAC/a,KAASqb,EAAM,SAASP;AACzB,cAAM,IAAI,MAAM,kEAAkE7Y,CAAE,UAAU6Y,CAAS,GAAG;AAE9G,YAAMQ,IAAU,KAAK,IAAID,EAAM,QAAQP,CAAS,GAC1CI,IAAO,OAAOG,EAAM,MAAM,GAAGC,CAAO,CAAC,IAAI,OAAO,OAAOR,IAAYQ,CAAO,GAC1EhZ,IAAQ2Y,IAAMC;AACpB,aAAOC,IAAM,CAAC7Y,IAAQA;AAAA,IACzB;AAAA,EACJ;AACL;AAYA,SAASiZ,GAAM3c,GAAK;AAChB,MAAI,CAAC,MAAM,QAAQA,CAAG;AAClB,UAAM,IAAI,MAAM,uBAAuB,OAAOA,CAAG,EAAE;AACvD,aAAWtB,KAAKsB;AACZ,QAAI,CAAC4b,GAAYld,CAAC;AACd,YAAM,IAAI,MAAM,oBAAoBA,CAAC,EAAE;AAC/C,SAAO;AAAA,IACH,QAAQ,CAACuX,MAAS;AACd,iBAAWhE,KAAKjS,GAAK;AACjB,cAAM6b,IAAM5J,EAAE,OAAOgE,CAAI;AACzB,YAAI4F,MAAQ;AACR,iBAAOA;AAAA,MAC3B;AACY,YAAM,IAAI,MAAM,sCAAsC5F,CAAI,EAAE;AAAA,IAC/D;AAAA,IACD,QAAQ,CAAC5S,MAAO;AACZ,iBAAW4O,KAAKjS,GAAK;AACjB,cAAM6b,IAAM5J,EAAE,OAAO5O,CAAE;AACvB,YAAIwY,MAAQ;AACR,iBAAOA;AAAA,MAC3B;AACY,YAAM,IAAI,MAAM,sCAAsCxY,CAAE,EAAE;AAAA,IAC7D;AAAA,EACJ;AACL;AAEA,MAAMuZ,KAAU,CAACC,MAAU;AACvB,MAAI,CAACjB,GAAYiB,CAAK;AAClB,UAAM,IAAI,MAAM,oBAAoB;AACxC,SAAO,EAAE,QAAQA,EAAM,QAAQ,QAAQA,EAAM,OAAQ;AACzD,GACaC,KAAS,EAAE,MAAAhB,IAAM,cAAAC,IAAc,QAAAC,IAAQ,SAAAC,IAAS,OAAAU,IAAO,SAAAC,GAAS,GAwChEG,KAAS,CAACC,GAAMld,IAAK,IAAO0b,IAAS,IAAOyB,IAAQ,OAAS;AACtE,MAAI,CAACzE,EAAMwE,CAAI;AACX,UAAM,IAAI,MAAM,4BAA4BA,CAAI,EAAE;AACtD,MAAI,OAAOld,KAAO;AACd,UAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAE,EAAE;AACnE,MAAI,OAAO0b,KAAW;AAClB,UAAM,IAAI,MAAM,wCAAwC,OAAOA,CAAM,EAAE;AAC3E,MAAI,OAAOyB,KAAU;AACjB,UAAM,IAAI,MAAM,uCAAuC,OAAOA,CAAK,EAAE;AACzE,QAAMC,IAAO,OAAOF,CAAI,GAClBvB,IAAU,OAAO,KAAKyB,IAAO;AACnC,SAAO5H,EAAK;AAAA,IACR,MAAM2H,IAAQD,IAAO;AAAA,IACrB,cAAc,CAACrE,GAAGjV,MAAU;AACxB,MAAI8X,KAAU9X,IAAQ,MAClBA,IAAQA,IAAQ+X;AACpB,YAAM3d,IAAI,CAAE;AACZ,eAASY,IAAI,GAAGA,IAAIse,GAAMte;AACtB,QAAAZ,EAAE,KAAK,OAAO4F,IAAQ,IAAI,CAAC,GAC3BA,MAAU;AAEd,UAAI8S,IAAM,IAAI,WAAW1Y,CAAC,EAAE,QAAS;AACrC,UAAI,CAACmf,GAAO;AACR,YAAIha,IAAM;AACV,aAAKA,IAAM,GAAGA,IAAMuT,EAAI,UAChBA,EAAIvT,CAAG,MAAM,GADWA;AAC5B;AAEJ,QAAAuT,IAAMA,EAAI,SAASvT,CAAG;AAAA,MACtC;AACY,MAAA0V,EAAE,MAAM7Y,IAAK0W,EAAI,QAAO,IAAKA,CAAG;AAAA,IACnC;AAAA,IACD,cAAc,CAACsC,MAAM;AAEjB,YAAMpV,IAAQoV,EAAE,MAAMmE,IAAQD,IAAO,KAAK,IAAIA,GAAMlE,EAAE,SAAS,CAAC,GAC1Dhb,IAAIgC,IAAK4D,IAAQ4X,GAAe5X,CAAK;AAC3C,UAAI8S,IAAM;AACV,eAAS9X,IAAI,GAAGA,IAAIZ,EAAE,QAAQY;AAC1B,QAAA8X,KAAO,OAAO1Y,EAAEY,CAAC,CAAC,KAAM,KAAK,OAAOA,CAAC;AACzC,aAAI8c,KAAUhF,IAAMiF,MAChBjF,KAAOA,IAAMiF,KAAWA,IACrBjF;AAAA,IACV;AAAA,IACD,UAAU,CAAC9S,MAAU;AACjB,UAAI,OAAOA,KAAU;AACjB,cAAM,IAAI,MAAM,0BAA0BA,CAAK,EAAE;AACrD,aAAA6X,GAAY7X,GAAO,KAAKwZ,GAAM,CAAC,CAAC1B,CAAM,GAC/B9X;AAAA,IACV;AAAA,EACT,CAAK;AACL,GAkBayZ,IAAwB,gBAAAJ,GAAO,GAAG,EAAI,GAsC7CK,KAAO,CAACnd,GAAKoa,MAAS/E,EAAK;AAAA,EAC7B,MAAMrV;AAAA,EACN,cAAc,CAAC0Y,GAAGjV,MAAUiV,EAAE,UAAU1Y,GAAK,CAACmd,MAAS/C,EAAK,MAAM+C,GAAM1Z,CAAK,CAAC;AAAA,EAC9E,cAAc,CAAC,MAAM,EAAE,SAASzD,GAAKoa,EAAK,IAAI;AAAA,EAC9C,UAAU,CAAC3W,MAAU;AACjB,QAAI,OAAOA,KAAU;AACjB,YAAM,IAAI,MAAM,mCAAmC,OAAOA,CAAK,EAAE;AACrE,WAAI2W,EAAK,YACLA,EAAK,SAAS3W,CAAK,GAChBA;AAAA,EACV;AACL,CAAC,GACK2Z,KAAU,CAACpd,GAAKub,GAAQnB,MAAS;AACnC,QAAMlE,IAAOlW,IAAM,GACbwb,IAAU,MAAMtF,IAAO,IAEvBmH,IAAiB,CAAC5Z,MAAU;AAC9B,QAAI,CAAC8U,EAAM9U,CAAK;AACZ,YAAM,IAAI,MAAM,wCAAwCA,CAAK,EAAE;AACnE,QAAIA,IAAQ,CAAC+X,KAAW/X,KAAS+X;AAC7B,YAAM,IAAI,MAAM,2CAA2C,CAACA,CAAO,OAAO/X,CAAK,MAAM+X,CAAO,EAAE;AAAA,EAErG,GACK8B,IAAS,KAAKpH,GACdqH,IAAmB,CAAC9Z,MAAU;AAChC,QAAI,CAAC8U,EAAM9U,CAAK;AACZ,YAAM,IAAI,MAAM,wCAAwCA,CAAK,EAAE;AACnE,QAAI,IAAIA,KAASA,KAAS6Z;AACtB,YAAM,IAAI,MAAM,gDAAgD7Z,CAAK,MAAM6Z,CAAM,EAAE;AAAA,EAE1F;AACD,SAAOH,GAAKnd,GAAK;AAAA,IACb,OAAOoa,EAAK;AAAA,IACZ,MAAMA,EAAK;AAAA,IACX,UAAUmB,IAAS8B,IAAiBE;AAAA,EAC5C,CAAK;AACL,GAEaC,KAAwB,gBAAAJ,GAAQ,GAAG,IAAO;AAAA,EACnD,MAAM,CAACD,GAAMna,MAAQma,EAAK,UAAUna,GAAK,EAAI;AAAA,EAC7C,OAAO,CAACma,GAAM1Z,MAAU0Z,EAAK,UAAU,GAAG1Z,GAAO,EAAI;AACzD,CAAC,GAqCYga,IAAqB,gBAAAL,GAAQ,GAAG,IAAO;AAAA,EAChD,MAAM,CAACD,GAAMna,MAAQma,EAAK,SAASna,CAAG;AAAA,EACtC,OAAO,CAACma,GAAM1Z,MAAU0Z,EAAK,SAAS,GAAG1Z,CAAK;AAClD,CAAC,GA4BYia,KAAuB,gBAAArI,EAAK;AAAA,EACrC,MAAM;AAAA,EACN,cAAc,CAACqD,GAAGjV,MAAUiV,EAAE,KAAKjV,IAAQ,IAAI,CAAC;AAAA,EAChD,cAAc,CAACoV,MAAM;AACjB,UAAMpV,IAAQoV,EAAE,KAAM;AACtB,QAAIpV,MAAU,KAAKA,MAAU;AACzB,YAAMoV,EAAE,IAAI,uBAAuBpV,CAAK,EAAE;AAC9C,WAAOA,MAAU;AAAA,EACpB;AAAA,EACD,UAAU,CAACA,MAAU;AACjB,QAAI,OAAOA,KAAU;AACjB,YAAM,IAAI,MAAM,uBAAuBA,CAAK,EAAE;AAClD,WAAOA;AAAA,EACV;AACL,CAAC,GAkBKka,KAAc,CAAC3d,GAAKH,IAAK,OAAU;AACrC,MAAI,OAAOA,KAAO;AACd,UAAM,IAAI,MAAM,mCAAmC,OAAOA,CAAE,EAAE;AAClE,QAAM+d,IAAUpF,GAAYxY,CAAG,GACzB6d,IAAOrgB,EAAQwC,CAAG;AACxB,SAAOqV,EAAK;AAAA,IACR,MAAM,OAAOrV,KAAQ,WAAWA,IAAM;AAAA,IACtC,cAAc,CAAC0Y,GAAGjV,MAAU;AACxB,MAAKoa,KACDD,EAAQ,aAAalF,GAAGjV,EAAM,MAAM,GACxCiV,EAAE,MAAM7Y,IAAKwb,GAAe5X,CAAK,IAAIA,CAAK,GACtCoa,KACAnF,EAAE,MAAM1Y,CAAG;AAAA,IAClB;AAAA,IACD,cAAc,CAAC6Y,MAAM;AACjB,UAAI1V;AACJ,UAAI0a,GAAM;AACN,cAAMC,IAAOjF,EAAE,KAAK7Y,CAAG;AACvB,YAAI,CAAC8d;AACD,gBAAMjF,EAAE,IAAI,+BAA+B;AAC/C,QAAA1V,IAAQ0V,EAAE,MAAMiF,IAAOjF,EAAE,GAAG,GAC5BA,EAAE,MAAM7Y,EAAI,MAAM;AAAA,MAClC;AAEgB,QAAAmD,IAAQ0V,EAAE,MAAM7Y,MAAQ,OAAO6Y,EAAE,YAAY+E,EAAQ,aAAa/E,CAAC,CAAC;AAExE,aAAOhZ,IAAKwb,GAAelY,CAAK,IAAIA;AAAA,IACvC;AAAA,IACD,UAAU,CAACM,MAAU;AACjB,UAAI,CAACjG,EAAQiG,CAAK;AACd,cAAM,IAAI,MAAM,wBAAwBA,CAAK,EAAE;AACnD,aAAOA;AAAA,IACV;AAAA,EACT,CAAK;AACL,GAsCasa,KAAS,CAAC/d,GAAKH,IAAK,OAAUoE,GAAS+Z,GAAML,GAAY3d,GAAKH,CAAE,GAAGoY,EAAI,GAAG,CAACxU,MAAU;AAE9F,MAAI,OAAOA,KAAU;AACjB,UAAM,IAAI,MAAM,wBAAwB,OAAOA,CAAK,EAAE;AAC1D,SAAOA;AACX,CAAC;AAuCM,SAASua,GAAMtC,GAAOuC,GAAM;AAC/B,MAAI,CAACxF,EAAQiD,CAAK;AACd,UAAM,IAAI,MAAM,8BAA8BA,CAAK,EAAE;AACzD,MAAI,CAACC,GAAYsC,CAAI;AACjB,UAAM,IAAI,MAAM,6BAA6BvC,CAAK,EAAE;AACxD,SAAOrG,EAAK;AAAA,IACR,MAAMqG,EAAM;AAAA,IACZ,cAAc,CAAChD,GAAGjV,MAAU;AACxB,UAAIya;AACJ,UAAI;AACA,QAAAA,IAAaD,EAAK,OAAOxa,CAAK;AAAA,MAC9C,SACmB+L,GAAG;AACN,cAAMkJ,EAAE,IAAI,KAAKlJ,CAAC;AAAA,MAClC;AACY,aAAOkM,EAAM,aAAahD,GAAGwF,CAAU;AAAA,IAC1C;AAAA,IACD,cAAc,CAAC,MAAM;AACjB,YAAMA,IAAaxC,EAAM,aAAa,CAAC;AACvC,UAAI;AACA,eAAOuC,EAAK,OAAOC,CAAU;AAAA,MAC7C,SACmB1O,GAAG;AACN,cAAM,EAAE,IAAI,KAAKA,CAAC;AAAA,MAClC;AAAA,IACS;AAAA,EACT,CAAK;AACL;AAkIO,SAAS2O,GAASC,GAAM1C,GAAO2C,GAAK;AACvC,MAAI,CAAC5F,EAAQ2F,CAAI,KAAK,CAAC3F,EAAQiD,CAAK;AAChC,UAAM,IAAI,MAAM,8CAA8C0C,CAAI,UAAU1C,CAAK,EAAE;AACvF,SAAOrG,EAAK;AAAA,IACR,MAAMgJ,MAAQ,UAAaD,EAAK,QAAQ1C,EAAM,OAAO0C,EAAK,OAAO1C,EAAM,OAAO;AAAA,IAC9E,cAAc,CAAChD,GAAGjV,MAAU;AACxB,MAAA2a,EAAK,aAAa1F,GAAG,CAAC,CAACjV,CAAK,GACxBA,IACAiY,EAAM,aAAahD,GAAGjV,CAAK,IACtB4a,MAAQ,UACb3C,EAAM,aAAahD,GAAG2F,CAAG;AAAA,IAChC;AAAA,IACD,cAAc,CAACxF,MAAM;AACjB,UAAIuF,EAAK,aAAavF,CAAC;AACnB,eAAO6C,EAAM,aAAa7C,CAAC;AAC1B,MAAIwF,MAAQ,UACb3C,EAAM,aAAa7C,CAAC;AAAA,IAE3B;AAAA,EACT,CAAK;AACL;AA0DO,SAASyF,GAAStM,GAAG;AACxB,SAAOqD,EAAK;AAAA,IACR,cAAc,CAACkJ,GAAI9a,MAAU;AACzB,UAAIA,MAAUuO;AACV,cAAM,IAAI,MAAM,2BAA2BvO,CAAK,UAAUuO,CAAC,GAAG;AAAA,IACrE;AAAA,IACD,cAAc,CAACwM,MAAOxM;AAAA,EAC9B,CAAK;AACL;AACA,SAASyM,GAAOC,GAAQ;AACpB,MAAI3B,IAAO;AACX,aAAW4B,KAAKD,GAAQ;AACpB,QAAIC,EAAE,SAAS;AACX;AACJ,QAAI,CAACpG,EAAMoG,EAAE,IAAI;AACb,YAAM,IAAI,MAAM,8BAA8B5B,CAAI,EAAE;AACxD,IAAAA,KAAQ4B,EAAE;AAAA,EAClB;AACI,SAAO5B;AACX;AAgBO,SAAS6B,EAAOF,GAAQ;AAC3B,MAAI,CAACpG,EAAcoG,CAAM;AACrB,UAAM,IAAI,MAAM,sCAAsCA,CAAM,EAAE;AAClE,aAAWlU,KAAQkU;AACf,QAAI,CAACjG,EAAQiG,EAAOlU,CAAI,CAAC;AACrB,YAAM,IAAI,MAAM,iBAAiBA,CAAI,mBAAmB;AAEhE,SAAO6K,EAAK;AAAA,IACR,MAAMoJ,GAAO,OAAO,OAAOC,CAAM,CAAC;AAAA,IAClC,cAAc,CAAChG,GAAGjV,MAAU;AACxB,MAAAiV,EAAE,QAAQjV,GAAO,CAACuW,MAAY;AAC1B,mBAAWxP,KAAQkU;AACf,UAAA1E,EAAQxP,GAAM,MAAMkU,EAAOlU,CAAI,EAAE,aAAakO,GAAGjV,EAAM+G,CAAI,CAAC,CAAC;AAAA,MACjF,CAAa;AAAA,IACJ;AAAA,IACD,cAAc,CAACqO,MAAM;AACjB,YAAMtC,IAAM,CAAE;AACd,aAAAsC,EAAE,QAAQtC,GAAK,CAACyD,MAAY;AACxB,mBAAWxP,KAAQkU;AACf,UAAA1E,EAAQxP,GAAM,MAAO+L,EAAI/L,CAAI,IAAIkU,EAAOlU,CAAI,EAAE,aAAaqO,CAAC,CAAE;AAAA,MAClF,CAAa,GACMtC;AAAA,IACV;AAAA,IACD,UAAU,CAAC9S,MAAU;AACjB,UAAI,OAAOA,KAAU,YAAYA,MAAU;AACvC,cAAM,IAAI,MAAM,yBAAyBA,CAAK,EAAE;AACpD,aAAOA;AAAA,IACV;AAAA,EACT,CAAK;AACL;AAsDO,SAASob,GAAM7e,GAAK0b,GAAO;AAC9B,MAAI,CAACjD,EAAQiD,CAAK;AACd,UAAM,IAAI,MAAM,8BAA8BA,CAAK,EAAE;AAGzD,QAAMkC,IAAUpF,GAAY,OAAOxY,KAAQ,WAAW,MAAMA,CAAG,KAAKA,CAAG;AACvE,SAAOqV,EAAK;AAAA,IACR,MAAM,OAAOrV,KAAQ,YAAY0b,EAAM,OAAO1b,IAAM0b,EAAM,OAAO;AAAA,IACjE,cAAc,CAAChD,GAAGjV,MAAU;AACxB,YAAM8a,IAAK7F;AACX,MAAA6F,EAAG,QAAQ9a,GAAO,CAACuW,MAAY;AAC3B,QAAKxc,EAAQwC,CAAG,KACZ4d,EAAQ,aAAalF,GAAGjV,EAAM,MAAM;AACxC,iBAAS,IAAI,GAAG,IAAIA,EAAM,QAAQ;AAC9B,UAAAuW,EAAQ,GAAG,CAAC,IAAI,MAAM;AAClB,kBAAM4B,IAAMnY,EAAM,CAAC,GACbqb,IAAWpG,EAAE;AAEnB,gBADAgD,EAAM,aAAahD,GAAGkD,CAAG,GACrBpe,EAAQwC,CAAG,GAAG;AAEd,kBAAIA,EAAI,SAASue,EAAG,MAAMO;AACtB;AACJ,oBAAM3f,IAAOof,EAAG,OAAO,EAAK,EAAE,SAASO,GAAUP,EAAG,GAAG;AAGvD,kBAAInG,GAAWjZ,EAAK,SAAS,GAAGa,EAAI,MAAM,GAAGA,CAAG;AAC5C,sBAAMue,EAAG,IAAI,wDAAwD3C,CAAG,SAASzc,CAAI,EAAE;AAAA,YACvH;AAAA,UACA,CAAqB;AAAA,MAErB,CAAa,GACG3B,EAAQwC,CAAG,KACX0Y,EAAE,MAAM1Y,CAAG;AAAA,IAClB;AAAA,IACD,cAAc,CAAC6Y,MAAM;AACjB,YAAMtC,IAAM,CAAE;AACd,aAAAsC,EAAE,QAAQtC,GAAK,CAACyD,MAAY;AACxB,YAAIha,MAAQ;AACR,mBAASvB,IAAI,GAAG,CAACoa,EAAE,MAAK,MACpBmB,EAAQ,GAAGvb,CAAC,IAAI,MAAM8X,EAAI,KAAKmF,EAAM,aAAa7C,CAAC,CAAC,CAAC,GACjD,EAAA6C,EAAM,QAAQ7C,EAAE,YAAY6C,EAAM,QAFdjd;AAExB;AAAA,iBAICjB,EAAQwC,CAAG;AAChB,mBAASvB,IAAI,KAAIA,KAAK;AAClB,gBAAI2Z,GAAWS,EAAE,MAAM7Y,EAAI,QAAQ,EAAI,GAAGA,CAAG,GAAG;AAE5C,cAAA6Y,EAAE,MAAM7Y,EAAI,MAAM;AAClB;AAAA,YAC5B;AACwB,YAAAga,EAAQ,GAAGvb,CAAC,IAAI,MAAM8X,EAAI,KAAKmF,EAAM,aAAa7C,CAAC,CAAC,CAAC;AAAA,UAC7E;AAAA,aAEqB;AACD,cAAI6B;AACJ,UAAAV,EAAQ,YAAY,MAAOU,IAASkD,EAAQ,aAAa/E,CAAC,CAAE;AAC5D,mBAAS,IAAI,GAAG,IAAI6B,GAAQ;AACxB,YAAAV,EAAQ,GAAG,CAAC,IAAI,MAAMzD,EAAI,KAAKmF,EAAM,aAAa7C,CAAC,CAAC,CAAC;AAAA,QAC7E;AAAA,MACA,CAAa,GACMtC;AAAA,IACV;AAAA,IACD,UAAU,CAAC9S,MAAU;AACjB,UAAI,CAAC,MAAM,QAAQA,CAAK;AACpB,cAAM,IAAI,MAAM,wBAAwBA,CAAK,EAAE;AACnD,aAAOA;AAAA,IACV;AAAA,EACT,CAAK;AACL;AAoBO,SAASsb,GAAIrD,GAAOsD,GAAU;AACjC,MAAI,CAACvG,EAAQiD,CAAK;AACd,UAAM,IAAI,MAAM,4BAA4BA,CAAK,EAAE;AACvD,MAAI,CAACpD,EAAc0G,CAAQ;AACvB,UAAM,IAAI,MAAM,sCAAsC;AAC1D,QAAMC,IAAe,oBAAI,IAAK;AAC9B,aAAW9O,KAAK6O;AACZ,IAAAC,EAAa,IAAID,EAAS7O,CAAC,GAAGA,CAAC;AACnC,SAAOkF,EAAK;AAAA,IACR,MAAMqG,EAAM;AAAA,IACZ,cAAc,CAAChD,GAAGjV,MAAUiY,EAAM,aAAahD,GAAGsG,EAASvb,CAAK,CAAC;AAAA,IACjE,cAAc,CAACoV,MAAM;AACjB,YAAMqG,IAAUxD,EAAM,aAAa7C,CAAC,GAC9BrO,IAAOyU,EAAa,IAAIC,CAAO;AACrC,UAAI1U,MAAS;AACT,cAAMqO,EAAE,IAAI,wBAAwBqG,CAAO,IAAI,MAAM,KAAKD,EAAa,KAAM,CAAA,CAAC,EAAE;AACpF,aAAOzU;AAAA,IACV;AAAA,IACD,UAAU,CAAC/G,MAAU;AACjB,UAAI,OAAOA,KAAU;AACjB,cAAM,IAAI,MAAM,sBAAsBA,CAAK,EAAE;AACjD,UAAI,EAAEA,KAASub;AACX,cAAM,IAAI,MAAM,yBAAyBvb,CAAK,EAAE;AACpD,aAAOA;AAAA,IACV;AAAA,EACT,CAAK;AACL;AAmBO,SAAS0b,GAAIA,GAAKH,GAAU;AAC/B,MAAI,CAACvG,EAAQ0G,CAAG;AACZ,UAAM,IAAI,MAAM,0BAA0BA,CAAG,EAAE;AACnD,MAAI,CAAC7G,EAAc0G,CAAQ;AACvB,UAAM,IAAI,MAAM,sCAAsC;AAC1D,aAAWxU,KAAQwU;AACf,QAAI,CAACvG,EAAQuG,EAASxU,CAAI,CAAC;AACvB,YAAM,IAAI,MAAM,gBAAgBA,CAAI,mBAAmB;AAE/D,SAAO6K,EAAK;AAAA,IACR,MAAM8J,EAAI;AAAA,IACV,cAAc,CAACzG,GAAGjV,MAAU;AACxB,YAAM,EAAE,KAAA2b,GAAK,MAAAjgB,EAAI,IAAKsE,GAChB4b,IAAWL,EAASI,CAAG;AAC7B,MAAAD,EAAI,aAAazG,GAAG0G,CAAG,GACvBC,EAAS,aAAa3G,GAAGvZ,CAAI;AAAA,IAChC;AAAA,IACD,cAAc,CAAC,MAAM;AACjB,YAAMigB,IAAMD,EAAI,aAAa,CAAC,GACxBE,IAAWL,EAASI,CAAG;AAC7B,UAAI,CAACC;AACD,cAAM,EAAE,IAAI,oBAAoBD,CAAG,EAAE;AACzC,aAAO,EAAE,KAAAA,GAAK,MAAMC,EAAS,aAAa,CAAC,EAAG;AAAA,IACjD;AAAA,IACD,UAAU,CAAC5b,MAAU;AACjB,YAAM,EAAE,KAAA2b,EAAG,IAAK3b;AAEhB,UAAI,CADaub,EAASI,CAAG;AAEzB,cAAM,IAAI,MAAM,oBAAoBA,EAAI,SAAU,CAAA,EAAE;AACxD,aAAO3b;AAAA,IACV;AAAA,EACT,CAAK;AACL;AA6EO,MAAM6b,KAAU,CAACC,MAAM;AAC9B,SAASC,GAAUC,GAAWzf,GAAK;AAC/B,SAAIA,IAAMyf,MAAc,IACb,IACJA,IAAazf,IAAMyf;AAC9B;AAmDO,SAASC,GAASD,GAAW/D,GAAOiE,GAAO;AAC9C,MAAI,CAAClH,EAAQiD,CAAK;AACd,UAAM,IAAI,MAAM,iCAAiCA,CAAK,EAAE;AAC5D,MAAI,CAACnD,EAAMkH,CAAS,KAAKA,KAAa;AAClC,UAAM,IAAI,MAAM,4BAA4BA,CAAS,EAAE;AAC3D,MAAIE,MAAU,UAAa,OAAOA,KAAU;AACxC,UAAM,IAAI,MAAM,yBAAyB,OAAOA,CAAK,EAAE;AAC3D,QAAMC,IAASD,KAASL;AACxB,SAAOjK,EAAK;AAAA,IACR,MAAMqG,EAAM,OAAOA,EAAM,OAAO8D,GAAUC,GAAW/D,EAAM,IAAI,IAAI;AAAA,IACnE,cAAc,CAAChD,GAAGjV,MAAU;AACxB,YAAM8a,IAAK7F,GACL1V,IAAMub,EAAG;AACf,MAAA7C,EAAM,aAAahD,GAAGjV,CAAK;AAC3B,YAAMoc,IAAWL,GAAUC,GAAWlB,EAAG,MAAMvb,CAAG;AAClD,eAASvE,IAAI,GAAGA,IAAIohB,GAAUphB;AAC1B,QAAAia,EAAE,KAAKkH,EAAOnhB,CAAC,CAAC;AAAA,IACvB;AAAA,IACD,cAAc,CAACoa,MAAM;AACjB,YAAMgB,IAAQhB,EAAE,KACVtC,IAAMmF,EAAM,aAAa7C,CAAC;AAChC,aAAAA,EAAE,MAAM2G,GAAUC,GAAW5G,EAAE,MAAMgB,CAAK,CAAC,GACpCtD;AAAA,IACV;AAAA,EACT,CAAK;AACL;AC35DO,MAAMuJ,KAAY,GACZC,KAAUC,GAAS,QAAQF,EAAS,GAEpCG,KAAWC,EAAO;AAAA,EAC3B,cAAc,CAACxH,GAAGjV,MAAU;AACxB,QAAI,CAACA;AACD,aAAOiV,EAAE,KAAK,CAAC;AACnB,WAAOjV,GAAOA,MAAU;AACpB,MAAAiV,EAAE,KAAKjV,IAAQ,MAAO,IAAI,GAAG,CAAC,GAC9BiV,EAAE,KAAKjV,IAAQ,KAAM,CAAC;AAAA,EAE7B;AAAA,EACD,cAAc,CAACoV,MAAM;AACjB,QAAI7Y,IAAM;AACV,aAASgD,IAAM,GAAG,CAAC6V,EAAE,MAAK,GAAI7V,KAAO;AACjC,YAAM4W,IAAO,CAACf,EAAE,KAAK,CAAC;AAEtB,UADA7Y,KAAO6Y,EAAE,KAAK,CAAC,KAAM7V,IAAM,GACvB4W;AACA;AAAA,IAChB;AACQ,WAAO5Z;AAAA,EACV;AACL,CAAC,GACKmgB,KAAaC,GAASC,GAAW,GAAGC,IAAS,MAAS,CAAC,GACvDC,KAAM,MAAM;AACd,QAAM7E,IAAQ8E,GAAQ,EAAE;AACxB,SAAON,EAAO;AAAA,IACV,MAAMxE,EAAM;AAAA,IACZ,cAAc,CAAChD,GAAGjV,MAAUiY,EAAM,aAAahD,GAAGV,GAAO,OAAOvU,CAAK,CAAC;AAAA,IACtE,cAAc,CAACoV,MAAMb,GAAO,OAAO0D,EAAM,aAAa7C,CAAC,CAAC;AAAA,EAChE,CAAK;AACL,GACM4H,IAASF,GAAK,GACPG,KAAUC,EAAS;AAAA,EAC5B,oBAAoBC;AAAAA,EACpB,YAAYA;AAAAA,EACZ,cAAcA;AAAAA,EACd,MAAMC,GAAQZ,IAAUQ,CAAM;AAAA,EAC9B,WAAWA;AAAA,EACX,cAAcI,GAAQZ,IAAUU,EAAS,EAAE,YAAYC,GAAM,MAAMC,GAAQZ,IAAUW,CAAI,GAAG,MAAMJ,GAAQP,EAAQ,EAAC,CAAE,CAAC;AAC1H,CAAC;AACM,SAASa,GAAgBpZ,GAAS;AAErC,MADesQ,GAAO,OAAOtQ,CAAO,EACzB,WAAW;AAClB,UAAM,IAAI,MAAM,wBAAwB;AAChD;AACA,MAAMqZ,KAAY,CAACtiB,GAAGuiB,GAAKzF,GAAQ0F,GAAUC,OAAW;AAAA,EACpD,MAAMziB,IAAIuiB;AAAA,EACV,OAAOviB,IAAIuiB,IAAMzF,KAAW9c,KAAKuiB,KAAOviB,IAAIyiB,IAAQD;AACxD,IACaE,KAAiBR,EAAS;AAAA,EACnC,YAAYE,GAAQZ,IAAUO,GAAQ,EAAE,CAAC;AAAA,EACzC,KAAKE;AACT,CAAC,GAGYU,KAAclB,EAAO;AAAA,EAC9B,cAAc,CAACxH,GAAGjV,MAAU;AACxB,UAAM,EAAE,KAAAjE,GAAK,YAAA6hB,EAAU,IAAK5d,GACtBuD,IAAW,CAAE,GACbsa,IAAM,CAAC5Z,GAAS6Z,GAAMC,MAAU;AAClC,UAAIC,IAAMza,EAASU,CAAO,MAAMV,EAASU,CAAO,IAAI,EAAE,MAAM,IAAO,OAAO,GAAK;AAC/E,MAAA+Z,EAAI,UAAUA,EAAI,QAAQD,IAC1BC,EAAI,SAASA,EAAI,OAAOF;AAAA,IAC3B;AACD,IAAAD,EAAI9hB,EAAI,UAAU,IAAM,EAAI;AAC5B,aAASf,KAAKe,EAAI;AACd,eAAS2Q,KAAK1R,EAAE;AACZ,QAAA6iB,EAAInR,EAAE,SAASA,EAAE,MAAMA,EAAE,KAAK;AAGtC,aAAS1R,KAAKe,EAAI;AACd,MAAA8hB,EAAI7iB,EAAE,SAAS,IAAO,EAAK;AAC/B,UAAMijB,IAAQ,OAAO,KAAK1a,CAAQ,GAE5BkJ,IAAO;AAAA,MACT1Q,EAAI;AAAA,MACJ,GAAGkiB,EAAM,OAAO,CAACjjB,MAAMuI,EAASvI,CAAC,EAAE,QAAQuI,EAASvI,CAAC,EAAE,SAASA,MAAMe,EAAI,QAAQ;AAAA,MAClF,GAAGkiB,EAAM,OAAO,CAACjjB,MAAMuI,EAASvI,CAAC,EAAE,QAAQ,CAACuI,EAASvI,CAAC,EAAE,KAAK;AAAA,MAC7D,GAAGijB,EAAM,OAAO,CAACjjB,MAAM,CAACuI,EAASvI,CAAC,EAAE,QAAQuI,EAASvI,CAAC,EAAE,KAAK;AAAA,MAC7D,GAAGijB,EAAM,OAAO,CAACjjB,MAAM,CAACuI,EAASvI,CAAC,EAAE,QAAQ,CAACuI,EAASvI,CAAC,EAAE,KAAK;AAAA,IACjE;AACD,QAAIkjB,IAAqB,GACrBC,IAAa,GACbC,IAAe;AACnB,aAAS1R,KAAKD;AAGV,MAFIlJ,EAASmJ,CAAC,EAAE,QACZwR,KACA,CAAA3a,EAASmJ,CAAC,EAAE,UAEZnJ,EAASmJ,CAAC,EAAE,OACZyR,MAEAC;AAER,IAAAV,GAAe,aAAazI,GAAG;AAAA,MAC3B,YAAYxI,EACP,OAAO,CAACzR,MAAMuI,EAASvI,CAAC,EAAE,IAAI,EAC9B,IAAI,CAACA,MAAM4iB,EAAW5iB,CAAC,KAAK,IAAI,WAAW,EAAE,CAAC;AAAA,MACnD,KAAK;AAAA,QACD,oBAAAkjB;AAAA,QACA,YAAAC;AAAA,QACA,cAAAC;AAAA,QACA,MAAA3R;AAAA;AAAA,QAEA,cAAc1Q,EAAI,aAAa,IAAI,CAACf,OAAO;AAAA,UACvC,YAAYyR,EAAK,QAAQzR,EAAE,OAAO;AAAA,UAClC,MAAMA,EAAE,KAAK,IAAI,CAAC8C,MAAM2O,EAAK,QAAQ3O,EAAE,OAAO,CAAC;AAAA,UAC/C,MAAM9C,EAAE;AAAA,QAC5B,EAAkB;AAAA,QACF,WAAWe,EAAI;AAAA,MAClB;AAAA,IACb,CAAS;AAAA,EACJ;AAAA,EACD,cAAc,CAACqZ,MAAM;AACjB,UAAM,EAAE,YAAAwI,GAAY,KAAA7hB,EAAG,IAAK2hB,GAAe,aAAatI,CAAC;AACzD,QAAIwI,EAAW,WAAW7hB,EAAI;AAC1B,YAAM,IAAI,MAAM,iCAAiC;AACrD,QAAIA,EAAI,KAAK,SAAS6hB,EAAW;AAC7B,YAAM,IAAI,MAAM,6BAA6B;AACjD,UAAMS,IAAO,CAAE;AACf,aAASrjB,IAAI,GAAGA,IAAI4iB,EAAW,QAAQ5iB;AACnC,MAAAqjB,EAAKtiB,EAAI,KAAKf,CAAC,CAAC,IAAI4iB,EAAW5iB,CAAC;AACpC,QAAIuI,IAAW,CAAE;AACjB,aAASvI,IAAI,GAAGA,IAAIe,EAAI,KAAK,QAAQf;AACjC,MAAAuI,EAAS,KAAK;AAAA,QACV,SAASxH,EAAI,KAAKf,CAAC;AAAA,QACnB,GAAGsiB,GAAUtiB,GAAGe,EAAI,oBAAoBA,EAAI,YAAYA,EAAI,cAAcA,EAAI,KAAK,MAAM;AAAA,MACzG,CAAa;AAEL,QAAI,CAACwH,EAAS;AACV,YAAM,IAAI,MAAM,8BAA8B;AAClD,WAAO;AAAA,MACH,KAAK;AAAA,QACD,UAAUA,EAAS,CAAC,EAAE;AAAA,QACtB,WAAWxH,EAAI;AAAA,QACf,cAAcA,EAAI,aAAa,IAAI,CAACf,OAAO;AAAA,UACvC,SAASuI,EAASvI,EAAE,UAAU,EAAE;AAAA,UAChC,MAAMA,EAAE,KAAK,IAAI,CAAC8C,MAAMyF,EAASzF,CAAC,CAAC;AAAA,UACnC,MAAM9C,EAAE;AAAA,QAC5B,EAAkB;AAAA,MACL;AAAA,MACD,YAAYqjB;AAAA,IACf;AAAA,EACJ;AACL,CAAC,GACKC,KAAW,CAAE;AAGZ,SAASC,GAActa,GAASua,GAASzV,GAAS;AACrD,MAAIuV,GAASra,CAAO;AAChB,UAAM,IAAI,MAAM,+CAA+C;AACnE,QAAMsX,IAAWkD,GAAMD,GAAS,OAAO,KAAKzV,CAAO,EAAE,OAAO,CAACiV,GAAKtR,GAAG1R,OAAO,EAAE,GAAGgjB,GAAK,CAACtR,CAAC,GAAG1R,EAAG,IAAG,CAAA,CAAE,CAAC,GAC9Foe,IAAS,OAAO,KAAKrQ,CAAO,EAAE,OAAO,CAACiV,GAAKtR,OAAO,EAAE,GAAGsR,GAAK,CAACtR,CAAC,GAAG3D,EAAQ2D,CAAC,EAAE,MAAK,IAAK,EAAE,GACxFgS,IAAYC,GAAMpD,GAAUnC,CAAM;AACxC,EAAAkF,GAASra,CAAO,IAAI,CAAC2a,GAAOC,MAAO;AAC/B,QAAID,EAAM,YAAY3a;AAClB,YAAM,IAAI,MAAM,yDAAyD;AAC7E,UAAM,EAAE,KAAA0X,GAAK,MAAAjgB,EAAM,IAAGgjB,EAAU,OAAOE,EAAM,IAAI,GAE3C9L,IAAM,EAAE,MAAM6I,GAAK,MAAMjgB,EAAM,GAC/B+Q,IAAO,OAAO,KAAK1D,EAAQ4S,CAAG,EAAE,IAAI;AAC1C,QAAIlP,EAAK,WAAWmS,EAAM,KAAK;AAC3B,YAAM,IAAI,MAAM,4CAA4C;AAChE,aAAS5jB,IAAI,GAAGA,IAAIyR,EAAK,QAAQzR,KAAK;AAClC,YAAMmF,IAAMsM,EAAKzR,CAAC;AAClB,UAAI+N,EAAQ4S,CAAG,EAAE,KAAKxb,CAAG,EAAE,SAAS;AAChC,YAAI4I,EAAQ4S,CAAG,EAAE,KAAKxb,CAAG,EAAE,YAAYye,EAAM,KAAK5jB,CAAC,EAAE;AACjD,gBAAM,IAAI,MAAM,wBAAwBiJ,CAAO,IAAI0X,CAAG,2CAA2C5S,EAAQ4S,CAAG,EAAE,KAAKxb,CAAG,EAAE,OAAO,QAAQye,EAAM,KAAK5jB,CAAC,EAAE,OAAO,EAAE;AAElK;AAAA,MAChB;AACY,MAAA8X,EAAI,KAAKrG,EAAKzR,CAAC,CAAC,IAAI4jB,EAAM,KAAK5jB,CAAC,EAAE;AAAA,IAC9C;AACQ,WAAI+N,EAAQ4S,CAAG,EAAE,SACb7I,EAAI,OAAO/J,EAAQ4S,CAAG,EAAE,KAAKjgB,GAAMmjB,CAAE,IAClC/L;AAAA,EACV;AACD,QAAMgM,IAAU,CAAE;AAClB,aAAW/I,KAAKhN;AACZ,IAAA+V,EAAQ/I,CAAC,IAAI,CAACra,OAAU;AAAA,MACpB,SAASuI;AAAA,MACT,MAAMya,EAAU,OAAO,EAAE,KAAK3I,GAAG,MAAAra,GAAM;AAAA,MACvC,MAAM,OAAO,KAAKqN,EAAQgN,CAAC,EAAE,IAAI,EAAE,IAAI,CAAChP,MAAS;AAC7C,YAAI,EAAE,MAAA+W,GAAM,OAAAC,GAAO,SAAA9Z,EAAO,IAAK8E,EAAQgN,CAAC,EAAE,KAAKhP,CAAI;AACnD,eAAA9C,MAAYA,IAAUvI,EAAKqL,CAAI,IAC/BsW,GAAgBpZ,CAAO,GAChB,EAAE,SAAAA,GAAS,MAAA6Z,GAAM,OAAAC,EAAO;AAAA,MAC/C,CAAa;AAAA,IACb;AAEI,SAAOe;AACX;AAMO,MAAMC,KAAyB,+CACzBC,IAAW,+CACXC,KAAc,oCACdC,KAAMX,GAAcU,IAAapC,IAAS;AAAA,EACnD,eAAe;AAAA,IACX,OAAOK,EAAS,EAAE,UAAUiC,GAAS,OAAOA,GAAS,OAAOnC,GAAQ;AAAA,IACpE,MAAM;AAAA,MACF,QAAQ,EAAE,MAAM,IAAM,OAAO,GAAM;AAAA,MACnC,YAAY,EAAE,MAAM,IAAM,OAAO,GAAM;AAAA,IAC1C;AAAA,IACD,MAAM,CAACoC,MAAM,sBAAsBA,EAAE,UAAU,oBAAoB9C,GAAQ,OAAO8C,EAAE,QAAQ,CAAC,sBAAsBA,EAAE,KAAK,2BAA2BA,EAAE,MAAM;AAAA,EAChK;AAAA,EACD,QAAQ;AAAA,IACJ,OAAOlC,EAAS,EAAE,OAAOF,EAAM,CAAE;AAAA,IACjC,MAAM,EAAE,SAAS,EAAE,MAAM,IAAM,OAAO,KAAQ;AAAA,IAC9C,MAAM,CAACoC,MAAM,kBAAkBA,EAAE,OAAO,qBAAqBA,EAAE,KAAK;AAAA,EACvE;AAAA,EACD,UAAU;AAAA,IACN,OAAOlC,EAAS,EAAE,UAAUiC,EAAO,CAAE;AAAA,IACrC,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAM,OAAO,MAAQ,aAAa,EAAE,MAAM,IAAO,OAAO,GAAI,EAAI;AAAA,IACxF,MAAM,CAACC,MAAM,YAAY9C,GAAQ,OAAO8C,EAAE,QAAQ,CAAC,aAAaA,EAAE,MAAM,OAAOA,EAAE,WAAW;AAAA,EAC/F;AAAA,EACD,uBAAuB;AAAA,IACnB,OAAOlC,EAAS;AAAA,MACZ,MAAMF;AAAA,MACN,MAAMN;AAAA,MACN,UAAUyC;AAAAA,MACV,OAAOA;AAAAA,MACP,OAAOnC;AAAA,IACnB,CAAS;AAAA,IACD,MAAM;AAAA,MACF,QAAQ,EAAE,MAAM,IAAM,OAAO,GAAM;AAAA,MACnC,YAAY,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACxC,MAAM,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IACrC;AAAA,EACJ;AAAA,EACD,cAAc;AAAA,IACV,OAAOE,EAAS,EAAE;AAAA,IAClB,MAAM;AAAA,MACF,cAAc,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAC1C,YAAY,EAAE,SAAS6B,IAAwB,MAAM,IAAO,OAAO,GAAO;AAAA,MAC1E,gBAAgB,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IAC/C;AAAA,IACD,MAAM,CAACK,MAAM,kCAAkCA,EAAE,YAAY,YAAYA,EAAE,cAAc;AAAA,EAC5F;AAAA,EACD,mBAAmB;AAAA,IACf,OAAOlC,EAAS,EAAE,UAAUiC,EAAO,CAAE;AAAA,IACrC,MAAM;AAAA,MACF,cAAc,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAC1C,aAAa,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACzC,YAAY,EAAE,SAASJ,IAAwB,MAAM,IAAO,OAAO,GAAO;AAAA,MAC1E,OAAO,EAAE,SAASC,GAAU,MAAM,IAAO,OAAO,GAAO;AAAA,MACvD,gBAAgB,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IAC/C;AAAA,IACD,MAAM,CAACI,MAAM,YAAY9C,GAAQ,OAAO8C,EAAE,QAAQ,CAAC,2BAA2BA,EAAE,YAAY,YAAYA,EAAE,cAAc,QAAQA,EAAE,WAAW;AAAA,EAChJ;AAAA,EACD,iBAAiB;AAAA,IACb,OAAOlC,EAAS,EAAE,gBAAgBF,EAAM,CAAE;AAAA,IAC1C,MAAM;AAAA,MACF,cAAc,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAC1C,YAAY,EAAE,SAAS+B,IAAwB,MAAM,IAAO,OAAO,GAAO;AAAA,MAC1E,OAAO,EAAE,SAASC,GAAU,MAAM,IAAO,OAAO,GAAO;AAAA,IAC1D;AAAA,EACJ;AAAA,EACD,gBAAgB;AAAA,IACZ,OAAO9B,EAAS,EAAE,eAAeF,EAAM,CAAE;AAAA,IACzC,MAAM;AAAA,MACF,cAAc,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAC1C,gBAAgB,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IAC/C;AAAA,IACD,MAAM,CAACoC,MAAM,iCAAiCA,EAAE,YAAY,SAASA,EAAE,cAAc,OAAOA,EAAE,aAAa;AAAA,EAC9G;AAAA,EACD,UAAU;AAAA,IACN,OAAOlC,EAAS,EAAE,OAAOiC,EAAO,CAAE;AAAA,IAClC,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAM,OAAO,GAAM;AAAA,IACvC;AAAA,EACJ;AAAA,EACD,kBAAkB;AAAA,IACd,OAAOjC,EAAS;AAAA,MACZ,MAAMF;AAAA,MACN,MAAMN;AAAA,MACN,OAAOyC;AAAAA,MACP,OAAOnC;AAAA,IACnB,CAAS;AAAA,IACD,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,MAAM,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IACrC;AAAA,EACJ;AAAA,EACD,gBAAgB;AAAA,IACZ,OAAOE,EAAS;AAAA,MACZ,MAAMF;AAAA,MACN,MAAMN;AAAA,MACN,OAAOM;AAAA,IACnB,CAAS;AAAA,IACD,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,MAAM,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IACrC;AAAA,EACJ;AAAA,EACD,kBAAkB;AAAA,IACd,OAAOE,EAAS;AAAA,MACZ,UAAUiC;AAAAA,MACV,YAAYzC;AAAA,MACZ,aAAaM;AAAA,IACzB,CAAS;AAAA,IACD,MAAM;AAAA,MACF,QAAQ,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACpC,YAAY,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,MACxC,aAAa,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,IAC5C;AAAA,EACJ;AACL,CAAC,GAEKqC,KAAa,CAACC,MAAW;AAAG;AAClCD,GAAWH,GAAI,QAAQ;AACvBG,GAAWH,GAAI,YAAY;AAC3B,MAAMK,KAAgBd,GAAMtB,GAAM;AAAA,EAC9B,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,cAAc;AAAA,EACd,cAAc;AAClB,CAAC,GACKqC,IAAY,CAACvb,GAAS4a,MAAOA,EAAG5a,CAAO,GAAG,UAAUA,GAC7Cwb,KAAgB;AACRlB,GAAckB,IAAetC,GAAM;AAAA,EACpD,gBAAgB;AAAA,IACZ,OAAOD,EAAS;AAAA,MACZ,UAAUC;AAAAA,MACV,eAAeH;AAAA,MACf,iBAAiB0C,GAAWC,IAAQ3C,GAAQ,kCAAkC;AAAA,IAC1F,CAAS;AAAA,IACD,MAAM;AAAA,MACF,MAAM,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAClC,OAAO,EAAE,SAASgC,GAAU,MAAM,IAAO,OAAO,GAAO;AAAA,IAC1D;AAAA,EACJ;AAAA,EACD,mBAAmB;AAAA,IACf,OAAO9B,EAAS,EAAE;AAAA,IAClB,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,MAAM,EAAE,MAAM,IAAO,OAAO,GAAO;AAAA,MACnC,OAAO,EAAE,MAAM,IAAO,OAAO,GAAO;AAAA,MACpC,OAAO,EAAE,SAAS8B,GAAU,MAAM,IAAO,OAAO,GAAO;AAAA,IAC1D;AAAA,IACD,MAAM,CAACI,GAAGP,MAAO,4BAA4BO,EAAE,OAAO,eAAeA,EAAE,KAAK,UAAUI,EAAUJ,EAAE,MAAMP,CAAE,CAAC;AAAA,EAC9G;AAAA;AAAA,EAED,oBAAoB;AAAA,IAChB,OAAO3B,EAAS,EAAE,GAAGC,EAAI,CAAE;AAAA,IAC3B,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,OAAO,EAAE,SAAS6B,GAAU,MAAM,IAAO,OAAO,GAAO;AAAA,IAC1D;AAAA,IACD,MAAM,CAACI,GAAGtD,MAAM,sCAAsCsD,EAAE,OAAO,oBAAoBA,EAAE,CAAC;AAAA,EACzF;AAAA,EACD,UAAU;AAAA,IACN,OAAOlC,EAAS,EAAE,QAAQiC,EAAO,CAAE;AAAA,IACnC,MAAM;AAAA,MACF,QAAQ,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACpC,aAAa,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACzC,OAAO,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IACtC;AAAA,IACD,MAAM,CAACC,GAAGtD,MAAM,YAAYsD,EAAE,MAAM,uBAAuBA,EAAE,MAAM,aAAaA,EAAE,KAAK,OAAOA,EAAE,WAAW;AAAA,EAC9G;AAAA,EACD,SAAS;AAAA,IACL,OAAOlC,EAAS,EAAE,QAAQiC,EAAO,CAAE;AAAA,IACnC,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,UAAU,EAAE,MAAM,IAAO,OAAO,GAAO;AAAA,MACvC,OAAO,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IACtC;AAAA,IACD,MAAM,CAACC,GAAGtD,MAAM,iCAAiCsD,EAAE,QAAQ,2BAA2BA,EAAE,OAAO,uBAAuBA,EAAE,KAAK;AAAA,EAChI;AAAA,EACD,QAAQ;AAAA,IACJ,OAAOlC,EAAS,EAAE;AAAA,IAClB,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,OAAO,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IACtC;AAAA,IACD,MAAM,CAACkC,GAAGtD,MAAM,sDAAsDsD,EAAE,OAAO,uBAAuBA,EAAE,KAAK;AAAA,EAChH;AAAA,EACD,cAAc;AAAA,IACV,OAAOlC,EAAS;AAAA,MACZ,eAAAqC;AAAA,MACA,cAAcG,GAAWC,IAAQ3C,GAAQ,kCAAkC;AAAA,IACvF,CAAS;AAAA,IACD,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,kBAAkB,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IACjD;AAAA,IACD,MAAM,CAACoC,GAAGtD,MAAM,wBAAwBsD,EAAE,YAAY,yBAAyBA,EAAE,OAAO,uBAAuBA,EAAE,gBAAgB,qBAAqBA,EAAE,aAAa;AAAA,EACxK;AAAA,EACD,QAAQ;AAAA,IACJ,OAAOlC,EAAS,EAAE,QAAQiC,EAAO,CAAE;AAAA,IACnC,MAAM;AAAA,MACF,MAAM,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAClC,MAAM,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAClC,WAAW,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IAC1C;AAAA,EACJ;AAAA,EACD,MAAM;AAAA,IACF,OAAOjC,EAAS,EAAE,QAAQiC,EAAO,CAAE;AAAA,IACnC,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,MAAM,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAClC,OAAO,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IACtC;AAAA,IACD,MAAM,CAACC,GAAGtD,MAAM,QAAQsD,EAAE,MAAM,wBAAwBA,EAAE,OAAO,aAAaA,EAAE,KAAK,SAASA,EAAE,IAAI;AAAA,EACvG;AAAA,EACD,cAAc;AAAA,IACV,OAAOlC,EAAS,EAAE;AAAA,IAClB,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,MAAM,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAClC,OAAO,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IACtC;AAAA,IACD,MAAM,CAACkC,GAAGtD,MAAM,uBAAuBsD,EAAE,OAAO,aAAaA,EAAE,KAAK,sDAAsDA,EAAE,IAAI;AAAA,EACnI;AAAA,EACD,eAAe;AAAA,IACX,OAAOlC,EAAS,EAAE;AAAA,IAClB,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,MAAM,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAClC,WAAW,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IAC1C;AAAA,IACD,MAAM,CAACkC,GAAGtD,MAAM,wBAAwBsD,EAAE,OAAO,YAAYA,EAAE,IAAI,2BAA2BA,EAAE,SAAS;AAAA,EAC5G;AAAA,EACD,aAAa;AAAA,IACT,OAAOlC,EAAS,EAAE;AAAA,IAClB,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,MAAM,EAAE,MAAM,IAAO,OAAO,GAAO;AAAA,MACnC,WAAW,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IAC1C;AAAA,IACD,MAAM,CAACkC,GAAGtD,MAAM,+BAA+BsD,EAAE,OAAO,YAAYA,EAAE,IAAI,2BAA2BA,EAAE,SAAS;AAAA,EACnH;AAAA,EACD,iBAAiB;AAAA,IACb,OAAOlC,EAAS,EAAE,QAAQiC,GAAS,UAAUhC,GAAM;AAAA,IACnD,MAAM;AAAA,MACF,QAAQ,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACpC,MAAM,EAAE,MAAM,IAAO,OAAO,GAAO;AAAA,MACnC,aAAa,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACzC,OAAO,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IACtC;AAAA,IACD,MAAM,CAACiC,GAAGP,MAAO,YAAYtC,GAAS,QAAQ6C,EAAE,QAAQ,EAAE,OAAOA,EAAE,MAAM,CAAC,IAAII,EAAUJ,EAAE,MAAMP,CAAE,CAAC,uBAAuBO,EAAE,MAAM,aAAaA,EAAE,KAAK,OAAOA,EAAE,WAAW;AAAA,EAC7K;AAAA,EACD,gBAAgB;AAAA,IACZ,OAAOlC,EAAS,EAAE,QAAQiC,GAAS,UAAUhC,GAAM;AAAA,IACnD,MAAM;AAAA,MACF,QAAQ,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACpC,MAAM,EAAE,MAAM,IAAO,OAAO,GAAO;AAAA,MACnC,UAAU,EAAE,MAAM,IAAO,OAAO,GAAO;AAAA,MACvC,OAAO,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IACtC;AAAA,IACD,MAAM,CAACiC,GAAGP,MAAO,mBAAmBO,EAAE,QAAQ,gCAAgCA,EAAE,MAAM,UAAUA,EAAE,KAAK,SAAS7C,GAAS,QAAQ6C,EAAE,QAAQ,EAAE,OAAOA,EAAE,MAAM,CAAC,IAAII,EAAUJ,EAAE,MAAMP,CAAE,CAAC;AAAA,EACzL;AAAA,EACD,eAAe;AAAA,IACX,OAAO3B,EAAS,EAAE,QAAQiC,GAAS,UAAUhC,GAAM;AAAA,IACnD,MAAM;AAAA,MACF,MAAM,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAClC,MAAM,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAClC,WAAW,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IAC1C;AAAA,IACD,MAAM,CAACiC,GAAGP,MAAO,oBAAoBtC,GAAS,QAAQ6C,EAAE,QAAQ,EAAE,OAAOA,EAAE,MAAM,CAAC,IAAII,EAAUJ,EAAE,MAAMP,CAAE,CAAC,gBAAgBO,EAAE,IAAI,oBAAoBA,EAAE,SAAS;AAAA,EACnK;AAAA,EACD,aAAa;AAAA,IACT,OAAOlC,EAAS,EAAE,QAAQiC,GAAS,UAAUhC,GAAM;AAAA,IACnD,MAAM;AAAA,MACF,MAAM,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MAClC,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,OAAO,EAAE,MAAM,IAAM,OAAO,GAAO;AAAA,IACtC;AAAA,IACD,MAAM,CAACiC,GAAGP,MAAO,gBAAgBtC,GAAS,QAAQ6C,EAAE,QAAQ,EAAE,OAAOA,EAAE,MAAM,CAAC,IAAII,EAAUJ,EAAE,MAAMP,CAAE,CAAC,gBAAgBO,EAAE,OAAO,aAAaA,EAAE,KAAK;AAAA,EACvJ;AAAA,EACD,oBAAoB;AAAA,IAChB,OAAOlC,EAAS,EAAE,OAAOF,EAAM,CAAE;AAAA,IACjC,MAAM;AAAA,MACF,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,MAAM,EAAE,MAAM,IAAO,OAAO,GAAO;AAAA,MACnC,OAAO,EAAE,SAASgC,GAAU,MAAM,IAAO,OAAO,GAAO;AAAA,IAC1D;AAAA,IACD,MAAM,CAACI,GAAGP,MAAO,4BAA4BO,EAAE,OAAO,eAAeA,EAAE,KAAK,UAAUI,EAAUJ,EAAE,MAAMP,CAAE,CAAC;AAAA,EAC9G;AAAA,EACD,YAAY;AAAA,IACR,OAAO3B,EAAS,EAAE;AAAA,IAClB,MAAM,EAAE,eAAe,EAAE,MAAM,IAAO,OAAO,KAAQ;AAAA,IACrD,MAAM,CAACkC,MAAM,wCAAwCA,EAAE,aAAa;AAAA,EACvE;AACL,CAAC;AAC2BlC,EAAS;AAAA,EACjC,SAASL;AAAAA,EACT,OAAOA;AAAAA,EACP,WAAWG;AAAA,EACX,OAAOA;AAAA,EACP,qBAAqBmC;AACzB,CAAC;AAqCM,MAAMS,KAA2B;AACTrB,GAAcqB,IAA0BC,GAAW,CAAC,GAAG;AAAA,EAClF,QAAQ;AAAA,IACJ,OAAO3C,EAAS,EAAE;AAAA,IAClB,MAAM;AAAA,MACF,QAAQ,EAAE,MAAM,IAAM,OAAO,GAAM;AAAA,MACnC,SAAS,EAAE,MAAM,IAAO,OAAO,GAAM;AAAA,MACrC,QAAQ,EAAE,MAAM,IAAO,OAAO,GAAO;AAAA,MACrC,MAAM,EAAE,MAAM,IAAO,OAAO,GAAO;AAAA,MACnC,MAAM,EAAE,SAAS+B,IAAa,MAAM,IAAO,OAAO,GAAO;AAAA,MACzD,QAAQ,EAAE,SAASQ,IAAe,MAAM,IAAO,OAAO,GAAO;AAAA,MAC7D,OAAO,EAAE,SAAST,GAAU,MAAM,IAAO,OAAO,GAAO;AAAA,IAC1D;AAAA,IACD,MAAM,CAACI,GAAGP,MAAO,uCAAuCO,EAAE,OAAO,eAAeA,EAAE,MAAM,cAAcI,EAAUJ,EAAE,MAAMP,CAAE,CAAC,cAAcO,EAAE,MAAM;AAAA,EACpJ;AACL,CAAC;AAoBD,MAAMU,KAAYlD,GAAW,GAAG+C,IAAQ,MAAM,CAAC;AACnBzC,EAAS;AAAA,EACjC,MAAMF;AAAA,EACN,OAAOA;AAAA,EACP,QAAQmC;AAAAA,EACR,UAAUO,GAAWI,IAAW9C,GAAQ,kCAAkC;AAAA,EAC1E,OAAOyB,GAAMtB,GAAM;AAAA,IACf,eAAe;AAAA,IACf,aAAa;AAAA,IACb,QAAQ;AAAA,EAChB,CAAK;AAAA,EACD,UAAUuC,GAAWI,IAAWX,GAAS,EAAE;AAAA,EAC3C,gBAAgBA;AAAAA,EAChB,gBAAgBO,GAAWI,IAAW9C,GAAQ,kCAAkC;AACpF,CAAC;AA8CM,SAAS+C,GAAgB9b,GAAS+b,GAAcC,GAAW;AAC9D,MAAI,CAACD,EAAa;AACd,UAAM,IAAI,MAAM,qCAAqC;AACzD,SAAO5L,GAAO,OAAOuJ,GAAY,OAAO;AAAA,IACpC,KAAK,EAAE,UAAU1Z,GAAS,WAAAgc,GAAW,cAAAD,EAAc;AAAA,IACnD,YAAY,CAAE;AAAA,EACtB,CAAK,CAAC;AACN;ACznBA,SAASxF,GAAM0F,GAAU;AACvB,MAAIA,EAAS,UAAU;AAAO,UAAM,IAAI,UAAU,mBAAmB;AACrE,QAAMC,IAAW,IAAI,WAAW,GAAG;AACnC,WAASriB,IAAI,GAAGA,IAAIqiB,EAAS,QAAQriB;AACnC,IAAAqiB,EAASriB,CAAC,IAAI;AAEhB,WAAS9C,IAAI,GAAGA,IAAIklB,EAAS,QAAQllB,KAAK;AACxC,UAAMrB,IAAIumB,EAAS,OAAOllB,CAAC,GACrBolB,IAAKzmB,EAAE,WAAW,CAAC;AACzB,QAAIwmB,EAASC,CAAE,MAAM;AAAO,YAAM,IAAI,UAAUzmB,IAAI,eAAe;AACnE,IAAAwmB,EAASC,CAAE,IAAIplB;AAAA,EACnB;AACE,QAAMqlB,IAAOH,EAAS,QAChBI,IAASJ,EAAS,OAAO,CAAC,GAC1BK,IAAS,KAAK,IAAIF,CAAI,IAAI,KAAK,IAAI,GAAG,GACtCG,IAAU,KAAK,IAAI,GAAG,IAAI,KAAK,IAAIH,CAAI;AAC7C,WAASxO,EAAQ4O,GAAQ;AAOvB,QALIA,aAAkB,eAAyB,YAAY,OAAOA,CAAM,IACtEA,IAAS,IAAI,WAAWA,EAAO,QAAQA,EAAO,YAAYA,EAAO,UAAU,IAClE,MAAM,QAAQA,CAAM,MAC7BA,IAAS,WAAW,KAAKA,CAAM,KAE7B,EAAEA,aAAkB;AAAe,YAAM,IAAI,UAAU,qBAAqB;AAChF,QAAIA,EAAO,WAAW;AAAK,aAAO;AAElC,QAAIC,IAAS,GACTzJ,IAAS,GACT0J,IAAS;AACb,UAAMC,IAAOH,EAAO;AACpB,WAAOE,MAAWC,KAAQH,EAAOE,CAAM,MAAM;AAC3C,MAAAA,KACAD;AAGF,UAAMpH,KAASsH,IAAOD,KAAUH,IAAU,MAAO,GAC3C1D,IAAM,IAAI,WAAWxD,CAAI;AAE/B,WAAOqH,MAAWC,KAAM;AACtB,UAAI3N,IAAQwN,EAAOE,CAAM,GAErB3lB,IAAI;AACR,eAAS6lB,IAAMvH,IAAO,IAAIrG,MAAU,KAAKjY,IAAIic,MAAY4J,MAAQ,IAAKA,KAAO7lB;AAC3E,QAAAiY,KAAU,MAAM6J,EAAI+D,CAAG,MAAO,GAC9B/D,EAAI+D,CAAG,IAAK5N,IAAQoN,MAAU,GAC9BpN,IAASA,IAAQoN,MAAU;AAE7B,UAAIpN,MAAU;AAAK,cAAM,IAAI,MAAM,gBAAgB;AACnD,MAAAgE,IAASjc,GACT2lB;AAAA,IACN;AAEI,QAAIG,IAAMxH,IAAOrC;AACjB,WAAO6J,MAAQxH,KAAQwD,EAAIgE,CAAG,MAAM;AAClC,MAAAA;AAGF,QAAItlB,IAAM8kB,EAAO,OAAOI,CAAM;AAC9B,WAAOI,IAAMxH,GAAM,EAAEwH;AAAO,MAAAtlB,KAAO0kB,EAAS,OAAOpD,EAAIgE,CAAG,CAAC;AAC3D,WAAOtlB;AAAA,EACX;AACE,WAASulB,EAAcN,GAAQ;AAC7B,QAAI,OAAOA,KAAW;AAAY,YAAM,IAAI,UAAU,iBAAiB;AACvE,QAAIA,EAAO,WAAW;AAAK,aAAO,IAAI,WAAY;AAClD,QAAIO,IAAM,GAENN,IAAS,GACTzJ,IAAS;AACb,WAAOwJ,EAAOO,CAAG,MAAMV;AACrB,MAAAI,KACAM;AAGF,UAAM1H,KAAUmH,EAAO,SAASO,KAAOT,IAAU,MAAO,GAClDU,IAAO,IAAI,WAAW3H,CAAI;AAEhC,WAAO0H,IAAMP,EAAO,UAAQ;AAE1B,YAAMS,IAAWT,EAAO,WAAWO,CAAG;AAEtC,UAAIE,IAAW;AAAO;AAEtB,UAAIjO,IAAQkN,EAASe,CAAQ;AAE7B,UAAIjO,MAAU;AAAO;AACrB,UAAIjY,IAAI;AACR,eAASmmB,IAAM7H,IAAO,IAAIrG,MAAU,KAAKjY,IAAIic,MAAYkK,MAAQ,IAAKA,KAAOnmB;AAC3E,QAAAiY,KAAUoN,IAAOY,EAAKE,CAAG,MAAO,GAChCF,EAAKE,CAAG,IAAKlO,IAAQ,QAAS,GAC9BA,IAASA,IAAQ,QAAS;AAE5B,UAAIA,MAAU;AAAK,cAAM,IAAI,MAAM,gBAAgB;AACnD,MAAAgE,IAASjc,GACTgmB;AAAA,IACN;AAEI,QAAII,IAAM9H,IAAOrC;AACjB,WAAOmK,MAAQ9H,KAAQ2H,EAAKG,CAAG,MAAM;AACnC,MAAAA;AAEF,UAAMC,IAAM,IAAI,WAAWX,KAAUpH,IAAO8H,EAAI;AAChD,QAAItjB,IAAI4iB;AACR,WAAOU,MAAQ9H;AACb,MAAA+H,EAAIvjB,GAAG,IAAImjB,EAAKG,GAAK;AAEvB,WAAOC;AAAA,EACX;AACE,WAASvP,EAAQwI,GAAQ;AACvB,UAAMgH,IAASP,EAAazG,CAAM;AAClC,QAAIgH;AAAU,aAAOA;AACrB,UAAM,IAAI,MAAM,aAAajB,IAAO,YAAY;AAAA,EACpD;AACE,SAAO;AAAA,IACL,QAAAxO;AAAA,IACA,cAAAkP;AAAA,IACA,QAAAjP;AAAA,EACJ;AACA;ACzHA,IAAIoO,KAAW;AACAqB,GAAMrB,EAAQ;ACoDtB,MAAMvC,GAAY;AAAA,EACf;AAAA,EACD,aAGF,CAAC;AAAA,EACC;AAAA,EACA;AAAA,EACC;AAAA,EAER,cAAc;AAEZ,SAAK,gBAAgB,CAAC;AAAA,EAAA;AAAA,EAGxB,OAAOqC,GAA8C;AAC9C,gBAAA,cAAc,KAAK,GAAGA,CAAY,GAChC;AAAA,EAAA;AAAA,EAGT,OAAO,KAAKsB,GAAqD;AAE/D,UAAM5hB,IACJ4hB,aAAkB,aAAaA,IAAS,IAAI,WAAWA,CAAM,GACzDE,IAAUC,GAAgB,OAAO/hB,CAAK,GAGtCgiB,IAAK,IAAI/D,GAAY;AAG3B,WAAA+D,EAAG,eAAeF,GACXE;AAAA,EAAA;AAAA,EAGT,UAAUC,GAAuD;AAE/D,QAAI,KAAK;AAEP,aAAO,OAAO,KAAKF,GAAgB,OAAO,KAAK,YAAY,CAAC;AAI9D,QAAI,CAAC,KAAK,YAAY,CAAC,KAAK;AACpB,YAAA,IAAI,MAAM,mDAAmD;AAGrE,UAAMG,IAAQC;AAAAA,MACZ,KAAK,SAAS,SAAS;AAAA,MACvB,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAEO,WAAA,OAAO,KAAKD,GAAO,KAAK;AAAA,EAAA;AAAA,EAGjC,mBAA2B;AAEzB,QAAI,CAAC,KAAK,YAAY,CAAC,KAAK;AACpB,YAAA,IAAI,MAAM,mDAAmD;AAGrE,UAAMA,IAAQC;AAAAA,MACZ,KAAK,SAAS,SAAS;AAAA,MACvB,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAGO,WAAA,OAAO,KAAKD,GAAO,KAAK;AAAA,EAAA;AAEnC;ACpFO,MAAME,GAAuC;AAAA,EACzC,OAA2B;AAAA,EAC3B,WAA6B;AAAA,EAC9B,UAA8B;AAAA,EAC9B,oBAA8B,CAAC;AAAA,EAE/B,cAA+B;AACjC,QAAA,OAAO,SAAW;AACd,YAAA,IAAI,MAAM,WAAW;AAG7B,UAAM/d,IAAW,OAAO;AAEpB,QAAA,CAACA,GAAU;AACP,YAAA,IAAI,MAAM,0BAA0B;AAGrC,WAAAA;AAAA,EAAA;AAAA,EAGT,cAAuB;AACrB,WAAO,OAAO,SAAW,OAAe,CAAC,CAAC,OAAO,QAAQ;AAAA,EAAA;AAAA,EAG3D,UAA0B;AAClB,UAAA+K,IAAY,KAAK,YAAY;AAE5B,WAAA;AAAA,MACL,MAAM,KAAK;AAAA,MACX,WAAAA;AAAA,MACA,SAAS;AAAA,MACT,MAAM;AAAA,MACN,UAAU,KAAK;AAAA,IACjB;AAAA,EAAA;AAAA,EAGF,MAAM,UAAgD;AACpD,QAAI,KAAK;AACA,aAAA,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,SAAS,KAAK,QAAQ;AAG/D,QAAA;AACE,UAAA,CAAC,KAAK;AACF,cAAA,IAAI,MAAM,0BAA0B;AAG5C,YAAMiT,IAAW,MAAM,KAAK,YAAA,EAAc,QAAQ;AAClD,UAAIA,EAAS;AACN,oBAAA,UAAUA,EAAS,UAAU,SAAS,GACpC,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,SAAS,KAAK,QAAQ;AAG7D,YAAA,IAAI,MAAM,mBAAmB;AAAA,aAC5Bpd,GAAO;AACN,qBAAA,MAAM,gCAAgCA,CAAK,GAC5C;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,uBAAiC;AAC/B,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,MAAM,YAAYjL,GAAuD;AACnE,QAAA;AACF,UAAI,CAAC,KAAK,YAAiB,KAAA,CAAC,KAAK;AACzB,cAAA,IAAI,MAAM,0BAA0B;AAG5C,YAAMsoB,IAAiB,IAAI,cAAc,OAAOtoB,CAAO,GACjD8S,IAAS,MAAM,KAAK,YAAc,EAAA;AAAA,QACtCwV;AAAA,QACA;AAAA,MACF;AACA,aAAO,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,QAAAxV,EAAO;AAAA,aAC3C7H,GAAO;AACN,qBAAA,MAAM,uCAAuCA,CAAK,GACnD;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,gBACJsd,GACsC;AACtC,QAAI,CAAC,KAAK,YAAiB,KAAA,CAAC,KAAK;AACzB,YAAA,IAAI,MAAM,0BAA0B;AAGxC,QAAA;AACI,YAAAzR,IAAMmN,GAAY,KAAKsE,CAAc,GAErCzV,IAAS,MADE,KAAK,YAAY,EACJ,uBAAuBgE,CAAG;AACjD,aAAA;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,QAAAhE;AAAA,MACF;AAAA,aACO7H,GAAO;AACN,qBAAA,MAAM,2CAA2CA,CAAK,GACvD;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,YAAYud,GAAoC;AACpD,mBAAQ,KAAK,2CAA2C,GACjD;AAAA,EAAA;AAAA,EAGT,MAAM,WACJjT,GACsC;AAClC,QAAA;AACF,UAAI,CAAC,KAAK,YAAiB,KAAA,CAAC,KAAK;AACzB,cAAA,IAAI,MAAM,0BAA0B;AAIrC,aAAA;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,QAAQ;AAAA,MACV;AAAA,aACOtK,GAAO;AACN,qBAAA,MAAM,uCAAuCA,CAAK,GACnD;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,mBACJuK,GACAC,GACsC;AAC/B,WAAA;AAAA,MACL,SAAS;AAAA,MACT,QAAQ,KAAK;AAAA,MACb,OAAO;AAAA,IACT;AAAA,EAAA;AAEJ;AC/LO,MAAMgT,WAAyB/R,GAAmB;AAAA,EAC9C,OAA2B;AAAA,EAC3B,OAAO;AAAA,EACP,cAAc;AACzB;ACJO,MAAMgS,WAAoBhS,GAAmB;AAAA,EACzC,OAA2B;AAAA,EAC3B,OAAO;AAAA,EACP,cAAc;AACzB;ACEO,MAAMiS,GAAuC;AAAA,EACzC,OAA2B;AAAA,EAC3B,WAA6B;AAAA,EAC9B,SAA2C;AAAA,EAC3C,UAA8B;AAAA,EAC9B,oBAA8B,CAAC;AAAA,EAC/B,wBACN;AAAA,EAEF,cAAuB;AACrB,WAAO,OAAO,SAAW,OAAe,CAAC,CAAC,OAAO;AAAA,EAAA;AAAA,EAGnD,UAA0B;AAClB,UAAAvT,IAAY,KAAK,YAAY;AAE5B,WAAA;AAAA,MACL,MAAM,KAAK;AAAA,MACX,WAAAA;AAAA,MACA,SAASA,IACL,OAAO,kBAAkB,WAAW,YACpC;AAAA,MACJ,SAASA,IAAY,OAAO,kBAAkB,UAAU;AAAA,MACxD,MAAM;AAAA,MACN,UAAU,KAAK;AAAA,IACjB;AAAA,EAAA;AAAA,EAGF,MAAM,UAAgD;AACpD,QAAI,KAAK;AACA,aAAA,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,SAAS,KAAK,QAAQ;AAG/D,QAAA;AACE,UAAA,CAAC,KAAK;AACF,cAAA,IAAI,MAAM,0BAA0B;AAG5C,YAAMC,IAAS,OAAO;AACtB,UAAI,CAACA;AACG,cAAA,IAAI,MAAM,iBAAiB;AAI7B,YAAAxL,IAAW,MAAMwL,EAAO,QAAQ;AAAA,QACpC,MAAM;AAAA,QACN,QAAQ,EAAE,aAAa,GAAM;AAAA,MAAA,CAC9B;AAED,UAAI,CAACxL,KAAYA,EAAS,WAAW;AAC7B,cAAA,IAAI,MAAM,mBAAmB;AAGrC,kBAAK,4BAA4B,GAEjC,KAAK,SAASwL,GACT,KAAA,UAAUxL,EAAS,CAAC,GACzB,KAAK,oBAAoBA,GACzB,KAAK,2BAA2B,GACzB,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,SAAS,KAAK,QAAQ;AAAA,aAC1DoB,GAAO;AACN,qBAAA,MAAM,gCAAgCA,CAAK,GAC5C;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,uBAAiC;AAC/B,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,MAAM,cAAcjJ,GAAuD;AACrE,QAAA;AACF,UAAI,CAAC,KAAK,YAAiB,KAAA,CAAC,KAAK;AACzB,cAAA,IAAI,MAAM,0BAA0B;AAG5C,YAAMsT,IAAM,MAAM,KAAK,OAAO,QAAQ;AAAA,QACpC,MAAM;AAAA,QACN,QAAQtT;AAAA,MAAA,CACT;AAED,aAAO,EAAE,SAAS,IAAM,QAAQ,KAAK,MAAM,QAAQsT,EAAI;AAAA,aAChDrK,GAAO;AACN,qBAAA,MAAM,0CAA0CA,CAAK,GACtD;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,gBAAgBP,GAAgD;AAChE,QAAA,CAAC,KAAK;AACF,YAAA,IAAI,MAAM,iBAAiB;AAG/B,QAAA;AACF,YAAMoI,IAAS,MAAM,KAAK,OAAO,QAAQ;AAAA,QACvC,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,OAAApI;AAAA,QAAA;AAAA,MACF,CACD;AAEM,aAAA;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,QAAAoI;AAAA,MACF;AAAA,aACO7H,GAAO;AACN,qBAAA,MAAM,2CAA2CA,CAAK,GACvD;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,YAAYxD,GAAmC;AAC/C,QAAA,CAAC,KAAK;AACF,YAAA,IAAI,MAAM,iBAAiB;AAU5B,WAPQ,MAAM,KAAK,OAAO,QAAQ;AAAA,MACvC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,SAAAA;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EAEM;AAAA,EAET,MAAM,WACJ8N,GACsC;AAClC,QAAA;AACF,UAAI,CAAC,KAAK,YAAiB,KAAA,CAAC,KAAK;AACzB,cAAA,IAAI,MAAM,0BAA0B;AAIrC,aAAA;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,QAAQ;AAAA,MACV;AAAA,aACOtK,GAAO;AACN,qBAAA,MAAM,uCAAuCA,CAAK,GACnD;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,OAAQA,EAAgB,WAAW;AAAA,MACrC;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,mBACJuK,GACAC,GACsC;AAC/B,WAAA;AAAA,MACL,SAAS;AAAA,MACT,QAAQ,KAAK;AAAA,MACb,OAAO;AAAA,IACT;AAAA,EAAA;AAAA,EAGM,6BAAmC;AACrC,IAAC,KAAK,WAEL,KAAA,wBAAwB,CAAC5L,MAAmC;AAC3D,MAAAA,KAAYA,EAAS,SAAS,KAC3B,KAAA,UAAUA,EAAS,CAAC,GACzB,KAAK,oBAAoBA,MAEzB,KAAK,UAAU,QACf,KAAK,oBAAoB,CAAC;AAAA,IAE9B,GAGA,KAAK,OAAO,GAAG,mBAAmB,KAAK,qBAAqB;AAAA,EAAA;AAAA,EAGtD,8BAAoC;AACtC,IAAA,KAAK,UAAU,KAAK,0BACtB,KAAK,OAAO,IAAI,mBAAmB,KAAK,qBAAqB,GAC7D,KAAK,wBAAwB;AAAA,EAC/B;AAAA,EAGF,aAAmB;AACjB,SAAK,4BAA4B,GACjC,KAAK,SAAS,QACd,KAAK,UAAU,QACf,KAAK,oBAAoB,CAAC;AAAA,EAAA;AAE9B;ACrMO,MAAM+e,GAAa;AAAA,EACP;AAAA,EAEjB,cAAc;AAGR,QAFC,KAAA,qCAAqB,IAAuC,GAE7D,OAAO,SAAU;AACnB;AAGI,UAAAC,IAAW,IAAItR,GAAe;AAC/B,SAAA,eAAe,IAAI,YAAYsR,CAAQ;AAEtC,UAAAC,IAAU,IAAIV,GAAc;AAC7B,SAAA,eAAe,IAAI,WAAWU,CAAO;AAEpC,UAAAC,IAAa,IAAIN,GAAiB;AACnC,SAAA,eAAe,IAAI,eAAeM,CAAU;AAE3C,UAAAC,IAAS,IAAI7T,GAAa;AAC3B,SAAA,eAAe,IAAI,UAAU6T,CAAM;AAElC,UAAAC,IAAU,IAAIN,GAAc;AAC7B,SAAA,eAAe,IAAI,WAAWM,CAAO;AAEpC,UAAAC,IAAQ,IAAIR,GAAY;AACzB,SAAA,eAAe,IAAI,SAASQ,CAAK;AAEhC,UAAApI,IAAO,IAAIxJ,GAAW;AACvB,SAAA,eAAe,IAAI,QAAQwJ,CAAI,GAEpC,OAAO,gBAAgB;AAAA,EAAA;AAAA,EAGzB,mBAAmB;AACV,WAAA;AAAA,MACL,uBAAuB,CAACxO,MAAoB,MAAM,KAAK,cAAc;AAAA,MACrE,uBAAuB,CAACA,MAAoB,CAAC6W,MAC3C,KAAK,cAAcA,CAAI;AAAA,MACzB,qBACE,CAAC7W,MACD,CAAC8W,GAAyCppB,MACxC,KAAK,YAAYopB,GAAYppB,CAAO;AAAA,MACxC,uBACE,CAACsS,MACD,CAAC8W,GAAyCpnB,MACxC,KAAK,cAAconB,GAAYpnB,CAAI;AAAA,MACvC,yBACE,CAACsQ,MACD,CAAC8W,GAAyCtS,MACxC,KAAK,gBAAgBsS,GAAYtS,CAAG;AAAA,MACxC,oBACE,CAACxE,MACD,CAAC8W,GAAyCrS,MACxC,KAAK,WAAWqS,GAAYrS,CAAY;AAAA,MAC5C,qBACE,CAACzE,MACD,CAAC8W,GAAyC3hB,MACxC,KAAK,YAAY2hB,GAAY3hB,CAAO;AAAA,MACxC,4BACE,CAAC6K,MACD,CACE8W,GACAnS,GACAC,MAEA,KAAK,mBAAmBkS,GAAYnS,GAAQC,CAAS;AAAA,IAC3D;AAAA,EAAA;AAAA,EAGF,MAAM,gBAA2C;AAKxC,WAJS,MAAM,KAAK,KAAK,eAAe,OAAQ,CAAA,EAAE;AAAA,MAAI,CAACmS,MAC5DA,EAAQ,QAAQ;AAAA,IAClB;AAAA,EAEO;AAAA,EAGD,uBAAuBF,GAAyC;AACtE,UAAME,IAAU,KAAK,eAAe,IAAIF,CAAI;AAC5C,QAAI,CAACE;AACH,YAAM,IAAI,MAAM,4BAA4BF,CAAI,EAAE;AAE7C,WAAAE;AAAA,EAAA;AAAA,EAGD,YACND,GACAne,GACAqe,GACAC,GACwB;AACxB,UAAMC,IACJve,aAAiB,QAAQA,EAAM,UAAU;AAC3C,QAAIwe,IAA0C;AAC1C,QAAA,OAAOL,KAAe,UAAU;AAC5B,YAAAC,IAAU,KAAK,0BAA0BD,CAAU;AAC5C,MAAAK,IAAAF,KAAgBF,GAAS,QAAQD;AAAA,IAAA;AAEjC,MAAAK,IAAAL;AAGf,mBAAQ,MAAM,SAASE,CAAS,SAASF,CAAU,YAAYne,CAAK,GAC7D;AAAA,MACL,SAAS;AAAA,MACT,QAAQwe;AAAA,MACR,OAAOD;AAAA,IACT;AAAA,EAAA;AAAA,EAGF,MAAM,cACJL,GACiC;AAC7B,QAAA;AAEI,YAAAd,IAAW,MADF,KAAK,uBAAuBc,CAAI,EACjB,QAAQ;AAElC,UAAAd,EAAS,WAAWA,EAAS;AACvB,gBAAA;AAAA,UACN,UAAUc,CAAI,2BAA2Bd,EAAS,OAAO;AAAA,QAC3D;AAAA,eACSA,EAAS,WAAW,CAACA,EAAS;AAC/B,uBAAA;AAAA,UACN,UAAUc,CAAI;AAAA,QAChB,GACO;AAAA,UACL,GAAGd;AAAA,UACH,SAAS;AAAA,UACT,OAAO;AAAA,QACT;AAGK,aAAAA;AAAA,aACApd,GAAO;AACd,aAAO,KAAK,YAAYke,GAAMle,GAAO,eAAe;AAAA,IAAA;AAAA,EACtD;AAAA,EAGM,0BACNme,GACe;AACX,QAAA/T,GACAqU;AAEA,QAAA;AACF,MAAAA,IAAqBxU,EAAWkU,CAAU;AAAA,IAAA,QACpC;AAGN,UADS/T,IAAA,KAAK,eAAe,IAAI+T,CAAgC,GAC7D,CAAC/T;AACH,cAAM,IAAI,MAAM,UAAU+T,CAAU,gCAAgC;AAE/D,aAAA/T;AAAA,IAAA;AAOT,QAJAA,IAAS,KAAK,eAAe,OAAA,EAAS,KAAK,CAACgU,MACnCA,EAAQ,uBAAuB,SAASK,CAAkB,CAClE,GAEG,CAACrU;AACH,YAAM,IAAI,MAAM,0CAA0C+T,CAAU,EAAE;AAGjE,WAAA/T;AAAA,EAAA;AAAA,EAGT,MAAM,YACJ+T,GACAppB,GACiC;AAC7B,QAAAqV;AACA,QAAA;AAEE,UADKA,IAAA,KAAK,0BAA0B+T,CAAU,GAC9C,CAAC/T,EAAO;AACV,cAAM,IAAI;AAAA,UACR,eAAeA,EAAO,IAAI,iBAAiB+T,CAAU;AAAA,QACvD;AAEF,aAAO,MAAM/T,EAAO,YAAYrV,GAASopB,CAAU;AAAA,aAC5Cne,GAAO;AACd,aAAO,KAAK;AAAA,QACVme;AAAA,QACAne;AAAA,QACA;AAAA,QACAoK,GAAQ;AAAA,MACV;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,cACJ+T,GACApnB,GACiC;AAC7B,QAAAqT;AACA,QAAA;AAEE,UADKA,IAAA,KAAK,0BAA0B+T,CAAU,GAC9C,CAAC/T,EAAO;AACV,cAAM,IAAI;AAAA,UACR,eAAeA,EAAO,IAAI,iBAAiB+T,CAAU;AAAA,QACvD;AAEK,aAAA,MAAM/T,EAAO,cAAcrT,CAAI;AAAA,aAC/BiJ,GAAO;AACd,aAAO,KAAK;AAAA,QACVme;AAAA,QACAne;AAAA,QACA;AAAA,QACAoK,GAAQ;AAAA,MACV;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,gBACJ+T,GACAtS,GACiC;AAC7B,QAAAzB;AACA,QAAA;AACO,aAAAA,IAAA,KAAK,0BAA0B+T,CAAU,GAC3C,MAAM/T,EAAO,gBAAgByB,CAAG;AAAA,aAChC7L,GAAO;AACd,aAAO,KAAK;AAAA,QACVme;AAAA,QACAne;AAAA,QACA;AAAA,QACAoK,GAAQ;AAAA,MACV;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,WACJ+T,GACArS,GACiC;AAC7B,QAAA1B;AACA,QAAA;AACO,aAAAA,IAAA,KAAK,0BAA0B+T,CAAU,GAC3C,MAAM/T,EAAO,WAAW0B,CAAY;AAAA,aACpC9L,GAAO;AACd,aAAO,KAAK;AAAA,QACVme;AAAA,QACAne;AAAA,QACA;AAAA,QACAoK,GAAQ;AAAA,MACV;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,YACJ+T,GACA3hB,GACkB;AACd,QAAA;AAEK,aAAA,MADQ,KAAK,0BAA0B2hB,CAAU,EACpC,YAAY3hB,CAAO;AAAA,aAChCwD,GAAO;AACd,qBAAQ,MAAM,6BAA6Bme,CAAU,YAAYne,CAAK,GAC/D;AAAA,IAAA;AAAA,EACT;AAAA,EAGF,MAAM,mBACJme,GACAnS,GACAC,GACiC;AAC7B,QAAA7B;AACA,QAAA;AACO,aAAAA,IAAA,KAAK,0BAA0B+T,CAAU,GAC3C,MAAM/T,EAAO,mBAAmB4B,GAAQC,CAAS;AAAA,aACjDjM,GAAO;AACd,aAAO,KAAK;AAAA,QACVme;AAAA,QACAne;AAAA,QACA;AAAA,QACAoK,GAAQ;AAAA,MACV;AAAA,IAAA;AAAA,EACF;AAEJ;ACrRA,MAAMsU,KAAqC;AAEpC,MAAMC,WAAuB7X,GAAiB;AAAA,EAC3C;AAAA,EACA;AAAA,EAER,YAAY;AAAA,IACV,KAAAH;AAAA,IACA,UAAAiY;AAAA,IACA,SAAArqB;AAAA,IACA,MAAAsqB;AAAA,IACA,WAAAC;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,8BAAAC;AAAA,IACA,QAAA5f;AAAA,IACA,KAAA6f;AAAA,IACA,UAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,wBAAAC;AAAA,IACA,kBAAA1f;AAAA,IACA,GAAG2f;AAAA,EAAA,GACqB;AACpB,QAAAC;AACJ,UAAMC,IAAO,IAAI,IAAIjZ,KAAOkZ,EAAY,GAClCC,IAAe,IAAInC,GAAa;AAEtC,IAAI8B,KACGG,EAAA,aAAa,IAAI,mBAAmB,MAAM,GAG7C7f,KACG6f,EAAA,aAAa,IAAI,sBAAsB7f,CAAgB,GAG1DxL,KACFqrB,EAAK,aAAa,IAAI,KAAK,mBAAmBrrB,CAAO,CAAC,GAGpDsqB,KACFe,EAAK,aAAa,IAAI,MAAM,mBAAmBf,CAAI,CAAC,GAGlDC,KACFc,EAAK,aAAa,IAAI,MAAM,mBAAmBd,CAAS,CAAC,GAGvDC,GAAQ,SACVa,EAAK,aAAa;AAAA,MAChB;AAAA,MACA,mBAAmBb,EAAO,MAAM,SAAU,CAAA;AAAA,IAC5C,GAGE1f,KACFugB,EAAK,aAAa,IAAI,WAAW,mBAAmBvgB,CAAM,CAAC,GAGzD6f,KACFU,EAAK,aAAa,IAAI,OAAO,mBAAmBV,CAAG,CAAC,GAGlDC,KACFS,EAAK,aAAa,IAAI,aAAa,mBAAmBT,CAAQ,CAAC,GAG7DC,KACGQ,EAAA,aAAa,IAAI,0BAA0B,MAAM,GAGpDP,KACFO,EAAK,aAAa,IAAI,YAAY,mBAAmBP,CAAQ,CAAC,IAO3D,CAACL,KAAUC,MAAiCL,IAC/CgB,EAAK,aAAa;AAAA,MAChB;AAAA,MACA,mBAAmB,KAAK,UAAUhB,CAAQ,CAAC;AAAA,IAC7C,IACSI,KACJY,EAAA,aAAa,IAAI,UAAUZ,CAAM,GAKpCQ,MACFI,EAAK,OAAO,MAAM,mBAAmBJ,CAAa,CAAC,KAG/C,MAAA;AAAA,MACJ,GAAGE;AAAA,MACH,IAAI;AAAA,MACJ,KAAKE;AAAA,MACL,SAAS;AAAA,QACP,GAAGE,EAAa,iBAAiB;AAAA;AAAA,QAEjC,kBAAkB,CAACzY,MAAoB,MAAMiY,IAAmB;AAAA,QAChE,mBAAmB,CAACjY,MAAoB,YAAY;AAClD,UAAIsY,KACF,MAAMA,EAAyB;AAAA,QACjC;AAAA,MACF;AAAA,IACF,CACD,GAED,KAAK,eAAeG,GACpB,KAAK,oBAAoBP,GACzBI,IAA2B,YAAY;AACrC,WAAK,MAAM;AACX,YAAMve,IAAW,KAAK;AAEtB,UADA,KAAK,oBAAoB,QACrB,EAACA,GAGL;AAAA,cAAM,IAAI;AAAA,UAAQ,CAACzB,OACjB,WAAWA,IAAS+e,EAAkC;AAAA,QACxD;AACI,YAAA;AACO,UAAAtd,EAAA;AAAA,iBACFpB,IAAO;AACN,kBAAA,MAAM,4CAA4CA,EAAK;AAAA,QAAA;AAAA;AAAA,IAEnE,GAGI,OAAO,SAAW,QACnB,OAAe,mBAAmB,KAAK;AAAA,EAC1C;AAAA,EAGF,kBAAgC;AAC9B,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,qBAAqBoB,GAAuB;AAC1C,SAAK,oBAAoBA;AAAA,EAAA;AAE7B;ACxJO,SAAS2e,GAAoBC,GAGlC;AAEA,MAAI,CAACA,KAAeA,EAAY,KAAA,MAAW;AACzC,WAAO,EAAE,SAAS,IAAO,OAAO,wBAAwB;AAItD,MAAArZ;AACA,MAAA;AACI,IAAAA,IAAA,IAAI,IAAIqZ,CAAW;AAAA,EAAA,QACnB;AACC,WAAA;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,EAAA;AAKF,MAAI,CADqB,CAAC,SAAS,QAAQ,EACrB,SAASrZ,EAAI,QAAQ;AAClC,WAAA;AAAA,MACL,SAAS;AAAA,MACT,OAAO,aAAaA,EAAI,QAAQ;AAAA,IAClC;AAKF,MAAI,CAACA,EAAI,YAAYA,EAAI,aAAa;AAC7B,WAAA;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAKE,MAAA,OAAO,SAAW,KAAa;AACjC,UAAMsZ,IACJ,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAEzBC,IACJvZ,EAAI,aAAa,eAAeA,EAAI,aAAa;AAG/C,QAAA,CAACsZ,KAAsBC;AAClB,aAAA;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,EACF;AAIK,SAAA,EAAE,SAAS,GAAK;AACzB;AClCA,MAAqBC,WAA2BC,GAAa;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,UAAmB;AACV,WAAA,CAAC,CAAC,KAAK;AAAA,EAAA;AAAA,EAGhB,YAAYzrB,IAA6B,IAAI;AACrC,UAAA;AAUA,UAAA0rB,IAAS,CAAC,GAPiB;AAAA,MAC/B,EAAE,QAAQ,uDAAuD;AAAA,MACjE,EAAE,QAAQ,uDAAuD;AAAA,IACnE,GAIoC,GAAI1rB,EAAQ,UAAU,EAAG,GACvD2rB,IACJ3rB,EAAQ,kBAAkByW,GAAU,gBAAgB;AAEtD,SAAK,gBAAgBkV,GAChB,KAAA,6BAAa,IAAoB;AAIhC,UAAAC,IACJ,OAAO,SAAW,MACd,IAAI,gBAAgB,OAAO,SAAS,MAAM,IAC1C;AAUN,QATA,KAAK,WAAW;AAAA,MACd,KAAKA,GAAW,IAAI,KAAK,KAAK;AAAA,MAC9B,UAAUA,GAAW,IAAI,WAAW,KAAK;AAAA,IAC3C,GAEA,KAAK,UAAU,EAAE,GAAG5rB,GAAS,QAAA0rB,GAAQ,gBAAAC,EAAe,GAIhD,OAAO,SAAW,OAAe,OAAO,eAAiB,KAAa;AAElE,YAAAE,IAAkBD,GAAW,IAAI,uBAAuB;AAC9D,MAAIC,MAAoB,OAGP,eAAA,QAAQ,yBAAyB,GAAG;AAI/C,YAAAC,IAAoBF,GAAW,IAAI,mBAAmB;AAOxD,UANAE,KACW,aAAA,QAAQ,qBAAqBA,CAAiB,GAKzD,OAAO,SAAS,MAAM;AAElB,cAAAjB,IADa,IAAI,gBAAgB,OAAO,SAAS,KAAK,MAAM,CAAC,CAAC,EACnC,IAAI,IAAI;AACzC,QAAIA,MAEF,KAAK,gBAAgBA;AAAA,MACvB;AAIE,UAAAe,KAAa,OAAO,SAAS,cAAc;AAC7C,YAAIG,IAAe;AAEnB,QAAIF,MACFD,EAAU,OAAO,uBAAuB,GACzBG,IAAA,KAGbD,MACFF,EAAU,OAAO,mBAAmB,GACrBG,IAAA;AAIb,YAAAC,IAAY,OAAO,SAAS;AAChC,YAAIA,GAAW;AACb,gBAAMC,IAAa,IAAI,gBAAgBD,EAAU,MAAM,CAAC,CAAC;AACrD,UAAAC,EAAW,IAAI,IAAI,MACrBA,EAAW,OAAO,IAAI,GACtBD,IAAYC,EAAW,aACnB,IAAIA,EAAW,UAAU,KACzB,IACWF,IAAA;AAAA,QACjB;AAGF,YAAIA,GAAc;AACV,gBAAAG,IACJ,OAAO,SAAS,YACfN,EAAU,aAAa,MAAMA,EAAU,aAAa,MACrDI;AACF,iBAAO,QAAQ,aAAa,CAAA,GAAI,IAAIE,CAAM;AAAA,QAAA;AAAA,MAC5C;AAAA,IACF;AAGF,SAAK,iBAAiBR,CAAM,GAE5B,KAAK,UAAU;AAAA,MACb,UAAU1rB,EAAQ,WAAW,SAAY,KAAK,qBAAqB;AAAA,IACrE,GAEI,OAAO,SAAW,QACnB,OAAe,sBAAsB;AAAA,EACxC;AAAA,EAGF,MAAM,SAAS;AACT,QAAA,CAAC,KAAK,UAAU;AAClB,cAAQ,MAAM,IAAImsB,EAAkB,EAAE,OAAO;AAC7C;AAAA,IAAA;AAGE,QAAA;AAEF,YAAM,KAAK,WAAW,GAGN,SAAS,iBAAiB,2BAA2B,EAC7D,QAAQ,CAAClb,MAAW;AAC1B,cAAMuB,IAAYvB,EAAO;AACzB,QAAIuB,MAEFA,EAAU,MAAM,UAAU,KAE1B,WAAW,MAAM;AACf,UAAAA,EAAU,MAAM,UAAU;AAAA,WACzB,GAAG;AAAA,MACR,CACD,GAGG,SAAS,SACF,SAAA,KAAK,MAAM,WAAW,SAIjC,OAAO,SAAS,OAAO;AAAA,aAChBhS,GAAK;AACJ,oBAAA,MAAM,kBAAkBA,CAAG,GAC7BA;AAAA,IAAA;AAAA,EACR;AAAA,EAGF,MAAM,QAA4C;AAC5C,QAAC,KAAK,SAIN;AAAA,UAAA;AAQE,YANC,KAAK,QAAQ,aACX,KAAA,QAAQ,WAAW,KAAK,qBAAqB,IAGpD,MAAM,KAAK,gBAAgB,GAEvB,CAAC,KAAK,UAAU;AAClB,kBAAQ,MAAM,IAAI2rB,EAAkB,EAAE,OAAO;AAC7C;AAAA,QAAA;AAGF,cAAM1D,IAAY,MAAM,KAAK,SAAS,MAAM,KAAK,QAAQ;AAGzD,YAAI/d,IAAS+d,GAAU,UAAU,KAAK,OAAO;AAC7C,aAAK,UAAU,IAAIle;AAAA,UACjB;AAAA,UACAG;AAAA,UACA+d,EAAS;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,QAAQ;AAAA,QACf;AAAA,eACO,GAAG;AACV,gBAAQ,MAAM,CAAC;AACf;AAAA,MAAA;AAGF,aAAO,KAAK;AAAA;AAAA,EAAA;AAAA,EAGd,MAAM,QACJzoB,GACoC;AACpC,UAAMosB,IAAiB,MAAM,QAAQpsB,CAAO,IAAI,SAAYA,GACtDqsB,IACJD,GAAgB,YAAYA,GAAgB,SACxC;AAAA,MACE,UAAUA,EAAe;AAAA,MACzB,QAAQA,EAAe;AAAA,MACvB,UAAUA,EAAe;AAAA,IAAA,IAE3B;AAEF,QAAC,KAAK,SAIV;AAAA,UAAI,KAAK;AACP,eAAO,KAAK;AAWd,UAPK,KAAK,QAAQ,aACX,KAAA,QAAQ,WAAW,KAAK,qBAAqB,IAIpD,MAAM,KAAK,gBAAgB,GAEvB,CAAC,KAAK,YAAY,CAAC,KAAK,QAAQ,UAAU;AAC5C,gBAAQ,MAAM,IAAID,EAAkB,EAAE,OAAO;AAC7C;AAAA,MAAA;AAGE,UAAA;AACF,YAAIE,GAAU;AAGZ,gBAAM5D,IAAW,MAAM,KAAK,SAAS,QAAQ;AAAA,YAC3C,UAAU4D,EAAS;AAAA,YACnB,QAAQA,EAAS;AAAA,YACjB,UAAUA,EAAS;AAAA,UAAA,CACpB;AAEG5D,cAAAA,EAAS,SAAStd,EAAc;AAClC,kBAAM,IAAImhB;AAAA,cACR,aAAa7D,KAAYA,EAAS,UAC9BA,EAAS,UACT;AAAA,YACN;AAKF,cAAI,KAAK;AACP,mBAAO,KAAK;AAGd,gBAAM9d,IACJ,aAAa8d,KAAYA,EAAS,UAAUA,EAAS,UAAU;AACjE,cAAI,CAAC9d;AACH,kBAAM,IAAI2hB;AAAA,cACR;AAAA,YACF;AAGF,sBAAK,UAAU,IAAI/hB;AAAA,YACjB;AAAA,YACA,KAAK,OAAO;AAAA,YACZI;AAAA,YACA,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK,QAAQ;AAAA,UACf,GACK,KAAA,oBAAoB,CAACA,CAAO,CAAC,GAC3B,KAAK;AAAA,QAAA;AAIT,aAAA,QAAQ,SAAS,KAAK;AAGrB,cAAA4hB,IAAmB,MAAM,QAAQvsB,CAAO,IAC1CA,IACCosB,GAAgB,iBAAiB,KAAK,QAAQ;AAGnD,YAAI3D,IAAW,MAAM,KAAK,SAAS,QAAQ;AAAA,UACzC,eAAe8D;AAAA,QAAA,CAChB;AAEG,YAAA9D,EAAS,SAAStd,EAAc;AAC5B,gBAAA,IAAI,MAAMsd,EAAS,OAAO;AAGvB,eAAAA,IAAAA,GACX,KAAK,UAAU,IAAIle;AAAA,UACjB;AAAA,UACA,KAAK,OAAO;AAAA,UACZke,EAAS;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,QAAQ;AAAA,QACf,GAEO,KAAK;AAAA,eACLhW,GAAG;AACV,YAAI4Z,GAAU;AACZ,cAAI5Z,aAAa6Z;AACT,kBAAA7Z;AAGR,gBAAMrS,IACJqS,aAAa,QACTA,EAAE,UACF,OAAOA,KAAM,YAAYA,KAAK,aAAaA,IACzC,OAAQA,EAAU,OAAO,IACzB;AACF,gBAAA,IAAI6Z,GAA4BlsB,CAAO;AAAA,QAAA;AAE/C,gBAAQ,IAAIqS,CAAC;AAAA,MAAA,UACb;AAEA,QAAK4Z,KACE,KAAA,QAAQ,SAAS,MAAM;AAAA,MAC9B;AAAA;AAAA,EACF;AAAA,EAGF,MAAM,oBAAoBxkB,GAAmC;AACvD,QAAA,CAAC,KAAK;AACD,aAAA;AAGT,QAAI,CAAC,KAAK,YAAY,CAAC,KAAK,QAAQ;AAClC,qBAAQ,MAAM,IAAIskB,EAAkB,EAAE,OAAO,GACtC;AAGT,UAAMK,IAAe,KAAK;AAEtB,QAAA;AACF,WAAK,gBAAgB3kB,GACrB,MAAM,KAAK,SAAS,YAAY,KAAK,QAAQ;AAAA,aACtC4K,GAAG;AACV,qBAAQ,MAAMA,CAAC,GACf,KAAK,gBAAgB+Z,GACd;AAAA,IAAA;AAGT,gBAAK,mBAAmB3kB,CAAO,GACxB;AAAA,EAAA;AAAA,EAGT,iBAAiB4kB,GAAsD;AAC9D,WAAA,QAAQ,QAAQ,EAAI;AAAA,EAAA;AAAA,EAG7B,MAAM,aAAa;AACjB,SAAK,UAAU,QACV,KAAA,oBAAoB,EAAE;AAEvB,QAAA;AACE,MAAA,OAAO,eAAiB,OAC1B,aAAa,WAAW,mBAAmB;AAAA,IAC7C,QACM;AAAA,IAAA;AAIJ,QAAA,CAAC,KAAK,UAAU;AAClB,cAAQ,MAAM,IAAIN,EAAkB,EAAE,OAAO;AAC7C;AAAA,IAAA;AAGK,WAAA,KAAK,SAAS,WAAW;AAAA,EAAA;AAAA,EAGlC,MAAM,YAAYO,IAAiC,aAAa;AAC1D,QAAA,CAAC,KAAK;AACR;AAKF,QAAI,CAAC,KAAK,YAAY,CAAC,KAAK,QAAQ,UAAU;AAC5C,cAAQ,MAAM,IAAIP,EAAkB,EAAE,OAAO;AAC7C;AAAA,IAAA;AAEE,QAAA,CAAC,KAAK,SAAS;AACjB,cAAQ,MAAM,sBAAsB;AACpC;AAAA,IAAA;AAEF,UAAMzB,IAAW,MAAM,KAAK,SAAS,SAAS,GAGxC1qB,IAAU,CAAC;AACb,IAAA,KAAK,QAAQ,QACfA,EAAQ,KAAK,MAAM,KAAK,QAAQ,IAAI,EAAE,GAExC,MAAM,KAAK,SAAS;AAAA,MAClB,YAAY0qB,CAAQ,IAAIgC,CAAG,IAAI1sB,EAAQ,KAAK,GAAG,CAAC;AAAA,IAClD,GACK,KAAA,QAAQ,SAAS,KAAK;AAAA,EAAA;AAAA,EAG7B,MAAM,cAAcqG,GAAY;AAC1B,QAAA,CAAC,KAAK;AACR;AAIF,QAAI,CAAC,KAAK,YAAY,CAAC,KAAK,QAAQ,UAAU;AAC5C,cAAQ,MAAM,IAAI8lB,EAAkB,EAAE,OAAO;AAC7C;AAAA,IAAA;AAEE,QAAA,CAAC,KAAK,SAAS;AACjB,cAAQ,MAAM,sBAAsB;AACpC;AAAA,IAAA;AAGF,UAAMzB,IAAW,MAAM,KAAK,SAAS,SAAS,GACxC1qB,IAAU,CAAC;AACb,IAAA,KAAK,QAAQ,QACfA,EAAQ,KAAK,MAAM,KAAK,QAAQ,IAAI,EAAE,GAExC,MAAM,KAAK,SAAS;AAAA,MAClB,YAAY0qB,CAAQ,IAAIrkB,CAAE,IAAIrG,EAAQ,KAAK,GAAG,CAAC;AAAA,IACjD,GACK,KAAA,QAAQ,SAAS,KAAK;AAAA,EAAA;AAAA,EAG7B,MAAM,cAAc2sB,GAAY;AAC1B,QAAC,KAAK,SAKV;AAAA,UAAI,CAAC,KAAK,YAAY,CAAC,KAAK,QAAQ,UAAU;AAC5C,gBAAQ,MAAM,IAAIR,EAAkB,EAAE,OAAO;AAC7C;AAAA,MAAA;AAEE,UAAA,CAAC,KAAK,SAAS;AACjB,gBAAQ,MAAM,sBAAsB;AACpC;AAAA,MAAA;AAGI,YAAA,KAAK,SAAS,SAASQ,CAAE,GAC1B,KAAA,QAAQ,SAAS,KAAK;AAAA;AAAA,EAAA;AAAA,EAG7B,eAAe;AACT,QAAC,KAAK,SAIV;AAAA,UAAI,CAAC,KAAK,YAAY,CAAC,KAAK,QAAQ,UAAU;AAC5C,gBAAQ,MAAM,IAAIR,EAAkB,EAAE,OAAO;AAC7C;AAAA,MAAA;AAEG,WAAA,QAAQ,SAAS,KAAK,GAC3B,KAAK,SAAS,aAAa;AAAA;AAAA,EAAA;AAAA,EAG7B,MAAM,QAAQ;AACZ,IAAI,CAAC,KAAK,WAAW,CAAC,KAAK,QAAQ,YAG9B,KAAA,QAAQ,SAAS,MAAM;AAAA,EAAA;AAAA,EAG9B,OAAOS,GAAgBC,GAAmB;AACpC,WAAC,KAAK,WAKH,KAAK,SAAS,OAAOD,CAAM,KAJhC,QAAQ,MAAM,IAAIT,EAAkB,EAAE,OAAO,GACtC;AAAA,EAGyB;AAAA,EAGpC,SAAiB;AACf,UAAM1kB,IAAQ,KAAK,OAAO,IAAI,KAAK,aAAa;AAChD,QAAI,CAACA,GAAO;AACV,YAAMqlB,IAAkB,MAAM,KAAK,KAAK,OAAO,KAAM,CAAA,EAAE;AAAA,QAAI,CAACrlB,MAC1DslB,GAAY,kBAAkBtlB,CAAK;AAAA,MACrC;AACA,YAAM,IAAI;AAAA,QACR,oBAAoBslB,GAAY,kBAAkB,KAAK,aAAa,CAAC,uBAAuBD,EAAgB,KAAK,IAAI,CAAC;AAAA,MACxH;AAAA,IAAA;AAEF,WAAOrlB,EAAM;AAAA,EAAA;AAAA,EAGf,WAAW;AACL,QAAA,CAAC,KAAK,UAAU;AAClB,cAAQ,MAAM,IAAI0kB,EAAkB,EAAE,OAAO;AAC7C;AAAA,IAAA;AAGK,WAAA,KAAK,SAAS,SAAS;AAAA,EAAA;AAAA,EAGhC,sBAAsB;AAChB,QAAC,KAAK,SAIV;AAAA,UAAI,CAAC,KAAK,YAAY,CAAC,KAAK,QAAQ,UAAU;AAC5C,gBAAQ,MAAM,IAAIA,EAAkB,EAAE,OAAO;AAC7C;AAAA,MAAA;AAEF,WAAK,SAAS,SAAS,mBAAmB,EAAE,KAAK,MAAM;AAChD,aAAA,QAAS,UAAU,KAAK;AAAA,MAAA,CAC9B;AAAA;AAAA,EAAA;AAAA,EAGH,MAAM,gBACJ5d,GACAvO,GACe;AACX,QAAA,CAAC,KAAK;AACR;AAGF,QAAI,CAAC,KAAK,YAAY,CAAC,KAAK,QAAQ,UAAU;AAC5C,cAAQ,MAAM,IAAImsB,EAAkB,EAAE,OAAO;AAC7C;AAAA,IAAA;AAGF,UAAM,EAAE,oBAAAa,GAAoB,GAAGC,EAAmB,IAAIjtB,KAAW,CAAC;AAC7D,SAAA,QAAQ,SAAS,qBAAqBgtB,CAAkB;AAC7D,UAAME,IACJ,OAAO,KAAKD,CAAkB,EAAE,SAAS,IACpCA,IACD;AAEN,UAAM,KAAK,SAAS,gBAAgB1e,GAAI2e,CAAgB,GACnD,KAAA,QAAQ,UAAU,KAAK;AAAA,EAAA;AAAA,EAG9B,MAAM,YAAYpiB,GAAYjD,GAAkB;AAC1C,QAAA,CAAC,KAAK;AACR;AAGF,QAAI,CAAC,KAAK,YAAY,CAAC,KAAK,QAAQ,UAAU;AAC5C,cAAQ,MAAM,IAAIskB,EAAkB,EAAE,OAAO;AAC7C;AAAA,IAAA;AAGF,QAAIgB,IAAiB,KAAK;AAC1B,IAAItlB,KACF,KAAK,oBAAoBA,CAAO,GAG7B,KAAA,QAAQ,SAAS,KAAK;AAErB,UAAA2R,IAAM,MAAM,KAAK,SAAS,QAAQ1O,GAAO,QAAW,QAAW,EAAI;AAEpE,gBAAA,QAAQ,SAAS,MAAM,GAExBjD,KACF,KAAK,oBAAoBslB,CAAc,GAOlC;AAAA,MACL,QANa,EACb3T,MACEA,EAAqB,SAASrO,EAAc,iBAC3CqO,EAAqB,SAASrO,EAAc;AAAA,MAI/C,iBAAkBqO,GAAoC;AAAA,IACxD;AAAA,EAAA;AAAA,EAGF,MAAM,kBAAkB;AAClB,WAAC,KAAK,WAKH,MAAM,KAAK,SAAS,gBAAgB,KAJzC,QAAQ,MAAM,IAAI2S,EAAkB,EAAE,OAAO,GACtC;AAAA,EAGkC;AAAA;AAAA;AAAA;AAAA;AAAA,EAO7C,mBAA+C;AACzC,IAAA,OAAO,SAAW,OACZ,QAAA;AAAA,MACN;AAAA,IAEF;AAGF,UAAMiB,IAAa,MACbzO,IAAQ,IAAI7U,GAAuBsjB,CAAU,GAG7CC,IAAa;AAAA,MACjB,uBAAuB;AAAA,QACrB,SAAS;AAAA,QACT,YAAY,YAAY;AACtB,gBAAM1O,EAAM,SAAS,qBAAqB,EAAE,WAAW,GACvD,MAAMyO,EAAW,WAAW;AAAA,QAAA;AAAA,MAC9B;AAAA,IAEJ;AAEO,WAAA;AAAA,MACL,IAAI,UAAU;AACZ,eAAOzO,EAAM;AAAA,MACf;AAAA,MACA,IAAI,OAAO;AACT,eAAOA,EAAM;AAAA,MACf;AAAA,MACA,IAAI,OAAO;AACT,eAAOA,EAAM;AAAA,MACf;AAAA,MACA,IAAI,SAAS;AACX,eAAOA,EAAM;AAAA,MACf;AAAA,MACA,IAAI,WAAW;AACb,eAAOA,EAAM;AAAA,MACf;AAAA,MACA,IAAI,WAAW;AACb,eAAO,EAAE,GAAGA,EAAM,UAAU,GAAG0O,EAAW;AAAA,MAAA;AAAA,IAE9C;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQF,KAAKrtB,IAAuB,IAAI;AAC1B,QAAA,OAAO,SAAW,KAAa;AACjC,cAAQ,MAAM,4CAA4C;AAC1D;AAAA,IAAA;AAGF,UAAMstB,IAAc,IAAI,IAAI,KAAK,QAAQ,OAAOpC,EAAY,GAGtDG,IAAcrrB,EAAQ,eAAe,OAAO,SAAS,MAGrDutB,IAAanC,GAAoBC,CAAW;AAC9C,QAAA,CAACkC,EAAW,SAAS;AACf,cAAA;AAAA,QACN,yBAAyBA,EAAW,KAAK;AAAA,QACzC,QAAQlC,CAAW;AAAA,MACrB;AACA;AAAA,IAAA;AAGU,IAAAiC,EAAA,aAAa,IAAI,gBAAgBjC,CAAW,GAGpD,KAAK,QAAQ,UACfiC,EAAY,aAAa,IAAI,UAAU,KAAK,QAAQ,MAAM,GAIxD,KAAK,QAAQ,QACfA,EAAY,aAAa,IAAI,MAAM,KAAK,QAAQ,IAAI,GAGlD,KAAK,QAAQ,aACfA,EAAY,aAAa,IAAI,MAAM,KAAK,QAAQ,SAAS,GAGvD,KAAK,QAAQ,QAAQ,SACvBA,EAAY,aAAa;AAAA,MACvB;AAAA,MACA,KAAK,QAAQ,OAAO,MAAM,SAAS;AAAA,IACrC,GAGE,KAAK,YACPA,EAAY,aAAa,IAAI,WAAW,KAAK,QAAQ,GAIhD,OAAA,SAAS,OAAOA,EAAY,SAAS;AAAA,EAAA;AAAA,EAGtC,iBAAiB5B,GAAiB;AACxC,eAAWjkB,KAASikB;AACd,UAAA;AACF,cAAM1Z,IAAM,IAAI,IAAIvK,EAAM,MAAM,GAC1BI,IAAU2lB,GAAaxb,CAAG;AAE3B,aAAA,OAAO,IAAInK,GAASJ,CAAK;AAAA,eACvB4D,GAAO;AACd,sBAAQ,MAAM,+BAA+B5D,EAAM,MAAM,KAAK4D,CAAK,GAC7DA;AAAA,MAAA;AAIV,IAAK,KAAK,OAAO,IAAI,KAAK,aAAa,KAC7B,QAAA;AAAA,MACN,kBAAkB,KAAK,aAAa,sDACb,MAAM,KAAK,KAAK,OAAO,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,IAClE;AAAA,EACF;AAAA,EAGM,uBAAuC;AAEvC,UAAAoiB,IACJ,OAAO,SAAW,OAClB,OAAO,iBAAmB,OAC1B,eAAe,QAAQ,uBAAuB,MAAM,KAOhD/C,KAHJ,OAAO,SAAW,MACd,IAAI,gBAAgB,OAAO,SAAS,MAAM,IAC1C,SACsB,IAAI,UAAU,KAAK,QAGzCG,IAAgB,KAAK;AAG3B,IAAI4C,KACF,eAAe,WAAW,uBAAuB,GAI/C5C,MACF,KAAK,gBAAgB;AAGjB,UAAA5Z,IAAS,IAAI+Y,GAAe;AAAA,MAChC,GAAG,KAAK;AAAA,MACR,QAAQ,KAAK,OAAO;AAAA,MACpB,SAAS,MAAM;AACb,aAAK,UAAU,QAAQ;AAAA,MACzB;AAAA,MACA,WAAW,CAACpf,MAAa;AACvB,aAAK,WAAWA;AAAA,MAClB;AAAA,MAAA,SACAhL;AAAAA,MACA,KAAK,KAAK,SAAS;AAAA,MACnB,UAAU,KAAK,SAAS;AAAA,MACxB,sBAAsB6tB;AAAA,MACtB,eAAe5C,KAAiB;AAAA,MAChC,UAAAH;AAAA,MACA,kBAAkB,YAAY;AACtB,cAAAgD,IAAkB,KAAK,SAAS,SAChCpjB,IAAU,MAAM,KAAK,MAAM;AAEjC,QAAIA,GAAS,WAAWA,EAAQ,YAAYojB,KAC1C,KAAK,oBAAoB,CAACpjB,EAAQ,OAAO,CAAC;AAAA,MAC5C;AAAA,IACF,CACD;AAGD,WAAImjB,KAEF,WAAW,MAAM;AACf,MAAAxc,EAAO,KAAK;AAAA,OACX,GAAG,GAGDA;AAAA,EAAA;AAAA,EAGD,gBAAgB;AAAA,IACtB,SAAAG,IAAU;AAAA,IACV,UAAAuc,IAAW;AAAA,EACb,IAKgB,IAAI;AAClB,WAAO,IAAI,QAAc,CAAC3iB,GAASC,MAAW;AACtC,YAAAsM,IAAY,KAAK,IAAI,GACrBhJ,IAAK,YAAY,MAAM;AAC3B,YAAI,KAAK,QAAQgJ,IAAYnG,GAAS;AACpC,wBAAc7C,CAAE,GACTtD,EAAA,IAAI,MAAM,8BAA8B,CAAC;AAChD;AAAA,QAAA;AAGE,QAAC,KAAK,aAEV,cAAcsD,CAAE,GACRvD,EAAA;AAAA,SACP2iB,CAAQ;AAAA,IAAA,CACZ;AAAA,EAAA;AAEL;ACxzBA,MAAMC,wBAAY,IAAoB;AAEtC,eAAeC,GAAO1X,GAAiD;AACrE,MAAI,CAACA,EAAQ,WAAW,UAAU,CAACA,EAAQ,WAAW;AAC7C,WAAA,EAAE,SAAS,GAAG;AAGvB,QAAMsS,IAAW,MAAM,MAAM,GAAGqF,EAAO,WAAW;AAAA,IAChD,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM,KAAK,UAAU3X,CAAO;AAAA,EAAA,CAC7B;AAEG,MAAA,CAACsS,EAAS;AACZ,UAAM,IAAI,MAAM,uBAAuBA,EAAS,MAAM,EAAE;AAG1D,SAAOA,EAAS,KAAK;AACvB;AAEA,eAAsBsF,GACpBC,GAC8B;AACxB,QAAAC,IAAoBD,EAAU,OAAO,CAACvgB,MAAS,CAACmgB,EAAM,IAAIngB,CAAI,CAAC;AAEjE,SAAAwgB,EAAkB,SAAS,MACZ,MAAMJ,GAAO,EAAE,WAAWI,GAAmB,GAErD,QAAQ,QAAQ,CAAC/a,MAAW;AACnC,IAAA0a,EAAM,IAAI1a,EAAO,UAAUA,EAAO,UAAU,CAAC,CAAC;AAAA,EAAA,CAC/C,GAGI,IAAI;AAAA,IACT8a,EACG,IAAI,CAACvgB,MAAS,CAACA,GAAMmgB,EAAM,IAAIngB,CAAI,CAAC,CAAqB,EACzD,OAAO,CAACygB,MAAqCA,EAAM,CAAC,MAAM,MAAS;AAAA,EACxE;AACF;AAEA,eAAsBC,GACpBC,GAC8B;AAClB,EAAAA,IAAAA,EAAU,IAAIxX,GAAI,KAAK;AAC7B,QAAAyX,IAAoBD,EAAU,OAAO,CAACE,MAAS,CAACV,EAAM,IAAIU,CAAI,CAAC;AAEjE,SAAAD,EAAkB,SAAS,MACZ,MAAMR,GAAO;AAAA,IAC5B,WAAWQ;AAAA,EAAA,CACZ,GAEQ,QAAQ,QAAQ,CAACnb,MAAW;AACnC,IAAA0a,EAAM,IAAI1a,EAAO,UAAU,CAAC,GAAGA,EAAO,QAAQ;AAAA,EAAA,CAC/C,GAGI,IAAI;AAAA,IACTkb,EACG,IAAI,CAACE,MAAS,CAACA,GAAMV,EAAM,IAAIU,CAAI,CAAC,CAAqB,EACzD,OAAO,CAACJ,MAAqCA,EAAM,CAAC,MAAM,MAAS;AAAA,EACxE;AACF;AC1CO,SAASK,GACdtE,GACuB;AAChB,SAAA;AAAA,IACL,UAAU;AAAA,IACV,WAAWA,EAAS,YAChB,OAAO;AAAA,MACL,OAAO,QAAQA,EAAS,SAAS,EAAE,IAAI,CAAC,CAACtf,GAAS6jB,CAAQ,MAAM;AAAA,QAC9D7jB;AAAA,QACA;AAAA,UACE,GAAG6jB;AAAA,UACH,SAASA,EAAS,QAAQ,IAAI,CAAChmB,OAAY;AAAA,YACzC,GAAGA;AAAA,YACH,YAAY;AAAA,UAAA,EACZ;AAAA,QAAA;AAAA,MAEL,CAAA;AAAA,IAAA,IAEH;AAAA,IACJ,UAAUyhB,EAAS,UAAU,IAAI,CAAC7pB,OAAa;AAAA,MAC7C,GAAGA;AAAA,MACH,YAAY;AAAA,IAAA,EACZ;AAAA,EACJ;AACF;ACjDO,MAAMquB,IAAqB,6BACrBC,KAAmB,KACnBC,KAAmB,gBACnBC,KAAqB;AAG3B,SAASC,KAAsB;AAChC,MAAA;AACF,WAAO,OAAO,SAAW,OAAe,OAAO,SAAS,OAAO;AAAA,EAAA,QACzD;AACC,WAAA;AAAA,EAAA;AAEX;AAGO,SAASC,KAAqC;AAC/C,MAAA,OAAO,WAAa;AACf,WAAA;AAGT,MAAID;AACE,QAAA;AAEF,UAAI,OAAO,UAAU,OAAO,OAAO;AACjC,eAAO,OAAO,OAAO;AAAA,aAEhBpc,GAAG;AACF,qBAAA,KAAK,qCAAqCA,CAAC,GAC5C;AAAA,IAAA;AAIJ,SAAA;AACT;AAGgB,SAAAsc,GACdC,GACAC,GACa;AACT,MAAAzc,IAAYwc,EAAU,eAAeP,CAAkB;AAE3D,SAAKjc,MACSA,IAAAwc,EAAU,cAAc,KAAK,GACzCxc,EAAU,KAAKic,GACXO,EAAU,QACFA,EAAA,KAAK,YAAYxc,CAAS,IAKxCA,EAAU,YAAYyc,GAEfzc;AACT;AAGO,SAAS0c,GAAY3jB,GAA0B;AAC9C,EAAAA,EAAA,UAAU,IAAI,SAAS,GAC7B,WAAW,MAAM;AACf,IAAIA,EAAM,cACFA,EAAA,WAAW,YAAYA,CAAK;AAAA,KAEnC,GAAG;AACR;AC7DO,SAAS4jB,GAAaH,GAA2B;AAClD,MAAAA,EAAU,eAAe,wBAAwB;AACnD;AAGI,QAAAI,IAAQJ,EAAU,cAAc,OAAO;AAC7C,EAAAI,EAAM,KAAK,0BACXA,EAAM,cAAcC,GAAgB,GAC1BL,EAAA,KAAK,YAAYI,CAAK;AAClC;AAEA,SAASC,KAA0B;AAC1B,SAAA;AAAA,OACFZ,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUlBA,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAMlBA,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAMlBA,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOlBA,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAMlBA,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAMlBA,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAgBlBA,CAAkB;AAAA,OAClBA,CAAkB;AAAA;AAAA;AAAA;AAAA,OAIlBA,CAAkB;AAAA,OAClBA,CAAkB;AAAA;AAAA;AAAA;AAAA,OAIlBA,CAAkB;AAAA,OAClBA,CAAkB;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAoChBA,CAAkB;AAAA,SAClBA,CAAkB;AAAA,SAClBA,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQlBA,CAAkB;AAAA,SAClBA,CAAkB;AAAA,SAClBA,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS3B;AC7Ia,MAAAa,KAAc,CAACC,IAAc,OAA0B;AAC5D,QAAA/c,IAAY,SAAS,cAAc,KAAK;AAC9C,EAAAA,EAAU,KAAK,gBACfA,EAAU,MAAM,UAAU,QAC1BA,EAAU,MAAM,aAAa,UAC7BA,EAAU,MAAM,iBAAiB;AAE3B,QAAAgd,IAAS,SAAS,cAAc,QAAQ;AACvC,EAAAA,EAAA,YAAYD,IACf,uCACA;AAEJ,QAAME,IAAM,SAAS,gBAAgB,8BAA8B,KAAK;AACpE,EAAAA,EAAA,aAAa,SAAS,IAAI,GAC1BA,EAAA,aAAa,UAAU,IAAI,GAC3BA,EAAA,aAAa,WAAW,WAAW,GACnCA,EAAA,aAAa,QAAQ,MAAM,GAC/BA,EAAI,MAAM,gBAAgB;AAE1B,QAAMvS,IAAO,SAAS,gBAAgB,8BAA8B,MAAM;AACrE,EAAAA,EAAA;AAAA,IACH;AAAA,IACA;AAAA,EACF,GACKA,EAAA,aAAa,SAAS,sBAAsB,GAEjDuS,EAAI,YAAYvS,CAAI,GACpBsS,EAAO,YAAYC,CAAG,GAGtBD,EAAO,MAAM,UAAU,QACvBA,EAAO,MAAM,aAAa,UAC1BA,EAAO,MAAM,iBAAiB,UAC9BA,EAAO,MAAM,SAAS,QACtBA,EAAO,MAAM,aAAa,eAC1BA,EAAO,MAAM,SAAS,WACtBA,EAAO,MAAM,eAAe,OAC5BA,EAAO,MAAM,UAAU,QACvBA,EAAO,MAAM,MAAM,OACnBA,EAAO,MAAM,aAAa;AAG1B,QAAMR,IAAYxc,EAAU;AAC5B,MAAI,CAACwc,EAAU,eAAe,8BAA8B,GAAG;AACvD,UAAAI,IAAQJ,EAAU,cAAc,OAAO;AAC7C,IAAAI,EAAM,KAAK,gCACXA,EAAM,cAAc;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;AAAA;AAAA;AAAA;AAAA,OA8BVJ,EAAA,KAAK,YAAYI,CAAK;AAAA,EAAA;AAGlC,SAAA5c,EAAU,YAAYgd,CAAM,GACrBhd;AACT;AC7EO,SAASkd,GAAkBV,GAA2B;AACvD,MAAAA,EAAU,eAAe,8BAA8B;AACzD;AAGI,QAAAI,IAAQJ,EAAU,cAAc,OAAO;AAC7C,EAAAI,EAAM,KAAK,gCACXA,EAAM,cAAc;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAqEVJ,EAAA,KAAK,YAAYI,CAAK;AAClC;AAGO,SAASO,GAAiB3vB,GAAyC;AAClE,QAAAuL,IAAQ,SAAS,cAAc,KAAK;AAC1C,EAAAA,EAAM,YAAY;AAEZ,QAAAqkB,IAAW,SAAS,cAAc,KAAK;AAC7C,EAAAA,EAAS,YAAY,aACrBrkB,EAAM,YAAYqkB,CAAQ;AAEpB,QAAAC,IAAiB,SAAS,cAAc,KAAK;AACnD,EAAAA,EAAe,YAAY,mBAC3BD,EAAS,YAAYC,CAAc;AAE7B,QAAAC,IAAO,SAAS,cAAc,KAAK;AACzC,EAAAA,EAAK,YAAY,kBACjBA,EAAK,YAAY;AAAA;AAAA;AAAA;AAAA,GAKjBD,EAAe,YAAYC,CAAI;AAEzB,QAAAC,IAAU,SAAS,cAAc,GAAG;AAC1C,EAAAA,EAAQ,YAAY,WACZA,EAAA,cAAc/vB,EAAQ,WAAW,SACzC6vB,EAAe,YAAYE,CAAO;AAE5B,QAAAC,IAAuB,SAAS,cAAc,KAAK;AACzD,EAAAA,EAAqB,YAAY;AAC3B,QAAAC,IAAcX,GAAY,EAAI;AACpC,SAAAU,EAAqB,YAAYC,CAAW,GAC5C1kB,EAAM,YAAYykB,CAAoB,GAE/BzkB;AACT;ACjHO,SAAS2kB,GAAwBlB,GAA2B;AAC7D,MAAAA,EAAU,eAAe,oCAAoC;AAC/D;AAGI,QAAAI,IAAQJ,EAAU,cAAc,OAAO;AAC7C,EAAAI,EAAM,KAAK,sCACXA,EAAM,cAAc;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;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;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;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAoIVJ,EAAA,KAAK,YAAYI,CAAK;AAClC;AAGO,SAASe,GACdnwB,GACa;AACP,QAAAuL,IAAQ,SAAS,cAAc,KAAK;AAG1C,MAFAA,EAAM,YAAY,+BAA+BvL,EAAQ,aAAa,aAAa,WAAW,IAE1FA,EAAQ,YAAY;AAEhB,UAAAowB,IAAe,SAAS,cAAc,KAAK;AACjD,IAAAA,EAAa,YAAY;AAGnB,UAAAR,IAAW,SAAS,cAAc,KAAK;AAC7C,IAAAA,EAAS,YAAY;AAEf,UAAAC,IAAiB,SAAS,cAAc,KAAK;AACnD,IAAAA,EAAe,YAAY;AAGrB,UAAAQ,IAAgB,SAAS,cAAc,KAAK;AAClD,IAAAA,EAAc,YAAY,kBACtBrwB,EAAQ,WAAW,gBACPqwB,EAAA,UAAU,IAAI,UAAU,GACtCA,EAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,WAO1BA,EAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAQtB,UAAAC,IAAS,SAAS,cAAc,GAAG;AASzC,QARAA,EAAO,YAAY,UACnBA,EAAO,cACLtwB,EAAQ,WAAW,eAAe,eAAe,aAEnD6vB,EAAe,YAAYQ,CAAa,GACxCR,EAAe,YAAYS,CAAM,GAG7BtwB,EAAQ,OAAO;AACX,YAAAuwB,IAAwB,SAAS,cAAc,KAAK;AAC1D,MAAAA,EAAsB,YAAY;AAE5B,YAAAC,IAAe,SAAS,cAAc,KAAK;AACjD,MAAAA,EAAa,YAAY,iBACzBA,EAAa,YAAY;AAAA;AAAA;AAAA;AAAA;AAMnB,YAAAC,IAAyB,SAAS,cAAc,KAAK;AAC3D,MAAAA,EAAuB,YAAY;AAE7B,YAAAC,IAAgB,SAAS,cAAc,MAAM;AACnD,MAAAA,EAAc,YAAY,kBAC1BA,EAAc,cAAc1wB,EAAQ,OAEpCywB,EAAuB,YAAYC,CAAa,GAChDH,EAAsB,YAAYC,CAAY,GAC9CD,EAAsB,YAAYE,CAAsB,GACxDZ,EAAe,YAAYU,CAAqB;AAAA,IAAA;AAGlD,IAAAX,EAAS,YAAYC,CAAc,GACnCO,EAAa,YAAYR,CAAQ;AAG3B,UAAAI,IAAuB,SAAS,cAAc,KAAK;AACzD,IAAAA,EAAqB,YAAY;AACjC,UAAMC,IAAcX,GAAY;AAChC,IAAAU,EAAqB,YAAYC,CAAW,GAC5CG,EAAa,YAAYJ,CAAoB,GAE7CzkB,EAAM,YAAY6kB,CAAY;AAAA,EAAA,OACzB;AAEC,UAAAO,IAAgB,SAAS,cAAc,KAAK;AAClD,IAAAA,EAAc,YAAY,kBAEtB3wB,EAAQ,WAAW,gBACP2wB,EAAA,UAAU,IAAI,UAAU,GACtCA,EAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,WAO1BA,EAAc,YAAY;AAAA;AAAA;AAAA;AAAA,SAO5BplB,EAAM,YAAYolB,CAAa;AAAA,EAAA;AAG1B,SAAAplB;AACT;AC3PO,SAASqlB,GAA0B5B,GAA2B;AAC/D,MAAAA,EAAU,eAAe,uCAAuC;AAClE;AAGI,QAAAI,IAAQJ,EAAU,cAAc,OAAO;AAC7C,EAAAI,EAAM,KAAK,yCACXA,EAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAmBVJ,EAAA,KAAK,YAAYI,CAAK;AAClC;AAGO,SAASyB,GACd7wB,GACa;AACP,QAAAuL,IAAQ,SAAS,cAAc,KAAK;AAC1C,EAAAA,EAAM,YAAY;AAElB,QAAMukB,IAAO,SAAS,cAAc9vB,EAAQ,cAAc,QAAQ,KAAK;AACvE,EAAA8vB,EAAK,YAAY,QACjBA,EAAK,MAAM,QAAQ,QACnBA,EAAK,MAAM,SAAS,QACpBA,EAAK,MAAM,cAAc,OACrB9vB,EAAQ,eACT8vB,EAA0B,MAAMgB,GAAiB9wB,EAAQ,WAAW,GACpE8vB,EAA0B,MAAM9vB,EAAQ,gBAExC8vB,EAAwB,MAAM,kBAAkB,WAChDA,EAAwB,YAAY9vB,EAAQ,YAC1C,OAAO,CAAC,EACR,YAAY,GACd8vB,EAAwB,MAAM,QAAQ,WACtCA,EAAwB,MAAM,aAAa,OAC3CA,EAAwB,MAAM,WAAW,QACzCA,EAAwB,MAAM,aAAa,QAC3CA,EAAwB,MAAM,YAAY,UAC1CA,EAAwB,MAAM,gBAAgB,aAC9CA,EAAwB,MAAM,eAAe,OAC7CA,EAAwB,MAAM,UAAU;AAGrC,QAAAC,IAAU,SAAS,cAAc,GAAG;AAC1C,SAAAA,EAAQ,YAAY,WACZA,EAAA,cAAc,eAAe/vB,EAAQ,WAAW,IAExDuL,EAAM,YAAYukB,CAAI,GACtBvkB,EAAM,YAAYwkB,CAAO,GAElBxkB;AACT;ACnEO,SAASwlB,GAAwB/B,GAA2B;AAC7D,MAAAA,EAAU,eAAe,oCAAoC;AAC/D;AAGI,QAAAI,IAAQJ,EAAU,cAAc,OAAO;AAC7C,EAAAI,EAAM,KAAK,sCACXA,EAAM,cAAc;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;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAkGVJ,EAAA,KAAK,YAAYI,CAAK;AAClC;AAGO,SAAS4B,GACdhxB,GACa;AACP,QAAAuL,IAAQ,SAAS,cAAc,KAAK;AAC1C,EAAAA,EAAM,YAAY;AAEZ,QAAA0lB,IAAwB,SAAS,cAAc,KAAK;AAC1D,EAAAA,EAAsB,YAAY;AAE5B,QAAAC,IAAiB,SAAS,cAAc,KAAK;AACnD,EAAAA,EAAe,YAAY;AAErB,QAAApB,IAAOqB,GAAmBnxB,EAAQ,OAAO;AAC/C,EAAA8vB,EAAK,YAAY,SACjBoB,EAAe,YAAYpB,CAAI;AAEzB,QAAAC,IAAU,SAAS,cAAc,KAAK;AAC5C,EAAAA,EAAQ,YAAY;AAEd,QAAAqB,IAAQ,SAAS,cAAc,GAAG;AACxC,EAAAA,EAAM,YAAY,SAClBA,EAAM,cAAcpxB,EAAQ;AAEtB,QAAAqxB,IAAW,SAAS,cAAc,GAAG;AAC3C,EAAAA,EAAS,YAAY,YACZA,EAAA,cAAcrxB,EAAQ,YAAY,WAE3C+vB,EAAQ,YAAYqB,CAAK,GACzBrB,EAAQ,YAAYsB,CAAQ,GAE5BJ,EAAsB,YAAYC,CAAc,GAChDD,EAAsB,YAAYlB,CAAO;AAGnC,QAAAuB,IAAqB,SAAS,cAAc,KAAK;AACvD,EAAAA,EAAmB,YAAY;AAEzB,QAAAC,IAAY,SAAS,cAAc,KAAK;AAC9C,EAAAA,EAAU,YAAY;AAEtB,QAAMC,IAASC,GAAU,CAACzxB,EAAQ,OAAO;AAClC,EAAAwxB,EAAA,aAAa,SAAS,SAAS,GACtCD,EAAU,YAAYC,CAAM;AAEtB,QAAAE,IAAW,SAAS,cAAc,MAAM;AAC9C,EAAAA,EAAS,YAAY,aACZA,EAAA,cAAc,GAAG1xB,EAAQ,QAAQ,IAC1CuxB,EAAU,YAAYG,CAAQ,GAE9BJ,EAAmB,YAAYC,CAAS;AAElC,QAAAtB,IAAcX,GAAY,EAAK;AAErC,SAAA/jB,EAAM,YAAY0lB,CAAqB,GACvC1lB,EAAM,YAAY+lB,CAAkB,GACpC/lB,EAAM,YAAY0kB,CAAW,GAEtB1kB;AACT;AAEA,MAAM4lB,KAAqB,CAACQ,IAAU,OAAU;AACxC,QAAAnf,IAAY,SAAS,cAAc,KAAK,GACxCid,IAAM,SAAS,gBAAgB,8BAA8B,KAAK;AAOxE,UANIA,EAAA,aAAa,SAAS,IAAI,GAC1BA,EAAA,aAAa,UAAU,IAAI,GAC3BA,EAAA,aAAa,WAAW,WAAW,GACvCA,EAAI,MAAM,QAAQ,QAClBA,EAAI,MAAM,SAAS,QAEXkC,GAAS;AAAA,IACf,KAAK;AACH,MAAAlC,EAAI,YAAY;AAAA;AAAA;AAGhB;AAAA,IACF;AACE,MAAAA,EAAI,YAAY;AAAA;AAAA;AAAA,EAAA;AAKpB,SAAAjd,EAAU,YAAYid,CAAG,GAClBjd;AACT,GAOMif,KAAY,CAACG,MAAuB;AACxC,QAAMpf,IAAY,SAAS;AAAA,IACzB;AAAA,IACA;AAAA,EACF;AAKA,UAJUA,EAAA,aAAa,SAAS,IAAI,GAC1BA,EAAA,aAAa,UAAU,IAAI,GAC3BA,EAAA,aAAa,WAAW,WAAW,GAErCof,GAAW;AAAA,IACjB,KAAK;AACH,MAAApf,EAAU,YAAY;AAAA;AAAA;AAAA;AAAA;AAKtB;AAAA,IACF;AACE,MAAAA,EAAU,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAqBnB,SAAAA;AACT;AC9OO,SAASqf,GAAwB7C,GAA2B;AAC7D,MAAAA,EAAU,eAAe,oCAAoC;AAC/D;AAGI,QAAAI,IAAQJ,EAAU,cAAc,OAAO;AAC7C,EAAAI,EAAM,KAAK,sCACXA,EAAM,cAAc;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;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;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;AAAA;AAAA;AAAA,KA+EVJ,EAAA,KAAK,YAAYI,CAAK;AAClC;AAGO,SAAS0C,GACd9xB,GACa;AACP,QAAAuL,IAAQ,SAAS,cAAc,KAAK;AAC1C,EAAAA,EAAM,YAAY;AAEZ,QAAA0lB,IAAwB,SAAS,cAAc,KAAK;AAC1D,EAAAA,EAAsB,YAAY;AAE5B,QAAAC,IAAiB,SAAS,cAAc,KAAK;AACnD,EAAAA,EAAe,YAAY;AAErB,QAAAa,IAAQ,SAAS,cAAc,KAAK;AAC1C,EAAAA,EAAM,YAAY,SAClBA,EAAM,MAAMjB,GAAiB9wB,EAAQ,WAAW,CAAC,CAAC,GAC5C+xB,EAAA,MAAM/xB,EAAQ,UAAU,CAAC,GAC/BkxB,EAAe,YAAYa,CAAK;AAE1B,QAAAhC,IAAU,SAAS,cAAc,KAAK;AAC5C,EAAAA,EAAQ,YAAY;AAEpB,QAAMiC,IAAa;AAAA,IACjB,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,GAEMZ,IAAQ,SAAS,cAAc,GAAG;AACxC,EAAAA,EAAM,YAAY,SACZA,EAAA,cAAcY,EAAWhyB,EAAQ,MAAM;AAEvC,QAAAiyB,IAAW,SAAS,cAAc,GAAG;AAC3C,EAAAA,EAAS,YAAY,aACZA,EAAA,cAAcjyB,EAAQ,UAAU,CAAC,GAE1C+vB,EAAQ,YAAYqB,CAAK,GACzBrB,EAAQ,YAAYkC,CAAQ,GAE5BhB,EAAsB,YAAYC,CAAc,GAChDD,EAAsB,YAAYlB,CAAO;AAEnC,QAAAC,IAAuB,SAAS,cAAc,KAAK;AACzD,EAAAA,EAAqB,YAAY;AAC3B,QAAAC,IAAcX,GAAY,EAAK;AACrC,SAAAU,EAAqB,YAAYC,CAAW,GAE5C1kB,EAAM,YAAY0lB,CAAqB,GACvC1lB,EAAM,YAAYykB,CAAoB,GAE/BzkB;AACT;AC/IO,SAAS2mB,GAAkBlD,GAA2B;AACvD,MAAAA,EAAU,eAAe,8BAA8B;AACzD;AAGI,QAAAI,IAAQJ,EAAU,cAAc,OAAO;AAC7C,EAAAI,EAAM,KAAK,gCACXA,EAAM,cAAc;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;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAkGVJ,EAAA,KAAK,YAAYI,CAAK;AAClC;AAGO,SAAS+C,GAAiBnyB,GAAyC;AAClE,QAAAuL,IAAQ,SAAS,cAAc,KAAK;AAC1C,EAAAA,EAAM,YAAY;AAEZ,QAAA0lB,IAAwB,SAAS,cAAc,KAAK;AAC1D,EAAAA,EAAsB,YAAY;AAE5B,QAAAC,IAAiB,SAAS,cAAc,KAAK;AACnD,EAAAA,EAAe,YAAY;AAE3B,QAAMpB,IAAOsC,GAAa;AAC1B,EAAAtC,EAAK,YAAY,SACjBoB,EAAe,YAAYpB,CAAI;AAEzB,QAAAC,IAAU,SAAS,cAAc,KAAK;AAC5C,EAAAA,EAAQ,YAAY;AAEd,QAAAqB,IAAQ,SAAS,cAAc,GAAG;AACxC,EAAAA,EAAM,YAAY,SAClBA,EAAM,cAAcpxB,EAAQ;AAEtB,QAAAqxB,IAAW,SAAS,cAAc,GAAG;AAC3C,EAAAA,EAAS,YAAY,YACZA,EAAA,cAAcrxB,EAAQ,YAAY,WAE3C+vB,EAAQ,YAAYqB,CAAK,GACzBrB,EAAQ,YAAYsB,CAAQ,GAE5BJ,EAAsB,YAAYC,CAAc,GAChDD,EAAsB,YAAYlB,CAAO;AAEnC,QAAAE,IAAcX,GAAY,EAAK;AAErC,SAAA/jB,EAAM,YAAY0lB,CAAqB,GACvC1lB,EAAM,YAAY0kB,CAAW,GAEtB1kB;AACT;AAEA,MAAM6mB,KAAe,MAAM;AACnB,QAAA5f,IAAY,SAAS,cAAc,KAAK,GACxCid,IAAM,SAAS,gBAAgB,8BAA8B,KAAK;AACpE,SAAAA,EAAA,aAAa,SAAS,IAAI,GAC1BA,EAAA,aAAa,UAAU,IAAI,GAC3BA,EAAA,aAAa,WAAW,WAAW,GACvCA,EAAI,MAAM,QAAQ,QAClBA,EAAI,MAAM,SAAS,QACnBA,EAAI,YAAY,ybAChBjd,EAAU,YAAYid,CAAG,GAClBjd;AACT,GC7Ja6f,KAAc,CAACryB,MAAgD;AACpE,QAAAsyB,IAAetyB,EAAQ,gBAAgB,GACvCuyB,IACJ,CAAC,SAASvyB,EAAQ,QAAQ,KAAKA,EAAQ,YAAY,GAE/CwS,IAAY,SAAS,cAAc,KAAK;AAC9C,EAAAA,EAAU,YAAY,gCACtBA,EAAU,MAAM,WAAW,YAC3BA,EAAU,MAAM,SAAS,KACzBA,EAAU,MAAM,OAAO,KACvBA,EAAU,MAAM,QAAQ,KACxBA,EAAU,MAAM,SAAS,OACzBA,EAAU,MAAM,WAAW,UACjBA,EAAA,MAAM,yBAAyB,GAAG8f,CAAY,MAC9C9f,EAAA,MAAM,0BAA0B,GAAG8f,CAAY,MACzD9f,EAAU,MAAM,kBAAkB;AAE5B,QAAAggB,IAAS,SAAS,cAAc,KAAK;AAC3C,SAAAA,EAAO,YAAY,qCACnBA,EAAO,MAAM,WAAW,YACxBA,EAAO,MAAM,SAAS,KACtBA,EAAO,MAAM,OAAO,KACpBA,EAAO,MAAM,SAAS,QACtBA,EAAO,MAAM,kBAAkB,4BACxBA,EAAA,MAAM,yBAAyB,GAAGF,CAAY,MAEjDC,KAEFC,EAAO,MAAM,QAAQ,QACrBA,EAAO,MAAM,aAAa,WAG1BA,EAAO,MAAM,QAAQ,MACrBA,EAAO,MAAM,aAAa,SAASxyB,EAAQ,QAAQ,aAGnD,sBAAsB,MAAM;AAC1B,0BAAsB,MAAM;AAC1B,MAAAwyB,EAAO,MAAM,QAAQ;AAAA,IAAA,CACtB;AAAA,EAAA,CACF,GAGGxyB,EAAQ,cACV,WAAW,MAAM;AACf,IAAAA,EAAQ,aAAa;AAAA,EAAA,GACpBA,EAAQ,QAAQ,IAIvBwS,EAAU,YAAYggB,CAAM,GAErBhgB;AACT;ACjDO,SAASigB,GACdlnB,GACAmnB,GACAC,GACAL,GACM;AACN,QAAMM,IAAcP,GAAY;AAAA,IAC9B,UAAAK;AAAA,IACA,YAAAC;AAAA,IACA,cAAAL;AAAA,EAAA,CACD;AACD,EAAA/mB,EAAM,YAAYqnB,CAAW;AAC/B;ACMA,SAASC,GAAmB7yB,GAAoC;AAC9D,UAAQA,EAAQ,SAAS;AAAA,IACvB,KAAK;AACH,aAAO2vB,GAAiB3vB,CAAO;AAAA,IACjC,KAAK;AACH,aAAOmwB,GAAuBnwB,CAAO;AAAA,IACvC,KAAK;AACH,aAAO6wB,GAAyB7wB,CAAO;AAAA,IACzC,KAAK;AACH,aAAOgxB,GAAuBhxB,CAAO;AAAA,IACvC,KAAK;AACH,aAAOmyB,GAAiBnyB,CAAO;AAAA,IACjC,KAAK;AACH,aAAO8xB,GAAuB9xB,CAAO;AAAA,EAAA;AAE3C;AAGA,SAAS8yB,GACP9D,GACA7M,GACM;AACN,UAAQA,GAAS;AAAA,IACf,KAAK;AACH,MAAAuN,GAAkBV,CAAS;AAC3B;AAAA,IACF,KAAK;AACH,MAAAkB,GAAwBlB,CAAS;AACjC;AAAA,IACF,KAAK;AACH,MAAA4B,GAA0B5B,CAAS;AACnC;AAAA,IACF,KAAK;AACH,MAAA+B,GAAwB/B,CAAS;AACjC;AAAA,IACF,KAAK;AACH,MAAAkD,GAAkBlD,CAAS;AAC3B;AAAA,IACF,KAAK;AACH,MAAA6C,GAAwB7C,CAAS;AACjC;AAAA,EAAA;AAEN;AAGA,SAAS+D,GACP/D,GACAhvB,GACY;AAEZ,EAAAmvB,GAAaH,CAAS,GAGF8D,GAAA9D,GAAWhvB,EAAQ,OAAO;AAGxC,QAAAivB,IAAWjvB,EAAQ,YAAY2uB,IAC/Bnc,IAAYuc,GAAkBC,GAAWC,CAAQ,GAGjD+D,IAAeH,GAAmB7yB,CAAO,GAGzCizB,IAAU,MAAM/D,GAAY8D,CAAY;AAG9C,EAAAxgB,EAAU,YAAYwgB,CAAY,GAG9BhzB,EAAQ,YACVgzB,EAAa,MAAM,SAAS,WACfA,EAAA,iBAAiB,SAAS,CAACvgB,MAAM;AAIxC,IAAA,CAFWA,EAAE,OACY,QAAQ,eAAe,KAC9BzS,EAAQ,WAC5BA,EAAQ,QAAQ;AAAA,EAClB,CACD;AAIG,QAAAiwB,IAAc+C,EAAa,cAAc,eAAe;AAC9D,EAAI/C,KACUA,EAAA,iBAAiB,SAAS,CAACxd,MAAM;AAC3C,IAAAA,EAAE,gBAAgB,GACVwgB,EAAA;AAAA,EAAA,CACT;AAIH,MAAI5hB,IAAkD;AAChD,QAAAqhB,IAAW1yB,EAAQ,YAAY0uB,IAC/B6D,IAAqB,CAAC,SAASG,CAAQ,KAAKA,KAAY;AAG1D,MAAA1yB,EAAQ,YAAY,kBAAkB;AAExC,UAAMsyB,IACJtyB,EAAQ,YAAY,WAAWA,EAAQ,YAAY,gBAAgB,IAAI;AAEzE,IAAIuyB,IAEoBE,GAAAO,GAAc,OAAU,MAAM;AAAA,OAAIV,CAAY,IAG9CG,GAAAO,GAAcN,GAAUO,GAASX,CAAY;AAAA,EACrE,MACF,CAAYC,MAEElhB,IAAA,WAAW4hB,GAASP,CAAQ;AAI1C,SAAO,MAAM;AACX,IAAIrhB,KACF,aAAaA,CAAS,GAEhB4hB,EAAA;AAAA,EACV;AACF;AAGA,IAAIC,KAAuB;AAC3B,SAASC,KAA6B;AAChC,EAAAD,MAAwB,OAAO,SAAW,OAK1CrE,SAIG,OAAA,iBAAiB,WAAW,CAAC3kB,MAAU;AAE5C,QAAIA,EAAM,MAAM,SAAS0kB,MAAsB1kB,EAAM,MAAM,SAAS;AAClE,YAAM8kB,IAAY;AAClB,MAAIA,KACkB+D,GAAA/D,GAAW9kB,EAAM,KAAK,OAAO;AAAA,IACnD;AAAA,EACF,CACD,GAEsBgpB,KAAA;AACzB;AAwDO,SAAS3nB,GAAMvL,GAAmC;AAEvD,MAAI,OAAO,SAAW,OAAe,OAAO,WAAa;AACvD,mBAAQ,KAAK,iDAAiD,GACvD,MAAM;AAAA,IAAC;AAOhB,MAHqBmzB,GAAA,GAGjBtE,MAAc;AAEhB,UAAMG,IAAYF,GAAkB;AAEpC,QAAIE;AAEK,aAAA+D,GAAoB/D,GAAWhvB,CAAO;AAGzC,QAAA;AACF,MAAI,OAAO,UACT,OAAO,OAAO;AAAA,QACZ;AAAA,UACE,MAAM4uB;AAAA,UACN,SAAA5uB;AAAA,QACF;AAAA,QACA;AAAA;AAAA,MACF;AAAA,aAEKyS,GAAG;AACF,cAAA,KAAK,2CAA2CA,CAAC;AAAA,IAAA;AAI3D,WAAO,MAAM;AAAA,IAAC;AAAA,EAChB;AAIO,WAAAsgB,GADW,UACoB/yB,CAAO;AAEjD;AAKI,OAAO,SAAW,OACCmzB,GAAA;;;;;ACpRvB,IAAIC,KAAW;AAAA,EACb;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACd;AACA,GAGIC,KAAiB;AAAA,EAEnB,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AASA,GAGIC,KAAkB;AACtB,eAAeC,KAAkB;AAC/B,MAAI;AACF,UAAM9K,IAAW,MAAM,MAAM,GAAG6K,EAAe,aAAa;AAC5D,QAAI,CAAC7K,EAAS;AACZ,YAAM,IAAI,MAAM,iCAAiCA,EAAS,UAAU,EAAE;AAExE,WAAO,MAAMA,EAAS,KAAM;AAAA,EAC7B,SAAQpd,GAAO;AACd,mBAAQ,MAAM,gCAAgCA,CAAK,GAC5C,EAAE,SAAS,IAAI,SAASioB,GAAiB;AAAA,EACpD;AACA;AACA,eAAeE,KAAsB;AAEnC,UADkB,MAAMD,GAAiB,GACxB;AACnB;AACA,eAAeE,GAAWC,GAAY;AACpC,MAAI;AAGF,UAAMvkB,IAAS,IAFG,MAAMokB,GAAiB,GACf,WAAWD,EACZ,IAAII,CAAU,IACjCjL,IAAW,MAAM,MAAM,GAAGtZ,CAAM,cAAc;AACpD,QAAI,CAACsZ,EAAS;AACZ,YAAM,IAAI;AAAA,QACR,yBAAyBiL,CAAU,KAAKjL,EAAS,UAAU;AAAA,MAC5D;AAEH,UAAMkL,IAAS,MAAMlL,EAAS,KAAM;AACpC,QAAIkL,KAAUA,EAAO,OAAO;AAC1B,MAAIA,EAAO,MAAM,QAAQ,CAACA,EAAO,MAAM,KAAK,WAAW,MAAM,MAC3DA,EAAO,MAAM,OAAO,GAAGxkB,CAAM,IAAIwkB,EAAO,MAAM,IAAI,KAEhDA,EAAO,MAAM,UACX,OAAOA,EAAO,MAAM,SAAU,WAC3BA,EAAO,MAAM,MAAM,WAAW,MAAM,MACvCA,EAAO,MAAM,QAAQ,GAAGxkB,CAAM,IAAIwkB,EAAO,MAAM,KAAK,OAGlDA,EAAO,MAAM,MAAM,SAAS,CAACA,EAAO,MAAM,MAAM,MAAM,WAAW,MAAM,MACzEA,EAAO,MAAM,MAAM,QAAQ,GAAGxkB,CAAM,IAAIwkB,EAAO,MAAM,MAAM,KAAK,KAE9DA,EAAO,MAAM,MAAM,QAAQ,CAACA,EAAO,MAAM,MAAM,KAAK,WAAW,MAAM,MACvEA,EAAO,MAAM,MAAM,OAAO,GAAGxkB,CAAM,IAAIwkB,EAAO,MAAM,MAAM,IAAI;AAIpE,YAAMC,IAA0B,CAACC,MAAa;AAC5C,YAAKA;AACL,qBAAWC,KAAUD;AACnB,gBAAIA,EAASC,CAAM;AACjB,yBAAW9T,KAAQ6T,EAASC,CAAM;AAChC,gBAAID,EAASC,CAAM,EAAE9T,CAAI,KAAK,CAAC6T,EAASC,CAAM,EAAE9T,CAAI,EAAE,WAAW,MAAM,MACrE6T,EAASC,CAAM,EAAE9T,CAAI,IAAI,GAAG7Q,CAAM,IAAI0kB,EAASC,CAAM,EAAE9T,CAAI,CAAC;AAAA;AAAA,MAKrE;AAID,UAHI2T,EAAO,MAAM,iBACfC,EAAwBD,EAAO,MAAM,aAAa,GAEhDA,EAAO,MAAM;AACf,YAAI,OAAOA,EAAO,MAAM,kBAAmB;AACzC,UAAKA,EAAO,MAAM,eAAe,WAAW,MAAM,MAChDA,EAAO,MAAM,iBAAiB,GAAGxkB,CAAM,IAAIwkB,EAAO,MAAM,cAAc;AAAA,iBAE/DA,EAAO,MAAM,eAAe,SAASA,EAAO,MAAM,eAAe,MAAM;AAChF,gBAAMI,IAAWJ,EAAO,MAAM;AAC9B,UAAII,EAAS,SACXH,EAAwBG,EAAS,KAAK,GAEpCA,EAAS,QACXH,EAAwBG,EAAS,IAAI;AAAA,QAEjD;AACU,UAAAH,EAAwBD,EAAO,MAAM,cAAc;AAAA,IAG7D;AACI,WAAOA;AAAA,EACR,SAAQtoB,GAAO;AACd,mBAAQ,MAAM,wBAAwBqoB,CAAU,KAAKroB,CAAK,GACnD;AAAA,EACX;AACA;AACA,eAAe2oB,KAAiB;AAC9B,QAAMC,IAAY,MAAMV,GAAiB,GACnCW,IAAmBD,EAAU,SAC7BE,IAAUF,EAAU,WAAWX,IAC/Bc,IAAa,CAAE;AACrB,eAAM,QAAQ;AAAA,IACZF,EAAiB,IAAI,OAAOR,MAAe;AACzC,UAAI;AACF,cAAMjL,IAAW,MAAM,MAAM,GAAG0L,CAAO,IAAIT,CAAU,cAAc;AACnE,YAAIjL,EAAS,IAAI;AACf,gBAAMkL,IAAS,MAAMlL,EAAS,KAAM;AACpC,UAAA2L,EAAWV,CAAU,IAAIC;AAAA,QACnC;AAAA,MACO,SAAQtoB,GAAO;AACd,gBAAQ,MAAM,wBAAwBqoB,CAAU,KAAKroB,CAAK;AAAA,MAClE;AAAA,IACK,CAAA;AAAA,EACF,GACM+oB;AACT;AAGAf,GAAe,MAAM,OAAO;AACzB,IAACgB,KAAgBjB,IAChBkB,KAAejB,GAAe;","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,34,35,36,37,39,40,45,46,47,48,49,73]}
|