@fuel-ts/account 0.81.0 → 0.83.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @fuel-ts/account might be problematic. Click here for more details.

Files changed (57) hide show
  1. package/README.md +3 -3
  2. package/dist/account.d.ts +7 -6
  3. package/dist/account.d.ts.map +1 -1
  4. package/dist/configs.d.ts.map +1 -1
  5. package/dist/configs.global.js +1 -1
  6. package/dist/configs.global.js.map +1 -1
  7. package/dist/configs.js +1 -1
  8. package/dist/configs.js.map +1 -1
  9. package/dist/configs.mjs +1 -1
  10. package/dist/configs.mjs.map +1 -1
  11. package/dist/index.global.js +890 -619
  12. package/dist/index.global.js.map +1 -1
  13. package/dist/index.js +853 -604
  14. package/dist/index.js.map +1 -1
  15. package/dist/index.mjs +696 -448
  16. package/dist/index.mjs.map +1 -1
  17. package/dist/predicate/predicate.d.ts +12 -24
  18. package/dist/predicate/predicate.d.ts.map +1 -1
  19. package/dist/providers/__generated__/operations.d.ts +810 -359
  20. package/dist/providers/__generated__/operations.d.ts.map +1 -1
  21. package/dist/providers/coin-quantity.d.ts +3 -3
  22. package/dist/providers/coin-quantity.d.ts.map +1 -1
  23. package/dist/providers/coin.d.ts +4 -2
  24. package/dist/providers/coin.d.ts.map +1 -1
  25. package/dist/providers/message.d.ts +7 -1
  26. package/dist/providers/message.d.ts.map +1 -1
  27. package/dist/providers/provider.d.ts +44 -27
  28. package/dist/providers/provider.d.ts.map +1 -1
  29. package/dist/providers/transaction-request/create-transaction-request.d.ts +1 -1
  30. package/dist/providers/transaction-request/create-transaction-request.d.ts.map +1 -1
  31. package/dist/providers/transaction-request/input.d.ts +2 -2
  32. package/dist/providers/transaction-request/input.d.ts.map +1 -1
  33. package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
  34. package/dist/providers/transaction-request/transaction-request.d.ts +13 -33
  35. package/dist/providers/transaction-request/transaction-request.d.ts.map +1 -1
  36. package/dist/providers/transaction-request/utils.d.ts +3 -0
  37. package/dist/providers/transaction-request/utils.d.ts.map +1 -1
  38. package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
  39. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +2 -0
  40. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
  41. package/dist/providers/transaction-summary/calculate-transaction-fee.d.ts +3 -2
  42. package/dist/providers/transaction-summary/calculate-transaction-fee.d.ts.map +1 -1
  43. package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
  44. package/dist/providers/utils/gas.d.ts +8 -2
  45. package/dist/providers/utils/gas.d.ts.map +1 -1
  46. package/dist/providers/utils/merge-quantities.d.ts +1 -1
  47. package/dist/providers/utils/merge-quantities.d.ts.map +1 -1
  48. package/dist/test-utils/launchNode.d.ts +1 -1
  49. package/dist/test-utils/launchNode.d.ts.map +1 -1
  50. package/dist/test-utils.global.js +1615 -1114
  51. package/dist/test-utils.global.js.map +1 -1
  52. package/dist/test-utils.js +841 -596
  53. package/dist/test-utils.js.map +1 -1
  54. package/dist/test-utils.mjs +696 -451
  55. package/dist/test-utils.mjs.map +1 -1
  56. package/dist/wallet/base-wallet-unlocked.d.ts.map +1 -1
  57. package/package.json +16 -16
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/test-utils/index.ts","../src/wallet/base-wallet-unlocked.ts","../src/account.ts","../src/providers/coin-quantity.ts","../src/providers/provider.ts","../src/providers/__generated__/operations.ts","../src/providers/fuel-graphql-subscriber.ts","../src/providers/memory-cache.ts","../src/providers/transaction-request/input.ts","../src/providers/transaction-request/output.ts","../src/providers/transaction-request/transaction-request.ts","../src/providers/resource.ts","../src/providers/utils/receipts.ts","../src/providers/utils/block-explorer.ts","../src/providers/utils/gas.ts","../src/providers/utils/json.ts","../src/providers/utils/sleep.ts","../src/providers/utils/extract-tx-error.ts","../src/providers/transaction-request/errors.ts","../src/providers/transaction-request/witness.ts","../src/providers/transaction-request/create-transaction-request.ts","../src/providers/transaction-request/hash-transaction.ts","../src/providers/transaction-request/storage-slot.ts","../src/providers/transaction-request/script-transaction-request.ts","../src/providers/transaction-request/scripts.ts","../src/providers/transaction-request/utils.ts","../src/providers/transaction-response/transaction-response.ts","../src/providers/transaction-summary/assemble-transaction-summary.ts","../src/providers/transaction-summary/calculate-transaction-fee.ts","../src/providers/transaction-summary/operations.ts","../src/providers/transaction-summary/call.ts","../src/providers/transaction-summary/input.ts","../src/providers/transaction-summary/output.ts","../src/providers/transaction-summary/receipt.ts","../src/providers/transaction-summary/status.ts","../src/providers/transaction-response/getDecodedLogs.ts","../src/providers/utils/auto-retry-fetch.ts","../src/providers/utils/merge-quantities.ts","../src/providers/transaction-summary/get-transaction-summary.ts","../src/providers/chains.ts","../src/providers/assets/index.ts","../src/utils/formatTransferToContractScriptData.ts","../src/signer/signer.ts","../src/wallet/keystore-wallet.ts","../src/hdwallet/hdwallet.ts","../src/mnemonic/mnemonic.ts","../src/wordlists/words/english.ts","../src/mnemonic/utils.ts","../src/wallet/wallets.ts","../src/wallet/wallet.ts","../src/test-utils/seedTestWallet.ts","../src/test-utils/generateTestWallet.ts","../src/test-utils/launchNode.ts"],"sourcesContent":["export * from './generateTestWallet';\nexport * from './seedTestWallet';\nexport * from './launchNode';\n","import { hashMessage } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { hexlify } from '@fuel-ts/utils';\n\nimport { Account } from '../account';\nimport { transactionRequestify } from '../providers';\nimport type {\n TransactionResponse,\n TransactionRequestLike,\n CallResult,\n Provider,\n ProviderSendTxParams,\n EstimateTransactionParams,\n} from '../providers';\nimport { Signer } from '../signer';\n\nimport { encryptKeystoreWallet } from './keystore-wallet';\n\n/**\n * `BaseWalletUnlocked` provides the base functionalities for an unlocked wallet.\n */\nexport class BaseWalletUnlocked extends Account {\n /**\n * Default HDWallet path.\n */\n static defaultPath = \"m/44'/1179993420'/0'/0/0\";\n\n /**\n * A function that returns the wallet's signer.\n */\n signer: () => Signer;\n\n /**\n * Creates a new BaseWalletUnlocked instance.\n *\n * @param privateKey - The private key of the wallet.\n * @param provider - A Provider instance (optional).\n */\n constructor(privateKey: BytesLike, provider?: Provider) {\n const signer = new Signer(privateKey);\n super(signer.address, provider);\n this.signer = () => signer;\n }\n\n /**\n * Gets the private key of the wallet.\n *\n * @returns The private key of the wallet.\n */\n get privateKey(): string {\n return this.signer().privateKey;\n }\n\n /**\n * Gets the public key of the wallet.\n *\n * @returns\n */\n get publicKey(): string {\n return this.signer().publicKey;\n }\n\n /**\n * Signs a message with the wallet's private key.\n *\n * @param message - The message to sign.\n * @returns A promise that resolves to the signature as a ECDSA 64 bytes string.\n */\n async signMessage(message: string): Promise<string> {\n const signedMessage = await this.signer().sign(hashMessage(message));\n return hexlify(signedMessage);\n }\n\n /**\n * Signs a transaction with the wallet's private key.\n *\n * @param transactionRequestLike - The transaction request to sign.\n * @returns A promise that resolves to the signature as a ECDSA 64 bytes string.\n */\n async signTransaction(transactionRequestLike: TransactionRequestLike): Promise<string> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n const chainId = this.provider.getChainId();\n const hashedTransaction = transactionRequest.getTransactionId(chainId);\n const signature = await this.signer().sign(hashedTransaction);\n return hexlify(signature);\n }\n\n /**\n * Populates a transaction with the witnesses signature.\n *\n * @param transactionRequestLike - The transaction request to populate.\n * @returns The populated transaction request.\n */\n async populateTransactionWitnessesSignature(transactionRequestLike: TransactionRequestLike) {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n const signedTransaction = await this.signTransaction(transactionRequest);\n\n transactionRequest.updateWitnessByOwner(this.address, signedTransaction);\n\n return transactionRequest;\n }\n\n /**\n * Populates the witness signature for a transaction and sends it to the network using `provider.sendTransaction`.\n *\n * @param transactionRequestLike - The transaction request to send.\n * @returns A promise that resolves to the TransactionResponse object.\n */\n async sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true, awaitExecution }: ProviderSendTxParams = {}\n ): Promise<TransactionResponse> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.sendTransaction(\n await this.populateTransactionWitnessesSignature(transactionRequest),\n { awaitExecution, estimateTxDependencies: false }\n );\n }\n\n /**\n * Populates the witness signature for a transaction and sends a call to the network using `provider.call`.\n *\n * @param transactionRequestLike - The transaction request to simulate.\n * @returns A promise that resolves to the CallResult object.\n */\n async simulateTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true }: EstimateTransactionParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.call(\n await this.populateTransactionWitnessesSignature(transactionRequest),\n {\n utxoValidation: true,\n estimateTxDependencies: false,\n }\n );\n }\n\n async encrypt(password: string): Promise<string> {\n return encryptKeystoreWallet(this.privateKey, this.address, password);\n }\n}\n","import { Address } from '@fuel-ts/address';\nimport { BaseAssetId } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { AbstractAccount } from '@fuel-ts/interfaces';\nimport type { AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish, BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { FuelConnector } from './connectors';\nimport type {\n TransactionRequestLike,\n CallResult,\n TransactionRequest,\n Coin,\n CoinQuantityLike,\n CoinQuantity,\n Message,\n Resource,\n ExcludeResourcesOption,\n Provider,\n ScriptTransactionRequestLike,\n ProviderSendTxParams,\n TransactionResponse,\n EstimateTransactionParams,\n} from './providers';\nimport {\n withdrawScript,\n ScriptTransactionRequest,\n transactionRequestify,\n addAmountToAsset,\n} from './providers';\nimport { assembleTransferToContractScript } from './utils/formatTransferToContractScriptData';\n\nexport type TxParamsType = Pick<\n ScriptTransactionRequestLike,\n 'gasLimit' | 'gasPrice' | 'maturity' | 'maxFee' | 'witnessLimit'\n>;\n\n/**\n * `Account` provides an abstraction for interacting with accounts or wallets on the network.\n */\nexport class Account extends AbstractAccount {\n /**\n * The address associated with the account.\n */\n readonly address: AbstractAddress;\n\n /**\n * The provider used to interact with the network.\n */\n protected _provider?: Provider;\n\n protected _connector?: FuelConnector;\n\n /**\n * Creates a new Account instance.\n *\n * @param address - The address of the account.\n * @param provider - A Provider instance (optional).\n */\n constructor(address: string | AbstractAddress, provider?: Provider, connector?: FuelConnector) {\n super();\n this._provider = provider;\n this._connector = connector;\n this.address = Address.fromDynamicInput(address);\n }\n\n /**\n * The provider used to interact with the network.\n *\n * @returns A Provider instance.\n *\n * @throws `FuelError` if the provider is not set.\n */\n get provider(): Provider {\n if (!this._provider) {\n throw new FuelError(ErrorCode.MISSING_PROVIDER, 'Provider not set');\n }\n\n return this._provider;\n }\n\n /**\n * Sets the provider for the account.\n *\n * @param provider - A Provider instance.\n */\n set provider(provider: Provider) {\n this._provider = provider;\n }\n\n /**\n * Changes the provider connection for the account.\n *\n * @param provider - A Provider instance.\n * @returns The updated Provider instance.\n */\n connect(provider: Provider): Provider {\n this._provider = provider;\n return this.provider;\n }\n\n /**\n * Retrieves resources satisfying the spend query for the account.\n *\n * @param quantities - IDs of coins to exclude.\n * @param excludedIds - IDs of resources to be excluded from the query.\n * @returns A promise that resolves to an array of Resources.\n */\n async getResourcesToSpend(\n quantities: CoinQuantityLike[] /** IDs of coins to exclude */,\n excludedIds?: ExcludeResourcesOption\n ): Promise<Resource[]> {\n return this.provider.getResourcesToSpend(this.address, quantities, excludedIds);\n }\n\n /**\n * Retrieves coins owned by the account.\n *\n * @param assetId - The asset ID of the coins to retrieve.\n * @returns A promise that resolves to an array of Coins.\n */\n async getCoins(assetId?: BytesLike): Promise<Coin[]> {\n const coins = [];\n\n const pageSize = 9999;\n let cursor;\n // eslint-disable-next-line no-unreachable-loop\n for (;;) {\n const pageCoins = await this.provider.getCoins(this.address, assetId, {\n first: pageSize,\n after: cursor,\n });\n\n coins.push(...pageCoins);\n\n const hasNextPage = pageCoins.length >= pageSize;\n if (!hasNextPage) {\n break;\n }\n\n // TODO: implement pagination\n throw new FuelError(\n ErrorCode.NOT_SUPPORTED,\n `Wallets containing more than ${pageSize} coins exceed the current supported limit.`\n );\n }\n\n return coins;\n }\n\n /**\n * Retrieves messages owned by the account.\n *\n * @returns A promise that resolves to an array of Messages.\n */\n async getMessages(): Promise<Message[]> {\n const messages = [];\n\n const pageSize = 9999;\n let cursor;\n // eslint-disable-next-line no-unreachable-loop\n for (;;) {\n const pageMessages = await this.provider.getMessages(this.address, {\n first: pageSize,\n after: cursor,\n });\n\n messages.push(...pageMessages);\n\n const hasNextPage = pageMessages.length >= pageSize;\n if (!hasNextPage) {\n break;\n }\n\n // TODO: implement pagination\n throw new FuelError(\n ErrorCode.NOT_SUPPORTED,\n `Wallets containing more than ${pageSize} messages exceed the current supported limit.`\n );\n }\n\n return messages;\n }\n\n /**\n * Retrieves the balance of the account for the given asset.\n *\n * @param assetId - The asset ID to check the balance for.\n * @returns A promise that resolves to the balance amount.\n */\n async getBalance(assetId: BytesLike = BaseAssetId): Promise<BN> {\n const amount = await this.provider.getBalance(this.address, assetId);\n return amount;\n }\n\n /**\n * Retrieves all the balances for the account.\n *\n * @returns A promise that resolves to an array of Coins and their quantities.\n */\n async getBalances(): Promise<CoinQuantity[]> {\n const balances = [];\n\n const pageSize = 9999;\n let cursor;\n // eslint-disable-next-line no-unreachable-loop\n for (;;) {\n const pageBalances = await this.provider.getBalances(this.address, {\n first: pageSize,\n after: cursor,\n });\n\n balances.push(...pageBalances);\n\n const hasNextPage = pageBalances.length >= pageSize;\n if (!hasNextPage) {\n break;\n }\n\n // TODO: implement pagination\n throw new FuelError(\n ErrorCode.NOT_SUPPORTED,\n `Wallets containing more than ${pageSize} balances exceed the current supported limit.`\n );\n }\n\n return balances;\n }\n\n /**\n * Adds resources to the transaction enough to fund it.\n *\n * @param request - The transaction request.\n * @param coinQuantities - The coin quantities required to execute the transaction.\n * @param fee - The estimated transaction fee.\n * @returns A promise that resolves when the resources are added to the transaction.\n */\n async fund<T extends TransactionRequest>(\n request: T,\n coinQuantities: CoinQuantity[],\n fee: BN\n ): Promise<void> {\n const updatedQuantities = addAmountToAsset({\n amount: bn(fee),\n assetId: BaseAssetId,\n coinQuantities,\n });\n\n const quantitiesDict: Record<string, { required: BN; owned: BN }> = {};\n\n updatedQuantities.forEach(({ amount, assetId }) => {\n quantitiesDict[assetId] = {\n required: amount,\n owned: bn(0),\n };\n });\n\n const cachedUtxos: BytesLike[] = [];\n const cachedMessages: BytesLike[] = [];\n\n const owner = this.address.toB256();\n\n request.inputs.forEach((input) => {\n const isResource = 'amount' in input;\n\n if (isResource) {\n const isCoin = 'owner' in input;\n\n if (isCoin) {\n const assetId = String(input.assetId);\n if (input.owner === owner && quantitiesDict[assetId]) {\n const amount = bn(input.amount);\n quantitiesDict[assetId].owned = quantitiesDict[assetId].owned.add(amount);\n\n // caching this utxo to avoid fetching it again if requests needs to be funded\n cachedUtxos.push(input.id);\n }\n } else if (input.recipient === owner && input.amount && quantitiesDict[BaseAssetId]) {\n quantitiesDict[BaseAssetId].owned = quantitiesDict[BaseAssetId].owned.add(input.amount);\n\n // caching this message to avoid fetching it again if requests needs to be funded\n cachedMessages.push(input.nonce);\n }\n }\n });\n\n const missingQuantities: CoinQuantity[] = [];\n Object.entries(quantitiesDict).forEach(([assetId, { owned, required }]) => {\n if (owned.lt(required)) {\n missingQuantities.push({\n assetId,\n amount: required.sub(owned),\n });\n }\n });\n\n const needsToBeFunded = missingQuantities.length;\n\n if (needsToBeFunded) {\n const resources = await this.getResourcesToSpend(missingQuantities, {\n messages: cachedMessages,\n utxos: cachedUtxos,\n });\n request.addResources(resources);\n }\n }\n\n /**\n * A helper that creates a transfer transaction request and returns it.\n *\n * @param destination - The address of the destination.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The transaction parameters (gasLimit, gasPrice, maturity).\n * @returns A promise that resolves to the prepared transaction request.\n */\n async createTransfer(\n /** Address of the destination */\n destination: string | AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId: BytesLike = BaseAssetId,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionRequest> {\n const { minGasPrice } = this.provider.getGasConfig();\n const params = { gasPrice: minGasPrice, ...txParams };\n const request = new ScriptTransactionRequest(params);\n request.addCoinOutput(Address.fromAddressOrString(destination), amount, assetId);\n const { maxFee, requiredQuantities, gasUsed, estimatedInputs } =\n await this.provider.getTransactionCost(request, [], {\n estimateTxDependencies: true,\n resourcesOwner: this,\n });\n\n request.gasPrice = bn(txParams.gasPrice ?? minGasPrice);\n request.gasLimit = bn(txParams.gasLimit ?? gasUsed);\n\n this.validateGas({\n gasUsed,\n gasPrice: request.gasPrice,\n gasLimit: request.gasLimit,\n minGasPrice,\n });\n\n await this.fund(request, requiredQuantities, maxFee);\n\n request.updatePredicateInputs(estimatedInputs);\n\n return request;\n }\n\n /**\n * Transfers coins to a destination address.\n *\n * @param destination - The address of the destination.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The transaction parameters (gasLimit, gasPrice, maturity).\n * @returns A promise that resolves to the transaction response.\n */\n async transfer(\n /** Address of the destination */\n destination: string | AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId: BytesLike = BaseAssetId,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionResponse> {\n if (bn(amount).lte(0)) {\n throw new FuelError(\n ErrorCode.INVALID_TRANSFER_AMOUNT,\n 'Transfer amount must be a positive number.'\n );\n }\n const request = await this.createTransfer(destination, amount, assetId, txParams);\n return this.sendTransaction(request, { estimateTxDependencies: false });\n }\n\n /**\n * Transfers coins to a contract address.\n *\n * @param contractId - The address of the contract.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The optional transaction parameters.\n * @returns A promise that resolves to the transaction response.\n */\n async transferToContract(\n /** Contract address */\n contractId: string | AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId: BytesLike = BaseAssetId,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionResponse> {\n if (bn(amount).lte(0)) {\n throw new FuelError(\n ErrorCode.INVALID_TRANSFER_AMOUNT,\n 'Transfer amount must be a positive number.'\n );\n }\n\n const contractAddress = Address.fromAddressOrString(contractId);\n const { minGasPrice } = this.provider.getGasConfig();\n const params = { gasPrice: minGasPrice, ...txParams };\n\n const { script, scriptData } = await assembleTransferToContractScript({\n hexlifiedContractId: contractAddress.toB256(),\n amountToTransfer: bn(amount),\n assetId,\n });\n\n const request = new ScriptTransactionRequest({\n ...params,\n script,\n scriptData,\n });\n\n request.addContractInputAndOutput(contractAddress);\n\n const { maxFee, requiredQuantities, gasUsed } = await this.provider.getTransactionCost(\n request,\n [{ amount: bn(amount), assetId: String(assetId) }]\n );\n\n request.gasLimit = bn(params.gasLimit ?? gasUsed);\n\n this.validateGas({\n gasUsed,\n gasPrice: request.gasPrice,\n gasLimit: request.gasLimit,\n minGasPrice,\n });\n\n await this.fund(request, requiredQuantities, maxFee);\n\n return this.sendTransaction(request);\n }\n\n /**\n * Withdraws an amount of the base asset to the base chain.\n *\n * @param recipient - Address of the recipient on the base chain.\n * @param amount - Amount of base asset.\n * @param txParams - The optional transaction parameters.\n * @returns A promise that resolves to the transaction response.\n */\n async withdrawToBaseLayer(\n /** Address of the recipient on the base chain */\n recipient: string | AbstractAddress,\n /** Amount of base asset */\n amount: BigNumberish,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionResponse> {\n const { minGasPrice } = this.provider.getGasConfig();\n\n const recipientAddress = Address.fromAddressOrString(recipient);\n // add recipient and amount to the transaction script code\n const recipientDataArray = arrayify(\n '0x'.concat(recipientAddress.toHexString().substring(2).padStart(64, '0'))\n );\n const amountDataArray = arrayify(\n '0x'.concat(bn(amount).toHex().substring(2).padStart(16, '0'))\n );\n const script = new Uint8Array([\n ...arrayify(withdrawScript.bytes),\n ...recipientDataArray,\n ...amountDataArray,\n ]);\n\n const params: ScriptTransactionRequestLike = { script, gasPrice: minGasPrice, ...txParams };\n\n const request = new ScriptTransactionRequest(params);\n const forwardingQuantities = [{ amount: bn(amount), assetId: BaseAssetId }];\n\n const { requiredQuantities, maxFee, gasUsed } = await this.provider.getTransactionCost(\n request,\n forwardingQuantities\n );\n\n request.gasLimit = bn(params.gasLimit ?? gasUsed);\n\n this.validateGas({\n gasUsed,\n gasPrice: request.gasPrice,\n gasLimit: request.gasLimit,\n minGasPrice,\n });\n\n await this.fund(request, requiredQuantities, maxFee);\n\n return this.sendTransaction(request);\n }\n\n async signMessage(message: string): Promise<string> {\n if (!this._connector) {\n throw new FuelError(ErrorCode.MISSING_CONNECTOR, 'A connector is required to sign messages.');\n }\n return this._connector.signMessage(this.address.toString(), message);\n }\n\n /**\n * Signs a transaction with the wallet's private key.\n *\n * @param transactionRequestLike - The transaction request to sign.\n * @returns A promise that resolves to the signature of the transaction.\n */\n async signTransaction(transactionRequestLike: TransactionRequestLike): Promise<string> {\n if (!this._connector) {\n throw new FuelError(\n ErrorCode.MISSING_CONNECTOR,\n 'A connector is required to sign transactions.'\n );\n }\n return this._connector.signTransaction(this.address.toString(), transactionRequestLike);\n }\n\n /**\n * Sends a transaction to the network.\n *\n * @param transactionRequestLike - The transaction request to be sent.\n * @returns A promise that resolves to the transaction response.\n */\n async sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true, awaitExecution }: ProviderSendTxParams = {}\n ): Promise<TransactionResponse> {\n if (this._connector) {\n return this.provider.getTransactionResponse(\n await this._connector.sendTransaction(this.address.toString(), transactionRequestLike)\n );\n }\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.sendTransaction(transactionRequest, {\n awaitExecution,\n estimateTxDependencies: false,\n });\n }\n\n /**\n * Simulates a transaction.\n *\n * @param transactionRequestLike - The transaction request to be simulated.\n * @returns A promise that resolves to the call result.\n */\n async simulateTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true }: EstimateTransactionParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.simulate(transactionRequest, { estimateTxDependencies: false });\n }\n\n private validateGas({\n gasUsed,\n gasPrice,\n gasLimit,\n minGasPrice,\n }: {\n gasUsed: BN;\n gasPrice: BN;\n gasLimit: BN;\n minGasPrice: BN;\n }) {\n if (minGasPrice.gt(gasPrice)) {\n throw new FuelError(\n ErrorCode.GAS_PRICE_TOO_LOW,\n `Gas price '${gasPrice}' is lower than the required: '${minGasPrice}'.`\n );\n }\n\n if (gasUsed.gt(gasLimit)) {\n throw new FuelError(\n ErrorCode.GAS_LIMIT_TOO_LOW,\n `Gas limit '${gasLimit}' is lower than the required: '${gasUsed}'.`\n );\n }\n }\n}\n","import { BaseAssetId } from '@fuel-ts/address/configs';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish, BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport { hexlify } from '@fuel-ts/utils';\n\nexport type CoinQuantityLike =\n | [amount: BigNumberish, assetId?: BytesLike, max?: BigNumberish]\n | { amount: BigNumberish; assetId?: BytesLike; max?: BigNumberish };\nexport type CoinQuantity = { amount: BN; assetId: string; max?: BN };\n\n/** @hidden */\nexport const coinQuantityfy = (coinQuantityLike: CoinQuantityLike): CoinQuantity => {\n let assetId;\n let amount;\n let max;\n if (Array.isArray(coinQuantityLike)) {\n amount = coinQuantityLike[0];\n assetId = coinQuantityLike[1] ?? BaseAssetId;\n max = coinQuantityLike[2] ?? undefined;\n } else {\n amount = coinQuantityLike.amount;\n assetId = coinQuantityLike.assetId ?? BaseAssetId;\n max = coinQuantityLike.max ?? undefined;\n }\n\n const bnAmount = bn(amount);\n return {\n assetId: hexlify(assetId),\n amount: bnAmount.lt(1) ? bn(1) : bnAmount,\n max: max ? bn(max) : undefined,\n };\n};\n\nexport interface IAddAmountToAssetParams {\n assetId: string;\n amount: BN;\n coinQuantities: CoinQuantity[];\n}\n\nexport const addAmountToAsset = (params: IAddAmountToAssetParams): CoinQuantity[] => {\n const { amount, assetId } = params;\n\n const coinQuantities = [...params.coinQuantities];\n\n const assetIdx = coinQuantities.findIndex((coinQuantity) => coinQuantity.assetId === assetId);\n\n if (assetIdx !== -1) {\n coinQuantities[assetIdx].amount = coinQuantities[assetIdx].amount.add(amount);\n } else {\n coinQuantities.push({ assetId, amount });\n }\n\n return coinQuantities;\n};\n","import { Address } from '@fuel-ts/address';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAccount, AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport { BN, bn, max } from '@fuel-ts/math';\nimport type { Transaction } from '@fuel-ts/transactions';\nimport {\n InputType,\n TransactionType,\n InputMessageCoder,\n TransactionCoder,\n} from '@fuel-ts/transactions';\nimport { arrayify, hexlify, DateTime } from '@fuel-ts/utils';\nimport { checkFuelCoreVersionCompatibility } from '@fuel-ts/versions';\nimport { equalBytes } from '@noble/curves/abstract/utils';\nimport { Network } from 'ethers';\nimport type { DocumentNode } from 'graphql';\nimport { GraphQLClient } from 'graphql-request';\nimport { clone } from 'ramda';\n\nimport type { Predicate } from '../predicate';\n\nimport { getSdk as getOperationsSdk } from './__generated__/operations';\nimport type {\n GqlChainInfoFragmentFragment,\n GqlGasCosts,\n GqlGetBlocksQueryVariables,\n GqlPeerInfo,\n} from './__generated__/operations';\nimport type { Coin } from './coin';\nimport type { CoinQuantity, CoinQuantityLike } from './coin-quantity';\nimport { coinQuantityfy } from './coin-quantity';\nimport { FuelGraphqlSubscriber } from './fuel-graphql-subscriber';\nimport { MemoryCache } from './memory-cache';\nimport type { Message, MessageCoin, MessageProof, MessageStatus } from './message';\nimport type { ExcludeResourcesOption, Resource } from './resource';\nimport type {\n TransactionRequestLike,\n TransactionRequest,\n TransactionRequestInput,\n CoinTransactionRequestInput,\n ScriptTransactionRequest,\n JsonAbisFromAllCalls,\n} from './transaction-request';\nimport { transactionRequestify } from './transaction-request';\nimport type { TransactionResultReceipt } from './transaction-response';\nimport { TransactionResponse } from './transaction-response';\nimport { processGqlReceipt } from './transaction-summary/receipt';\nimport {\n calculatePriceWithFactor,\n getGasUsedFromReceipts,\n getReceiptsWithMissingData,\n} from './utils';\nimport type { RetryOptions } from './utils/auto-retry-fetch';\nimport { autoRetryFetch } from './utils/auto-retry-fetch';\nimport { mergeQuantities } from './utils/merge-quantities';\n\nconst MAX_RETRIES = 10;\n\nexport type CallResult = {\n receipts: TransactionResultReceipt[];\n};\n\nexport type EstimateTxDependenciesReturns = CallResult & {\n outputVariables: number;\n missingContractIds: string[];\n};\n\n/**\n * A Fuel block\n */\nexport type Block = {\n id: string;\n height: BN;\n time: string;\n transactionIds: string[];\n};\n\n/**\n * Deployed Contract bytecode and contract id\n */\nexport type ContractResult = {\n id: string;\n bytecode: string;\n};\n\ntype ConsensusParameters = {\n contractMaxSize: BN;\n maxInputs: BN;\n maxOutputs: BN;\n maxWitnesses: BN;\n maxGasPerTx: BN;\n maxScriptLength: BN;\n maxScriptDataLength: BN;\n maxStorageSlots: BN;\n maxPredicateLength: BN;\n maxPredicateDataLength: BN;\n maxGasPerPredicate: BN;\n gasPriceFactor: BN;\n gasPerByte: BN;\n maxMessageDataLength: BN;\n chainId: BN;\n gasCosts: GqlGasCosts;\n};\n\n/**\n * Chain information\n */\nexport type ChainInfo = {\n name: string;\n baseChainHeight: BN;\n consensusParameters: ConsensusParameters;\n gasCosts: GqlGasCosts;\n latestBlock: {\n id: string;\n height: BN;\n time: string;\n transactions: Array<{ id: string }>;\n };\n};\n\n/**\n * Node information\n */\nexport type NodeInfo = {\n utxoValidation: boolean;\n vmBacktrace: boolean;\n minGasPrice: BN;\n maxTx: BN;\n maxDepth: BN;\n nodeVersion: string;\n peers: GqlPeerInfo[];\n};\n\nexport type NodeInfoAndConsensusParameters = {\n minGasPrice: BN;\n nodeVersion: string;\n gasPerByte: BN;\n gasPriceFactor: BN;\n maxGasPerTx: BN;\n};\n\n// #region cost-estimation-1\nexport type TransactionCost = {\n requiredQuantities: CoinQuantity[];\n receipts: TransactionResultReceipt[];\n minGasPrice: BN;\n gasPrice: BN;\n minGas: BN;\n maxGas: BN;\n gasUsed: BN;\n minFee: BN;\n maxFee: BN;\n outputVariables: number;\n missingContractIds: string[];\n estimatedInputs: TransactionRequest['inputs'];\n};\n// #endregion cost-estimation-1\n\nconst processGqlChain = (chain: GqlChainInfoFragmentFragment): ChainInfo => {\n const { name, daHeight, consensusParameters, latestBlock } = chain;\n\n const { contractParams, feeParams, predicateParams, scriptParams, txParams, gasCosts } =\n consensusParameters;\n\n return {\n name,\n baseChainHeight: bn(daHeight),\n consensusParameters: {\n contractMaxSize: bn(contractParams.contractMaxSize),\n maxInputs: bn(txParams.maxInputs),\n maxOutputs: bn(txParams.maxOutputs),\n maxWitnesses: bn(txParams.maxWitnesses),\n maxGasPerTx: bn(txParams.maxGasPerTx),\n maxScriptLength: bn(scriptParams.maxScriptLength),\n maxScriptDataLength: bn(scriptParams.maxScriptDataLength),\n maxStorageSlots: bn(contractParams.maxStorageSlots),\n maxPredicateLength: bn(predicateParams.maxPredicateLength),\n maxPredicateDataLength: bn(predicateParams.maxPredicateDataLength),\n maxGasPerPredicate: bn(predicateParams.maxGasPerPredicate),\n gasPriceFactor: bn(feeParams.gasPriceFactor),\n gasPerByte: bn(feeParams.gasPerByte),\n maxMessageDataLength: bn(predicateParams.maxMessageDataLength),\n chainId: bn(consensusParameters.chainId),\n gasCosts,\n },\n gasCosts,\n latestBlock: {\n id: latestBlock.id,\n height: bn(latestBlock.header.height),\n time: latestBlock.header.time,\n transactions: latestBlock.transactions.map((i) => ({\n id: i.id,\n })),\n },\n };\n};\n\n/**\n * @hidden\n *\n * Cursor pagination arguments\n *\n * https://relay.dev/graphql/connections.htm#sec-Arguments\n */\nexport type CursorPaginationArgs = {\n /** Forward pagination limit */\n first?: number | null;\n /** Forward pagination cursor */\n after?: string | null;\n /** Backward pagination limit */\n last?: number | null;\n /** Backward pagination cursor */\n before?: string | null;\n};\n\n/*\n * Provider initialization options\n */\nexport type ProviderOptions = {\n /**\n * Custom fetch function to use for making requests.\n */\n fetch?: (\n url: string,\n requestInit?: RequestInit,\n providerOptions?: Omit<ProviderOptions, 'fetch'>\n ) => Promise<Response>;\n /**\n * Timeout [ms] after which every request will be aborted.\n */\n timeout?: number;\n /**\n * Cache UTXOs for the given time [ms].\n */\n cacheUtxo?: number;\n /**\n * Retry options to use when fetching data from the node.\n */\n retryOptions?: RetryOptions;\n /**\n * Middleware to modify the request before it is sent.\n * This can be used to add headers, modify the body, etc.\n */\n requestMiddleware?: (request: RequestInit) => RequestInit | Promise<RequestInit>;\n};\n\n/**\n * UTXO Validation Param\n */\nexport type UTXOValidationParams = {\n utxoValidation?: boolean;\n};\n\n/**\n * Transaction estimation Param\n */\nexport type EstimateTransactionParams = {\n estimateTxDependencies?: boolean;\n};\n\nexport type EstimatePredicateParams = {\n estimatePredicates?: boolean;\n};\n\nexport type TransactionCostParams = EstimateTransactionParams &\n EstimatePredicateParams & {\n resourcesOwner?: AbstractAccount;\n signatureCallback?: (request: ScriptTransactionRequest) => Promise<ScriptTransactionRequest>;\n };\n\n/**\n * Provider Call transaction params\n */\nexport type ProviderCallParams = UTXOValidationParams & EstimateTransactionParams;\n\n/**\n * Provider Send transaction params\n */\nexport type ProviderSendTxParams = EstimateTransactionParams & {\n /**\n * By default, the promise will resolve immediately after the transaction is submitted.\n *\n * If set to true, the promise will resolve only when the transaction changes status\n * from `SubmittedStatus` to one of `SuccessStatus`, `FailureStatus` or `SqueezedOutStatus`.\n *\n */\n awaitExecution?: boolean;\n};\n\n/**\n * URL - Consensus Params mapping.\n */\ntype ChainInfoCache = Record<string, ChainInfo>;\n\n/**\n * URL - Node Info mapping.\n */\ntype NodeInfoCache = Record<string, NodeInfo>;\n\n/**\n * A provider for connecting to a node\n */\nexport default class Provider {\n operations: ReturnType<typeof getOperationsSdk>;\n cache?: MemoryCache;\n\n static clearChainAndNodeCaches() {\n Provider.nodeInfoCache = {};\n Provider.chainInfoCache = {};\n }\n\n private static chainInfoCache: ChainInfoCache = {};\n private static nodeInfoCache: NodeInfoCache = {};\n\n options: ProviderOptions = {\n timeout: undefined,\n cacheUtxo: undefined,\n fetch: undefined,\n retryOptions: undefined,\n };\n\n private static getFetchFn(options: ProviderOptions): NonNullable<ProviderOptions['fetch']> {\n const { retryOptions, timeout } = options;\n\n return autoRetryFetch(async (...args) => {\n const url = args[0];\n const request = args[1];\n const signal = timeout ? AbortSignal.timeout(timeout) : undefined;\n\n let fullRequest: RequestInit = { ...request, signal };\n\n if (options.requestMiddleware) {\n fullRequest = await options.requestMiddleware(fullRequest);\n }\n\n return options.fetch ? options.fetch(url, fullRequest, options) : fetch(url, fullRequest);\n }, retryOptions);\n }\n\n /**\n * Constructor to initialize a Provider.\n *\n * @param url - GraphQL endpoint of the Fuel node\n * @param chainInfo - Chain info of the Fuel node\n * @param options - Additional options for the provider\n * @hidden\n */\n protected constructor(\n /** GraphQL endpoint of the Fuel node */\n public url: string,\n options: ProviderOptions = {}\n ) {\n this.options = { ...this.options, ...options };\n this.url = url;\n\n this.operations = this.createOperations();\n this.cache = options.cacheUtxo ? new MemoryCache(options.cacheUtxo) : undefined;\n }\n\n /**\n * Creates a new instance of the Provider class. This is the recommended way to initialize a Provider.\n * @param url - GraphQL endpoint of the Fuel node\n * @param options - Additional options for the provider\n */\n static async create(url: string, options: ProviderOptions = {}) {\n const provider = new Provider(url, options);\n await provider.fetchChainAndNodeInfo();\n return provider;\n }\n\n /**\n * Returns the cached chainInfo for the current URL.\n */\n getChain() {\n const chain = Provider.chainInfoCache[this.url];\n if (!chain) {\n throw new FuelError(\n ErrorCode.CHAIN_INFO_CACHE_EMPTY,\n 'Chain info cache is empty. Make sure you have called `Provider.create` to initialize the provider.'\n );\n }\n return chain;\n }\n\n /**\n * Returns the cached nodeInfo for the current URL.\n */\n getNode() {\n const node = Provider.nodeInfoCache[this.url];\n if (!node) {\n throw new FuelError(\n ErrorCode.NODE_INFO_CACHE_EMPTY,\n 'Node info cache is empty. Make sure you have called `Provider.create` to initialize the provider.'\n );\n }\n return node;\n }\n\n /**\n * Returns some helpful parameters related to gas fees.\n */\n getGasConfig() {\n const { minGasPrice } = this.getNode();\n const { maxGasPerTx, maxGasPerPredicate, gasPriceFactor, gasPerByte, gasCosts } =\n this.getChain().consensusParameters;\n return {\n minGasPrice,\n maxGasPerTx,\n maxGasPerPredicate,\n gasPriceFactor,\n gasPerByte,\n gasCosts,\n };\n }\n\n /**\n * Updates the URL for the provider and fetches the consensus parameters for the new URL, if needed.\n */\n async connect(url: string, options?: ProviderOptions) {\n this.url = url;\n this.options = options ?? this.options;\n this.operations = this.createOperations();\n await this.fetchChainAndNodeInfo();\n }\n\n /**\n * Fetches both the chain and node information, saves it to the cache, and return it.\n *\n * @returns NodeInfo and Chain\n */\n async fetchChainAndNodeInfo() {\n const chain = await this.fetchChain();\n const nodeInfo = await this.fetchNode();\n\n Provider.ensureClientVersionIsSupported(nodeInfo);\n\n return {\n chain,\n nodeInfo,\n };\n }\n\n private static ensureClientVersionIsSupported(nodeInfo: NodeInfo) {\n const { isMajorSupported, isMinorSupported, supportedVersion } =\n checkFuelCoreVersionCompatibility(nodeInfo.nodeVersion);\n\n if (!isMajorSupported || !isMinorSupported) {\n throw new FuelError(\n FuelError.CODES.UNSUPPORTED_FUEL_CLIENT_VERSION,\n `Fuel client version: ${nodeInfo.nodeVersion}, Supported version: ${supportedVersion}`\n );\n }\n }\n\n /**\n * Create GraphQL client and set operations.\n *\n * @returns The operation SDK object\n */\n private createOperations() {\n const fetchFn = Provider.getFetchFn(this.options);\n const gqlClient = new GraphQLClient(this.url, {\n fetch: (url: string, requestInit: RequestInit) => fetchFn(url, requestInit, this.options),\n });\n\n const executeQuery = (query: DocumentNode, vars: Record<string, unknown>) => {\n const opDefinition = query.definitions.find((x) => x.kind === 'OperationDefinition') as {\n operation: string;\n };\n const isSubscription = opDefinition?.operation === 'subscription';\n\n if (isSubscription) {\n return new FuelGraphqlSubscriber({\n url: this.url,\n query,\n fetchFn: (url, requestInit) => fetchFn(url as string, requestInit, this.options),\n variables: vars,\n });\n }\n return gqlClient.request(query, vars);\n };\n\n // @ts-expect-error This is due to this function being generic. Its type is specified when calling a specific operation via provider.operations.xyz.\n return getOperationsSdk(executeQuery);\n }\n\n /**\n * Returns the version of the connected node.\n *\n * @returns A promise that resolves to the version string.\n */\n async getVersion(): Promise<string> {\n const {\n nodeInfo: { nodeVersion },\n } = await this.operations.getVersion();\n return nodeVersion;\n }\n\n /**\n * @hidden\n *\n * Returns the network configuration of the connected Fuel node.\n *\n * @returns A promise that resolves to the network configuration object\n */\n async getNetwork(): Promise<Network> {\n const {\n name,\n consensusParameters: { chainId },\n } = await this.getChain();\n const network = new Network(name, chainId.toNumber());\n return Promise.resolve(network);\n }\n\n /**\n * Returns the block number.\n *\n * @returns A promise that resolves to the block number\n */\n async getBlockNumber(): Promise<BN> {\n const { chain } = await this.operations.getChain();\n return bn(chain.latestBlock.header.height, 10);\n }\n\n /**\n * Returns the chain information.\n * @param url - The URL of the Fuel node\n * @returns NodeInfo object\n */\n async fetchNode(): Promise<NodeInfo> {\n const { nodeInfo } = await this.operations.getNodeInfo();\n\n const processedNodeInfo: NodeInfo = {\n maxDepth: bn(nodeInfo.maxDepth),\n maxTx: bn(nodeInfo.maxTx),\n minGasPrice: bn(nodeInfo.minGasPrice),\n nodeVersion: nodeInfo.nodeVersion,\n utxoValidation: nodeInfo.utxoValidation,\n vmBacktrace: nodeInfo.vmBacktrace,\n peers: nodeInfo.peers,\n };\n\n Provider.nodeInfoCache[this.url] = processedNodeInfo;\n\n return processedNodeInfo;\n }\n\n /**\n * Fetches the `chainInfo` for the given node URL.\n * @param url - The URL of the Fuel node\n * @returns ChainInfo object\n */\n async fetchChain(): Promise<ChainInfo> {\n const { chain } = await this.operations.getChain();\n\n const processedChain = processGqlChain(chain);\n\n Provider.chainInfoCache[this.url] = processedChain;\n\n return processedChain;\n }\n\n /**\n * Returns the chain ID\n * @returns A promise that resolves to the chain ID number\n */\n getChainId() {\n const {\n consensusParameters: { chainId },\n } = this.getChain();\n return chainId.toNumber();\n }\n\n /**\n * @hidden\n */\n #cacheInputs(inputs: TransactionRequestInput[]): void {\n if (!this.cache) {\n return;\n }\n\n inputs.forEach((input) => {\n if (input.type === InputType.Coin) {\n this.cache?.set(input.id);\n }\n });\n }\n\n /**\n * Submits a transaction to the chain to be executed.\n *\n * If the transaction is missing any dependencies,\n * the transaction will be mutated and those dependencies will be added.\n *\n * @param transactionRequestLike - The transaction request object.\n * @returns A promise that resolves to the transaction response object.\n */\n // #region Provider-sendTransaction\n async sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true, awaitExecution = false }: ProviderSendTxParams = {}\n ): Promise<TransactionResponse> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n this.#cacheInputs(transactionRequest.inputs);\n if (estimateTxDependencies) {\n await this.estimateTxDependencies(transactionRequest);\n }\n // #endregion Provider-sendTransaction\n\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n\n let abis: JsonAbisFromAllCalls | undefined;\n\n if (transactionRequest.type === TransactionType.Script) {\n abis = transactionRequest.abis;\n }\n\n if (awaitExecution) {\n const subscription = this.operations.submitAndAwait({ encodedTransaction });\n for await (const { submitAndAwait } of subscription) {\n if (submitAndAwait.type === 'SqueezedOutStatus') {\n throw new FuelError(\n ErrorCode.TRANSACTION_SQUEEZED_OUT,\n `Transaction Squeezed Out with reason: ${submitAndAwait.reason}`\n );\n }\n\n if (submitAndAwait.type !== 'SubmittedStatus') {\n break;\n }\n }\n\n const transactionId = transactionRequest.getTransactionId(this.getChainId());\n const response = new TransactionResponse(transactionId, this, abis);\n await response.fetch();\n return response;\n }\n\n const {\n submit: { id: transactionId },\n } = await this.operations.submit({ encodedTransaction });\n\n return new TransactionResponse(transactionId, this, abis);\n }\n\n /**\n * Executes a transaction without actually submitting it to the chain.\n *\n * If the transaction is missing any dependencies,\n * the transaction will be mutated and those dependencies will be added.\n *\n * @param transactionRequestLike - The transaction request object.\n * @param utxoValidation - Additional provider call parameters.\n * @returns A promise that resolves to the call result object.\n */\n async call(\n transactionRequestLike: TransactionRequestLike,\n { utxoValidation, estimateTxDependencies = true }: ProviderCallParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n return this.estimateTxDependencies(transactionRequest);\n }\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n const { dryRun: gqlReceipts } = await this.operations.dryRun({\n encodedTransaction,\n utxoValidation: utxoValidation || false,\n });\n const receipts = gqlReceipts.map(processGqlReceipt);\n return {\n receipts,\n };\n }\n\n /**\n * Verifies whether enough gas is available to complete transaction.\n *\n * @param transactionRequest - The transaction request object.\n * @returns A promise that resolves to the estimated transaction request object.\n */\n async estimatePredicates(transactionRequest: TransactionRequest): Promise<TransactionRequest> {\n const shouldEstimatePredicates = Boolean(\n transactionRequest.inputs.find(\n (input) =>\n 'predicate' in input &&\n input.predicate &&\n !equalBytes(arrayify(input.predicate), arrayify('0x')) &&\n new BN(input.predicateGasUsed).isZero()\n )\n );\n if (!shouldEstimatePredicates) {\n return transactionRequest;\n }\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n const response = await this.operations.estimatePredicates({\n encodedTransaction,\n });\n\n const {\n estimatePredicates: { inputs },\n } = response;\n\n if (inputs) {\n inputs.forEach((input, index) => {\n if ('predicateGasUsed' in input && bn(input.predicateGasUsed).gt(0)) {\n // eslint-disable-next-line no-param-reassign\n (<CoinTransactionRequestInput>transactionRequest.inputs[index]).predicateGasUsed =\n input.predicateGasUsed;\n }\n });\n }\n\n return transactionRequest;\n }\n\n /**\n * Will dryRun a transaction and check for missing dependencies.\n *\n * If there are missing variable outputs,\n * `addVariableOutputs` is called on the transaction.\n *\n * @privateRemarks\n * TODO: Investigate support for missing contract IDs\n * TODO: Add support for missing output messages\n *\n * @param transactionRequest - The transaction request object.\n * @returns A promise.\n */\n async estimateTxDependencies(\n transactionRequest: TransactionRequest\n ): Promise<EstimateTxDependenciesReturns> {\n if (transactionRequest.type === TransactionType.Create) {\n return {\n receipts: [],\n outputVariables: 0,\n missingContractIds: [],\n };\n }\n\n await this.estimatePredicates(transactionRequest);\n\n let receipts: TransactionResultReceipt[] = [];\n const missingContractIds: string[] = [];\n let outputVariables = 0;\n\n for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {\n const { dryRun: gqlReceipts } = await this.operations.dryRun({\n encodedTransaction: hexlify(transactionRequest.toTransactionBytes()),\n utxoValidation: false,\n });\n receipts = gqlReceipts.map(processGqlReceipt);\n const { missingOutputVariables, missingOutputContractIds } =\n getReceiptsWithMissingData(receipts);\n\n const hasMissingOutputs =\n missingOutputVariables.length !== 0 || missingOutputContractIds.length !== 0;\n\n if (hasMissingOutputs) {\n outputVariables += missingOutputVariables.length;\n transactionRequest.addVariableOutputs(missingOutputVariables.length);\n missingOutputContractIds.forEach(({ contractId }) => {\n transactionRequest.addContractInputAndOutput(Address.fromString(contractId));\n missingContractIds.push(contractId);\n });\n } else {\n break;\n }\n }\n\n return {\n receipts,\n outputVariables,\n missingContractIds,\n };\n }\n\n /**\n * Estimates the transaction gas and fee based on the provided transaction request.\n * @param transactionRequest - The transaction request object.\n * @returns An object containing the estimated minimum gas, minimum fee, maximum gas, and maximum fee.\n */\n estimateTxGasAndFee(params: { transactionRequest: TransactionRequest }) {\n const { transactionRequest } = params;\n const { gasPriceFactor, minGasPrice, maxGasPerTx } = this.getGasConfig();\n\n const chainInfo = this.getChain();\n\n const gasPrice = transactionRequest.gasPrice.eq(0) ? minGasPrice : transactionRequest.gasPrice;\n transactionRequest.gasPrice = gasPrice;\n\n const minGas = transactionRequest.calculateMinGas(chainInfo);\n const minFee = calculatePriceWithFactor(minGas, gasPrice, gasPriceFactor).normalizeZeroToOne();\n\n // Only Script transactions consume gas\n if (transactionRequest.type === TransactionType.Script) {\n // If the gasLimit is set to 0, it means we need to estimate it.\n if (transactionRequest.gasLimit.eq(0)) {\n transactionRequest.gasLimit = minGas;\n\n /*\n * Adjusting the gasLimit of a transaction (TX) impacts its maxGas.\n * Consequently, this affects the maxFee, as it is derived from the maxGas. To accurately estimate the\n * gasLimit for a transaction, especially when the exact gas consumption is uncertain (as in an estimation dry-run),\n * the following steps are required:\n * 1 - Initially, set the gasLimit using the calculated minGas.\n * 2 - Based on this initial gasLimit, calculate the maxGas.\n * 3 - Get the maximum gas per transaction allowed by the chain, and subtract the previously calculated maxGas from this limit.\n * 4 - The result of this subtraction should then be adopted as the new, definitive gasLimit.\n * 5 - Recalculate the maxGas with the updated gasLimit. This new maxGas is then used to compute the maxFee.\n * 6 - The calculated maxFee represents the safe, estimated cost required to fund the transaction.\n */\n transactionRequest.gasLimit = maxGasPerTx.sub(\n transactionRequest.calculateMaxGas(chainInfo, minGas)\n );\n }\n }\n\n const maxGas = transactionRequest.calculateMaxGas(chainInfo, minGas);\n const maxFee = calculatePriceWithFactor(maxGas, gasPrice, gasPriceFactor).normalizeZeroToOne();\n\n return {\n minGas,\n minFee,\n maxGas,\n maxFee,\n };\n }\n\n /**\n * Executes a signed transaction without applying the states changes\n * on the chain.\n *\n * If the transaction is missing any dependencies,\n * the transaction will be mutated and those dependencies will be added\n *\n * @param transactionRequestLike - The transaction request object.\n * @returns A promise that resolves to the call result object.\n */\n async simulate(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true }: EstimateTransactionParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n return this.estimateTxDependencies(transactionRequest);\n }\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n const { dryRun: gqlReceipts } = await this.operations.dryRun({\n encodedTransaction,\n utxoValidation: true,\n });\n const receipts = gqlReceipts.map(processGqlReceipt);\n return {\n receipts,\n };\n }\n\n /**\n * Returns a transaction cost to enable user\n * to set gasLimit and also reserve balance amounts\n * on the the transaction.\n *\n * @privateRemarks\n * The tolerance is add on top of the gasUsed calculated\n * from the node, this create a safe margin costs like\n * change states on transfer that don't occur on the dryRun\n * transaction. The default value is 0.2 or 20%\n *\n * @param transactionRequestLike - The transaction request object.\n * @param tolerance - The tolerance to add on top of the gasUsed.\n * @returns A promise that resolves to the transaction cost object.\n */\n async getTransactionCost(\n transactionRequestLike: TransactionRequestLike,\n forwardingQuantities: CoinQuantity[] = [],\n {\n estimateTxDependencies = true,\n estimatePredicates = true,\n resourcesOwner,\n signatureCallback,\n }: TransactionCostParams = {}\n ): Promise<TransactionCost> {\n const txRequestClone = clone(transactionRequestify(transactionRequestLike));\n const { minGasPrice } = this.getGasConfig();\n const setGasPrice = max(txRequestClone.gasPrice, minGasPrice);\n const isScriptTransaction = txRequestClone.type === TransactionType.Script;\n\n // Fund with fake UTXOs to avoid not enough funds error\n // Getting coin quantities from amounts being transferred\n const coinOutputsQuantities = txRequestClone.getCoinOutputsQuantities();\n // Combining coin quantities from amounts being transferred and forwarding to contracts\n const allQuantities = mergeQuantities(coinOutputsQuantities, forwardingQuantities);\n // Funding transaction with fake utxos\n txRequestClone.fundWithFakeUtxos(allQuantities, resourcesOwner?.address);\n\n if (isScriptTransaction) {\n txRequestClone.gasLimit = bn(0);\n }\n\n /**\n * Estimate predicates gasUsed\n */\n if (estimatePredicates) {\n /**\n * The fake utxos added above can be from a predicate\n * If the resources owner is a predicate,\n * we need to populate the resources with the predicate's data\n * so that predicate estimation can happen.\n */\n if (resourcesOwner && 'populateTransactionPredicateData' in resourcesOwner) {\n (resourcesOwner as Predicate<[]>).populateTransactionPredicateData(txRequestClone);\n }\n await this.estimatePredicates(txRequestClone);\n }\n\n if (signatureCallback && isScriptTransaction) {\n await signatureCallback(txRequestClone);\n }\n\n /**\n * Calculate minGas and maxGas based on the real transaction\n */\n let { maxFee, maxGas, minFee, minGas } = this.estimateTxGasAndFee({\n transactionRequest: txRequestClone,\n });\n\n /**\n * Estimate gasUsed for script transactions\n */\n let receipts: TransactionResultReceipt[] = [];\n let missingContractIds: string[] = [];\n let outputVariables = 0;\n let gasUsed = bn(0);\n // Transactions of type Create does not consume any gas so we can the dryRun\n if (isScriptTransaction && estimateTxDependencies) {\n /**\n * Setting the gasPrice to 0 on a dryRun will result in no fees being charged.\n * This simplifies the funding with fake utxos, since the coin quantities required\n * will only be amounts being transferred (coin outputs) and amounts being forwarded\n * to contract calls.\n */\n txRequestClone.gasPrice = bn(0);\n\n // Executing dryRun with fake utxos to get gasUsed\n const result = await this.estimateTxDependencies(txRequestClone);\n\n receipts = result.receipts;\n outputVariables = result.outputVariables;\n missingContractIds = result.missingContractIds;\n\n gasUsed = isScriptTransaction ? getGasUsedFromReceipts(receipts) : gasUsed;\n\n txRequestClone.gasLimit = gasUsed;\n txRequestClone.gasPrice = setGasPrice;\n\n // Estimating fee again with the real gas consumed and set gasPrice\n ({ maxFee, maxGas, minFee, minGas } = this.estimateTxGasAndFee({\n transactionRequest: txRequestClone,\n }));\n }\n\n return {\n requiredQuantities: allQuantities,\n receipts,\n gasUsed,\n minGasPrice,\n gasPrice: setGasPrice,\n minGas,\n maxGas,\n minFee,\n maxFee,\n estimatedInputs: txRequestClone.inputs,\n outputVariables,\n missingContractIds,\n };\n }\n\n async getResourcesForTransaction(\n owner: string | AbstractAddress,\n transactionRequestLike: TransactionRequestLike,\n forwardingQuantities: CoinQuantity[] = []\n ) {\n const ownerAddress = Address.fromAddressOrString(owner);\n const transactionRequest = transactionRequestify(clone(transactionRequestLike));\n const transactionCost = await this.getTransactionCost(transactionRequest, forwardingQuantities);\n\n // Add the required resources to the transaction from the owner\n transactionRequest.addResources(\n await this.getResourcesToSpend(ownerAddress, transactionCost.requiredQuantities)\n );\n // Refetch transaction costs with the new resources\n // TODO: we could find a way to avoid fetch estimatePredicates again, by returning the transaction or\n // returning a specific gasUsed by the predicate.\n // Also for the dryRun we could have the same issue as we are going to run twice the dryRun and the\n // estimateTxDependencies as we don't have access to the transaction, maybe returning the transaction would\n // be better.\n const { requiredQuantities, ...txCost } = await this.getTransactionCost(\n transactionRequest,\n forwardingQuantities\n );\n const resources = await this.getResourcesToSpend(ownerAddress, requiredQuantities);\n\n return {\n resources,\n requiredQuantities,\n ...txCost,\n };\n }\n\n /**\n * Returns coins for the given owner.\n */\n async getCoins(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** The asset ID of coins to get */\n assetId?: BytesLike,\n /** Pagination arguments */\n paginationArgs?: CursorPaginationArgs\n ): Promise<Coin[]> {\n const ownerAddress = Address.fromAddressOrString(owner);\n const result = await this.operations.getCoins({\n first: 10,\n ...paginationArgs,\n filter: { owner: ownerAddress.toB256(), assetId: assetId && hexlify(assetId) },\n });\n\n const coins = result.coins.edges.map((edge) => edge.node);\n\n return coins.map((coin) => ({\n id: coin.utxoId,\n assetId: coin.assetId,\n amount: bn(coin.amount),\n owner: Address.fromAddressOrString(coin.owner),\n maturity: bn(coin.maturity).toNumber(),\n blockCreated: bn(coin.blockCreated),\n txCreatedIdx: bn(coin.txCreatedIdx),\n }));\n }\n\n /**\n * Returns resources for the given owner satisfying the spend query.\n *\n * @param owner - The address to get resources for.\n * @param quantities - The quantities to get.\n * @param excludedIds - IDs of excluded resources from the selection.\n * @returns A promise that resolves to the resources.\n */\n async getResourcesToSpend(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** The quantities to get */\n quantities: CoinQuantityLike[],\n /** IDs of excluded resources from the selection. */\n excludedIds?: ExcludeResourcesOption\n ): Promise<Resource[]> {\n const ownerAddress = Address.fromAddressOrString(owner);\n const excludeInput = {\n messages: excludedIds?.messages?.map((nonce) => hexlify(nonce)) || [],\n utxos: excludedIds?.utxos?.map((id) => hexlify(id)) || [],\n };\n\n if (this.cache) {\n const uniqueUtxos = new Set(\n excludeInput.utxos.concat(this.cache?.getActiveData().map((id) => hexlify(id)))\n );\n excludeInput.utxos = Array.from(uniqueUtxos);\n }\n const coinsQuery = {\n owner: ownerAddress.toB256(),\n queryPerAsset: quantities\n .map(coinQuantityfy)\n .map(({ assetId, amount, max: maxPerAsset }) => ({\n assetId: hexlify(assetId),\n amount: amount.toString(10),\n max: maxPerAsset ? maxPerAsset.toString(10) : undefined,\n })),\n excludedIds: excludeInput,\n };\n\n const result = await this.operations.getCoinsToSpend(coinsQuery);\n\n const coins = result.coinsToSpend\n .flat()\n .map((coin) => {\n switch (coin.__typename) {\n case 'MessageCoin':\n return {\n amount: bn(coin.amount),\n assetId: coin.assetId,\n daHeight: bn(coin.daHeight),\n sender: Address.fromAddressOrString(coin.sender),\n recipient: Address.fromAddressOrString(coin.recipient),\n nonce: coin.nonce,\n } as MessageCoin;\n case 'Coin':\n return {\n id: coin.utxoId,\n amount: bn(coin.amount),\n assetId: coin.assetId,\n owner: Address.fromAddressOrString(coin.owner),\n maturity: bn(coin.maturity).toNumber(),\n blockCreated: bn(coin.blockCreated),\n txCreatedIdx: bn(coin.txCreatedIdx),\n } as Coin;\n default:\n return null;\n }\n })\n .filter((v) => !!v) as Array<Resource>;\n\n return coins;\n }\n\n /**\n * Returns block matching the given ID or height.\n *\n * @param idOrHeight - ID or height of the block.\n * @returns A promise that resolves to the block.\n */\n async getBlock(\n /** ID or height of the block */\n idOrHeight: string | number | 'latest'\n ): Promise<Block | null> {\n let variables;\n if (typeof idOrHeight === 'number') {\n variables = { height: bn(idOrHeight).toString(10) };\n } else if (idOrHeight === 'latest') {\n variables = { height: (await this.getBlockNumber()).toString(10) };\n } else if (idOrHeight.length === 66) {\n variables = { blockId: idOrHeight };\n } else {\n variables = { blockId: bn(idOrHeight).toString(10) };\n }\n\n const { block } = await this.operations.getBlock(variables);\n\n if (!block) {\n return null;\n }\n\n return {\n id: block.id,\n height: bn(block.header.height),\n time: block.header.time,\n transactionIds: block.transactions.map((tx) => tx.id),\n };\n }\n\n /**\n * Returns all the blocks matching the given parameters.\n *\n * @param params - The parameters to query blocks.\n * @returns A promise that resolves to the blocks.\n */\n async getBlocks(params: GqlGetBlocksQueryVariables): Promise<Block[]> {\n const { blocks: fetchedData } = await this.operations.getBlocks(params);\n\n const blocks: Block[] = fetchedData.edges.map(({ node: block }) => ({\n id: block.id,\n height: bn(block.header.height),\n time: block.header.time,\n transactionIds: block.transactions.map((tx) => tx.id),\n }));\n\n return blocks;\n }\n\n /**\n * Returns block matching the given ID or type, including transaction data.\n *\n * @param idOrHeight - ID or height of the block.\n * @returns A promise that resolves to the block.\n */\n async getBlockWithTransactions(\n /** ID or height of the block */\n idOrHeight: string | number | 'latest'\n ): Promise<(Block & { transactions: Transaction[] }) | null> {\n let variables;\n if (typeof idOrHeight === 'number') {\n variables = { blockHeight: bn(idOrHeight).toString(10) };\n } else if (idOrHeight === 'latest') {\n variables = { blockHeight: (await this.getBlockNumber()).toString() };\n } else {\n variables = { blockId: idOrHeight };\n }\n\n const { block } = await this.operations.getBlockWithTransactions(variables);\n\n if (!block) {\n return null;\n }\n\n return {\n id: block.id,\n height: bn(block.header.height, 10),\n time: block.header.time,\n transactionIds: block.transactions.map((tx) => tx.id),\n transactions: block.transactions.map(\n (tx) => new TransactionCoder().decode(arrayify(tx.rawPayload), 0)?.[0]\n ),\n };\n }\n\n /**\n * Get transaction with the given ID.\n *\n * @param transactionId - ID of the transaction.\n * @returns A promise that resolves to the transaction.\n */\n async getTransaction<TTransactionType = void>(\n transactionId: string\n ): Promise<Transaction<TTransactionType> | null> {\n const { transaction } = await this.operations.getTransaction({ transactionId });\n if (!transaction) {\n return null;\n }\n return new TransactionCoder().decode(\n arrayify(transaction.rawPayload),\n 0\n )?.[0] as Transaction<TTransactionType>;\n }\n\n /**\n * Get deployed contract with the given ID.\n *\n * @param contractId - ID of the contract.\n * @returns A promise that resolves to the contract.\n */\n async getContract(contractId: string): Promise<ContractResult | null> {\n const { contract } = await this.operations.getContract({ contractId });\n if (!contract) {\n return null;\n }\n return contract;\n }\n\n /**\n * Returns the balance for the given contract for the given asset ID.\n *\n * @param contractId - The contract ID to get the balance for.\n * @param assetId - The asset ID of coins to get.\n * @returns A promise that resolves to the balance.\n */\n async getContractBalance(\n /** The contract ID to get the balance for */\n contractId: string | AbstractAddress,\n /** The asset ID of coins to get */\n assetId: BytesLike\n ): Promise<BN> {\n const { contractBalance } = await this.operations.getContractBalance({\n contract: Address.fromAddressOrString(contractId).toB256(),\n asset: hexlify(assetId),\n });\n return bn(contractBalance.amount, 10);\n }\n\n /**\n * Returns the balance for the given owner for the given asset ID.\n *\n * @param owner - The address to get coins for.\n * @param assetId - The asset ID of coins to get.\n * @returns A promise that resolves to the balance.\n */\n async getBalance(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** The asset ID of coins to get */\n assetId: BytesLike\n ): Promise<BN> {\n const { balance } = await this.operations.getBalance({\n owner: Address.fromAddressOrString(owner).toB256(),\n assetId: hexlify(assetId),\n });\n return bn(balance.amount, 10);\n }\n\n /**\n * Returns balances for the given owner.\n *\n * @param owner - The address to get coins for.\n * @param paginationArgs - Pagination arguments.\n * @returns A promise that resolves to the balances.\n */\n async getBalances(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** Pagination arguments */\n paginationArgs?: CursorPaginationArgs\n ): Promise<CoinQuantity[]> {\n const result = await this.operations.getBalances({\n first: 10,\n ...paginationArgs,\n filter: { owner: Address.fromAddressOrString(owner).toB256() },\n });\n\n const balances = result.balances.edges.map((edge) => edge.node);\n\n return balances.map((balance) => ({\n assetId: balance.assetId,\n amount: bn(balance.amount),\n }));\n }\n\n /**\n * Returns message for the given address.\n *\n * @param address - The address to get message from.\n * @param paginationArgs - Pagination arguments.\n * @returns A promise that resolves to the messages.\n */\n async getMessages(\n /** The address to get message from */\n address: string | AbstractAddress,\n /** Pagination arguments */\n paginationArgs?: CursorPaginationArgs\n ): Promise<Message[]> {\n const result = await this.operations.getMessages({\n first: 10,\n ...paginationArgs,\n owner: Address.fromAddressOrString(address).toB256(),\n });\n\n const messages = result.messages.edges.map((edge) => edge.node);\n\n return messages.map((message) => ({\n messageId: InputMessageCoder.getMessageId({\n sender: message.sender,\n recipient: message.recipient,\n nonce: message.nonce,\n amount: bn(message.amount),\n data: message.data,\n }),\n sender: Address.fromAddressOrString(message.sender),\n recipient: Address.fromAddressOrString(message.recipient),\n nonce: message.nonce,\n amount: bn(message.amount),\n data: InputMessageCoder.decodeData(message.data),\n daHeight: bn(message.daHeight),\n }));\n }\n\n /**\n * Returns Message Proof for given transaction id and the message id from MessageOut receipt.\n *\n * @param transactionId - The transaction to get message from.\n * @param messageId - The message id from MessageOut receipt.\n * @param commitBlockId - The commit block id.\n * @param commitBlockHeight - The commit block height.\n * @returns A promise that resolves to the message proof.\n */\n async getMessageProof(\n /** The transaction to get message from */\n transactionId: string,\n nonce: string,\n commitBlockId?: string,\n commitBlockHeight?: BN\n ): Promise<MessageProof | null> {\n let inputObject: {\n /** The transaction to get message from */\n transactionId: string;\n /** The message id from MessageOut receipt */\n nonce: string;\n commitBlockId?: string;\n commitBlockHeight?: string;\n } = {\n transactionId,\n nonce,\n };\n\n if (commitBlockId && commitBlockHeight) {\n throw new FuelError(\n ErrorCode.INVALID_INPUT_PARAMETERS,\n 'commitBlockId and commitBlockHeight cannot be used together'\n );\n }\n\n if (commitBlockId) {\n inputObject = {\n ...inputObject,\n commitBlockId,\n };\n }\n\n if (commitBlockHeight) {\n inputObject = {\n ...inputObject,\n // Conver BN into a number string required on the query\n // This should problably be fixed on the fuel client side\n commitBlockHeight: commitBlockHeight.toNumber().toString(),\n };\n }\n\n const result = await this.operations.getMessageProof(inputObject);\n\n if (!result.messageProof) {\n return null;\n }\n\n const {\n messageProof,\n messageBlockHeader,\n commitBlockHeader,\n blockProof,\n sender,\n recipient,\n amount,\n data,\n } = result.messageProof;\n\n return {\n messageProof: {\n proofIndex: bn(messageProof.proofIndex),\n proofSet: messageProof.proofSet,\n },\n blockProof: {\n proofIndex: bn(blockProof.proofIndex),\n proofSet: blockProof.proofSet,\n },\n messageBlockHeader: {\n id: messageBlockHeader.id,\n daHeight: bn(messageBlockHeader.daHeight),\n transactionsCount: bn(messageBlockHeader.transactionsCount),\n transactionsRoot: messageBlockHeader.transactionsRoot,\n height: bn(messageBlockHeader.height),\n prevRoot: messageBlockHeader.prevRoot,\n time: messageBlockHeader.time,\n applicationHash: messageBlockHeader.applicationHash,\n messageReceiptRoot: messageBlockHeader.messageReceiptRoot,\n messageReceiptCount: bn(messageBlockHeader.messageReceiptCount),\n },\n commitBlockHeader: {\n id: commitBlockHeader.id,\n daHeight: bn(commitBlockHeader.daHeight),\n transactionsCount: bn(commitBlockHeader.transactionsCount),\n transactionsRoot: commitBlockHeader.transactionsRoot,\n height: bn(commitBlockHeader.height),\n prevRoot: commitBlockHeader.prevRoot,\n time: commitBlockHeader.time,\n applicationHash: commitBlockHeader.applicationHash,\n messageReceiptRoot: commitBlockHeader.messageReceiptRoot,\n messageReceiptCount: bn(commitBlockHeader.messageReceiptCount),\n },\n sender: Address.fromAddressOrString(sender),\n recipient: Address.fromAddressOrString(recipient),\n nonce,\n amount: bn(amount),\n data,\n };\n }\n\n /**\n * Returns Message Proof for given transaction id and the message id from MessageOut receipt.\n *\n * @param nonce - The nonce of the message to get status from.\n * @returns A promise that resolves to the message status\n */\n async getMessageStatus(\n /** The nonce of the message to get status from */\n nonce: string\n ): Promise<MessageStatus> {\n const result = await this.operations.getMessageStatus({ nonce });\n return result.messageStatus;\n }\n\n /**\n * Lets you produce blocks with custom timestamps and the block number of the last block produced.\n *\n * @param amount - The amount of blocks to produce\n * @param startTime - The UNIX timestamp (milliseconds) to set for the first produced block\n * @returns A promise that resolves to the block number of the last produced block.\n */\n async produceBlocks(amount: number, startTime?: number) {\n const { produceBlocks: latestBlockHeight } = await this.operations.produceBlocks({\n blocksToProduce: bn(amount).toString(10),\n startTimestamp: startTime ? DateTime.fromUnixMilliseconds(startTime).toTai64() : undefined,\n });\n return bn(latestBlockHeight);\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async getTransactionResponse(transactionId: string): Promise<TransactionResponse> {\n return new TransactionResponse(transactionId, this);\n }\n}\n","import type { DocumentNode } from 'graphql';\nimport gql from 'graphql-tag';\nexport type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n Address: string;\n AssetId: string;\n BlockId: string;\n Bytes32: string;\n ContractId: string;\n HexString: string;\n Nonce: string;\n Salt: string;\n Signature: any;\n Tai64Timestamp: string;\n TransactionId: string;\n TxPointer: any;\n U8: any;\n U32: any;\n U64: string;\n UtxoId: string;\n};\n\nexport type GqlBalance = {\n __typename: 'Balance';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n owner: Scalars['Address'];\n};\n\nexport type GqlBalanceConnection = {\n __typename: 'BalanceConnection';\n /** A list of edges. */\n edges: Array<GqlBalanceEdge>;\n /** A list of nodes. */\n nodes: Array<GqlBalance>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlBalanceEdge = {\n __typename: 'BalanceEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlBalance;\n};\n\nexport type GqlBalanceFilterInput = {\n /** Filter coins based on the `owner` field */\n owner: Scalars['Address'];\n};\n\nexport type GqlBlock = {\n __typename: 'Block';\n consensus: GqlConsensus;\n header: GqlHeader;\n id: Scalars['BlockId'];\n transactions: Array<GqlTransaction>;\n};\n\nexport type GqlBlockConnection = {\n __typename: 'BlockConnection';\n /** A list of edges. */\n edges: Array<GqlBlockEdge>;\n /** A list of nodes. */\n nodes: Array<GqlBlock>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlBlockEdge = {\n __typename: 'BlockEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlBlock;\n};\n\nexport type GqlBreakpoint = {\n contract: Scalars['ContractId'];\n pc: Scalars['U64'];\n};\n\nexport type GqlChainInfo = {\n __typename: 'ChainInfo';\n consensusParameters: GqlConsensusParameters;\n daHeight: Scalars['U64'];\n gasCosts: GqlGasCosts;\n latestBlock: GqlBlock;\n name: Scalars['String'];\n};\n\nexport type GqlChangeOutput = {\n __typename: 'ChangeOutput';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n to: Scalars['Address'];\n};\n\nexport type GqlCoin = {\n __typename: 'Coin';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n /** TxPointer - the height of the block this coin was created in */\n blockCreated: Scalars['U32'];\n maturity: Scalars['U32'];\n owner: Scalars['Address'];\n /** TxPointer - the index of the transaction that created this coin */\n txCreatedIdx: Scalars['U64'];\n utxoId: Scalars['UtxoId'];\n};\n\nexport type GqlCoinConnection = {\n __typename: 'CoinConnection';\n /** A list of edges. */\n edges: Array<GqlCoinEdge>;\n /** A list of nodes. */\n nodes: Array<GqlCoin>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlCoinEdge = {\n __typename: 'CoinEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlCoin;\n};\n\nexport type GqlCoinFilterInput = {\n /** Returns coins only with `asset_id`. */\n assetId?: InputMaybe<Scalars['AssetId']>;\n /** Returns coins owned by the `owner`. */\n owner: Scalars['Address'];\n};\n\nexport type GqlCoinOutput = {\n __typename: 'CoinOutput';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n to: Scalars['Address'];\n};\n\n/** The schema analog of the [`coins::CoinType`]. */\nexport type GqlCoinType = GqlCoin | GqlMessageCoin;\n\nexport type GqlConsensus = GqlGenesis | GqlPoAConsensus;\n\nexport type GqlConsensusParameters = {\n __typename: 'ConsensusParameters';\n baseAssetId: Scalars['AssetId'];\n chainId: Scalars['U64'];\n contractParams: GqlContractParameters;\n feeParams: GqlFeeParameters;\n gasCosts: GqlGasCosts;\n predicateParams: GqlPredicateParameters;\n scriptParams: GqlScriptParameters;\n txParams: GqlTxParameters;\n};\n\nexport type GqlContract = {\n __typename: 'Contract';\n bytecode: Scalars['HexString'];\n id: Scalars['ContractId'];\n salt: Scalars['Salt'];\n};\n\nexport type GqlContractBalance = {\n __typename: 'ContractBalance';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n contract: Scalars['ContractId'];\n};\n\nexport type GqlContractBalanceConnection = {\n __typename: 'ContractBalanceConnection';\n /** A list of edges. */\n edges: Array<GqlContractBalanceEdge>;\n /** A list of nodes. */\n nodes: Array<GqlContractBalance>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlContractBalanceEdge = {\n __typename: 'ContractBalanceEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlContractBalance;\n};\n\nexport type GqlContractBalanceFilterInput = {\n /** Filter assets based on the `contractId` field */\n contract: Scalars['ContractId'];\n};\n\nexport type GqlContractCreated = {\n __typename: 'ContractCreated';\n contract: GqlContract;\n stateRoot: Scalars['Bytes32'];\n};\n\nexport type GqlContractOutput = {\n __typename: 'ContractOutput';\n balanceRoot: Scalars['Bytes32'];\n inputIndex: Scalars['Int'];\n stateRoot: Scalars['Bytes32'];\n};\n\nexport type GqlContractParameters = {\n __typename: 'ContractParameters';\n contractMaxSize: Scalars['U64'];\n maxStorageSlots: Scalars['U64'];\n};\n\nexport type GqlDependentCost = GqlHeavyOperation | GqlLightOperation;\n\nexport type GqlExcludeInput = {\n /** Messages to exclude from the selection. */\n messages: Array<Scalars['Nonce']>;\n /** Utxos to exclude from the selection. */\n utxos: Array<Scalars['UtxoId']>;\n};\n\nexport type GqlFailureStatus = {\n __typename: 'FailureStatus';\n block: GqlBlock;\n programState?: Maybe<GqlProgramState>;\n reason: Scalars['String'];\n receipts: Array<GqlReceipt>;\n time: Scalars['Tai64Timestamp'];\n transactionId: Scalars['TransactionId'];\n};\n\nexport type GqlFeeParameters = {\n __typename: 'FeeParameters';\n gasPerByte: Scalars['U64'];\n gasPriceFactor: Scalars['U64'];\n};\n\nexport type GqlGasCosts = {\n __typename: 'GasCosts';\n add: Scalars['U64'];\n addi: Scalars['U64'];\n aloc: Scalars['U64'];\n and: Scalars['U64'];\n andi: Scalars['U64'];\n bal: Scalars['U64'];\n bhei: Scalars['U64'];\n bhsh: Scalars['U64'];\n burn: Scalars['U64'];\n call: GqlDependentCost;\n cb: Scalars['U64'];\n ccp: GqlDependentCost;\n cfei: Scalars['U64'];\n cfsi: Scalars['U64'];\n contractRoot: GqlDependentCost;\n croo: Scalars['U64'];\n csiz: GqlDependentCost;\n div: Scalars['U64'];\n divi: Scalars['U64'];\n eck1: Scalars['U64'];\n ecr1: Scalars['U64'];\n ed19: Scalars['U64'];\n eq: Scalars['U64'];\n exp: Scalars['U64'];\n expi: Scalars['U64'];\n flag: Scalars['U64'];\n gm: Scalars['U64'];\n gt: Scalars['U64'];\n gtf: Scalars['U64'];\n ji: Scalars['U64'];\n jmp: Scalars['U64'];\n jmpb: Scalars['U64'];\n jmpf: Scalars['U64'];\n jne: Scalars['U64'];\n jneb: Scalars['U64'];\n jnef: Scalars['U64'];\n jnei: Scalars['U64'];\n jnzb: Scalars['U64'];\n jnzf: Scalars['U64'];\n jnzi: Scalars['U64'];\n k256: GqlDependentCost;\n lb: Scalars['U64'];\n ldc: GqlDependentCost;\n log: Scalars['U64'];\n logd: GqlDependentCost;\n lt: Scalars['U64'];\n lw: Scalars['U64'];\n mcl: GqlDependentCost;\n mcli: GqlDependentCost;\n mcp: GqlDependentCost;\n mcpi: GqlDependentCost;\n meq: GqlDependentCost;\n mint: Scalars['U64'];\n mldv: Scalars['U64'];\n mlog: Scalars['U64'];\n modOp: Scalars['U64'];\n modi: Scalars['U64'];\n moveOp: Scalars['U64'];\n movi: Scalars['U64'];\n mroo: Scalars['U64'];\n mul: Scalars['U64'];\n muli: Scalars['U64'];\n newStoragePerByte: Scalars['U64'];\n noop: Scalars['U64'];\n not: Scalars['U64'];\n or: Scalars['U64'];\n ori: Scalars['U64'];\n poph: Scalars['U64'];\n popl: Scalars['U64'];\n pshh: Scalars['U64'];\n pshl: Scalars['U64'];\n ret: Scalars['U64'];\n retd: GqlDependentCost;\n rvrt: Scalars['U64'];\n s256: GqlDependentCost;\n sb: Scalars['U64'];\n scwq: GqlDependentCost;\n sll: Scalars['U64'];\n slli: Scalars['U64'];\n smo: GqlDependentCost;\n srl: Scalars['U64'];\n srli: Scalars['U64'];\n srw: Scalars['U64'];\n srwq: GqlDependentCost;\n stateRoot: GqlDependentCost;\n sub: Scalars['U64'];\n subi: Scalars['U64'];\n sw: Scalars['U64'];\n sww: Scalars['U64'];\n swwq: GqlDependentCost;\n time: Scalars['U64'];\n tr: Scalars['U64'];\n tro: Scalars['U64'];\n vmInitialization: GqlDependentCost;\n wdam: Scalars['U64'];\n wdcm: Scalars['U64'];\n wddv: Scalars['U64'];\n wdmd: Scalars['U64'];\n wdml: Scalars['U64'];\n wdmm: Scalars['U64'];\n wdop: Scalars['U64'];\n wqam: Scalars['U64'];\n wqcm: Scalars['U64'];\n wqdv: Scalars['U64'];\n wqmd: Scalars['U64'];\n wqml: Scalars['U64'];\n wqmm: Scalars['U64'];\n wqop: Scalars['U64'];\n xor: Scalars['U64'];\n xori: Scalars['U64'];\n};\n\nexport type GqlGenesis = {\n __typename: 'Genesis';\n /**\n * The chain configs define what consensus type to use, what settlement layer to use,\n * rules of block validity, etc.\n */\n chainConfigHash: Scalars['Bytes32'];\n /** The Binary Merkle Tree root of all genesis coins. */\n coinsRoot: Scalars['Bytes32'];\n /** The Binary Merkle Tree root of state, balances, contracts code hash of each contract. */\n contractsRoot: Scalars['Bytes32'];\n /** The Binary Merkle Tree root of all genesis messages. */\n messagesRoot: Scalars['Bytes32'];\n};\n\nexport type GqlHeader = {\n __typename: 'Header';\n /** Hash of the application header. */\n applicationHash: Scalars['Bytes32'];\n /** The layer 1 height of messages and events to include since the last layer 1 block number. */\n daHeight: Scalars['U64'];\n /** Fuel block height. */\n height: Scalars['U32'];\n /** Hash of the header */\n id: Scalars['BlockId'];\n /** Number of message receipts in this block. */\n messageReceiptCount: Scalars['U64'];\n /** Merkle root of message receipts in this block. */\n messageReceiptRoot: Scalars['Bytes32'];\n /** Merkle root of all previous block header hashes. */\n prevRoot: Scalars['Bytes32'];\n /** The block producer time. */\n time: Scalars['Tai64Timestamp'];\n /** Number of transactions in this block. */\n transactionsCount: Scalars['U64'];\n /** Merkle root of transactions. */\n transactionsRoot: Scalars['Bytes32'];\n};\n\nexport type GqlHeavyOperation = {\n __typename: 'HeavyOperation';\n base: Scalars['U64'];\n gasPerUnit: Scalars['U64'];\n};\n\nexport type GqlInput = GqlInputCoin | GqlInputContract | GqlInputMessage;\n\nexport type GqlInputCoin = {\n __typename: 'InputCoin';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n maturity: Scalars['U32'];\n owner: Scalars['Address'];\n predicate: Scalars['HexString'];\n predicateData: Scalars['HexString'];\n predicateGasUsed: Scalars['U64'];\n txPointer: Scalars['TxPointer'];\n utxoId: Scalars['UtxoId'];\n witnessIndex: Scalars['Int'];\n};\n\nexport type GqlInputContract = {\n __typename: 'InputContract';\n balanceRoot: Scalars['Bytes32'];\n contract: GqlContract;\n stateRoot: Scalars['Bytes32'];\n txPointer: Scalars['TxPointer'];\n utxoId: Scalars['UtxoId'];\n};\n\nexport type GqlInputMessage = {\n __typename: 'InputMessage';\n amount: Scalars['U64'];\n data: Scalars['HexString'];\n nonce: Scalars['Nonce'];\n predicate: Scalars['HexString'];\n predicateData: Scalars['HexString'];\n predicateGasUsed: Scalars['U64'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n witnessIndex: Scalars['Int'];\n};\n\nexport type GqlLightOperation = {\n __typename: 'LightOperation';\n base: Scalars['U64'];\n unitsPerGas: Scalars['U64'];\n};\n\nexport type GqlMerkleProof = {\n __typename: 'MerkleProof';\n proofIndex: Scalars['U64'];\n proofSet: Array<Scalars['Bytes32']>;\n};\n\nexport type GqlMessage = {\n __typename: 'Message';\n amount: Scalars['U64'];\n daHeight: Scalars['U64'];\n data: Scalars['HexString'];\n nonce: Scalars['Nonce'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n};\n\nexport type GqlMessageCoin = {\n __typename: 'MessageCoin';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n daHeight: Scalars['U64'];\n nonce: Scalars['Nonce'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n};\n\nexport type GqlMessageConnection = {\n __typename: 'MessageConnection';\n /** A list of edges. */\n edges: Array<GqlMessageEdge>;\n /** A list of nodes. */\n nodes: Array<GqlMessage>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlMessageEdge = {\n __typename: 'MessageEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlMessage;\n};\n\nexport type GqlMessageProof = {\n __typename: 'MessageProof';\n amount: Scalars['U64'];\n blockProof: GqlMerkleProof;\n commitBlockHeader: GqlHeader;\n data: Scalars['HexString'];\n messageBlockHeader: GqlHeader;\n messageProof: GqlMerkleProof;\n nonce: Scalars['Nonce'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n};\n\nexport enum GqlMessageState {\n NotFound = 'NOT_FOUND',\n Spent = 'SPENT',\n Unspent = 'UNSPENT'\n}\n\nexport type GqlMessageStatus = {\n __typename: 'MessageStatus';\n state: GqlMessageState;\n};\n\nexport type GqlMutation = {\n __typename: 'Mutation';\n continueTx: GqlRunResult;\n /** Execute a dry-run of the transaction using a fork of current state, no changes are committed. */\n dryRun: Array<GqlReceipt>;\n endSession: Scalars['Boolean'];\n execute: Scalars['Boolean'];\n /**\n * Sequentially produces `blocks_to_produce` blocks. The first block starts with\n * `start_timestamp`. If the block production in the [`crate::service::Config`] is\n * `Trigger::Interval { block_time }`, produces blocks with `block_time ` intervals between\n * them. The `start_timestamp` is the timestamp in seconds.\n */\n produceBlocks: Scalars['U32'];\n reset: Scalars['Boolean'];\n setBreakpoint: Scalars['Boolean'];\n setSingleStepping: Scalars['Boolean'];\n startSession: Scalars['ID'];\n startTx: GqlRunResult;\n /**\n * Submits transaction to the `TxPool`.\n *\n * Returns submitted transaction if the transaction is included in the `TxPool` without problems.\n */\n submit: GqlTransaction;\n};\n\n\nexport type GqlMutationContinueTxArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationDryRunArgs = {\n tx: Scalars['HexString'];\n utxoValidation?: InputMaybe<Scalars['Boolean']>;\n};\n\n\nexport type GqlMutationEndSessionArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationExecuteArgs = {\n id: Scalars['ID'];\n op: Scalars['String'];\n};\n\n\nexport type GqlMutationProduceBlocksArgs = {\n blocksToProduce: Scalars['U32'];\n startTimestamp?: InputMaybe<Scalars['Tai64Timestamp']>;\n};\n\n\nexport type GqlMutationResetArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationSetBreakpointArgs = {\n breakpoint: GqlBreakpoint;\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationSetSingleSteppingArgs = {\n enable: Scalars['Boolean'];\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationStartTxArgs = {\n id: Scalars['ID'];\n txJson: Scalars['String'];\n};\n\n\nexport type GqlMutationSubmitArgs = {\n tx: Scalars['HexString'];\n};\n\nexport type GqlNodeInfo = {\n __typename: 'NodeInfo';\n maxDepth: Scalars['U64'];\n maxTx: Scalars['U64'];\n minGasPrice: Scalars['U64'];\n nodeVersion: Scalars['String'];\n peers: Array<GqlPeerInfo>;\n utxoValidation: Scalars['Boolean'];\n vmBacktrace: Scalars['Boolean'];\n};\n\nexport type GqlOutput = GqlChangeOutput | GqlCoinOutput | GqlContractCreated | GqlContractOutput | GqlVariableOutput;\n\n/**\n * A separate `Breakpoint` type to be used as an output, as a single\n * type cannot act as both input and output type in async-graphql\n */\nexport type GqlOutputBreakpoint = {\n __typename: 'OutputBreakpoint';\n contract: Scalars['ContractId'];\n pc: Scalars['U64'];\n};\n\n/** Information about pagination in a connection */\nexport type GqlPageInfo = {\n __typename: 'PageInfo';\n /** When paginating forwards, the cursor to continue. */\n endCursor?: Maybe<Scalars['String']>;\n /** When paginating forwards, are there more items? */\n hasNextPage: Scalars['Boolean'];\n /** When paginating backwards, are there more items? */\n hasPreviousPage: Scalars['Boolean'];\n /** When paginating backwards, the cursor to continue. */\n startCursor?: Maybe<Scalars['String']>;\n};\n\nexport type GqlPeerInfo = {\n __typename: 'PeerInfo';\n /** The advertised multi-addrs that can be used to connect to this peer */\n addresses: Array<Scalars['String']>;\n /** The internal fuel p2p reputation of this peer */\n appScore: Scalars['Float'];\n /** The last reported height of the peer */\n blockHeight?: Maybe<Scalars['U32']>;\n /** The self-reported version of the client the peer is using */\n clientVersion?: Maybe<Scalars['String']>;\n /** The libp2p peer id */\n id: Scalars['String'];\n /** The last heartbeat from this peer in unix epoch time ms */\n lastHeartbeatMs: Scalars['U64'];\n};\n\nexport type GqlPoAConsensus = {\n __typename: 'PoAConsensus';\n /** Gets the signature of the block produced by `PoA` consensus. */\n signature: Scalars['Signature'];\n};\n\nexport type GqlPolicies = {\n __typename: 'Policies';\n gasPrice?: Maybe<Scalars['U64']>;\n maturity?: Maybe<Scalars['U32']>;\n maxFee?: Maybe<Scalars['U64']>;\n witnessLimit?: Maybe<Scalars['U64']>;\n};\n\nexport type GqlPredicateParameters = {\n __typename: 'PredicateParameters';\n maxGasPerPredicate: Scalars['U64'];\n maxMessageDataLength: Scalars['U64'];\n maxPredicateDataLength: Scalars['U64'];\n maxPredicateLength: Scalars['U64'];\n};\n\nexport type GqlProgramState = {\n __typename: 'ProgramState';\n data: Scalars['HexString'];\n returnType: GqlReturnType;\n};\n\nexport type GqlQuery = {\n __typename: 'Query';\n balance: GqlBalance;\n balances: GqlBalanceConnection;\n block?: Maybe<GqlBlock>;\n blocks: GqlBlockConnection;\n chain: GqlChainInfo;\n /** Gets the coin by `utxo_id`. */\n coin?: Maybe<GqlCoin>;\n /** Gets all unspent coins of some `owner` maybe filtered with by `asset_id` per page. */\n coins: GqlCoinConnection;\n /**\n * For each `query_per_asset`, get some spendable coins(of asset specified by the query) owned by\n * `owner` that add up at least the query amount. The returned coins can be spent.\n * The number of coins is optimized to prevent dust accumulation.\n *\n * The query supports excluding and maximum the number of coins.\n *\n * Returns:\n * The list of spendable coins per asset from the query. The length of the result is\n * the same as the length of `query_per_asset`. The ordering of assets and `query_per_asset`\n * is the same.\n */\n coinsToSpend: Array<Array<GqlCoinType>>;\n contract?: Maybe<GqlContract>;\n contractBalance: GqlContractBalance;\n contractBalances: GqlContractBalanceConnection;\n /** Estimate the predicate gas for the provided transaction */\n estimatePredicates: GqlTransaction;\n /** Returns true when the GraphQL API is serving requests. */\n health: Scalars['Boolean'];\n memory: Scalars['String'];\n messageProof?: Maybe<GqlMessageProof>;\n messageStatus: GqlMessageStatus;\n messages: GqlMessageConnection;\n nodeInfo: GqlNodeInfo;\n register: Scalars['U64'];\n transaction?: Maybe<GqlTransaction>;\n transactions: GqlTransactionConnection;\n transactionsByOwner: GqlTransactionConnection;\n};\n\n\nexport type GqlQueryBalanceArgs = {\n assetId: Scalars['AssetId'];\n owner: Scalars['Address'];\n};\n\n\nexport type GqlQueryBalancesArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n filter: GqlBalanceFilterInput;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryBlockArgs = {\n height?: InputMaybe<Scalars['U32']>;\n id?: InputMaybe<Scalars['BlockId']>;\n};\n\n\nexport type GqlQueryBlocksArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryCoinArgs = {\n utxoId: Scalars['UtxoId'];\n};\n\n\nexport type GqlQueryCoinsArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n filter: GqlCoinFilterInput;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryCoinsToSpendArgs = {\n excludedIds?: InputMaybe<GqlExcludeInput>;\n owner: Scalars['Address'];\n queryPerAsset: Array<GqlSpendQueryElementInput>;\n};\n\n\nexport type GqlQueryContractArgs = {\n id: Scalars['ContractId'];\n};\n\n\nexport type GqlQueryContractBalanceArgs = {\n asset: Scalars['AssetId'];\n contract: Scalars['ContractId'];\n};\n\n\nexport type GqlQueryContractBalancesArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n filter: GqlContractBalanceFilterInput;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryEstimatePredicatesArgs = {\n tx: Scalars['HexString'];\n};\n\n\nexport type GqlQueryMemoryArgs = {\n id: Scalars['ID'];\n size: Scalars['U32'];\n start: Scalars['U32'];\n};\n\n\nexport type GqlQueryMessageProofArgs = {\n commitBlockHeight?: InputMaybe<Scalars['U32']>;\n commitBlockId?: InputMaybe<Scalars['BlockId']>;\n nonce: Scalars['Nonce'];\n transactionId: Scalars['TransactionId'];\n};\n\n\nexport type GqlQueryMessageStatusArgs = {\n nonce: Scalars['Nonce'];\n};\n\n\nexport type GqlQueryMessagesArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n owner?: InputMaybe<Scalars['Address']>;\n};\n\n\nexport type GqlQueryRegisterArgs = {\n id: Scalars['ID'];\n register: Scalars['U32'];\n};\n\n\nexport type GqlQueryTransactionArgs = {\n id: Scalars['TransactionId'];\n};\n\n\nexport type GqlQueryTransactionsArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryTransactionsByOwnerArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n owner: Scalars['Address'];\n};\n\nexport type GqlReceipt = {\n __typename: 'Receipt';\n amount?: Maybe<Scalars['U64']>;\n assetId?: Maybe<Scalars['AssetId']>;\n contract?: Maybe<GqlContract>;\n contractId?: Maybe<Scalars['ContractId']>;\n data?: Maybe<Scalars['HexString']>;\n digest?: Maybe<Scalars['Bytes32']>;\n gas?: Maybe<Scalars['U64']>;\n gasUsed?: Maybe<Scalars['U64']>;\n is?: Maybe<Scalars['U64']>;\n len?: Maybe<Scalars['U64']>;\n nonce?: Maybe<Scalars['Nonce']>;\n param1?: Maybe<Scalars['U64']>;\n param2?: Maybe<Scalars['U64']>;\n pc?: Maybe<Scalars['U64']>;\n ptr?: Maybe<Scalars['U64']>;\n ra?: Maybe<Scalars['U64']>;\n rb?: Maybe<Scalars['U64']>;\n rc?: Maybe<Scalars['U64']>;\n rd?: Maybe<Scalars['U64']>;\n reason?: Maybe<Scalars['U64']>;\n receiptType: GqlReceiptType;\n recipient?: Maybe<Scalars['Address']>;\n result?: Maybe<Scalars['U64']>;\n sender?: Maybe<Scalars['Address']>;\n subId?: Maybe<Scalars['Bytes32']>;\n to?: Maybe<GqlContract>;\n toAddress?: Maybe<Scalars['Address']>;\n val?: Maybe<Scalars['U64']>;\n};\n\nexport enum GqlReceiptType {\n Burn = 'BURN',\n Call = 'CALL',\n Log = 'LOG',\n LogData = 'LOG_DATA',\n MessageOut = 'MESSAGE_OUT',\n Mint = 'MINT',\n Panic = 'PANIC',\n Return = 'RETURN',\n ReturnData = 'RETURN_DATA',\n Revert = 'REVERT',\n ScriptResult = 'SCRIPT_RESULT',\n Transfer = 'TRANSFER',\n TransferOut = 'TRANSFER_OUT'\n}\n\nexport enum GqlReturnType {\n Return = 'RETURN',\n ReturnData = 'RETURN_DATA',\n Revert = 'REVERT'\n}\n\nexport type GqlRunResult = {\n __typename: 'RunResult';\n breakpoint?: Maybe<GqlOutputBreakpoint>;\n jsonReceipts: Array<Scalars['String']>;\n state: GqlRunState;\n};\n\nexport enum GqlRunState {\n /** Stopped on a breakpoint */\n Breakpoint = 'BREAKPOINT',\n /** All breakpoints have been processed, and the program has terminated */\n Completed = 'COMPLETED'\n}\n\nexport type GqlScriptParameters = {\n __typename: 'ScriptParameters';\n maxScriptDataLength: Scalars['U64'];\n maxScriptLength: Scalars['U64'];\n};\n\nexport type GqlSpendQueryElementInput = {\n /** Target amount for the query. */\n amount: Scalars['U64'];\n /** Identifier of the asset to spend. */\n assetId: Scalars['AssetId'];\n /** The maximum number of currencies for selection. */\n max?: InputMaybe<Scalars['U32']>;\n};\n\nexport type GqlSqueezedOutStatus = {\n __typename: 'SqueezedOutStatus';\n reason: Scalars['String'];\n};\n\nexport type GqlSubmittedStatus = {\n __typename: 'SubmittedStatus';\n time: Scalars['Tai64Timestamp'];\n};\n\nexport type GqlSubscription = {\n __typename: 'Subscription';\n /**\n * Returns a stream of status updates for the given transaction id.\n * If the current status is [`TransactionStatus::Success`], [`TransactionStatus::SqueezedOut`]\n * or [`TransactionStatus::Failed`] the stream will return that and end immediately.\n * If the current status is [`TransactionStatus::Submitted`] this will be returned\n * and the stream will wait for a future update.\n *\n * This stream will wait forever so it's advised to use within a timeout.\n *\n * It is possible for the stream to miss an update if it is polled slower\n * then the updates arrive. In such a case the stream will close without\n * a status. If this occurs the stream can simply be restarted to return\n * the latest status.\n */\n statusChange: GqlTransactionStatus;\n /** Submits transaction to the `TxPool` and await either confirmation or failure. */\n submitAndAwait: GqlTransactionStatus;\n};\n\n\nexport type GqlSubscriptionStatusChangeArgs = {\n id: Scalars['TransactionId'];\n};\n\n\nexport type GqlSubscriptionSubmitAndAwaitArgs = {\n tx: Scalars['HexString'];\n};\n\nexport type GqlSuccessStatus = {\n __typename: 'SuccessStatus';\n block: GqlBlock;\n programState?: Maybe<GqlProgramState>;\n receipts: Array<GqlReceipt>;\n time: Scalars['Tai64Timestamp'];\n transactionId: Scalars['TransactionId'];\n};\n\nexport type GqlTransaction = {\n __typename: 'Transaction';\n bytecodeLength?: Maybe<Scalars['U64']>;\n bytecodeWitnessIndex?: Maybe<Scalars['Int']>;\n gasPrice?: Maybe<Scalars['U64']>;\n id: Scalars['TransactionId'];\n inputAssetIds?: Maybe<Array<Scalars['AssetId']>>;\n inputContract?: Maybe<GqlInputContract>;\n inputContracts?: Maybe<Array<GqlContract>>;\n inputs?: Maybe<Array<GqlInput>>;\n isCreate: Scalars['Boolean'];\n isMint: Scalars['Boolean'];\n isScript: Scalars['Boolean'];\n maturity?: Maybe<Scalars['U32']>;\n mintAmount?: Maybe<Scalars['U64']>;\n mintAssetId?: Maybe<Scalars['AssetId']>;\n outputContract?: Maybe<GqlContractOutput>;\n outputs: Array<GqlOutput>;\n policies?: Maybe<GqlPolicies>;\n /** Return the transaction bytes using canonical encoding */\n rawPayload: Scalars['HexString'];\n receipts?: Maybe<Array<GqlReceipt>>;\n receiptsRoot?: Maybe<Scalars['Bytes32']>;\n salt?: Maybe<Scalars['Salt']>;\n script?: Maybe<Scalars['HexString']>;\n scriptData?: Maybe<Scalars['HexString']>;\n scriptGasLimit?: Maybe<Scalars['U64']>;\n status?: Maybe<GqlTransactionStatus>;\n storageSlots?: Maybe<Array<Scalars['HexString']>>;\n txPointer?: Maybe<Scalars['TxPointer']>;\n witnesses?: Maybe<Array<Scalars['HexString']>>;\n};\n\nexport type GqlTransactionConnection = {\n __typename: 'TransactionConnection';\n /** A list of edges. */\n edges: Array<GqlTransactionEdge>;\n /** A list of nodes. */\n nodes: Array<GqlTransaction>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlTransactionEdge = {\n __typename: 'TransactionEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlTransaction;\n};\n\nexport type GqlTransactionStatus = GqlFailureStatus | GqlSqueezedOutStatus | GqlSubmittedStatus | GqlSuccessStatus;\n\nexport type GqlTxParameters = {\n __typename: 'TxParameters';\n maxGasPerTx: Scalars['U64'];\n maxInputs: Scalars['U8'];\n maxOutputs: Scalars['U8'];\n maxSize: Scalars['U64'];\n maxWitnesses: Scalars['U32'];\n};\n\nexport type GqlVariableOutput = {\n __typename: 'VariableOutput';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n to: Scalars['Address'];\n};\n\ntype GqlTransactionStatusFragment_FailureStatus_Fragment = { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } };\n\ntype GqlTransactionStatusFragment_SqueezedOutStatus_Fragment = { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' };\n\ntype GqlTransactionStatusFragment_SubmittedStatus_Fragment = { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' };\n\ntype GqlTransactionStatusFragment_SuccessStatus_Fragment = { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null };\n\nexport type GqlTransactionStatusFragmentFragment = GqlTransactionStatusFragment_FailureStatus_Fragment | GqlTransactionStatusFragment_SqueezedOutStatus_Fragment | GqlTransactionStatusFragment_SubmittedStatus_Fragment | GqlTransactionStatusFragment_SuccessStatus_Fragment;\n\nexport type GqlTransactionFragmentFragment = { __typename: 'Transaction', id: string, rawPayload: string, gasPrice?: string | null, receipts?: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> | null, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null };\n\ntype GqlInputEstimatePredicatesFragment_InputCoin_Fragment = { __typename: 'InputCoin', predicateGasUsed: string };\n\ntype GqlInputEstimatePredicatesFragment_InputContract_Fragment = { __typename: 'InputContract' };\n\ntype GqlInputEstimatePredicatesFragment_InputMessage_Fragment = { __typename: 'InputMessage', predicateGasUsed: string };\n\nexport type GqlInputEstimatePredicatesFragmentFragment = GqlInputEstimatePredicatesFragment_InputCoin_Fragment | GqlInputEstimatePredicatesFragment_InputContract_Fragment | GqlInputEstimatePredicatesFragment_InputMessage_Fragment;\n\nexport type GqlTransactionEstimatePredicatesFragmentFragment = { __typename: 'Transaction', inputs?: Array<{ __typename: 'InputCoin', predicateGasUsed: string } | { __typename: 'InputContract' } | { __typename: 'InputMessage', predicateGasUsed: string }> | null };\n\nexport type GqlReceiptFragmentFragment = { __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null };\n\nexport type GqlBlockFragmentFragment = { __typename: 'Block', id: string, header: { __typename: 'Header', height: any, time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> };\n\nexport type GqlCoinFragmentFragment = { __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, maturity: any, blockCreated: any, txCreatedIdx: string };\n\nexport type GqlMessageCoinFragmentFragment = { __typename: 'MessageCoin', sender: string, recipient: string, nonce: string, amount: string, assetId: string, daHeight: string };\n\nexport type GqlMessageFragmentFragment = { __typename: 'Message', amount: string, sender: string, recipient: string, data: string, nonce: string, daHeight: string };\n\nexport type GqlMessageProofFragmentFragment = { __typename: 'MessageProof', sender: string, recipient: string, nonce: string, amount: string, data: string, messageProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, blockProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, messageBlockHeader: { __typename: 'Header', id: string, daHeight: string, transactionsCount: string, transactionsRoot: string, height: any, prevRoot: string, time: string, applicationHash: string, messageReceiptRoot: string, messageReceiptCount: string }, commitBlockHeader: { __typename: 'Header', id: string, daHeight: string, transactionsCount: string, transactionsRoot: string, height: any, prevRoot: string, time: string, applicationHash: string, messageReceiptRoot: string, messageReceiptCount: string } };\n\nexport type GqlBalanceFragmentFragment = { __typename: 'Balance', owner: string, amount: string, assetId: string };\n\nexport type GqlTxParametersFragmentFragment = { __typename: 'TxParameters', maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string };\n\nexport type GqlPredicateParametersFragmentFragment = { __typename: 'PredicateParameters', maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string };\n\nexport type GqlScriptParametersFragmentFragment = { __typename: 'ScriptParameters', maxScriptLength: string, maxScriptDataLength: string };\n\nexport type GqlContractParametersFragmentFragment = { __typename: 'ContractParameters', contractMaxSize: string, maxStorageSlots: string };\n\nexport type GqlFeeParametersFragmentFragment = { __typename: 'FeeParameters', gasPriceFactor: string, gasPerByte: string };\n\ntype GqlDependentCostFragment_HeavyOperation_Fragment = { __typename: 'HeavyOperation', base: string, gasPerUnit: string };\n\ntype GqlDependentCostFragment_LightOperation_Fragment = { __typename: 'LightOperation', base: string, unitsPerGas: string };\n\nexport type GqlDependentCostFragmentFragment = GqlDependentCostFragment_HeavyOperation_Fragment | GqlDependentCostFragment_LightOperation_Fragment;\n\nexport type GqlGasCostsFragmentFragment = { __typename: 'GasCosts', add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, croo: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } };\n\nexport type GqlConsensusParametersFragmentFragment = { __typename: 'ConsensusParameters', baseAssetId: string, chainId: string, txParams: { __typename: 'TxParameters', maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string }, predicateParams: { __typename: 'PredicateParameters', maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string }, scriptParams: { __typename: 'ScriptParameters', maxScriptLength: string, maxScriptDataLength: string }, contractParams: { __typename: 'ContractParameters', contractMaxSize: string, maxStorageSlots: string }, feeParams: { __typename: 'FeeParameters', gasPriceFactor: string, gasPerByte: string }, gasCosts: { __typename: 'GasCosts', add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, croo: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } } };\n\nexport type GqlChainInfoFragmentFragment = { __typename: 'ChainInfo', name: string, daHeight: string, latestBlock: { __typename: 'Block', id: string, header: { __typename: 'Header', height: any, time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> }, consensusParameters: { __typename: 'ConsensusParameters', baseAssetId: string, chainId: string, txParams: { __typename: 'TxParameters', maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string }, predicateParams: { __typename: 'PredicateParameters', maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string }, scriptParams: { __typename: 'ScriptParameters', maxScriptLength: string, maxScriptDataLength: string }, contractParams: { __typename: 'ContractParameters', contractMaxSize: string, maxStorageSlots: string }, feeParams: { __typename: 'FeeParameters', gasPriceFactor: string, gasPerByte: string }, gasCosts: { __typename: 'GasCosts', add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, croo: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } } } };\n\nexport type GqlContractBalanceFragmentFragment = { __typename: 'ContractBalance', contract: string, amount: string, assetId: string };\n\nexport type GqlPageInfoFragmentFragment = { __typename: 'PageInfo', hasPreviousPage: boolean, hasNextPage: boolean, startCursor?: string | null, endCursor?: string | null };\n\nexport type GqlGetVersionQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetVersionQuery = { __typename: 'Query', nodeInfo: { __typename: 'NodeInfo', nodeVersion: string } };\n\nexport type GqlNodeInfoFragmentFragment = { __typename: 'NodeInfo', utxoValidation: boolean, vmBacktrace: boolean, minGasPrice: string, maxTx: string, maxDepth: string, nodeVersion: string, peers: Array<{ __typename: 'PeerInfo', id: string, addresses: Array<string>, clientVersion?: string | null, blockHeight?: any | null, lastHeartbeatMs: string, appScore: number }> };\n\nexport type GqlGetNodeInfoQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetNodeInfoQuery = { __typename: 'Query', nodeInfo: { __typename: 'NodeInfo', utxoValidation: boolean, vmBacktrace: boolean, minGasPrice: string, maxTx: string, maxDepth: string, nodeVersion: string, peers: Array<{ __typename: 'PeerInfo', id: string, addresses: Array<string>, clientVersion?: string | null, blockHeight?: any | null, lastHeartbeatMs: string, appScore: number }> } };\n\nexport type GqlGetChainQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetChainQuery = { __typename: 'Query', chain: { __typename: 'ChainInfo', name: string, daHeight: string, latestBlock: { __typename: 'Block', id: string, header: { __typename: 'Header', height: any, time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> }, consensusParameters: { __typename: 'ConsensusParameters', baseAssetId: string, chainId: string, txParams: { __typename: 'TxParameters', maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string }, predicateParams: { __typename: 'PredicateParameters', maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string }, scriptParams: { __typename: 'ScriptParameters', maxScriptLength: string, maxScriptDataLength: string }, contractParams: { __typename: 'ContractParameters', contractMaxSize: string, maxStorageSlots: string }, feeParams: { __typename: 'FeeParameters', gasPriceFactor: string, gasPerByte: string }, gasCosts: { __typename: 'GasCosts', add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, croo: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } } } } };\n\nexport type GqlGetTransactionQueryVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n}>;\n\n\nexport type GqlGetTransactionQuery = { __typename: 'Query', transaction?: { __typename: 'Transaction', id: string, rawPayload: string, gasPrice?: string | null, receipts?: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> | null, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } | null };\n\nexport type GqlGetTransactionWithReceiptsQueryVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n}>;\n\n\nexport type GqlGetTransactionWithReceiptsQuery = { __typename: 'Query', transaction?: { __typename: 'Transaction', id: string, rawPayload: string, gasPrice?: string | null, receipts?: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> | null, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } | null };\n\nexport type GqlGetTransactionsQueryVariables = Exact<{\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetTransactionsQuery = { __typename: 'Query', transactions: { __typename: 'TransactionConnection', edges: Array<{ __typename: 'TransactionEdge', node: { __typename: 'Transaction', id: string, rawPayload: string, gasPrice?: string | null, receipts?: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> | null, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } }> } };\n\nexport type GqlGetTransactionsByOwnerQueryVariables = Exact<{\n owner: Scalars['Address'];\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetTransactionsByOwnerQuery = { __typename: 'Query', transactionsByOwner: { __typename: 'TransactionConnection', pageInfo: { __typename: 'PageInfo', hasPreviousPage: boolean, hasNextPage: boolean, startCursor?: string | null, endCursor?: string | null }, edges: Array<{ __typename: 'TransactionEdge', node: { __typename: 'Transaction', id: string, rawPayload: string, gasPrice?: string | null, receipts?: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> | null, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } }> } };\n\nexport type GqlEstimatePredicatesQueryVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n}>;\n\n\nexport type GqlEstimatePredicatesQuery = { __typename: 'Query', estimatePredicates: { __typename: 'Transaction', inputs?: Array<{ __typename: 'InputCoin', predicateGasUsed: string } | { __typename: 'InputContract' } | { __typename: 'InputMessage', predicateGasUsed: string }> | null } };\n\nexport type GqlGetBlockQueryVariables = Exact<{\n blockId?: InputMaybe<Scalars['BlockId']>;\n height?: InputMaybe<Scalars['U32']>;\n}>;\n\n\nexport type GqlGetBlockQuery = { __typename: 'Query', block?: { __typename: 'Block', id: string, header: { __typename: 'Header', height: any, time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> } | null };\n\nexport type GqlGetBlockWithTransactionsQueryVariables = Exact<{\n blockId?: InputMaybe<Scalars['BlockId']>;\n blockHeight?: InputMaybe<Scalars['U32']>;\n}>;\n\n\nexport type GqlGetBlockWithTransactionsQuery = { __typename: 'Query', block?: { __typename: 'Block', id: string, transactions: Array<{ __typename: 'Transaction', id: string, rawPayload: string, gasPrice?: string | null, receipts?: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> | null, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null }>, header: { __typename: 'Header', height: any, time: string } } | null };\n\nexport type GqlGetBlocksQueryVariables = Exact<{\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetBlocksQuery = { __typename: 'Query', blocks: { __typename: 'BlockConnection', edges: Array<{ __typename: 'BlockEdge', node: { __typename: 'Block', id: string, header: { __typename: 'Header', height: any, time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> } }> } };\n\nexport type GqlGetCoinQueryVariables = Exact<{\n coinId: Scalars['UtxoId'];\n}>;\n\n\nexport type GqlGetCoinQuery = { __typename: 'Query', coin?: { __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, maturity: any, blockCreated: any, txCreatedIdx: string } | null };\n\nexport type GqlGetCoinsQueryVariables = Exact<{\n filter: GqlCoinFilterInput;\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetCoinsQuery = { __typename: 'Query', coins: { __typename: 'CoinConnection', edges: Array<{ __typename: 'CoinEdge', node: { __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, maturity: any, blockCreated: any, txCreatedIdx: string } }> } };\n\nexport type GqlGetCoinsToSpendQueryVariables = Exact<{\n owner: Scalars['Address'];\n queryPerAsset: Array<GqlSpendQueryElementInput> | GqlSpendQueryElementInput;\n excludedIds?: InputMaybe<GqlExcludeInput>;\n}>;\n\n\nexport type GqlGetCoinsToSpendQuery = { __typename: 'Query', coinsToSpend: Array<Array<{ __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, maturity: any, blockCreated: any, txCreatedIdx: string } | { __typename: 'MessageCoin', sender: string, recipient: string, nonce: string, amount: string, assetId: string, daHeight: string }>> };\n\nexport type GqlGetContractQueryVariables = Exact<{\n contractId: Scalars['ContractId'];\n}>;\n\n\nexport type GqlGetContractQuery = { __typename: 'Query', contract?: { __typename: 'Contract', bytecode: string, id: string } | null };\n\nexport type GqlGetContractBalanceQueryVariables = Exact<{\n contract: Scalars['ContractId'];\n asset: Scalars['AssetId'];\n}>;\n\n\nexport type GqlGetContractBalanceQuery = { __typename: 'Query', contractBalance: { __typename: 'ContractBalance', contract: string, amount: string, assetId: string } };\n\nexport type GqlGetBalanceQueryVariables = Exact<{\n owner: Scalars['Address'];\n assetId: Scalars['AssetId'];\n}>;\n\n\nexport type GqlGetBalanceQuery = { __typename: 'Query', balance: { __typename: 'Balance', owner: string, amount: string, assetId: string } };\n\nexport type GqlGetBalancesQueryVariables = Exact<{\n filter: GqlBalanceFilterInput;\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetBalancesQuery = { __typename: 'Query', balances: { __typename: 'BalanceConnection', edges: Array<{ __typename: 'BalanceEdge', node: { __typename: 'Balance', owner: string, amount: string, assetId: string } }> } };\n\nexport type GqlGetMessagesQueryVariables = Exact<{\n owner: Scalars['Address'];\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetMessagesQuery = { __typename: 'Query', messages: { __typename: 'MessageConnection', edges: Array<{ __typename: 'MessageEdge', node: { __typename: 'Message', amount: string, sender: string, recipient: string, data: string, nonce: string, daHeight: string } }> } };\n\nexport type GqlGetMessageProofQueryVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n nonce: Scalars['Nonce'];\n commitBlockId?: InputMaybe<Scalars['BlockId']>;\n commitBlockHeight?: InputMaybe<Scalars['U32']>;\n}>;\n\n\nexport type GqlGetMessageProofQuery = { __typename: 'Query', messageProof?: { __typename: 'MessageProof', sender: string, recipient: string, nonce: string, amount: string, data: string, messageProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, blockProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, messageBlockHeader: { __typename: 'Header', id: string, daHeight: string, transactionsCount: string, transactionsRoot: string, height: any, prevRoot: string, time: string, applicationHash: string, messageReceiptRoot: string, messageReceiptCount: string }, commitBlockHeader: { __typename: 'Header', id: string, daHeight: string, transactionsCount: string, transactionsRoot: string, height: any, prevRoot: string, time: string, applicationHash: string, messageReceiptRoot: string, messageReceiptCount: string } } | null };\n\nexport type GqlGetMessageStatusQueryVariables = Exact<{\n nonce: Scalars['Nonce'];\n}>;\n\n\nexport type GqlGetMessageStatusQuery = { __typename: 'Query', messageStatus: { __typename: 'MessageStatus', state: GqlMessageState } };\n\nexport type GqlDryRunMutationVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n utxoValidation?: InputMaybe<Scalars['Boolean']>;\n}>;\n\n\nexport type GqlDryRunMutation = { __typename: 'Mutation', dryRun: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> };\n\nexport type GqlSubmitMutationVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n}>;\n\n\nexport type GqlSubmitMutation = { __typename: 'Mutation', submit: { __typename: 'Transaction', id: string } };\n\nexport type GqlProduceBlocksMutationVariables = Exact<{\n startTimestamp?: InputMaybe<Scalars['Tai64Timestamp']>;\n blocksToProduce: Scalars['U32'];\n}>;\n\n\nexport type GqlProduceBlocksMutation = { __typename: 'Mutation', produceBlocks: any };\n\nexport type GqlSubmitAndAwaitSubscriptionVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n}>;\n\n\nexport type GqlSubmitAndAwaitSubscription = { __typename: 'Subscription', submitAndAwait: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } };\n\nexport type GqlStatusChangeSubscriptionVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n}>;\n\n\nexport type GqlStatusChangeSubscription = { __typename: 'Subscription', statusChange: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } };\n\nexport const ReceiptFragmentFragmentDoc = gql`\n fragment receiptFragment on Receipt {\n contract {\n id\n }\n pc\n is\n to {\n id\n }\n toAddress\n amount\n assetId\n gas\n param1\n param2\n val\n ptr\n digest\n reason\n ra\n rb\n rc\n rd\n len\n receiptType\n result\n gasUsed\n data\n sender\n recipient\n nonce\n contractId\n subId\n}\n `;\nexport const TransactionStatusFragmentFragmentDoc = gql`\n fragment transactionStatusFragment on TransactionStatus {\n type: __typename\n ... on SubmittedStatus {\n time\n }\n ... on SuccessStatus {\n block {\n id\n }\n time\n programState {\n returnType\n data\n }\n }\n ... on FailureStatus {\n block {\n id\n }\n time\n reason\n }\n ... on SqueezedOutStatus {\n reason\n }\n}\n `;\nexport const TransactionFragmentFragmentDoc = gql`\n fragment transactionFragment on Transaction {\n id\n rawPayload\n gasPrice\n receipts {\n ...receiptFragment\n }\n status {\n ...transactionStatusFragment\n }\n}\n ${ReceiptFragmentFragmentDoc}\n${TransactionStatusFragmentFragmentDoc}`;\nexport const InputEstimatePredicatesFragmentFragmentDoc = gql`\n fragment inputEstimatePredicatesFragment on Input {\n ... on InputCoin {\n predicateGasUsed\n }\n ... on InputMessage {\n predicateGasUsed\n }\n}\n `;\nexport const TransactionEstimatePredicatesFragmentFragmentDoc = gql`\n fragment transactionEstimatePredicatesFragment on Transaction {\n inputs {\n ...inputEstimatePredicatesFragment\n }\n}\n ${InputEstimatePredicatesFragmentFragmentDoc}`;\nexport const CoinFragmentFragmentDoc = gql`\n fragment coinFragment on Coin {\n __typename\n utxoId\n owner\n amount\n assetId\n maturity\n blockCreated\n txCreatedIdx\n}\n `;\nexport const MessageCoinFragmentFragmentDoc = gql`\n fragment messageCoinFragment on MessageCoin {\n __typename\n sender\n recipient\n nonce\n amount\n assetId\n daHeight\n}\n `;\nexport const MessageFragmentFragmentDoc = gql`\n fragment messageFragment on Message {\n amount\n sender\n recipient\n data\n nonce\n daHeight\n}\n `;\nexport const MessageProofFragmentFragmentDoc = gql`\n fragment messageProofFragment on MessageProof {\n messageProof {\n proofSet\n proofIndex\n }\n blockProof {\n proofSet\n proofIndex\n }\n messageBlockHeader {\n id\n daHeight\n transactionsCount\n transactionsRoot\n height\n prevRoot\n time\n applicationHash\n messageReceiptRoot\n messageReceiptCount\n }\n commitBlockHeader {\n id\n daHeight\n transactionsCount\n transactionsRoot\n height\n prevRoot\n time\n applicationHash\n messageReceiptRoot\n messageReceiptCount\n }\n sender\n recipient\n nonce\n amount\n data\n}\n `;\nexport const BalanceFragmentFragmentDoc = gql`\n fragment balanceFragment on Balance {\n owner\n amount\n assetId\n}\n `;\nexport const BlockFragmentFragmentDoc = gql`\n fragment blockFragment on Block {\n id\n header {\n height\n time\n }\n transactions {\n id\n }\n}\n `;\nexport const TxParametersFragmentFragmentDoc = gql`\n fragment TxParametersFragment on TxParameters {\n maxInputs\n maxOutputs\n maxWitnesses\n maxGasPerTx\n maxSize\n}\n `;\nexport const PredicateParametersFragmentFragmentDoc = gql`\n fragment PredicateParametersFragment on PredicateParameters {\n maxPredicateLength\n maxPredicateDataLength\n maxGasPerPredicate\n maxMessageDataLength\n}\n `;\nexport const ScriptParametersFragmentFragmentDoc = gql`\n fragment ScriptParametersFragment on ScriptParameters {\n maxScriptLength\n maxScriptDataLength\n}\n `;\nexport const ContractParametersFragmentFragmentDoc = gql`\n fragment ContractParametersFragment on ContractParameters {\n contractMaxSize\n maxStorageSlots\n}\n `;\nexport const FeeParametersFragmentFragmentDoc = gql`\n fragment FeeParametersFragment on FeeParameters {\n gasPriceFactor\n gasPerByte\n}\n `;\nexport const DependentCostFragmentFragmentDoc = gql`\n fragment DependentCostFragment on DependentCost {\n __typename\n ... on LightOperation {\n base\n unitsPerGas\n }\n ... on HeavyOperation {\n base\n gasPerUnit\n }\n}\n `;\nexport const GasCostsFragmentFragmentDoc = gql`\n fragment GasCostsFragment on GasCosts {\n add\n addi\n aloc\n and\n andi\n bal\n bhei\n bhsh\n burn\n cb\n cfei\n cfsi\n croo\n div\n divi\n ecr1\n eck1\n ed19\n eq\n exp\n expi\n flag\n gm\n gt\n gtf\n ji\n jmp\n jne\n jnei\n jnzi\n jmpf\n jmpb\n jnzf\n jnzb\n jnef\n jneb\n lb\n log\n lt\n lw\n mint\n mlog\n modOp\n modi\n moveOp\n movi\n mroo\n mul\n muli\n mldv\n noop\n not\n or\n ori\n poph\n popl\n pshh\n pshl\n ret\n rvrt\n sb\n sll\n slli\n srl\n srli\n srw\n sub\n subi\n sw\n sww\n time\n tr\n tro\n wdcm\n wqcm\n wdop\n wqop\n wdml\n wqml\n wddv\n wqdv\n wdmd\n wqmd\n wdam\n wqam\n wdmm\n wqmm\n xor\n xori\n call {\n ...DependentCostFragment\n }\n ccp {\n ...DependentCostFragment\n }\n csiz {\n ...DependentCostFragment\n }\n k256 {\n ...DependentCostFragment\n }\n ldc {\n ...DependentCostFragment\n }\n logd {\n ...DependentCostFragment\n }\n mcl {\n ...DependentCostFragment\n }\n mcli {\n ...DependentCostFragment\n }\n mcp {\n ...DependentCostFragment\n }\n mcpi {\n ...DependentCostFragment\n }\n meq {\n ...DependentCostFragment\n }\n retd {\n ...DependentCostFragment\n }\n s256 {\n ...DependentCostFragment\n }\n scwq {\n ...DependentCostFragment\n }\n smo {\n ...DependentCostFragment\n }\n srwq {\n ...DependentCostFragment\n }\n swwq {\n ...DependentCostFragment\n }\n contractRoot {\n ...DependentCostFragment\n }\n stateRoot {\n ...DependentCostFragment\n }\n vmInitialization {\n ...DependentCostFragment\n }\n newStoragePerByte\n}\n ${DependentCostFragmentFragmentDoc}`;\nexport const ConsensusParametersFragmentFragmentDoc = gql`\n fragment consensusParametersFragment on ConsensusParameters {\n txParams {\n ...TxParametersFragment\n }\n predicateParams {\n ...PredicateParametersFragment\n }\n scriptParams {\n ...ScriptParametersFragment\n }\n contractParams {\n ...ContractParametersFragment\n }\n feeParams {\n ...FeeParametersFragment\n }\n gasCosts {\n ...GasCostsFragment\n }\n baseAssetId\n chainId\n}\n ${TxParametersFragmentFragmentDoc}\n${PredicateParametersFragmentFragmentDoc}\n${ScriptParametersFragmentFragmentDoc}\n${ContractParametersFragmentFragmentDoc}\n${FeeParametersFragmentFragmentDoc}\n${GasCostsFragmentFragmentDoc}`;\nexport const ChainInfoFragmentFragmentDoc = gql`\n fragment chainInfoFragment on ChainInfo {\n name\n latestBlock {\n ...blockFragment\n }\n daHeight\n consensusParameters {\n ...consensusParametersFragment\n }\n}\n ${BlockFragmentFragmentDoc}\n${ConsensusParametersFragmentFragmentDoc}`;\nexport const ContractBalanceFragmentFragmentDoc = gql`\n fragment contractBalanceFragment on ContractBalance {\n contract\n amount\n assetId\n}\n `;\nexport const PageInfoFragmentFragmentDoc = gql`\n fragment pageInfoFragment on PageInfo {\n hasPreviousPage\n hasNextPage\n startCursor\n endCursor\n}\n `;\nexport const NodeInfoFragmentFragmentDoc = gql`\n fragment nodeInfoFragment on NodeInfo {\n utxoValidation\n vmBacktrace\n minGasPrice\n maxTx\n maxDepth\n nodeVersion\n peers {\n id\n addresses\n clientVersion\n blockHeight\n lastHeartbeatMs\n appScore\n }\n}\n `;\nexport const GetVersionDocument = gql`\n query getVersion {\n nodeInfo {\n nodeVersion\n }\n}\n `;\nexport const GetNodeInfoDocument = gql`\n query getNodeInfo {\n nodeInfo {\n ...nodeInfoFragment\n }\n}\n ${NodeInfoFragmentFragmentDoc}`;\nexport const GetChainDocument = gql`\n query getChain {\n chain {\n ...chainInfoFragment\n }\n}\n ${ChainInfoFragmentFragmentDoc}`;\nexport const GetTransactionDocument = gql`\n query getTransaction($transactionId: TransactionId!) {\n transaction(id: $transactionId) {\n ...transactionFragment\n }\n}\n ${TransactionFragmentFragmentDoc}`;\nexport const GetTransactionWithReceiptsDocument = gql`\n query getTransactionWithReceipts($transactionId: TransactionId!) {\n transaction(id: $transactionId) {\n ...transactionFragment\n receipts {\n ...receiptFragment\n }\n }\n}\n ${TransactionFragmentFragmentDoc}\n${ReceiptFragmentFragmentDoc}`;\nexport const GetTransactionsDocument = gql`\n query getTransactions($after: String, $before: String, $first: Int, $last: Int) {\n transactions(after: $after, before: $before, first: $first, last: $last) {\n edges {\n node {\n ...transactionFragment\n }\n }\n }\n}\n ${TransactionFragmentFragmentDoc}`;\nexport const GetTransactionsByOwnerDocument = gql`\n query getTransactionsByOwner($owner: Address!, $after: String, $before: String, $first: Int, $last: Int) {\n transactionsByOwner(\n owner: $owner\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n pageInfo {\n ...pageInfoFragment\n }\n edges {\n node {\n ...transactionFragment\n }\n }\n }\n}\n ${PageInfoFragmentFragmentDoc}\n${TransactionFragmentFragmentDoc}`;\nexport const EstimatePredicatesDocument = gql`\n query estimatePredicates($encodedTransaction: HexString!) {\n estimatePredicates(tx: $encodedTransaction) {\n ...transactionEstimatePredicatesFragment\n }\n}\n ${TransactionEstimatePredicatesFragmentFragmentDoc}`;\nexport const GetBlockDocument = gql`\n query getBlock($blockId: BlockId, $height: U32) {\n block(id: $blockId, height: $height) {\n ...blockFragment\n }\n}\n ${BlockFragmentFragmentDoc}`;\nexport const GetBlockWithTransactionsDocument = gql`\n query getBlockWithTransactions($blockId: BlockId, $blockHeight: U32) {\n block(id: $blockId, height: $blockHeight) {\n ...blockFragment\n transactions {\n ...transactionFragment\n }\n }\n}\n ${BlockFragmentFragmentDoc}\n${TransactionFragmentFragmentDoc}`;\nexport const GetBlocksDocument = gql`\n query getBlocks($after: String, $before: String, $first: Int, $last: Int) {\n blocks(after: $after, before: $before, first: $first, last: $last) {\n edges {\n node {\n ...blockFragment\n }\n }\n }\n}\n ${BlockFragmentFragmentDoc}`;\nexport const GetCoinDocument = gql`\n query getCoin($coinId: UtxoId!) {\n coin(utxoId: $coinId) {\n ...coinFragment\n }\n}\n ${CoinFragmentFragmentDoc}`;\nexport const GetCoinsDocument = gql`\n query getCoins($filter: CoinFilterInput!, $after: String, $before: String, $first: Int, $last: Int) {\n coins(\n filter: $filter\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n edges {\n node {\n ...coinFragment\n }\n }\n }\n}\n ${CoinFragmentFragmentDoc}`;\nexport const GetCoinsToSpendDocument = gql`\n query getCoinsToSpend($owner: Address!, $queryPerAsset: [SpendQueryElementInput!]!, $excludedIds: ExcludeInput) {\n coinsToSpend(\n owner: $owner\n queryPerAsset: $queryPerAsset\n excludedIds: $excludedIds\n ) {\n ...coinFragment\n ...messageCoinFragment\n }\n}\n ${CoinFragmentFragmentDoc}\n${MessageCoinFragmentFragmentDoc}`;\nexport const GetContractDocument = gql`\n query getContract($contractId: ContractId!) {\n contract(id: $contractId) {\n bytecode\n id\n }\n}\n `;\nexport const GetContractBalanceDocument = gql`\n query getContractBalance($contract: ContractId!, $asset: AssetId!) {\n contractBalance(contract: $contract, asset: $asset) {\n ...contractBalanceFragment\n }\n}\n ${ContractBalanceFragmentFragmentDoc}`;\nexport const GetBalanceDocument = gql`\n query getBalance($owner: Address!, $assetId: AssetId!) {\n balance(owner: $owner, assetId: $assetId) {\n ...balanceFragment\n }\n}\n ${BalanceFragmentFragmentDoc}`;\nexport const GetBalancesDocument = gql`\n query getBalances($filter: BalanceFilterInput!, $after: String, $before: String, $first: Int, $last: Int) {\n balances(\n filter: $filter\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n edges {\n node {\n ...balanceFragment\n }\n }\n }\n}\n ${BalanceFragmentFragmentDoc}`;\nexport const GetMessagesDocument = gql`\n query getMessages($owner: Address!, $after: String, $before: String, $first: Int, $last: Int) {\n messages(\n owner: $owner\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n edges {\n node {\n ...messageFragment\n }\n }\n }\n}\n ${MessageFragmentFragmentDoc}`;\nexport const GetMessageProofDocument = gql`\n query getMessageProof($transactionId: TransactionId!, $nonce: Nonce!, $commitBlockId: BlockId, $commitBlockHeight: U32) {\n messageProof(\n transactionId: $transactionId\n nonce: $nonce\n commitBlockId: $commitBlockId\n commitBlockHeight: $commitBlockHeight\n ) {\n ...messageProofFragment\n }\n}\n ${MessageProofFragmentFragmentDoc}`;\nexport const GetMessageStatusDocument = gql`\n query getMessageStatus($nonce: Nonce!) {\n messageStatus(nonce: $nonce) {\n state\n }\n}\n `;\nexport const DryRunDocument = gql`\n mutation dryRun($encodedTransaction: HexString!, $utxoValidation: Boolean) {\n dryRun(tx: $encodedTransaction, utxoValidation: $utxoValidation) {\n ...receiptFragment\n }\n}\n ${ReceiptFragmentFragmentDoc}`;\nexport const SubmitDocument = gql`\n mutation submit($encodedTransaction: HexString!) {\n submit(tx: $encodedTransaction) {\n id\n }\n}\n `;\nexport const ProduceBlocksDocument = gql`\n mutation produceBlocks($startTimestamp: Tai64Timestamp, $blocksToProduce: U32!) {\n produceBlocks(\n blocksToProduce: $blocksToProduce\n startTimestamp: $startTimestamp\n )\n}\n `;\nexport const SubmitAndAwaitDocument = gql`\n subscription submitAndAwait($encodedTransaction: HexString!) {\n submitAndAwait(tx: $encodedTransaction) {\n ...transactionStatusFragment\n }\n}\n ${TransactionStatusFragmentFragmentDoc}`;\nexport const StatusChangeDocument = gql`\n subscription statusChange($transactionId: TransactionId!) {\n statusChange(id: $transactionId) {\n ...transactionStatusFragment\n }\n}\n ${TransactionStatusFragmentFragmentDoc}`;\nexport type Requester<C = {}, E = unknown> = <R, V>(doc: DocumentNode, vars?: V, options?: C) => Promise<R> | AsyncIterable<R>\nexport function getSdk<C, E>(requester: Requester<C, E>) {\n return {\n getVersion(variables?: GqlGetVersionQueryVariables, options?: C): Promise<GqlGetVersionQuery> {\n return requester<GqlGetVersionQuery, GqlGetVersionQueryVariables>(GetVersionDocument, variables, options) as Promise<GqlGetVersionQuery>;\n },\n getNodeInfo(variables?: GqlGetNodeInfoQueryVariables, options?: C): Promise<GqlGetNodeInfoQuery> {\n return requester<GqlGetNodeInfoQuery, GqlGetNodeInfoQueryVariables>(GetNodeInfoDocument, variables, options) as Promise<GqlGetNodeInfoQuery>;\n },\n getChain(variables?: GqlGetChainQueryVariables, options?: C): Promise<GqlGetChainQuery> {\n return requester<GqlGetChainQuery, GqlGetChainQueryVariables>(GetChainDocument, variables, options) as Promise<GqlGetChainQuery>;\n },\n getTransaction(variables: GqlGetTransactionQueryVariables, options?: C): Promise<GqlGetTransactionQuery> {\n return requester<GqlGetTransactionQuery, GqlGetTransactionQueryVariables>(GetTransactionDocument, variables, options) as Promise<GqlGetTransactionQuery>;\n },\n getTransactionWithReceipts(variables: GqlGetTransactionWithReceiptsQueryVariables, options?: C): Promise<GqlGetTransactionWithReceiptsQuery> {\n return requester<GqlGetTransactionWithReceiptsQuery, GqlGetTransactionWithReceiptsQueryVariables>(GetTransactionWithReceiptsDocument, variables, options) as Promise<GqlGetTransactionWithReceiptsQuery>;\n },\n getTransactions(variables?: GqlGetTransactionsQueryVariables, options?: C): Promise<GqlGetTransactionsQuery> {\n return requester<GqlGetTransactionsQuery, GqlGetTransactionsQueryVariables>(GetTransactionsDocument, variables, options) as Promise<GqlGetTransactionsQuery>;\n },\n getTransactionsByOwner(variables: GqlGetTransactionsByOwnerQueryVariables, options?: C): Promise<GqlGetTransactionsByOwnerQuery> {\n return requester<GqlGetTransactionsByOwnerQuery, GqlGetTransactionsByOwnerQueryVariables>(GetTransactionsByOwnerDocument, variables, options) as Promise<GqlGetTransactionsByOwnerQuery>;\n },\n estimatePredicates(variables: GqlEstimatePredicatesQueryVariables, options?: C): Promise<GqlEstimatePredicatesQuery> {\n return requester<GqlEstimatePredicatesQuery, GqlEstimatePredicatesQueryVariables>(EstimatePredicatesDocument, variables, options) as Promise<GqlEstimatePredicatesQuery>;\n },\n getBlock(variables?: GqlGetBlockQueryVariables, options?: C): Promise<GqlGetBlockQuery> {\n return requester<GqlGetBlockQuery, GqlGetBlockQueryVariables>(GetBlockDocument, variables, options) as Promise<GqlGetBlockQuery>;\n },\n getBlockWithTransactions(variables?: GqlGetBlockWithTransactionsQueryVariables, options?: C): Promise<GqlGetBlockWithTransactionsQuery> {\n return requester<GqlGetBlockWithTransactionsQuery, GqlGetBlockWithTransactionsQueryVariables>(GetBlockWithTransactionsDocument, variables, options) as Promise<GqlGetBlockWithTransactionsQuery>;\n },\n getBlocks(variables?: GqlGetBlocksQueryVariables, options?: C): Promise<GqlGetBlocksQuery> {\n return requester<GqlGetBlocksQuery, GqlGetBlocksQueryVariables>(GetBlocksDocument, variables, options) as Promise<GqlGetBlocksQuery>;\n },\n getCoin(variables: GqlGetCoinQueryVariables, options?: C): Promise<GqlGetCoinQuery> {\n return requester<GqlGetCoinQuery, GqlGetCoinQueryVariables>(GetCoinDocument, variables, options) as Promise<GqlGetCoinQuery>;\n },\n getCoins(variables: GqlGetCoinsQueryVariables, options?: C): Promise<GqlGetCoinsQuery> {\n return requester<GqlGetCoinsQuery, GqlGetCoinsQueryVariables>(GetCoinsDocument, variables, options) as Promise<GqlGetCoinsQuery>;\n },\n getCoinsToSpend(variables: GqlGetCoinsToSpendQueryVariables, options?: C): Promise<GqlGetCoinsToSpendQuery> {\n return requester<GqlGetCoinsToSpendQuery, GqlGetCoinsToSpendQueryVariables>(GetCoinsToSpendDocument, variables, options) as Promise<GqlGetCoinsToSpendQuery>;\n },\n getContract(variables: GqlGetContractQueryVariables, options?: C): Promise<GqlGetContractQuery> {\n return requester<GqlGetContractQuery, GqlGetContractQueryVariables>(GetContractDocument, variables, options) as Promise<GqlGetContractQuery>;\n },\n getContractBalance(variables: GqlGetContractBalanceQueryVariables, options?: C): Promise<GqlGetContractBalanceQuery> {\n return requester<GqlGetContractBalanceQuery, GqlGetContractBalanceQueryVariables>(GetContractBalanceDocument, variables, options) as Promise<GqlGetContractBalanceQuery>;\n },\n getBalance(variables: GqlGetBalanceQueryVariables, options?: C): Promise<GqlGetBalanceQuery> {\n return requester<GqlGetBalanceQuery, GqlGetBalanceQueryVariables>(GetBalanceDocument, variables, options) as Promise<GqlGetBalanceQuery>;\n },\n getBalances(variables: GqlGetBalancesQueryVariables, options?: C): Promise<GqlGetBalancesQuery> {\n return requester<GqlGetBalancesQuery, GqlGetBalancesQueryVariables>(GetBalancesDocument, variables, options) as Promise<GqlGetBalancesQuery>;\n },\n getMessages(variables: GqlGetMessagesQueryVariables, options?: C): Promise<GqlGetMessagesQuery> {\n return requester<GqlGetMessagesQuery, GqlGetMessagesQueryVariables>(GetMessagesDocument, variables, options) as Promise<GqlGetMessagesQuery>;\n },\n getMessageProof(variables: GqlGetMessageProofQueryVariables, options?: C): Promise<GqlGetMessageProofQuery> {\n return requester<GqlGetMessageProofQuery, GqlGetMessageProofQueryVariables>(GetMessageProofDocument, variables, options) as Promise<GqlGetMessageProofQuery>;\n },\n getMessageStatus(variables: GqlGetMessageStatusQueryVariables, options?: C): Promise<GqlGetMessageStatusQuery> {\n return requester<GqlGetMessageStatusQuery, GqlGetMessageStatusQueryVariables>(GetMessageStatusDocument, variables, options) as Promise<GqlGetMessageStatusQuery>;\n },\n dryRun(variables: GqlDryRunMutationVariables, options?: C): Promise<GqlDryRunMutation> {\n return requester<GqlDryRunMutation, GqlDryRunMutationVariables>(DryRunDocument, variables, options) as Promise<GqlDryRunMutation>;\n },\n submit(variables: GqlSubmitMutationVariables, options?: C): Promise<GqlSubmitMutation> {\n return requester<GqlSubmitMutation, GqlSubmitMutationVariables>(SubmitDocument, variables, options) as Promise<GqlSubmitMutation>;\n },\n produceBlocks(variables: GqlProduceBlocksMutationVariables, options?: C): Promise<GqlProduceBlocksMutation> {\n return requester<GqlProduceBlocksMutation, GqlProduceBlocksMutationVariables>(ProduceBlocksDocument, variables, options) as Promise<GqlProduceBlocksMutation>;\n },\n submitAndAwait(variables: GqlSubmitAndAwaitSubscriptionVariables, options?: C): AsyncIterable<GqlSubmitAndAwaitSubscription> {\n return requester<GqlSubmitAndAwaitSubscription, GqlSubmitAndAwaitSubscriptionVariables>(SubmitAndAwaitDocument, variables, options) as AsyncIterable<GqlSubmitAndAwaitSubscription>;\n },\n statusChange(variables: GqlStatusChangeSubscriptionVariables, options?: C): AsyncIterable<GqlStatusChangeSubscription> {\n return requester<GqlStatusChangeSubscription, GqlStatusChangeSubscriptionVariables>(StatusChangeDocument, variables, options) as AsyncIterable<GqlStatusChangeSubscription>;\n }\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { DocumentNode } from 'graphql';\nimport { print } from 'graphql';\n\ntype FuelGraphQLSubscriberOptions = {\n url: string;\n query: DocumentNode;\n variables?: Record<string, unknown>;\n fetchFn: typeof fetch;\n};\n\nexport class FuelGraphqlSubscriber implements AsyncIterator<unknown> {\n private stream!: ReadableStreamDefaultReader<Uint8Array>;\n private static textDecoder = new TextDecoder();\n\n public constructor(private options: FuelGraphQLSubscriberOptions) {}\n\n private async setStream() {\n const { url, query, variables, fetchFn } = this.options;\n\n const response = await fetchFn(`${url}-sub`, {\n method: 'POST',\n body: JSON.stringify({\n query: print(query),\n variables,\n }),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.stream = response.body!.getReader();\n }\n\n private events: Array<{ data: unknown; errors?: { message: string }[] }> = [];\n private parsingLeftover = '';\n\n async next(): Promise<IteratorResult<unknown, unknown>> {\n if (!this.stream) {\n await this.setStream();\n }\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (this.events.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { data, errors } = this.events.shift()!;\n if (Array.isArray(errors)) {\n throw new FuelError(\n FuelError.CODES.INVALID_REQUEST,\n errors.map((err) => err.message).join('\\n\\n')\n );\n }\n return { value: data, done: false };\n }\n const { value, done } = await this.stream.read();\n if (done) {\n return { value, done };\n }\n\n /**\n * We don't care about keep-alive messages.\n * The only responses that I came across from the node are either 200 responses with \"data:.*\" or keep-alive messages.\n * You can find the keep-alive message in the fuel-core codebase (latest permalink as of writing):\n * https://github.com/FuelLabs/fuel-core/blob/e1e631902f762081d2124d9c457ddfe13ac366dc/crates/fuel-core/src/graphql_api/service.rs#L247\n * To get the actual latest info you need to check out the master branch (might change):\n * https://github.com/FuelLabs/fuel-core/blob/master/crates/fuel-core/src/graphql_api/service.rs#L247\n * */\n const decoded = FuelGraphqlSubscriber.textDecoder\n .decode(value)\n .replace(':keep-alive-text\\n\\n', '');\n\n if (decoded === '') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const text = `${this.parsingLeftover}${decoded}`;\n const regex = /data:.*\\n\\n/g;\n\n const matches = [...text.matchAll(regex)].flatMap((match) => match);\n\n matches.forEach((match) => {\n try {\n this.events.push(JSON.parse(match.replace(/^data:/, '')));\n } catch (e) {\n throw new FuelError(\n ErrorCode.STREAM_PARSING_ERROR,\n `Error while parsing stream data response: ${text}`\n );\n }\n });\n\n this.parsingLeftover = text.replace(matches.join(), '');\n }\n }\n\n /**\n * Gets called when `break` is called in a `for-await-of` loop.\n */\n async return(): Promise<IteratorResult<unknown, undefined>> {\n await this.stream.cancel();\n this.stream.releaseLock();\n return { done: true, value: undefined };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown, unknown, undefined> {\n return this;\n }\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { hexlify } from '@fuel-ts/utils';\n\ntype Cache = {\n [key: string]: {\n expires: number;\n value: BytesLike;\n };\n};\nconst cache: Cache = {}; // it's a cache hash ~~> cash?\n\nconst DEFAULT_TTL_IN_MS = 30 * 1000; // 30seconds\n\nexport class MemoryCache {\n ttl: number;\n constructor(ttlInMs: number = DEFAULT_TTL_IN_MS) {\n this.ttl = ttlInMs;\n\n if (typeof ttlInMs !== 'number' || this.ttl <= 0) {\n throw new FuelError(\n ErrorCode.INVALID_TTL,\n `Invalid TTL: ${this.ttl}. Use a value greater than zero.`\n );\n }\n }\n\n get(value: BytesLike, isAutoExpiring = true): BytesLike | undefined {\n const key = hexlify(value);\n if (cache[key]) {\n if (!isAutoExpiring || cache[key].expires > Date.now()) {\n return cache[key].value;\n }\n\n this.del(value);\n }\n\n return undefined;\n }\n\n set(value: BytesLike): number {\n const expiresAt = Date.now() + this.ttl;\n const key = hexlify(value);\n cache[key] = {\n expires: expiresAt,\n value,\n };\n\n return expiresAt;\n }\n\n getAllData(): BytesLike[] {\n return Object.keys(cache).reduce((list, key) => {\n const data = this.get(key, false);\n if (data) {\n list.push(data);\n }\n\n return list;\n }, [] as BytesLike[]);\n }\n\n getActiveData(): BytesLike[] {\n return Object.keys(cache).reduce((list, key) => {\n const data = this.get(key);\n if (data) {\n list.push(data);\n }\n\n return list;\n }, [] as BytesLike[]);\n }\n\n del(value: BytesLike) {\n const key = hexlify(value);\n delete cache[key];\n }\n}\n","import { BYTES_32, UTXO_ID_LEN } from '@fuel-ts/abi-coder';\nimport { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish } from '@fuel-ts/math';\nimport { bn, toNumber } from '@fuel-ts/math';\nimport type { Input } from '@fuel-ts/transactions';\nimport { InputType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nexport type CoinTransactionRequestInput = {\n type: InputType.Coin;\n\n /** UTXO ID */\n id: BytesLike;\n\n /** Owning address or script hash */\n owner: BytesLike;\n\n /** Amount of coins */\n amount: BigNumberish;\n\n /** Asset ID of the coins */\n assetId: BytesLike;\n\n /** Points to the TX whose output is being spent. (TxPointer) */\n txPointer: BytesLike;\n\n /** Index of witness that authorizes spending the coin */\n witnessIndex: number;\n\n /** UTXO being spent must have been created at least this many blocks ago */\n maturity?: number;\n\n /** Gas used by predicate */\n predicateGasUsed?: BigNumberish;\n\n /** Predicate bytecode */\n predicate?: BytesLike;\n\n /** Predicate input data (parameters) */\n predicateData?: BytesLike;\n};\n\nexport type MessageTransactionRequestInput = {\n type: InputType.Message;\n\n /** Address of sender */\n sender: BytesLike;\n\n /** Address of recipient */\n recipient: BytesLike;\n\n /** Amount of coins */\n amount: BigNumberish;\n\n /** Index of witness that authorizes the message */\n witnessIndex: number;\n\n /** Unique nonce of message */\n nonce: BytesLike;\n\n /** Gas used by predicate */\n predicateGasUsed?: BigNumberish;\n\n /** Predicate bytecode */\n predicate?: BytesLike;\n\n /** Predicate input data (parameters) */\n predicateData?: BytesLike;\n\n /** data of message */\n data?: BytesLike;\n};\n\nexport type ContractTransactionRequestInput = {\n type: InputType.Contract;\n\n /** Points to the TX whose output is being spent. (TxPointer) */\n txPointer: BytesLike;\n\n /** Contract ID */\n contractId: BytesLike;\n};\nexport type TransactionRequestInput =\n | CoinTransactionRequestInput\n | ContractTransactionRequestInput\n | MessageTransactionRequestInput;\n\n/** @hidden */\nexport const inputify = (value: TransactionRequestInput): Input => {\n const { type } = value;\n\n switch (value.type) {\n case InputType.Coin: {\n const predicate = arrayify(value.predicate ?? '0x');\n const predicateData = arrayify(value.predicateData ?? '0x');\n return {\n type: InputType.Coin,\n txID: hexlify(arrayify(value.id).slice(0, BYTES_32)),\n outputIndex: toNumber(arrayify(value.id).slice(BYTES_32, UTXO_ID_LEN)),\n owner: hexlify(value.owner),\n amount: bn(value.amount),\n assetId: hexlify(value.assetId),\n txPointer: {\n blockHeight: toNumber(arrayify(value.txPointer).slice(0, 8)),\n txIndex: toNumber(arrayify(value.txPointer).slice(8, 16)),\n },\n witnessIndex: value.witnessIndex,\n maturity: value.maturity ?? 0,\n predicateGasUsed: bn(value.predicateGasUsed),\n predicateLength: predicate.length,\n predicateDataLength: predicateData.length,\n predicate: hexlify(predicate),\n predicateData: hexlify(predicateData),\n };\n }\n case InputType.Contract: {\n return {\n type: InputType.Contract,\n txID: ZeroBytes32,\n outputIndex: 0,\n balanceRoot: ZeroBytes32,\n stateRoot: ZeroBytes32,\n txPointer: {\n blockHeight: toNumber(arrayify(value.txPointer).slice(0, 8)),\n txIndex: toNumber(arrayify(value.txPointer).slice(8, 16)),\n },\n contractID: hexlify(value.contractId),\n };\n }\n case InputType.Message: {\n const predicate = arrayify(value.predicate ?? '0x');\n const predicateData = arrayify(value.predicateData ?? '0x');\n const data = arrayify(value.data ?? '0x');\n return {\n type: InputType.Message,\n sender: hexlify(value.sender),\n recipient: hexlify(value.recipient),\n amount: bn(value.amount),\n nonce: hexlify(value.nonce),\n witnessIndex: value.witnessIndex,\n predicateGasUsed: bn(value.predicateGasUsed),\n predicateLength: predicate.length,\n predicateDataLength: predicateData.length,\n predicate: hexlify(predicate),\n predicateData: hexlify(predicateData),\n data: hexlify(data),\n dataLength: data.length,\n };\n }\n default: {\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_INPUT,\n `Invalid transaction input type: ${type}.`\n );\n }\n }\n};\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { Output } from '@fuel-ts/transactions';\nimport { OutputType } from '@fuel-ts/transactions';\nimport { hexlify } from '@fuel-ts/utils';\n\nexport type CoinTransactionRequestOutput = {\n type: OutputType.Coin;\n /** Receiving address or script hash */\n to: BytesLike;\n /** Amount of coins to send */\n amount: BigNumberish;\n /** Asset ID of coins */\n assetId: BytesLike;\n};\nexport type ContractTransactionRequestOutput = {\n type: OutputType.Contract;\n /** Index of input contract */\n inputIndex: number;\n};\nexport type ChangeTransactionRequestOutput = {\n type: OutputType.Change;\n /** Receiving address or script hash */\n to: BytesLike;\n /** Asset ID of coins */\n assetId: BytesLike;\n};\nexport type VariableTransactionRequestOutput = {\n type: OutputType.Variable;\n};\nexport type ContractCreatedTransactionRequestOutput = {\n type: OutputType.ContractCreated;\n /** Contract ID */\n contractId: BytesLike;\n /** State Root */\n stateRoot: BytesLike;\n};\nexport type TransactionRequestOutput =\n | CoinTransactionRequestOutput\n | ContractTransactionRequestOutput\n | ChangeTransactionRequestOutput\n | VariableTransactionRequestOutput\n | ContractCreatedTransactionRequestOutput;\n\n/** @hidden */\nexport const outputify = (value: TransactionRequestOutput): Output => {\n const { type } = value;\n\n switch (type) {\n case OutputType.Coin: {\n return {\n type: OutputType.Coin,\n to: hexlify(value.to),\n amount: bn(value.amount),\n assetId: hexlify(value.assetId),\n };\n }\n case OutputType.Contract: {\n return {\n type: OutputType.Contract,\n inputIndex: value.inputIndex,\n balanceRoot: ZeroBytes32,\n stateRoot: ZeroBytes32,\n };\n }\n case OutputType.Change: {\n return {\n type: OutputType.Change,\n to: hexlify(value.to),\n amount: bn(0),\n assetId: hexlify(value.assetId),\n };\n }\n case OutputType.Variable: {\n return {\n type: OutputType.Variable,\n to: ZeroBytes32,\n amount: bn(0),\n assetId: ZeroBytes32,\n };\n }\n case OutputType.ContractCreated: {\n return {\n type: OutputType.ContractCreated,\n contractId: hexlify(value.contractId),\n stateRoot: hexlify(value.stateRoot),\n };\n }\n default: {\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_INPUT,\n `Invalid transaction output type: ${type}.`\n );\n }\n }\n};\n","import type { InputValue } from '@fuel-ts/abi-coder';\nimport { UTXO_ID_LEN } from '@fuel-ts/abi-coder';\nimport { Address, addressify } from '@fuel-ts/address';\nimport { BaseAssetId, ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { randomBytes } from '@fuel-ts/crypto';\nimport type { AddressLike, AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport type { BN, BigNumberish } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { TransactionScript, Policy, TransactionCreate } from '@fuel-ts/transactions';\nimport {\n PolicyType,\n TransactionCoder,\n InputType,\n OutputType,\n TransactionType,\n} from '@fuel-ts/transactions';\nimport { concat, hexlify } from '@fuel-ts/utils';\n\nimport type { Account } from '../../account';\nimport type { Predicate } from '../../predicate';\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport type { Coin } from '../coin';\nimport type { CoinQuantity, CoinQuantityLike } from '../coin-quantity';\nimport { coinQuantityfy } from '../coin-quantity';\nimport type { MessageCoin } from '../message';\nimport type { ChainInfo } from '../provider';\nimport type { Resource } from '../resource';\nimport { isCoin } from '../resource';\nimport { normalizeJSON } from '../utils';\nimport { getMaxGas, getMinGas } from '../utils/gas';\n\nimport { NoWitnessAtIndexError } from './errors';\nimport type {\n TransactionRequestInput,\n CoinTransactionRequestInput,\n MessageTransactionRequestInput,\n} from './input';\nimport { inputify } from './input';\nimport type {\n TransactionRequestOutput,\n ChangeTransactionRequestOutput,\n CoinTransactionRequestOutput,\n} from './output';\nimport { outputify } from './output';\nimport type { TransactionRequestLike } from './types';\nimport type { TransactionRequestWitness } from './witness';\nimport { witnessify } from './witness';\n\nexport {\n /**\n * @hidden\n */\n TransactionType,\n};\n\n/**\n * @hidden\n *\n * Interface defining a like structure for a base transaction request.\n */\nexport interface BaseTransactionRequestLike {\n /** Gas price for transaction */\n gasPrice?: BigNumberish;\n /** Block until which tx cannot be included */\n maturity?: number;\n /** The maximum fee payable by this transaction using BASE_ASSET. */\n maxFee?: BigNumberish;\n /** The maximum amount of witness data allowed for the transaction */\n witnessLimit?: BigNumberish;\n /** List of inputs */\n inputs?: TransactionRequestInput[];\n /** List of outputs */\n outputs?: TransactionRequestOutput[];\n /** List of witnesses */\n witnesses?: TransactionRequestWitness[];\n}\n\ntype ToBaseTransactionResponse = Pick<\n TransactionScript,\n | 'inputs'\n | 'inputsCount'\n | 'outputs'\n | 'outputsCount'\n | 'witnesses'\n | 'witnessesCount'\n | 'policies'\n | 'policyTypes'\n>;\n\n/**\n * Abstract class to define the functionalities of a transaction request transaction request.\n */\nexport abstract class BaseTransactionRequest implements BaseTransactionRequestLike {\n /** Type of the transaction */\n abstract type: TransactionType;\n /** Gas price for transaction */\n gasPrice: BN;\n /** Block until which tx cannot be included */\n maturity: number;\n /** The maximum fee payable by this transaction using BASE_ASSET. */\n maxFee?: BN;\n /** The maximum amount of witness data allowed for the transaction */\n witnessLimit?: BN | undefined;\n /** List of inputs */\n inputs: TransactionRequestInput[] = [];\n /** List of outputs */\n outputs: TransactionRequestOutput[] = [];\n /** List of witnesses */\n witnesses: TransactionRequestWitness[] = [];\n\n /**\n * Constructor for initializing a base transaction request.\n *\n * @param baseTransactionRequest - Optional object containing properties to initialize the transaction request.\n */\n constructor({\n gasPrice,\n maturity,\n maxFee,\n witnessLimit,\n inputs,\n outputs,\n witnesses,\n }: BaseTransactionRequestLike = {}) {\n this.gasPrice = bn(gasPrice);\n this.maturity = maturity ?? 0;\n this.witnessLimit = witnessLimit ? bn(witnessLimit) : undefined;\n this.maxFee = maxFee ? bn(maxFee) : undefined;\n this.inputs = inputs ?? [];\n this.outputs = outputs ?? [];\n this.witnesses = witnesses ?? [];\n }\n\n static getPolicyMeta(req: BaseTransactionRequest) {\n let policyTypes = 0;\n const policies: Policy[] = [];\n\n if (req.gasPrice) {\n policyTypes += PolicyType.GasPrice;\n policies.push({ data: req.gasPrice, type: PolicyType.GasPrice });\n }\n if (req.witnessLimit) {\n policyTypes += PolicyType.WitnessLimit;\n policies.push({ data: req.witnessLimit, type: PolicyType.WitnessLimit });\n }\n if (req.maturity > 0) {\n policyTypes += PolicyType.Maturity;\n policies.push({ data: req.maturity, type: PolicyType.Maturity });\n }\n if (req.maxFee) {\n policyTypes += PolicyType.MaxFee;\n policies.push({ data: req.maxFee, type: PolicyType.MaxFee });\n }\n\n return {\n policyTypes,\n policies,\n };\n }\n\n /**\n * Method to obtain the base transaction details.\n *\n * @returns The base transaction details.\n */\n\n protected getBaseTransaction(): ToBaseTransactionResponse {\n const inputs = this.inputs?.map(inputify) ?? [];\n const outputs = this.outputs?.map(outputify) ?? [];\n const witnesses = this.witnesses?.map(witnessify) ?? [];\n\n const { policyTypes, policies } = BaseTransactionRequest.getPolicyMeta(this);\n\n return {\n policyTypes,\n inputs,\n outputs,\n policies,\n witnesses,\n inputsCount: inputs.length,\n outputsCount: outputs.length,\n witnessesCount: witnesses.length,\n };\n }\n\n abstract toTransaction(): TransactionCreate | TransactionScript;\n\n /**\n * Converts the transaction request to a byte array.\n *\n * @returns The transaction bytes.\n */\n toTransactionBytes(): Uint8Array {\n return new TransactionCoder().encode(this.toTransaction());\n }\n\n /**\n * @hidden\n *\n * Pushes an input to the list without any side effects and returns the index\n */\n protected pushInput(input: TransactionRequestInput): number {\n this.inputs.push(input);\n return this.inputs.length - 1;\n }\n\n /**\n * @hidden\n *\n * Pushes an output to the list without any side effects and returns the index\n */\n protected pushOutput(output: TransactionRequestOutput): number {\n this.outputs.push(output);\n return this.outputs.length - 1;\n }\n\n /**\n * @hidden\n *\n * Pushes a witness to the list and returns the index\n *\n * @param signature - The signature to add to the witness.\n * @returns The index of the created witness.\n */\n addWitness(signature: BytesLike) {\n this.witnesses.push(signature);\n return this.witnesses.length - 1;\n }\n\n /**\n * @hidden\n *\n * Creates an empty witness without any side effects and returns the index\n *\n * @returns The index of the created witness.\n */\n protected addEmptyWitness(): number {\n // Push a dummy witness with same byte size as a real witness signature\n this.addWitness(concat([ZeroBytes32, ZeroBytes32]));\n return this.witnesses.length - 1;\n }\n\n /**\n * Updates the witness for a given owner and signature.\n *\n * @param address - The address to get the coin input witness index for.\n * @param signature - The signature to update the witness with.\n */\n updateWitnessByOwner(address: string | AbstractAddress, signature: BytesLike) {\n const ownerAddress = Address.fromAddressOrString(address);\n const witnessIndex = this.getCoinInputWitnessIndexByOwner(ownerAddress);\n if (typeof witnessIndex === 'number') {\n this.updateWitness(witnessIndex, signature);\n }\n }\n\n /**\n * Updates an existing witness without any side effects.\n *\n * @param index - The index of the witness to update.\n * @param witness - The new witness.\n * @throws If the witness does not exist.\n */\n updateWitness(index: number, witness: TransactionRequestWitness) {\n if (!this.witnesses[index]) {\n throw new NoWitnessAtIndexError(index);\n }\n this.witnesses[index] = witness;\n }\n\n /**\n * Helper function to add an external signature to the transaction.\n *\n * @param account - The account/s to sign to the transaction.\n * @returns The transaction with the signature witness added.\n */\n async addAccountWitnesses(account: Account | Account[]) {\n const accounts = Array.isArray(account) ? account : [account];\n await Promise.all(\n accounts.map(async (acc) => {\n this.addWitness(await acc.signTransaction(<TransactionRequestLike>this));\n })\n );\n\n return this;\n }\n\n /**\n * Gets the coin inputs for a transaction.\n *\n * @returns The coin inputs.\n */\n getCoinInputs(): CoinTransactionRequestInput[] {\n return this.inputs.filter(\n (input): input is CoinTransactionRequestInput => input.type === InputType.Coin\n );\n }\n\n /**\n * Gets the coin outputs for a transaction.\n *\n * @returns The coin outputs.\n */\n getCoinOutputs(): CoinTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is CoinTransactionRequestOutput => output.type === OutputType.Coin\n );\n }\n\n /**\n * Gets the change outputs for a transaction.\n *\n * @returns The change outputs.\n */\n getChangeOutputs(): ChangeTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is ChangeTransactionRequestOutput => output.type === OutputType.Change\n );\n }\n\n /**\n * @hidden\n *\n * Returns the witnessIndex of the found CoinInput.\n */\n getCoinInputWitnessIndexByOwner(owner: AddressLike): number | undefined {\n const ownerAddress = addressify(owner);\n\n const found = this.inputs.find((input) => {\n switch (input.type) {\n case InputType.Coin:\n return hexlify((<CoinTransactionRequestInput>input).owner) === ownerAddress.toB256();\n case InputType.Message:\n return (\n hexlify((<MessageTransactionRequestInput>input).recipient) === ownerAddress.toB256()\n );\n default:\n return false;\n }\n });\n\n return (<CoinTransactionRequestInput>found)?.witnessIndex;\n }\n\n /**\n * Adds a single coin input to the transaction and a change output for the related\n * assetId, if one it was not added yet.\n *\n * @param coin - Coin resource.\n * @param predicate - Predicate bytes.\n * @param predicateData - Predicate data bytes.\n */\n addCoinInput(coin: Coin, predicate?: Predicate<InputValue[]>) {\n const { assetId, owner, amount } = coin;\n\n let witnessIndex;\n\n if (predicate) {\n witnessIndex = 0;\n } else {\n witnessIndex = this.getCoinInputWitnessIndexByOwner(owner);\n\n // Insert a dummy witness if no witness exists\n if (typeof witnessIndex !== 'number') {\n witnessIndex = this.addEmptyWitness();\n }\n }\n\n const input: CoinTransactionRequestInput = {\n ...coin,\n type: InputType.Coin,\n owner: owner.toB256(),\n amount,\n assetId,\n txPointer: '0x00000000000000000000000000000000',\n witnessIndex,\n predicate: predicate?.bytes,\n };\n\n // Insert the Input\n this.pushInput(input);\n\n // Insert a ChangeOutput if it does not exist\n this.addChangeOutput(owner, assetId);\n }\n\n /**\n * Adds a single message input to the transaction and a change output for the\n * baseAssetId, if one it was not added yet.\n *\n * @param message - Message resource.\n * @param predicate - Predicate bytes.\n * @param predicateData - Predicate data bytes.\n */\n addMessageInput(message: MessageCoin, predicate?: Predicate<InputValue[]>) {\n const { recipient, sender, amount } = message;\n\n const assetId = BaseAssetId;\n\n let witnessIndex;\n\n if (predicate) {\n witnessIndex = 0;\n } else {\n witnessIndex = this.getCoinInputWitnessIndexByOwner(recipient);\n\n // Insert a dummy witness if no witness exists\n if (typeof witnessIndex !== 'number') {\n witnessIndex = this.addEmptyWitness();\n }\n }\n\n const input: MessageTransactionRequestInput = {\n ...message,\n type: InputType.Message,\n sender: sender.toB256(),\n recipient: recipient.toB256(),\n amount,\n witnessIndex,\n predicate: predicate?.bytes,\n };\n\n // Insert the Input\n this.pushInput(input);\n\n // Insert a ChangeOutput if it does not exist\n this.addChangeOutput(recipient, assetId);\n }\n\n /**\n * Adds a single resource to the transaction by adding a coin/message input and a\n * change output for the related assetId, if one it was not added yet.\n *\n * @param resource - The resource to add.\n * @returns This transaction.\n */\n addResource(resource: Resource) {\n if (isCoin(resource)) {\n this.addCoinInput(resource);\n } else {\n this.addMessageInput(resource);\n }\n\n return this;\n }\n\n /**\n * Adds multiple resources to the transaction by adding coin/message inputs and change\n * outputs from the related assetIds.\n *\n * @param resources - The resources to add.\n * @returns This transaction.\n */\n addResources(resources: ReadonlyArray<Resource>) {\n resources.forEach((resource) => this.addResource(resource));\n\n return this;\n }\n\n /**\n * Adds multiple resources to the transaction by adding coin/message inputs and change\n * outputs from the related assetIds.\n *\n * @param resources - The resources to add.\n * @returns This transaction.\n */\n addPredicateResource(resource: Resource, predicate: Predicate<InputValue[]>) {\n if (isCoin(resource)) {\n this.addCoinInput(resource, predicate);\n } else {\n this.addMessageInput(resource, predicate);\n }\n\n return this;\n }\n\n /**\n * Adds multiple predicate coin/message inputs to the transaction and change outputs\n * from the related assetIds.\n *\n * @param resources - The resources to add.\n * @returns This transaction.\n */\n addPredicateResources(resources: Resource[], predicate: Predicate<InputValue[]>) {\n resources.forEach((resource) => this.addPredicateResource(resource, predicate));\n\n return this;\n }\n\n /**\n * Adds a coin output to the transaction.\n *\n * @param to - Address of the owner.\n * @param amount - Amount of coin.\n * @param assetId - Asset ID of coin.\n */\n addCoinOutput(to: AddressLike, amount: BigNumberish, assetId: BytesLike = BaseAssetId) {\n this.pushOutput({\n type: OutputType.Coin,\n to: addressify(to).toB256(),\n amount,\n assetId,\n });\n\n return this;\n }\n\n /**\n * Adds multiple coin outputs to the transaction.\n *\n * @param to - Address of the destination.\n * @param quantities - Quantities of coins.\n */\n addCoinOutputs(to: AddressLike, quantities: CoinQuantityLike[]) {\n quantities.map(coinQuantityfy).forEach((quantity) => {\n this.pushOutput({\n type: OutputType.Coin,\n to: addressify(to).toB256(),\n amount: quantity.amount,\n assetId: quantity.assetId,\n });\n });\n\n return this;\n }\n\n /**\n * Adds a change output to the transaction.\n *\n * @param to - Address of the owner.\n * @param assetId - Asset ID of coin.\n */\n addChangeOutput(to: AddressLike, assetId: BytesLike = BaseAssetId) {\n // Find the ChangeOutput for the AssetId of the Resource\n const changeOutput = this.getChangeOutputs().find(\n (output) => hexlify(output.assetId) === assetId\n );\n\n // Insert a ChangeOutput if it does not exist\n if (!changeOutput) {\n this.pushOutput({\n type: OutputType.Change,\n to: addressify(to).toB256(),\n assetId,\n });\n }\n }\n\n /**\n * @hidden\n */\n byteSize() {\n return this.toTransactionBytes().length;\n }\n\n /**\n * @hidden\n */\n metadataGas(_gasCosts: GqlGasCosts): BN {\n throw new Error('Not implemented');\n }\n\n /**\n * @hidden\n */\n calculateMinGas(chainInfo: ChainInfo): BN {\n const { gasCosts, consensusParameters } = chainInfo;\n const { gasPerByte } = consensusParameters;\n return getMinGas({\n gasPerByte,\n gasCosts,\n inputs: this.inputs,\n txBytesSize: this.byteSize(),\n metadataGas: this.metadataGas(gasCosts),\n });\n }\n\n calculateMaxGas(chainInfo: ChainInfo, minGas: BN): BN {\n const { consensusParameters } = chainInfo;\n const { gasPerByte } = consensusParameters;\n\n const witnessesLength = this.toTransaction().witnesses.reduce(\n (acc, wit) => acc + wit.dataLength,\n 0\n );\n return getMaxGas({\n gasPerByte,\n minGas,\n witnessesLength,\n witnessLimit: this.witnessLimit,\n });\n }\n\n /**\n * Funds the transaction with fake UTXOs for each assetId and amount in the\n * quantities array.\n *\n * @param quantities - CoinQuantity Array.\n */\n fundWithFakeUtxos(quantities: CoinQuantity[], resourcesOwner?: AbstractAddress) {\n const findAssetInput = (assetId: string) =>\n this.inputs.find((input) => {\n if ('assetId' in input) {\n return input.assetId === assetId;\n }\n return false;\n });\n\n const updateAssetInput = (assetId: string, quantity: BN) => {\n const assetInput = findAssetInput(assetId);\n\n if (assetInput && 'assetId' in assetInput) {\n assetInput.id = hexlify(randomBytes(UTXO_ID_LEN));\n assetInput.amount = quantity;\n } else {\n this.addResources([\n {\n id: hexlify(randomBytes(UTXO_ID_LEN)),\n amount: quantity,\n assetId,\n owner: resourcesOwner || Address.fromRandom(),\n maturity: 0,\n blockCreated: bn(1),\n txCreatedIdx: bn(1),\n },\n ]);\n }\n };\n\n updateAssetInput(BaseAssetId, bn(100_000_000_000));\n quantities.forEach((q) => updateAssetInput(q.assetId, q.amount));\n }\n\n /**\n * Retrieves an array of CoinQuantity for each coin output present in the transaction.\n * a transaction.\n *\n * @returns CoinQuantity array.\n */\n getCoinOutputsQuantities(): CoinQuantity[] {\n const coinsQuantities = this.getCoinOutputs().map(({ amount, assetId }) => ({\n amount: bn(amount),\n assetId: assetId.toString(),\n }));\n\n return coinsQuantities;\n }\n\n /**\n * Gets the Transaction Request by hashing the transaction.\n *\n * @param chainId - The chain ID.\n *\n * @returns - A hash of the transaction, which is the transaction ID.\n */\n abstract getTransactionId(chainId: number): string;\n\n /**\n * Return the minimum amount in native coins required to create\n * a transaction.\n *\n * @returns The transaction as a JSON object.\n */\n toJSON() {\n return normalizeJSON(this);\n }\n\n updatePredicateInputs(inputs: TransactionRequestInput[]) {\n this.inputs.forEach((i) => {\n let correspondingInput: TransactionRequestInput | undefined;\n switch (i.type) {\n case InputType.Coin:\n correspondingInput = inputs.find((x) => x.type === InputType.Coin && x.owner === i.owner);\n break;\n case InputType.Message:\n correspondingInput = inputs.find(\n (x) => x.type === InputType.Message && x.sender === i.sender\n );\n break;\n default:\n return;\n }\n if (\n correspondingInput &&\n 'predicateGasUsed' in correspondingInput &&\n bn(correspondingInput.predicateGasUsed).gt(0)\n ) {\n // eslint-disable-next-line no-param-reassign\n i.predicate = correspondingInput.predicate;\n // eslint-disable-next-line no-param-reassign\n i.predicateData = correspondingInput.predicateData;\n // eslint-disable-next-line no-param-reassign\n i.predicateGasUsed = correspondingInput.predicateGasUsed;\n }\n });\n }\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\n\nimport type { Coin } from './coin';\nimport type { MessageCoin } from './message';\n\nexport type RawCoin = {\n utxoId: string;\n owner: string;\n amount: string;\n assetId: string;\n maturity: string;\n blockCreated: string;\n txCreatedIdx: string;\n};\n\nexport type RawMessage = {\n amount: string;\n sender: string;\n assetId: string;\n recipient: string;\n data: string;\n nonce: string;\n daHeight: string;\n};\n\nexport type RawResource = RawCoin | RawMessage;\nexport type Resource = Coin | MessageCoin;\n\n/** @hidden */\nexport type ExcludeResourcesOption = {\n utxos?: BytesLike[];\n messages?: BytesLike[];\n};\n\n/** @hidden */\nexport const isRawCoin = (resource: RawResource): resource is RawCoin => 'utxoId' in resource;\n/** @hidden */\nexport const isRawMessage = (resource: RawResource): resource is RawMessage =>\n 'recipient' in resource;\n/** @hidden */\nexport const isCoin = (resource: Resource): resource is Coin => 'id' in resource;\n/** @hidden */\nexport const isMessage = (resource: Resource): resource is MessageCoin => 'recipient' in resource;\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport type {\n ReceiptBurn,\n ReceiptCall,\n ReceiptLog,\n ReceiptLogData,\n ReceiptMessageOut,\n ReceiptMint,\n ReceiptPanic,\n ReceiptReturn,\n ReceiptReturnData,\n ReceiptRevert,\n ReceiptScriptResult,\n ReceiptTransfer,\n ReceiptTransferOut,\n} from '@fuel-ts/transactions';\nimport {\n ReceiptBurnCoder,\n ReceiptMessageOutCoder,\n ReceiptMintCoder,\n ReceiptType,\n} from '@fuel-ts/transactions';\nimport { FAILED_TRANSFER_TO_ADDRESS_SIGNAL } from '@fuel-ts/transactions/configs';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlReceiptFragmentFragment } from '../__generated__/operations';\nimport { GqlReceiptType } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\n\n/** @hidden */\nconst doesReceiptHaveMissingOutputVariables = (\n receipt: TransactionResultReceipt\n): receipt is ReceiptRevert =>\n receipt.type === ReceiptType.Revert &&\n receipt.val.toString('hex') === FAILED_TRANSFER_TO_ADDRESS_SIGNAL;\n\n/** @hidden */\nconst doesReceiptHaveMissingContractId = (\n receipt: TransactionResultReceipt\n): receipt is ReceiptPanic =>\n receipt.type === ReceiptType.Panic &&\n receipt.contractId !== '0x0000000000000000000000000000000000000000000000000000000000000000';\n\n/** @hidden */\nexport const getReceiptsWithMissingData = (receipts: Array<TransactionResultReceipt>) =>\n receipts.reduce<{\n missingOutputVariables: Array<ReceiptRevert>;\n missingOutputContractIds: Array<ReceiptPanic>;\n }>(\n (memo, receipt) => {\n if (doesReceiptHaveMissingOutputVariables(receipt)) {\n memo.missingOutputVariables.push(receipt);\n }\n if (doesReceiptHaveMissingContractId(receipt)) {\n memo.missingOutputContractIds.push(receipt);\n }\n return memo;\n },\n {\n missingOutputVariables: [],\n missingOutputContractIds: [],\n }\n );\n\nconst hexOrZero = (hex?: string | null) => hex || ZeroBytes32;\n\nexport function assembleReceiptByType(receipt: GqlReceiptFragmentFragment) {\n const { receiptType } = receipt;\n\n switch (receiptType) {\n case GqlReceiptType.Call: {\n const callReceipt: ReceiptCall = {\n type: ReceiptType.Call,\n from: hexOrZero(receipt.contract?.id),\n to: hexOrZero(receipt?.to?.id),\n amount: bn(receipt.amount),\n assetId: hexOrZero(receipt.assetId),\n gas: bn(receipt.gas),\n param1: bn(receipt.param1),\n param2: bn(receipt.param2),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return callReceipt;\n }\n\n case GqlReceiptType.Return: {\n const returnReceipt: ReceiptReturn = {\n type: ReceiptType.Return,\n id: hexOrZero(receipt.contract?.id),\n val: bn(receipt.val),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return returnReceipt;\n }\n\n case GqlReceiptType.ReturnData: {\n const returnDataReceipt: ReceiptReturnData = {\n type: ReceiptType.ReturnData,\n id: hexOrZero(receipt.contract?.id),\n ptr: bn(receipt.ptr),\n len: bn(receipt.len),\n digest: hexOrZero(receipt.digest),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return returnDataReceipt;\n }\n\n case GqlReceiptType.Panic: {\n const panicReceipt: ReceiptPanic = {\n type: ReceiptType.Panic,\n id: hexOrZero(receipt.contract?.id),\n reason: bn(receipt.reason),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n contractId: hexOrZero(receipt.contractId),\n };\n\n return panicReceipt;\n }\n\n case GqlReceiptType.Revert: {\n const revertReceipt: ReceiptRevert = {\n type: ReceiptType.Revert,\n id: hexOrZero(receipt.contract?.id),\n val: bn(receipt.ra),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n return revertReceipt;\n }\n\n case GqlReceiptType.Log: {\n const logReceipt: ReceiptLog = {\n type: ReceiptType.Log,\n id: hexOrZero(receipt.contract?.id),\n val0: bn(receipt.ra),\n val1: bn(receipt.rb),\n val2: bn(receipt.rc),\n val3: bn(receipt.rd),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return logReceipt;\n }\n\n case GqlReceiptType.LogData: {\n const logDataReceipt: ReceiptLogData = {\n type: ReceiptType.LogData,\n id: hexOrZero(receipt.contract?.id),\n val0: bn(receipt.ra),\n val1: bn(receipt.rb),\n ptr: bn(receipt.ptr),\n len: bn(receipt.len),\n digest: hexOrZero(receipt.digest),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n return logDataReceipt;\n }\n\n case GqlReceiptType.Transfer: {\n const transferReceipt: ReceiptTransfer = {\n type: ReceiptType.Transfer,\n from: hexOrZero(receipt.contract?.id),\n to: hexOrZero(receipt.toAddress || receipt?.to?.id),\n amount: bn(receipt.amount),\n assetId: hexOrZero(receipt.assetId),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return transferReceipt;\n }\n\n case GqlReceiptType.TransferOut: {\n const transferOutReceipt: ReceiptTransferOut = {\n type: ReceiptType.TransferOut,\n from: hexOrZero(receipt.contract?.id),\n to: hexOrZero(receipt.toAddress || receipt.to?.id),\n amount: bn(receipt.amount),\n assetId: hexOrZero(receipt.assetId),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n return transferOutReceipt;\n }\n\n case GqlReceiptType.ScriptResult: {\n const scriptResultReceipt: ReceiptScriptResult = {\n type: ReceiptType.ScriptResult,\n result: bn(receipt.result),\n gasUsed: bn(receipt.gasUsed),\n };\n\n return scriptResultReceipt;\n }\n\n case GqlReceiptType.MessageOut: {\n const sender = hexOrZero(receipt.sender);\n const recipient = hexOrZero(receipt.recipient);\n const nonce = hexOrZero(receipt.nonce);\n const amount = bn(receipt.amount);\n const data = receipt.data ? arrayify(receipt.data) : Uint8Array.from([]);\n const digest = hexOrZero(receipt.digest);\n\n const messageId = ReceiptMessageOutCoder.getMessageId({\n sender,\n recipient,\n nonce,\n amount,\n data,\n });\n\n const receiptMessageOut: ReceiptMessageOut = {\n type: ReceiptType.MessageOut,\n sender,\n recipient,\n amount,\n nonce,\n data,\n digest,\n messageId,\n };\n\n return receiptMessageOut;\n }\n\n case GqlReceiptType.Mint: {\n const contractId = hexOrZero(receipt.contract?.id);\n const subId = hexOrZero(receipt.subId);\n const assetId = ReceiptMintCoder.getAssetId(contractId, subId);\n\n const mintReceipt: ReceiptMint = {\n type: ReceiptType.Mint,\n subId,\n contractId,\n assetId,\n val: bn(receipt.val),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return mintReceipt;\n }\n\n case GqlReceiptType.Burn: {\n const contractId = hexOrZero(receipt.contract?.id);\n const subId = hexOrZero(receipt.subId);\n const assetId = ReceiptBurnCoder.getAssetId(contractId, subId);\n\n const burnReceipt: ReceiptBurn = {\n type: ReceiptType.Burn,\n subId,\n contractId,\n assetId,\n val: bn(receipt.val),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return burnReceipt;\n }\n\n default:\n throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);\n }\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\n\nconst DEFAULT_BLOCK_EXPLORER_URL = 'https://fuellabs.github.io/block-explorer-v2';\n\n/** @hidden */\nconst getPathFromInput = (\n key: BuildBlockExplorerUrlHelperParam,\n value: string | number | undefined\n) => {\n const pathMap = {\n address: `address`,\n txId: `transaction`,\n blockNumber: `block`,\n };\n const path = pathMap[key] || key;\n return `${path}/${value}`;\n};\n\ntype BuildBlockExplorerUrlHelperParam = 'address' | 'txId' | 'blockNumber';\n\n/**\n * @hidden\n *\n * Builds a block explorer url based on and the given path, block explorer URL and provider URL\n */\nexport const buildBlockExplorerUrl = (\n options: {\n blockExplorerUrl?: string;\n path?: string;\n providerUrl?: string;\n address?: string;\n txId?: string;\n blockNumber?: number;\n } = {}\n) => {\n const { blockExplorerUrl, path, providerUrl, address, txId, blockNumber } = options;\n const explorerUrl = blockExplorerUrl || DEFAULT_BLOCK_EXPLORER_URL;\n\n // make sure that only ONE or none of the following is defined: address, txId, blockNumber\n const customInputParams = [\n {\n key: 'address',\n value: address,\n },\n {\n key: 'txId',\n value: txId,\n },\n {\n key: 'blockNumber',\n value: blockNumber,\n },\n ];\n\n const definedValues = customInputParams\n .filter((param) => !!param.value)\n .map(({ key, value }) => ({\n key,\n value,\n }));\n\n const hasAnyDefinedValues = definedValues.length > 0;\n\n if (definedValues.length > 1) {\n throw new FuelError(\n ErrorCode.ERROR_BUILDING_BLOCK_EXPLORER_URL,\n `Only one of the following can be passed in to buildBlockExplorerUrl: ${customInputParams\n .map((param) => param.key)\n .join(', ')}.`\n );\n }\n\n if (path && definedValues.length > 0) {\n const inputKeys = customInputParams.map(({ key }) => key).join(', ');\n throw new FuelError(\n ErrorCode.ERROR_BUILDING_BLOCK_EXPLORER_URL,\n `You cannot pass in a path to 'buildBlockExplorerUrl' along with any of the following: ${inputKeys}.`\n );\n }\n\n const pathGeneratedFromInputParams = hasAnyDefinedValues\n ? getPathFromInput(\n definedValues[0].key as BuildBlockExplorerUrlHelperParam,\n definedValues[0].value\n )\n : '';\n\n // Remove leading and trailing slashes from the path and block explorer url respectively, if present\n const trimSlashes = /^\\/|\\/$/gm;\n const cleanPath = path ? path.replace(trimSlashes, '') : pathGeneratedFromInputParams;\n const cleanBlockExplorerUrl = explorerUrl.replace(trimSlashes, '');\n const cleanProviderUrl = providerUrl?.replace(trimSlashes, '');\n const encodedProviderUrl = cleanProviderUrl ? encodeURIComponent(cleanProviderUrl) : undefined;\n\n // if the block explorer url doesn't have a protocol i.e. http:// or https://, add https://\n const protocol = cleanBlockExplorerUrl.match(/^https?:\\/\\//) ? '' : 'https://';\n const providerUrlProtocol = cleanProviderUrl?.match(/^https?:\\/\\//) ? '' : 'https://';\n\n const url = `${protocol}${cleanBlockExplorerUrl}/${cleanPath}${\n encodedProviderUrl ? `?providerUrl=${providerUrlProtocol}${encodedProviderUrl}` : ''\n }`;\n\n return url;\n};\n","import type { BN, BNInput } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport { ReceiptType, type Input } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlDependentCost, GqlGasCosts } from '../__generated__/operations';\nimport type { TransactionRequestInput } from '../transaction-request';\nimport type {\n TransactionResultReceipt,\n TransactionResultScriptResultReceipt,\n} from '../transaction-response';\n\n/** @hidden */\nexport const calculatePriceWithFactor = (gas: BN, gasPrice: BN, priceFactor: BN): BN =>\n bn(Math.ceil(gas.mul(gasPrice).toNumber() / priceFactor.toNumber()));\n\n/** @hidden */\nexport const getGasUsedFromReceipts = (receipts: Array<TransactionResultReceipt>): BN => {\n const scriptResult = receipts.filter(\n (receipt) => receipt.type === ReceiptType.ScriptResult\n ) as TransactionResultScriptResultReceipt[];\n\n const gasUsed = scriptResult.reduce((prev, receipt) => prev.add(receipt.gasUsed), bn(0));\n\n return gasUsed;\n};\n\nexport function resolveGasDependentCosts(byteSize: BNInput, gasDependentCost: GqlDependentCost) {\n const base = bn(gasDependentCost.base);\n let dependentValue = bn(0);\n if (gasDependentCost.__typename === 'LightOperation') {\n dependentValue = bn(byteSize).div(bn(gasDependentCost.unitsPerGas));\n }\n if (gasDependentCost.__typename === 'HeavyOperation') {\n dependentValue = bn(byteSize).mul(bn(gasDependentCost.gasPerUnit));\n }\n return base.add(dependentValue);\n}\n\nexport function gasUsedByInputs(\n inputs: Array<TransactionRequestInput | Input>,\n txBytesSize: number,\n gasCosts: GqlGasCosts\n) {\n const witnessCache: Array<number> = [];\n const totalGas = inputs.reduce((total, input) => {\n if ('predicate' in input && input.predicate && input.predicate !== '0x') {\n return total.add(\n resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization)\n .add(resolveGasDependentCosts(arrayify(input.predicate).length, gasCosts.contractRoot))\n .add(bn(input.predicateGasUsed))\n );\n }\n if ('witnessIndex' in input && !witnessCache.includes(input.witnessIndex)) {\n witnessCache.push(input.witnessIndex);\n return total.add(gasCosts.ecr1);\n }\n return total;\n }, bn());\n // Never allow gas to exceed MAX_U64\n return totalGas;\n}\n\nexport interface IGetMinGasParams {\n inputs: Array<TransactionRequestInput | Input>;\n gasCosts: GqlGasCosts;\n txBytesSize: number;\n metadataGas: BN;\n gasPerByte: BN;\n}\n\nexport function getMinGas(params: IGetMinGasParams) {\n const { gasCosts, gasPerByte, inputs, metadataGas, txBytesSize } = params;\n\n const vmInitGas = resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization);\n const bytesGas = bn(txBytesSize).mul(gasPerByte);\n const inputsGas = gasUsedByInputs(inputs, txBytesSize, gasCosts);\n\n const minGas = vmInitGas.add(bytesGas).add(inputsGas).add(metadataGas).maxU64();\n\n return minGas;\n}\n\nexport interface IGetMaxGasParams {\n witnessesLength: number;\n witnessLimit?: BN;\n gasPerByte: BN;\n minGas: BN;\n gasLimit?: BN;\n}\n\nexport function getMaxGas(params: IGetMaxGasParams) {\n const { gasPerByte, witnessesLength, witnessLimit, minGas, gasLimit = bn(0) } = params;\n\n let remainingAllowedWitnessGas = bn(0);\n\n if (witnessLimit?.gt(0) && witnessLimit.gte(witnessesLength)) {\n remainingAllowedWitnessGas = bn(witnessLimit).sub(witnessesLength).mul(gasPerByte);\n }\n\n return remainingAllowedWitnessGas.add(minGas).add(gasLimit);\n}\n\nexport function calculateMetadataGasForTxCreate({\n gasCosts,\n stateRootSize,\n txBytesSize,\n contractBytesSize,\n}: {\n gasCosts: GqlGasCosts;\n contractBytesSize: BN;\n stateRootSize: number;\n txBytesSize: number;\n}) {\n const contractRootGas = resolveGasDependentCosts(contractBytesSize, gasCosts.contractRoot);\n const stateRootGas = resolveGasDependentCosts(stateRootSize, gasCosts.stateRoot);\n const txIdGas = resolveGasDependentCosts(txBytesSize, gasCosts.s256);\n // See https://github.com/FuelLabs/fuel-specs/blob/master/src/identifiers/contract-id.md\n const contractIdInputSize = bn(4 + 32 + 32 + 32);\n const contractIdGas = resolveGasDependentCosts(contractIdInputSize, gasCosts.s256);\n const metadataGas = contractRootGas.add(stateRootGas).add(txIdGas).add(contractIdGas);\n return metadataGas.maxU64();\n}\n\nexport function calculateMetadataGasForTxScript({\n gasCosts,\n txBytesSize,\n}: {\n gasCosts: GqlGasCosts;\n txBytesSize: number;\n}) {\n return resolveGasDependentCosts(txBytesSize, gasCosts.s256);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-param-reassign */\nimport { hexlify } from '@fuel-ts/utils';\nimport { clone } from 'ramda';\n\n// When parsing a Transaction to JSON we need\n// to convert special types into each respective\n// JSON friendly value. This enables a tx to be\n// stringified and parsed back into a Transaction\n/** @hidden */\nfunction normalize(object: any) {\n Object.keys(object).forEach((key) => {\n switch (object[key]?.constructor.name) {\n case 'Uint8Array':\n object[key] = hexlify(object[key]);\n break;\n case 'Array':\n object[key] = normalize(object[key]);\n break;\n case 'BN':\n object[key] = object[key].toHex();\n break;\n case 'Address':\n object[key] = object[key].toB256();\n break;\n case 'Object':\n object[key] = normalize(object[key]);\n break;\n default:\n break;\n }\n });\n return object;\n}\n\n/**\n * Stringify Transaction to a JSON object\n * compatible with the Transaction class constructor.\n */\n/** @hidden */\nexport function normalizeJSON(root: any) {\n // Do a single deep clone before normalizing\n // to avoid mutating the original object\n // and doing extra clones on each iteration\n return normalize(clone(root));\n}\n","/** @hidden */\nexport function sleep(time: number) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true);\n }, time);\n });\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport type { ReceiptRevert } from '@fuel-ts/transactions';\nimport { ReceiptType } from '@fuel-ts/transactions';\nimport {\n FAILED_REQUIRE_SIGNAL,\n FAILED_ASSERT_EQ_SIGNAL,\n FAILED_ASSERT_NE_SIGNAL,\n FAILED_ASSERT_SIGNAL,\n FAILED_TRANSFER_TO_ADDRESS_SIGNAL,\n PANIC_REASONS,\n PANIC_DOC_URL,\n} from '@fuel-ts/transactions/configs';\n\nimport type { GqlTransactionStatusFragmentFragment } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\nimport type { FailureStatus } from '../transaction-summary';\n\n/**\n * Assembles an error message for a panic status.\n * @param status - The transaction failure status.\n * @returns The error message.\n */\nexport const assemblePanicError = (status: FailureStatus) => {\n let errorMessage = `The transaction reverted with reason: \"${status.reason}\".`;\n const reason = status.reason;\n\n if (PANIC_REASONS.includes(status.reason)) {\n errorMessage = `${errorMessage}\\n\\nYou can read more about this error at:\\n\\n${PANIC_DOC_URL}#variant.${status.reason}`;\n }\n\n return { errorMessage, reason };\n};\n\n/** @hidden */\nconst stringify = (obj: unknown) => JSON.stringify(obj, null, 2);\n\n/**\n * Assembles an error message for a revert status.\n * @param receipts - The transaction result processed receipts.\n * @param logs - The transaction decoded logs.\n * @returns The error message.\n */\nexport const assembleRevertError = (\n receipts: Array<TransactionResultReceipt>,\n logs: Array<unknown>\n) => {\n let errorMessage = 'The transaction reverted with an unknown reason.';\n\n const revertReceipt = receipts.find(({ type }) => type === ReceiptType.Revert) as ReceiptRevert;\n let reason = '';\n\n if (revertReceipt) {\n const reasonHex = bn(revertReceipt.val).toHex();\n\n switch (reasonHex) {\n case FAILED_REQUIRE_SIGNAL: {\n reason = 'require';\n errorMessage = `The transaction reverted because a \"require\" statement has thrown ${\n logs.length ? stringify(logs[0]) : 'an error.'\n }.`;\n break;\n }\n\n case FAILED_ASSERT_EQ_SIGNAL: {\n const sufix =\n logs.length >= 2 ? ` comparing ${stringify(logs[1])} and ${stringify(logs[0])}.` : '.';\n\n reason = 'assert_eq';\n errorMessage = `The transaction reverted because of an \"assert_eq\" statement${sufix}`;\n break;\n }\n\n case FAILED_ASSERT_NE_SIGNAL: {\n const sufix =\n logs.length >= 2 ? ` comparing ${stringify(logs[1])} and ${stringify(logs[0])}.` : '.';\n\n reason = 'assert_ne';\n errorMessage = `The transaction reverted because of an \"assert_ne\" statement${sufix}`;\n break;\n }\n\n case FAILED_ASSERT_SIGNAL:\n reason = 'assert';\n errorMessage = `The transaction reverted because an \"assert\" statement failed to evaluate to true.`;\n break;\n\n case FAILED_TRANSFER_TO_ADDRESS_SIGNAL:\n reason = 'MissingOutputChange';\n errorMessage = `The transaction reverted because it's missing an \"OutputChange\".`;\n break;\n\n default:\n reason = 'unknown';\n errorMessage = `The transaction reverted with an unknown reason: ${revertReceipt.val}`;\n }\n }\n\n return { errorMessage, reason };\n};\n\ninterface IExtractTxError {\n receipts: Array<TransactionResultReceipt>;\n status?: GqlTransactionStatusFragmentFragment | null;\n logs: Array<unknown>;\n}\n\n/**\n * Extracts the transaction error and returns a FuelError object.\n * @param IExtractTxError - The parameters for extracting the error.\n * @returns The FuelError object.\n */\nexport const extractTxError = (params: IExtractTxError): FuelError => {\n const { receipts, status, logs } = params;\n\n const isPanic = receipts.some(({ type }) => type === ReceiptType.Panic);\n const isRevert = receipts.some(({ type }) => type === ReceiptType.Revert);\n\n const { errorMessage, reason } =\n status?.type === 'FailureStatus' && isPanic\n ? assemblePanicError(status)\n : assembleRevertError(receipts, logs);\n\n const metadata = {\n logs,\n receipts,\n panic: isPanic,\n revert: isRevert,\n reason,\n };\n\n return new FuelError(ErrorCode.SCRIPT_REVERTED, errorMessage, metadata);\n};\n","/* eslint-disable max-classes-per-file */\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\n\n/**\n * @hidden\n */\nexport class ChangeOutputCollisionError extends Error {\n name = 'ChangeOutputCollisionError';\n message = 'A ChangeOutput with the same \"assetId\" already exists for a different \"to\" address';\n}\n\n/**\n * @hidden\n */\nexport class NoWitnessAtIndexError extends Error {\n name = 'NoWitnessAtIndexError';\n constructor(public readonly index: number) {\n super();\n this.message = `Witness at index \"${index}\" was not found`;\n }\n}\n\n/**\n * @hidden\n */\nexport class NoWitnessByOwnerError extends Error {\n name = 'NoWitnessByOwnerError';\n constructor(public readonly owner: AbstractAddress) {\n super();\n this.message = `A witness for the given owner \"${owner}\" was not found`;\n }\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\nimport type { Witness } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nexport type TransactionRequestWitness = BytesLike;\n\nexport const witnessify = (value: TransactionRequestWitness): Witness => {\n const data = arrayify(value);\n\n return {\n data: hexlify(data),\n dataLength: data.length,\n };\n};\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { bn, type BN } from '@fuel-ts/math';\nimport type { TransactionCreate } from '@fuel-ts/transactions';\nimport { TransactionType, OutputType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport { calculateMetadataGasForTxCreate } from '../utils/gas';\n\nimport { hashTransaction } from './hash-transaction';\nimport type { ContractCreatedTransactionRequestOutput } from './output';\nimport type { TransactionRequestStorageSlot } from './storage-slot';\nimport { storageSlotify } from './storage-slot';\nimport { BaseTransactionRequest } from './transaction-request';\nimport type { BaseTransactionRequestLike } from './transaction-request';\n\n/**\n * @hidden\n */\nexport interface CreateTransactionRequestLike extends BaseTransactionRequestLike {\n /** Witness index of contract bytecode to create */\n bytecodeWitnessIndex?: number;\n /** Salt */\n salt?: BytesLike;\n /** List of storage slots to initialize */\n storageSlots?: TransactionRequestStorageSlot[];\n}\n\n/**\n * `CreateTransactionRequest` provides functionalities for creating a transaction request that creates a contract.\n */\nexport class CreateTransactionRequest extends BaseTransactionRequest {\n static from(obj: CreateTransactionRequestLike) {\n if (obj instanceof this) {\n return obj;\n }\n return new this(obj);\n }\n\n /** Type of the transaction */\n type = TransactionType.Create as const;\n /** Witness index of contract bytecode to create */\n bytecodeWitnessIndex: number;\n /** Salt */\n salt: string;\n /** List of storage slots to initialize */\n storageSlots: TransactionRequestStorageSlot[];\n\n /**\n * Creates an instance `CreateTransactionRequest`.\n *\n * @param createTransactionRequestLike - The initial values for the instance\n */\n constructor({\n bytecodeWitnessIndex,\n salt,\n storageSlots,\n ...rest\n }: CreateTransactionRequestLike = {}) {\n super(rest);\n this.bytecodeWitnessIndex = bytecodeWitnessIndex ?? 0;\n this.salt = hexlify(salt ?? ZeroBytes32);\n this.storageSlots = [...(storageSlots ?? [])];\n }\n\n /**\n * Converts the transaction request to a `TransactionCreate`.\n *\n * @returns The transaction create object.\n */\n toTransaction(): TransactionCreate {\n const baseTransaction = this.getBaseTransaction();\n const bytecodeWitnessIndex = this.bytecodeWitnessIndex;\n const storageSlots = this.storageSlots?.map(storageSlotify) ?? [];\n return {\n type: TransactionType.Create,\n ...baseTransaction,\n bytecodeLength: baseTransaction.witnesses[bytecodeWitnessIndex].dataLength / 4,\n bytecodeWitnessIndex,\n storageSlotsCount: storageSlots.length,\n salt: this.salt ? hexlify(this.salt) : ZeroBytes32,\n storageSlots,\n };\n }\n\n /**\n * Get contract created outputs for the transaction.\n *\n * @returns An array of contract created transaction request outputs.\n */\n getContractCreatedOutputs(): ContractCreatedTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is ContractCreatedTransactionRequestOutput =>\n output.type === OutputType.ContractCreated\n );\n }\n\n /**\n * Gets the Transaction Request by hashing the transaction.\n *\n * @param chainId - The chain ID.\n *\n * @returns - A hash of the transaction, which is the transaction ID.\n */\n getTransactionId(chainId: number): string {\n return hashTransaction(this, chainId);\n }\n\n /**\n * Adds a contract created output to the transaction request.\n *\n * @param contractId - The contract ID.\n * @param stateRoot - The state root.\n */\n addContractCreatedOutput(\n /** Contract ID */\n contractId: BytesLike,\n /** State Root */\n stateRoot: BytesLike\n ) {\n this.pushOutput({\n type: OutputType.ContractCreated,\n contractId,\n stateRoot,\n });\n }\n\n metadataGas(gasCosts: GqlGasCosts): BN {\n return calculateMetadataGasForTxCreate({\n contractBytesSize: bn(arrayify(this.witnesses[this.bytecodeWitnessIndex] || '0x').length),\n gasCosts,\n stateRootSize: this.storageSlots.length,\n txBytesSize: this.byteSize(),\n });\n }\n}\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { uint64ToBytesBE, sha256 } from '@fuel-ts/hasher';\nimport { bn } from '@fuel-ts/math';\nimport { TransactionType, InputType, OutputType, TransactionCoder } from '@fuel-ts/transactions';\nimport { concat } from '@fuel-ts/utils';\nimport { clone } from 'ramda';\n\nimport type { TransactionRequest } from './types';\n\n/**\n * Hash transaction request with sha256. [Read more](https://github.com/FuelLabs/fuel-specs/blob/master/specs/protocol/identifiers.md#transaction-id)\n *\n * @param transactionRequest - Transaction request to be hashed\n * @returns sha256 hash of the transaction\n */\nexport function hashTransaction(transactionRequest: TransactionRequest, chainId: number) {\n const transaction = transactionRequest.toTransaction();\n\n if (transaction.type === TransactionType.Script) {\n transaction.receiptsRoot = ZeroBytes32;\n }\n\n // Zero out input fields\n transaction.inputs = transaction.inputs.map((input) => {\n const inputClone = clone(input);\n\n switch (inputClone.type) {\n // Zero out on signing: txPointer, predicateGasUsed\n case InputType.Coin: {\n inputClone.txPointer = {\n blockHeight: 0,\n txIndex: 0,\n };\n inputClone.predicateGasUsed = bn(0);\n return inputClone;\n }\n // Zero out on signing: predicateGasUsed\n case InputType.Message: {\n inputClone.predicateGasUsed = bn(0);\n return inputClone;\n }\n // Zero out on signing: txID, outputIndex, balanceRoot, stateRoot, and txPointer\n case InputType.Contract: {\n inputClone.txPointer = {\n blockHeight: 0,\n txIndex: 0,\n };\n inputClone.txID = ZeroBytes32;\n inputClone.outputIndex = 0;\n inputClone.balanceRoot = ZeroBytes32;\n inputClone.stateRoot = ZeroBytes32;\n return inputClone;\n }\n default:\n return inputClone;\n }\n });\n // Zero out output fields\n transaction.outputs = transaction.outputs.map((output) => {\n const outputClone = clone(output);\n\n switch (outputClone.type) {\n // Zero out on signing: balanceRoot, stateRoot\n case OutputType.Contract: {\n outputClone.balanceRoot = ZeroBytes32;\n outputClone.stateRoot = ZeroBytes32;\n return outputClone;\n }\n // Zero out on signing: amount\n case OutputType.Change: {\n outputClone.amount = bn(0);\n return outputClone;\n }\n // Zero out on signing: amount, to and assetId\n case OutputType.Variable: {\n outputClone.to = ZeroBytes32;\n outputClone.amount = bn(0);\n outputClone.assetId = ZeroBytes32;\n return outputClone;\n }\n default:\n return outputClone;\n }\n });\n transaction.witnessesCount = 0;\n transaction.witnesses = [];\n\n const chainIdBytes = uint64ToBytesBE(chainId);\n const concatenatedData = concat([chainIdBytes, new TransactionCoder().encode(transaction)]);\n return sha256(concatenatedData);\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\nimport type { StorageSlot } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nexport type TransactionRequestStorageSlot =\n | {\n /** Key */\n key: BytesLike;\n /** Value */\n value: BytesLike;\n }\n | [key: BytesLike, value: BytesLike];\n\n// Make sure all values have 32 bytes\nconst getStorageValue = (value: BytesLike): Uint8Array => {\n const v = new Uint8Array(32);\n v.set(arrayify(value));\n return v;\n};\n\nexport const storageSlotify = (storageSlot: TransactionRequestStorageSlot): StorageSlot => {\n let key;\n let value;\n\n if (Array.isArray(storageSlot)) {\n key = storageSlot[0];\n value = storageSlot[1];\n } else {\n key = storageSlot.key;\n value = storageSlot.value;\n }\n\n return {\n key: hexlify(key),\n value: hexlify(getStorageValue(value)),\n };\n};\n","import type { InputValue, JsonAbi } from '@fuel-ts/abi-coder';\nimport { Interface } from '@fuel-ts/abi-coder';\nimport { addressify } from '@fuel-ts/address';\nimport { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport type { AbstractScriptRequest, ContractIdLike, BytesLike } from '@fuel-ts/interfaces';\nimport { bn } from '@fuel-ts/math';\nimport type { BN, BigNumberish } from '@fuel-ts/math';\nimport type { TransactionScript } from '@fuel-ts/transactions';\nimport { InputType, OutputType, TransactionType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport type { ChainInfo } from '../provider';\nimport { calculateMetadataGasForTxScript, getMaxGas } from '../utils/gas';\n\nimport { hashTransaction } from './hash-transaction';\nimport type { ContractTransactionRequestInput } from './input';\nimport type { ContractTransactionRequestOutput, VariableTransactionRequestOutput } from './output';\nimport { returnZeroScript } from './scripts';\nimport type { BaseTransactionRequestLike } from './transaction-request';\nimport { BaseTransactionRequest } from './transaction-request';\nimport type { JsonAbisFromAllCalls } from './types';\n\n/**\n * @hidden\n */\nexport interface ScriptTransactionRequestLike extends BaseTransactionRequestLike {\n /** Gas limit for transaction */\n gasLimit?: BigNumberish;\n /** Script to execute */\n script?: BytesLike;\n /** Script input data (parameters) */\n scriptData?: BytesLike;\n\n abis?: JsonAbisFromAllCalls;\n}\n\n/**\n * `ScriptTransactionRequest` provides functionalities for creating a transaction request that uses a script.\n */\nexport class ScriptTransactionRequest extends BaseTransactionRequest {\n static from(obj: ScriptTransactionRequestLike) {\n if (obj instanceof this) {\n return obj;\n }\n return new this(obj);\n }\n\n /** Type of the transaction */\n type = TransactionType.Script as const;\n /** Gas limit for transaction */\n gasLimit: BN;\n /** Script to execute */\n script: Uint8Array;\n /** Script input data (parameters) */\n scriptData: Uint8Array;\n\n abis?: JsonAbisFromAllCalls;\n\n /**\n * Constructor for `ScriptTransactionRequest`.\n *\n * @param scriptTransactionRequestLike - The initial values for the instance.\n */\n constructor({ script, scriptData, gasLimit, ...rest }: ScriptTransactionRequestLike = {}) {\n super(rest);\n this.gasLimit = bn(gasLimit);\n this.script = arrayify(script ?? returnZeroScript.bytes);\n this.scriptData = arrayify(scriptData ?? returnZeroScript.encodeScriptData());\n this.abis = rest.abis;\n }\n\n /**\n * Converts the transaction request to a `TransactionScript`.\n *\n * @returns The transaction script object.\n */\n toTransaction(): TransactionScript {\n const script = arrayify(this.script ?? '0x');\n const scriptData = arrayify(this.scriptData ?? '0x');\n return {\n type: TransactionType.Script,\n scriptGasLimit: this.gasLimit,\n ...super.getBaseTransaction(),\n scriptLength: script.length,\n scriptDataLength: scriptData.length,\n receiptsRoot: ZeroBytes32,\n script: hexlify(script),\n scriptData: hexlify(scriptData),\n };\n }\n\n /**\n * Get contract inputs for the transaction.\n *\n * @returns An array of contract transaction request inputs.\n */\n getContractInputs(): ContractTransactionRequestInput[] {\n return this.inputs.filter(\n (input): input is ContractTransactionRequestInput => input.type === InputType.Contract\n );\n }\n\n /**\n * Get contract outputs for the transaction.\n *\n * @returns An array of contract transaction request outputs.\n */\n getContractOutputs(): ContractTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is ContractTransactionRequestOutput => output.type === OutputType.Contract\n );\n }\n\n /**\n * Get variable outputs for the transaction.\n *\n * @returns An array of variable transaction request outputs.\n */\n getVariableOutputs(): VariableTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is VariableTransactionRequestOutput => output.type === OutputType.Variable\n );\n }\n\n /**\n * Set the script and its data.\n *\n * @param script - The abstract script request.\n * @param data - The script data.\n */\n setScript<T>(script: AbstractScriptRequest<T>, data: T) {\n this.scriptData = script.encodeScriptData(data);\n this.script = script.bytes;\n }\n\n /**\n * Adds variable outputs to the transaction request.\n *\n * @param numberOfVariables - The number of variables to add.\n * @returns The new length of the outputs array.\n */\n addVariableOutputs(numberOfVariables: number = 1) {\n let outputsNumber = numberOfVariables;\n\n while (outputsNumber) {\n this.pushOutput({\n type: OutputType.Variable,\n });\n outputsNumber -= 1;\n }\n\n return this.outputs.length - 1;\n }\n\n calculateMaxGas(chainInfo: ChainInfo, minGas: BN): BN {\n const { consensusParameters } = chainInfo;\n const { gasPerByte } = consensusParameters;\n\n const witnessesLength = this.toTransaction().witnesses.reduce(\n (acc, wit) => acc + wit.dataLength,\n 0\n );\n\n return getMaxGas({\n gasPerByte,\n minGas,\n witnessesLength,\n witnessLimit: this.witnessLimit,\n gasLimit: this.gasLimit,\n });\n }\n\n /**\n * Adds a contract input and output to the transaction request.\n *\n * @param contract - The contract ID.\n * @returns The current instance of the `ScriptTransactionRequest`.\n */\n addContractInputAndOutput(contract: ContractIdLike): ScriptTransactionRequest {\n const contractAddress = addressify(contract);\n\n // Add only one input contract per contractId\n if (this.getContractInputs().find((i) => i.contractId === contractAddress.toB256())) {\n return this;\n }\n\n const inputIndex = super.pushInput({\n type: InputType.Contract,\n contractId: contractAddress.toB256(),\n txPointer: '0x00000000000000000000000000000000',\n });\n\n this.pushOutput({\n type: OutputType.Contract,\n inputIndex,\n });\n\n return this;\n }\n\n /**\n * Gets the Transaction Request by hashing the transaction.\n *\n * @param chainId - The chain ID.\n *\n * @returns - A hash of the transaction, which is the transaction ID.\n */\n getTransactionId(chainId: number): string {\n return hashTransaction(this, chainId);\n }\n\n /**\n * Sets the data for the transaction request.\n *\n * @param abi - Script JSON ABI.\n * @param args - The input arguments.\n * @returns The current instance of the `ScriptTransactionRequest`.\n */\n setData(abi: JsonAbi, args: InputValue[]): ScriptTransactionRequest {\n const abiInterface = new Interface(abi);\n this.scriptData = abiInterface.functions.main.encodeArguments(args);\n return this;\n }\n\n metadataGas(gasCosts: GqlGasCosts): BN {\n return calculateMetadataGasForTxScript({\n gasCosts,\n txBytesSize: this.byteSize(),\n });\n }\n}\n","import type { AbstractScriptRequest } from '@fuel-ts/interfaces';\nimport { arrayify } from '@fuel-ts/utils';\n\n// We can't import this from `@fuel-ts/script` because it causes\n// cyclic dependency errors so we duplicate it here.\n/** @hidden */\nexport const returnZeroScript: AbstractScriptRequest<void> = {\n /*\n Opcode::RET(REG_ZERO)\n Opcode::NOOP\n */\n // TODO: Don't use hardcoded scripts: https://github.com/FuelLabs/fuels-ts/issues/281\n bytes: arrayify('0x24000000'),\n encodeScriptData: () => new Uint8Array(0),\n};\n\n/** @hidden */\nexport const withdrawScript: AbstractScriptRequest<void> = {\n /*\n The following code loads some basic values into registers and calls SMO to create an output message\n 5040C010 \t- ADDI r16 $is i16 [r16 now points to memory 16 bytes from the start of this program (start of receiver data)]\n 5D44C006\t- LW r17 $is i6 [r17 set to the 6th word in this program (6*8=48 bytes from the start of this program)]\n 4C400011\t- SMO r16 r0 r0 r17 [send message out to address starting at memory position r16 with amount in r17]\n 24000000\t- RET [return 0]\n 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [recipient address]\n 00000000 00000000 [amount value]\n */\n // TODO: Don't use hardcoded scripts: https://github.com/FuelLabs/fuels-ts/issues/281\n bytes: arrayify('0x5040C0105D44C0064C40001124000000'),\n encodeScriptData: () => new Uint8Array(0),\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { TransactionType } from '@fuel-ts/transactions';\n\nimport { CreateTransactionRequest } from './create-transaction-request';\nimport { ScriptTransactionRequest } from './script-transaction-request';\nimport type { TransactionRequestLike, TransactionRequest } from './types';\n\n/** @hidden */\nexport const transactionRequestify = (obj: TransactionRequestLike): TransactionRequest => {\n if (obj instanceof ScriptTransactionRequest || obj instanceof CreateTransactionRequest) {\n return obj;\n }\n\n const { type } = obj;\n\n switch (obj.type) {\n case TransactionType.Script: {\n return ScriptTransactionRequest.from(obj);\n }\n case TransactionType.Create: {\n return CreateTransactionRequest.from(obj);\n }\n default: {\n throw new FuelError(ErrorCode.INVALID_TRANSACTION_TYPE, `Invalid transaction type: ${type}.`);\n }\n }\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type {\n ReceiptCall,\n ReceiptLog,\n ReceiptLogData,\n ReceiptPanic,\n ReceiptReturn,\n ReceiptReturnData,\n ReceiptRevert,\n ReceiptTransfer,\n ReceiptTransferOut,\n ReceiptScriptResult,\n ReceiptMessageOut,\n Transaction,\n ReceiptMint,\n ReceiptBurn,\n} from '@fuel-ts/transactions';\nimport { TransactionCoder } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type Provider from '../provider';\nimport type { JsonAbisFromAllCalls } from '../transaction-request';\nimport { assembleTransactionSummary } from '../transaction-summary/assemble-transaction-summary';\nimport { processGqlReceipt } from '../transaction-summary/receipt';\nimport type { TransactionSummary, GqlTransaction, AbiMap } from '../transaction-summary/types';\nimport { extractTxError } from '../utils';\n\nimport { getDecodedLogs } from './getDecodedLogs';\n\n/** @hidden */\nexport type TransactionResultCallReceipt = ReceiptCall;\n/** @hidden */\nexport type TransactionResultReturnReceipt = ReceiptReturn;\n/** @hidden */\nexport type TransactionResultReturnDataReceipt = ReceiptReturnData & { data: string };\n/** @hidden */\nexport type TransactionResultPanicReceipt = ReceiptPanic;\n/** @hidden */\nexport type TransactionResultRevertReceipt = ReceiptRevert;\n/** @hidden */\nexport type TransactionResultLogReceipt = ReceiptLog;\n/** @hidden */\nexport type TransactionResultLogDataReceipt = ReceiptLogData & { data: string };\n/** @hidden */\nexport type TransactionResultTransferReceipt = ReceiptTransfer;\n/** @hidden */\nexport type TransactionResultTransferOutReceipt = ReceiptTransferOut;\n/** @hidden */\nexport type TransactionResultScriptResultReceipt = ReceiptScriptResult;\n/** @hidden */\nexport type TransactionResultMessageOutReceipt = ReceiptMessageOut;\nexport type TransactionResultMintReceipt = ReceiptMint;\nexport type TransactionResultBurnReceipt = ReceiptBurn;\n\n/** @hidden */\nexport type TransactionResultReceipt =\n | ReceiptCall\n | ReceiptReturn\n | (ReceiptReturnData & { data: string })\n | ReceiptPanic\n | ReceiptRevert\n | ReceiptLog\n | (ReceiptLogData & { data: string })\n | ReceiptTransfer\n | ReceiptTransferOut\n | ReceiptScriptResult\n | ReceiptMessageOut\n | TransactionResultMintReceipt\n | TransactionResultBurnReceipt;\n\n/** @hidden */\nexport type TransactionResult<TTransactionType = void> = TransactionSummary<TTransactionType> & {\n gqlTransaction: GqlTransaction;\n logs?: Array<unknown>;\n};\n\n/**\n * Represents a response for a transaction.\n */\nexport class TransactionResponse {\n /** Transaction ID */\n id: string;\n /** Current provider */\n provider: Provider;\n /** Gas used on the transaction */\n gasUsed: BN = bn(0);\n /** The graphql Transaction with receipts object. */\n gqlTransaction?: GqlTransaction;\n\n abis?: JsonAbisFromAllCalls;\n\n /**\n * Constructor for `TransactionResponse`.\n *\n * @param id - The transaction ID.\n * @param provider - The provider.\n */\n constructor(id: string, provider: Provider, abis?: JsonAbisFromAllCalls) {\n this.id = id;\n this.provider = provider;\n this.abis = abis;\n }\n\n /**\n * Async constructor for `TransactionResponse`. This method can be used to create\n * an instance of `TransactionResponse` and wait for the transaction to be fetched\n * from the chain, ensuring that the `gqlTransaction` property is set.\n *\n * @param id - The transaction ID.\n * @param provider - The provider.\n */\n static async create(\n id: string,\n provider: Provider,\n abis?: JsonAbisFromAllCalls\n ): Promise<TransactionResponse> {\n const response = new TransactionResponse(id, provider, abis);\n await response.fetch();\n return response;\n }\n\n /**\n * Fetch the transaction with receipts from the provider.\n *\n * @returns Transaction with receipts query result.\n */\n async fetch(): Promise<GqlTransaction> {\n const response = await this.provider.operations.getTransactionWithReceipts({\n transactionId: this.id,\n });\n\n if (!response.transaction) {\n const subscription = this.provider.operations.statusChange({\n transactionId: this.id,\n });\n\n for await (const { statusChange } of subscription) {\n if (statusChange) {\n break;\n }\n }\n\n return this.fetch();\n }\n\n this.gqlTransaction = response.transaction;\n\n return response.transaction;\n }\n\n /**\n * Decode the raw payload of the transaction.\n *\n * @param transactionWithReceipts - The transaction with receipts object.\n * @returns The decoded transaction.\n */\n decodeTransaction<TTransactionType = void>(transactionWithReceipts: GqlTransaction) {\n return new TransactionCoder().decode(\n arrayify(transactionWithReceipts.rawPayload),\n 0\n )?.[0] as Transaction<TTransactionType>;\n }\n\n /**\n * Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will\n * fetch it from the provider\n *\n * @param contractsAbiMap - The contracts ABI map.\n * @returns\n */\n async getTransactionSummary<TTransactionType = void>(\n contractsAbiMap?: AbiMap\n ): Promise<TransactionSummary<TTransactionType>> {\n let transaction = this.gqlTransaction;\n\n if (!transaction) {\n transaction = await this.fetch();\n }\n\n const decodedTransaction = this.decodeTransaction<TTransactionType>(\n transaction\n ) as Transaction<TTransactionType>;\n\n const receipts = transaction.receipts?.map(processGqlReceipt) || [];\n\n const { gasPerByte, gasPriceFactor, gasCosts } = this.provider.getGasConfig();\n const maxInputs = this.provider.getChain().consensusParameters.maxInputs;\n\n const transactionSummary = assembleTransactionSummary<TTransactionType>({\n id: this.id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: arrayify(transaction.rawPayload),\n gqlTransactionStatus: transaction.status,\n gasPerByte,\n gasPriceFactor,\n abiMap: contractsAbiMap,\n maxInputs,\n gasCosts,\n });\n\n return transactionSummary;\n }\n\n private async waitForStatusChange() {\n const status = this.gqlTransaction?.status?.type;\n if (status && status !== 'SubmittedStatus') {\n return;\n }\n\n const subscription = this.provider.operations.statusChange({\n transactionId: this.id,\n });\n\n for await (const { statusChange } of subscription) {\n if (statusChange.type === 'SqueezedOutStatus') {\n throw new FuelError(\n ErrorCode.TRANSACTION_SQUEEZED_OUT,\n `Transaction Squeezed Out with reason: ${statusChange.reason}`\n );\n }\n if (statusChange.type !== 'SubmittedStatus') {\n break;\n }\n }\n\n await this.fetch();\n }\n\n /**\n * Waits for transaction to complete and returns the result.\n *\n * @returns The completed transaction result\n */\n async waitForResult<TTransactionType = void>(\n contractsAbiMap?: AbiMap\n ): Promise<TransactionResult<TTransactionType>> {\n await this.waitForStatusChange();\n\n const transactionSummary = await this.getTransactionSummary<TTransactionType>(contractsAbiMap);\n\n const transactionResult: TransactionResult<TTransactionType> = {\n gqlTransaction: this.gqlTransaction as GqlTransaction,\n ...transactionSummary,\n };\n\n let logs: Array<unknown> = [];\n\n if (this.abis) {\n logs = getDecodedLogs(\n transactionSummary.receipts,\n this.abis.main,\n this.abis.otherContractsAbis\n );\n\n transactionResult.logs = logs;\n }\n\n if (transactionResult.isStatusFailure) {\n const {\n receipts,\n gqlTransaction: { status },\n } = transactionResult;\n\n throw extractTxError({\n receipts,\n status,\n logs,\n });\n }\n\n return transactionResult;\n }\n\n /**\n * Waits for transaction to complete and returns the result.\n *\n * @param contractsAbiMap - The contracts ABI map.\n */\n async wait<TTransactionType = void>(\n contractsAbiMap?: AbiMap\n ): Promise<TransactionResult<TTransactionType>> {\n return this.waitForResult<TTransactionType>(contractsAbiMap);\n }\n}\n","import { type BN } from '@fuel-ts/math';\nimport { type Transaction } from '@fuel-ts/transactions';\nimport { DateTime, hexlify } from '@fuel-ts/utils';\n\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\nimport { getGasUsedFromReceipts } from '../utils';\n\nimport { calculateTransactionFee } from './calculate-transaction-fee';\nimport {\n getOperations,\n getTransactionTypeName,\n isTypeMint,\n isTypeCreate,\n isTypeScript,\n} from './operations';\nimport { extractBurnedAssetsFromReceipts, extractMintedAssetsFromReceipts } from './receipt';\nimport { processGraphqlStatus } from './status';\nimport type { AbiMap, GraphqlTransactionStatus, TransactionSummary } from './types';\n\nexport interface AssembleTransactionSummaryParams {\n gasPerByte: BN;\n gasPriceFactor: BN;\n transaction: Transaction;\n id?: string;\n transactionBytes: Uint8Array;\n gqlTransactionStatus?: GraphqlTransactionStatus;\n receipts: TransactionResultReceipt[];\n abiMap?: AbiMap;\n maxInputs: BN;\n gasCosts: GqlGasCosts;\n}\n\n/** @hidden */\nexport function assembleTransactionSummary<TTransactionType = void>(\n params: AssembleTransactionSummaryParams\n) {\n const {\n id,\n receipts,\n gasPerByte,\n gasPriceFactor,\n transaction,\n transactionBytes,\n gqlTransactionStatus,\n abiMap = {},\n maxInputs,\n gasCosts,\n } = params;\n\n const gasUsed = getGasUsedFromReceipts(receipts);\n\n const rawPayload = hexlify(transactionBytes);\n\n const operations = getOperations({\n transactionType: transaction.type,\n inputs: transaction.inputs || [],\n outputs: transaction.outputs || [],\n receipts,\n rawPayload,\n abiMap,\n maxInputs,\n });\n\n const typeName = getTransactionTypeName(transaction.type);\n\n const { fee } = calculateTransactionFee({\n gasUsed,\n rawPayload,\n consensusParameters: {\n gasCosts,\n feeParams: {\n gasPerByte,\n gasPriceFactor,\n },\n },\n });\n\n const { isStatusFailure, isStatusPending, isStatusSuccess, blockId, status, time } =\n processGraphqlStatus(gqlTransactionStatus);\n\n const mintedAssets = extractMintedAssetsFromReceipts(receipts);\n const burnedAssets = extractBurnedAssetsFromReceipts(receipts);\n\n let date: DateTime | undefined;\n\n if (time) {\n date = DateTime.fromTai64(time);\n }\n\n const transactionSummary: TransactionSummary<TTransactionType> = {\n id,\n fee,\n gasUsed,\n operations,\n type: typeName,\n blockId,\n time,\n status,\n receipts,\n mintedAssets,\n burnedAssets,\n isTypeMint: isTypeMint(transaction.type),\n isTypeCreate: isTypeCreate(transaction.type),\n isTypeScript: isTypeScript(transaction.type),\n isStatusFailure,\n isStatusSuccess,\n isStatusPending,\n date,\n transaction: transaction as Transaction<TTransactionType>,\n };\n\n return transactionSummary;\n}\n","import type { BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { TransactionCreate, TransactionScript } from '@fuel-ts/transactions';\nimport { PolicyType, TransactionCoder, TransactionType } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlConsensusParameters, GqlFeeParameters } from '../__generated__/operations';\nimport { calculatePriceWithFactor } from '../utils';\nimport {\n calculateMetadataGasForTxCreate,\n calculateMetadataGasForTxScript,\n getMaxGas,\n getMinGas,\n} from '../utils/gas';\n\ntype FeeParams =\n | Pick<GqlFeeParameters, 'gasPerByte' | 'gasPriceFactor'>\n | {\n gasPerByte: BN | number;\n gasPriceFactor: BN | number;\n };\n\nexport type CalculateTransactionFeeParams = {\n gasUsed: BN;\n rawPayload: string;\n consensusParameters: Pick<GqlConsensusParameters, 'gasCosts'> & { feeParams: FeeParams };\n};\n\nexport const calculateTransactionFee = (params: CalculateTransactionFeeParams) => {\n const {\n gasUsed,\n rawPayload,\n consensusParameters: { gasCosts, feeParams },\n } = params;\n\n const gasPerByte = bn(feeParams.gasPerByte);\n const gasPriceFactor = bn(feeParams.gasPriceFactor);\n\n const transactionBytes = arrayify(rawPayload);\n\n const [transaction] = new TransactionCoder().decode(transactionBytes, 0);\n\n if (transaction.type === TransactionType.Mint) {\n return {\n fee: bn(0),\n minFee: bn(0),\n maxFee: bn(0),\n feeFromGasUsed: bn(0),\n };\n }\n\n const { type, witnesses, inputs, policies } = transaction as\n | TransactionCreate\n | TransactionScript;\n\n let metadataGas = bn(0);\n let gasLimit = bn(0);\n\n if (type === TransactionType.Create) {\n const { bytecodeWitnessIndex, storageSlots } = transaction as TransactionCreate;\n\n const contractBytesSize = bn(arrayify(witnesses[bytecodeWitnessIndex].data).length);\n\n metadataGas = calculateMetadataGasForTxCreate({\n contractBytesSize,\n gasCosts,\n stateRootSize: storageSlots.length || 0,\n txBytesSize: transactionBytes.length,\n });\n } else {\n const { scriptGasLimit } = transaction;\n\n if (scriptGasLimit) {\n gasLimit = scriptGasLimit;\n }\n\n metadataGas = calculateMetadataGasForTxScript({\n gasCosts,\n txBytesSize: transactionBytes.length,\n });\n }\n\n const minGas = getMinGas({\n gasCosts,\n gasPerByte: bn(gasPerByte),\n inputs,\n metadataGas,\n txBytesSize: transactionBytes.length,\n });\n\n const gasPrice = bn(policies.find((policy) => policy.type === PolicyType.GasPrice)?.data);\n const witnessLimit = policies.find((policy) => policy.type === PolicyType.WitnessLimit)?.data as\n | BN\n | undefined;\n\n const witnessesLength = witnesses.reduce((acc, wit) => acc + wit.dataLength, 0);\n\n const maxGas = getMaxGas({\n gasPerByte,\n minGas,\n witnessesLength,\n gasLimit,\n witnessLimit,\n });\n\n const feeFromGasUsed = calculatePriceWithFactor(gasUsed, gasPrice, gasPriceFactor);\n const minFee = calculatePriceWithFactor(minGas, gasPrice, gasPriceFactor);\n const maxFee = calculatePriceWithFactor(maxGas, gasPrice, gasPriceFactor);\n const fee = minFee.add(feeFromGasUsed);\n\n return {\n fee,\n minFee,\n maxFee,\n feeFromGasUsed,\n };\n};\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport { ReceiptType, TransactionType } from '@fuel-ts/transactions';\nimport type { InputContract, Output, OutputChange } from '@fuel-ts/transactions';\n\nimport type {\n TransactionResultReceipt,\n TransactionResultCallReceipt,\n TransactionResultMessageOutReceipt,\n TransactionResultTransferOutReceipt,\n TransactionResultTransferReceipt,\n} from '../transaction-response';\n\nimport { getFunctionCall } from './call';\nimport {\n getInputFromAssetId,\n getInputAccountAddress,\n getInputContractFromIndex,\n getInputsContract,\n getInputsCoinAndMessage,\n} from './input';\nimport {\n getOutputsChange,\n getOutputsCoin,\n getOutputsContract,\n getOutputsContractCreated,\n} from './output';\nimport { AddressType, ChainName, OperationName, TransactionTypeName } from './types';\nimport type {\n InputOutputParam,\n InputParam,\n OperationCoin,\n RawPayloadParam,\n ReceiptParam,\n Operation,\n GetOperationParams,\n GetTransferOperationsParams,\n} from './types';\n\n/** @hidden */\nexport function getReceiptsByType<T = TransactionResultReceipt>(\n receipts: TransactionResultReceipt[],\n type: ReceiptType\n) {\n return (receipts ?? []).filter((r) => r.type === type) as T[];\n}\n\n/** @hidden */\nexport function getTransactionTypeName(transactionType: TransactionType): TransactionTypeName {\n switch (transactionType) {\n case TransactionType.Mint:\n return TransactionTypeName.Mint;\n case TransactionType.Create:\n return TransactionTypeName.Create;\n case TransactionType.Script:\n return TransactionTypeName.Script;\n default:\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_TYPE,\n `Invalid transaction type: ${transactionType}.`\n );\n }\n}\n\n/** @hidden */\nexport function isType(transactionType: TransactionType, type: TransactionTypeName) {\n const txType = getTransactionTypeName(transactionType);\n\n return txType === type;\n}\n\n/** @hidden */\nexport function isTypeMint(transactionType: TransactionType) {\n return isType(transactionType, TransactionTypeName.Mint);\n}\n\n/** @hidden */\nexport function isTypeCreate(transactionType: TransactionType) {\n return isType(transactionType, TransactionTypeName.Create);\n}\n\n/** @hidden */\nexport function isTypeScript(transactionType: TransactionType) {\n return isType(transactionType, TransactionTypeName.Script);\n}\n\n/** @hidden */\nexport function hasSameAssetId(a: OperationCoin) {\n return (b: OperationCoin) => a.assetId === b.assetId;\n}\n\n/** @hidden */\nexport function getReceiptsCall(receipts: TransactionResultReceipt[]) {\n return getReceiptsByType<TransactionResultCallReceipt>(receipts, ReceiptType.Call);\n}\n\n/** @hidden */\nexport function getReceiptsMessageOut(receipts: TransactionResultReceipt[]) {\n return getReceiptsByType<TransactionResultMessageOutReceipt>(receipts, ReceiptType.MessageOut);\n}\n\n/** @hidden */\nconst mergeAssets = (op1: Operation, op2: Operation) => {\n const assets1 = op1.assetsSent || [];\n const assets2 = op2.assetsSent || [];\n\n // Getting assets from op2 that don't exist in op1\n const filteredAssets = assets2.filter(\n (asset2) => !assets1.some((asset1) => asset1.assetId === asset2.assetId)\n );\n\n // Merge assets that already exist in op1\n const mergedAssets = assets1.map((asset1) => {\n // Find matching asset in op2\n const matchingAsset = assets2.find((asset2) => asset2.assetId === asset1.assetId);\n if (!matchingAsset) {\n // No matching asset found, return asset1\n return asset1;\n }\n // Matching asset found, merge amounts\n const mergedAmount = bn(asset1.amount).add(matchingAsset.amount);\n return { ...asset1, amount: mergedAmount };\n });\n\n // Return merged assets from op1 with filtered assets from op2\n return mergedAssets.concat(filteredAssets);\n};\n\n/** @hidden */\nfunction isSameOperation(a: Operation, b: Operation) {\n return (\n a.name === b.name &&\n a.from?.address === b.from?.address &&\n a.to?.address === b.to?.address &&\n a.from?.type === b.from?.type &&\n a.to?.type === b.to?.type\n );\n}\n\n/** @hidden */\nexport function addOperation(operations: Operation[], toAdd: Operation) {\n const allOperations = [...operations];\n\n // Verifying if the operation to add already exists.\n const index = allOperations.findIndex((op) => isSameOperation(op, toAdd));\n\n if (allOperations[index]) {\n // Existent operation, we want to edit it.\n const existentOperation = { ...allOperations[index] };\n\n if (toAdd.assetsSent?.length) {\n /**\n * If the assetSent already exists, we call 'mergeAssets' to merge possible\n * entries of the same 'assetId', otherwise we just add the new 'assetSent'.\n */\n existentOperation.assetsSent = existentOperation.assetsSent?.length\n ? mergeAssets(existentOperation, toAdd)\n : toAdd.assetsSent;\n }\n\n if (toAdd.calls?.length) {\n // We need to stack the new call(s) with the possible existent ones.\n existentOperation.calls = [...(existentOperation.calls || []), ...toAdd.calls];\n }\n\n allOperations[index] = existentOperation;\n } else {\n // New operation, we can simply add it.\n allOperations.push(toAdd);\n }\n\n return allOperations;\n}\n\n/** @hidden */\nexport function getReceiptsTransferOut(receipts: TransactionResultReceipt[]) {\n return getReceiptsByType<TransactionResultTransferOutReceipt>(receipts, ReceiptType.TransferOut);\n}\n\n/** @hidden */\nexport function getWithdrawFromFuelOperations({\n inputs,\n receipts,\n}: InputParam & ReceiptParam): Operation[] {\n const messageOutReceipts = getReceiptsMessageOut(receipts);\n\n const withdrawFromFuelOperations = messageOutReceipts.reduce(\n (prevWithdrawFromFuelOps, receipt) => {\n // TODO: replace this hardcode with receipt.assetId when assetId gets added to MessageOutReceipt\n const assetId = '0x0000000000000000000000000000000000000000000000000000000000000000';\n const input = getInputFromAssetId(inputs, assetId);\n if (input) {\n const inputAddress = getInputAccountAddress(input);\n const newWithdrawFromFuelOps = addOperation(prevWithdrawFromFuelOps, {\n name: OperationName.withdrawFromFuel,\n from: {\n type: AddressType.account,\n address: inputAddress,\n },\n to: {\n type: AddressType.account,\n address: receipt.recipient.toString(),\n chain: ChainName.ethereum,\n },\n assetsSent: [\n {\n amount: receipt.amount,\n assetId,\n },\n ],\n });\n\n return newWithdrawFromFuelOps;\n }\n\n return prevWithdrawFromFuelOps;\n },\n [] as Operation[]\n );\n\n return withdrawFromFuelOperations;\n}\n\n/** @hidden */\nexport function getContractCallOperations({\n inputs,\n outputs,\n receipts,\n abiMap,\n rawPayload,\n maxInputs,\n}: InputOutputParam &\n ReceiptParam &\n Pick<GetOperationParams, 'abiMap' | 'maxInputs'> &\n RawPayloadParam): Operation[] {\n const contractCallReceipts = getReceiptsCall(receipts);\n const contractOutputs = getOutputsContract(outputs);\n\n const contractCallOperations = contractOutputs.reduce((prevOutputCallOps, output) => {\n const contractInput = getInputContractFromIndex(inputs, output.inputIndex);\n\n if (contractInput) {\n const newCallOps = contractCallReceipts.reduce((prevContractCallOps, receipt) => {\n if (receipt.to === contractInput.contractID) {\n const input = getInputFromAssetId(inputs, receipt.assetId);\n if (input) {\n const inputAddress = getInputAccountAddress(input);\n const calls = [];\n\n const abi = abiMap?.[contractInput.contractID];\n if (abi) {\n calls.push(\n getFunctionCall({\n abi,\n receipt,\n rawPayload,\n maxInputs,\n })\n );\n }\n\n const newContractCallOps = addOperation(prevContractCallOps, {\n name: OperationName.contractCall,\n from: {\n type: AddressType.account,\n address: inputAddress,\n },\n to: {\n type: AddressType.contract,\n address: receipt.to,\n },\n // if no amount is forwarded to the contract, skip showing assetsSent\n assetsSent: receipt.amount?.isZero()\n ? undefined\n : [\n {\n amount: receipt.amount,\n assetId: receipt.assetId,\n },\n ],\n calls,\n });\n\n return newContractCallOps;\n }\n }\n return prevContractCallOps;\n }, prevOutputCallOps as Operation[]);\n\n return newCallOps;\n }\n\n return prevOutputCallOps;\n }, [] as Operation[]);\n\n return contractCallOperations;\n}\n\n/** @hidden */\nfunction extractTransferOperationFromReceipt(\n receipt: TransactionResultTransferReceipt | TransactionResultTransferOutReceipt,\n contractInputs: InputContract[],\n changeOutputs: OutputChange[]\n) {\n const { to: toAddress, assetId, amount } = receipt;\n let { from: fromAddress } = receipt;\n\n const toType = contractInputs.some((input) => input.contractID === toAddress)\n ? AddressType.contract\n : AddressType.account;\n\n if (ZeroBytes32 === fromAddress) {\n const change = changeOutputs.find((output) => output.assetId === assetId);\n\n fromAddress = change?.to || fromAddress;\n }\n\n const fromType = contractInputs.some((input) => input.contractID === fromAddress)\n ? AddressType.contract\n : AddressType.account;\n\n return {\n name: OperationName.transfer,\n from: {\n type: fromType,\n address: fromAddress,\n },\n to: {\n type: toType,\n address: toAddress,\n },\n assetsSent: [\n {\n assetId: assetId.toString(),\n amount,\n },\n ],\n };\n}\n\n/** @hidden */\nexport function getTransferOperations({\n inputs,\n outputs,\n receipts,\n}: GetTransferOperationsParams): Operation[] {\n let operations: Operation[] = [];\n\n const coinOutputs = getOutputsCoin(outputs);\n const contractInputs = getInputsContract(inputs);\n const changeOutputs = getOutputsChange(outputs);\n\n /**\n * Extracting transfer operations between wallets, as they do not produce receipts\n */\n coinOutputs.forEach((output) => {\n const { amount, assetId, to } = output;\n\n const changeOutput = changeOutputs.find((change) => change.assetId === assetId);\n\n if (changeOutput) {\n operations = addOperation(operations, {\n name: OperationName.transfer,\n from: {\n type: AddressType.account,\n address: changeOutput.to,\n },\n to: {\n type: AddressType.account,\n address: to,\n },\n assetsSent: [\n {\n assetId,\n amount,\n },\n ],\n });\n }\n });\n\n /**\n * `Transfer` receipts are produced from transfers:\n * - Wallet to Contract\n * - Contract to Contract\n */\n const transferReceipts = getReceiptsByType<TransactionResultTransferReceipt>(\n receipts,\n ReceiptType.Transfer\n );\n\n /**\n * `TransferOut` receipts are produced from transfer:\n * - Contract to Wallet\n */\n const transferOutReceipts = getReceiptsByType<TransactionResultTransferOutReceipt>(\n receipts,\n ReceiptType.TransferOut\n );\n\n [...transferReceipts, ...transferOutReceipts].forEach((receipt) => {\n const operation = extractTransferOperationFromReceipt(receipt, contractInputs, changeOutputs);\n\n operations = addOperation(operations, operation);\n });\n\n return operations;\n}\n\n/** @hidden */\nexport function getPayProducerOperations(outputs: Output[]): Operation[] {\n const coinOutputs = getOutputsCoin(outputs);\n const payProducerOperations = coinOutputs.reduce((prev, output) => {\n const operations = addOperation(prev, {\n name: OperationName.payBlockProducer,\n from: {\n type: AddressType.account,\n address: 'Network',\n },\n to: {\n type: AddressType.account,\n address: output.to.toString(),\n },\n assetsSent: [\n {\n assetId: output.assetId.toString(),\n amount: output.amount,\n },\n ],\n });\n\n return operations;\n }, [] as Operation[]);\n\n return payProducerOperations;\n}\n\n/** @hidden */\nexport function getContractCreatedOperations({ inputs, outputs }: InputOutputParam): Operation[] {\n const contractCreatedOutputs = getOutputsContractCreated(outputs);\n const input = getInputsCoinAndMessage(inputs)[0];\n const fromAddress = getInputAccountAddress(input);\n const contractCreatedOperations = contractCreatedOutputs.reduce((prev, contractCreatedOutput) => {\n const operations = addOperation(prev, {\n name: OperationName.contractCreated,\n from: {\n type: AddressType.account,\n address: fromAddress,\n },\n to: {\n type: AddressType.contract,\n address: contractCreatedOutput?.contractId || '',\n },\n });\n\n return operations;\n }, [] as Operation[]);\n\n return contractCreatedOperations;\n}\n\n/** @hidden */\nexport function getOperations({\n transactionType,\n inputs,\n outputs,\n receipts,\n abiMap,\n rawPayload,\n maxInputs,\n}: GetOperationParams): Operation[] {\n if (isTypeCreate(transactionType)) {\n return [\n ...getContractCreatedOperations({ inputs, outputs }),\n ...getTransferOperations({ inputs, outputs, receipts }),\n ];\n }\n\n if (isTypeScript(transactionType)) {\n return [\n ...getTransferOperations({ inputs, outputs, receipts }),\n ...getContractCallOperations({\n inputs,\n outputs,\n receipts,\n abiMap,\n rawPayload,\n maxInputs,\n }),\n ...getWithdrawFromFuelOperations({ inputs, receipts }),\n ];\n }\n // at this point we are sure it's a mint transaction\n return [...getPayProducerOperations(outputs)];\n}\n","import { Interface, type JsonAbi, calculateVmTxMemory } from '@fuel-ts/abi-coder';\nimport type { BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { ReceiptCall } from '@fuel-ts/transactions';\n\ntype GetFunctionCallProps = {\n abi: JsonAbi;\n receipt: ReceiptCall;\n rawPayload?: string;\n maxInputs: BN;\n};\n\nexport const getFunctionCall = ({ abi, receipt, rawPayload, maxInputs }: GetFunctionCallProps) => {\n const abiInterface = new Interface(abi);\n const callFunctionSelector = receipt.param1.toHex(8);\n const functionFragment = abiInterface.getFunction(callFunctionSelector);\n const inputs = functionFragment.jsonFn.inputs;\n\n let encodedArgs;\n\n // if has more than 1 input or input type is bigger than 8 bytes, then it's a pointer to data\n if (functionFragment.isInputDataPointer) {\n if (rawPayload) {\n // calculate offset to get function params from rawPayload. should also consider vm offset\n const argsOffset = bn(receipt.param2)\n .sub(calculateVmTxMemory({ maxInputs: maxInputs.toNumber() }))\n .toNumber();\n\n // slice(2) to remove first 0x, then slice again to remove offset and get only args\n encodedArgs = `0x${rawPayload.slice(2).slice(argsOffset * 2)}`;\n }\n } else {\n // for small inputs, param2 is directly the value\n encodedArgs = receipt.param2.toHex();\n }\n\n let argumentsProvided;\n if (encodedArgs) {\n // use bytes got from rawPayload to decode function params\n const data = functionFragment.decodeArguments(encodedArgs);\n if (data) {\n // put together decoded data with input names from abi\n argumentsProvided = inputs.reduce((prev, input, index) => {\n const value = data[index];\n const name = input.name;\n\n if (name) {\n return {\n ...prev,\n // reparse to remove bn\n [name]: JSON.parse(JSON.stringify(value)),\n };\n }\n\n return prev;\n }, {});\n }\n }\n\n const call = {\n functionSignature: functionFragment.signature,\n functionName: functionFragment.name,\n argumentsProvided,\n ...(receipt.amount?.isZero() ? {} : { amount: receipt.amount, assetId: receipt.assetId }),\n };\n\n return call;\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { Input, InputCoin, InputContract, InputMessage } from '@fuel-ts/transactions';\nimport { InputType } from '@fuel-ts/transactions';\n\n/** @hidden */\nexport function getInputsByTypes<T = Input>(inputs: Input[], types: Array<InputType>) {\n return inputs.filter((i) => types.includes(i.type)) as T[];\n}\n\n/** @hidden */\nexport function getInputsByType<T = Input>(inputs: Input[], type: InputType) {\n return inputs.filter((i) => i.type === type) as T[];\n}\n\n/** @hidden */\nexport function getInputsCoin(inputs: Input[]) {\n return getInputsByType<InputCoin>(inputs, InputType.Coin);\n}\n\n/** @hidden */\nexport function getInputsMessage(inputs: Input[]) {\n return getInputsByType<InputMessage>(inputs, InputType.Message);\n}\n\n/** @hidden */\nexport function getInputsCoinAndMessage(inputs: Input[]) {\n return getInputsByTypes<InputCoin | InputMessage>(inputs, [InputType.Coin, InputType.Message]);\n}\n\n/** @hidden */\nexport function getInputsContract(inputs: Input[]) {\n return getInputsByType<InputContract>(inputs, InputType.Contract);\n}\n\n/** @hidden */\nexport function getInputFromAssetId(inputs: Input[], assetId: string) {\n const coinInputs = getInputsCoin(inputs);\n const messageInputs = getInputsMessage(inputs);\n const coinInput = coinInputs.find((i) => i.assetId === assetId);\n // TODO: should include assetId in InputMessage as well. for now we're mocking ETH\n const messageInput = messageInputs.find(\n (_) => assetId === '0x0000000000000000000000000000000000000000000000000000000000000000'\n );\n\n return coinInput || messageInput;\n}\n\n/** @hidden */\nexport function getInputContractFromIndex(\n inputs: Input[],\n inputIndex: number\n): InputContract | undefined {\n if (inputIndex == null) {\n return undefined;\n }\n\n const contractInput = inputs?.[inputIndex];\n\n if (!contractInput) {\n return undefined;\n }\n if (contractInput.type !== InputType.Contract) {\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_INPUT,\n `Contract input should be of type 'contract'.`\n );\n }\n\n return contractInput as InputContract;\n}\n\n/** @hidden */\nexport function getInputAccountAddress(input: Input) {\n if (input.type === InputType.Coin) {\n return input.owner.toString();\n }\n\n if (input.type === InputType.Message) {\n return input.recipient.toString();\n }\n\n return '';\n}\n","import type {\n Output,\n OutputChange,\n OutputCoin,\n OutputContract,\n OutputContractCreated,\n OutputVariable,\n} from '@fuel-ts/transactions';\nimport { OutputType } from '@fuel-ts/transactions';\n\n/** @hidden */\nexport function getOutputsByType<T = Output>(outputs: Output[], type: OutputType) {\n return outputs.filter((o) => o.type === type) as T[];\n}\n\n/** @hidden */\nexport function getOutputsContractCreated(outputs: Output[]) {\n return getOutputsByType<OutputContractCreated>(outputs, OutputType.ContractCreated);\n}\n\n/** @hidden */\nexport function getOutputsCoin(outputs: Output[]) {\n return getOutputsByType<OutputCoin>(outputs, OutputType.Coin);\n}\n\n/** @hidden */\nexport function getOutputsChange(outputs: Output[]) {\n return getOutputsByType<OutputChange>(outputs, OutputType.Change);\n}\n\n/** @hidden */\nexport function getOutputsContract(outputs: Output[]) {\n return getOutputsByType<OutputContract>(outputs, OutputType.Contract);\n}\n\n/** @hidden */\nexport function getOutputsVariable(outputs: Output[]) {\n return getOutputsByType<OutputVariable>(outputs, OutputType.Variable);\n}\n","import { ReceiptType } from '@fuel-ts/transactions';\n\nimport type { GqlReceiptFragmentFragment } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\nimport { assembleReceiptByType } from '../utils';\n\nimport type { BurnedAsset, MintedAsset } from './types';\n\nexport const processGqlReceipt = (\n gqlReceipt: GqlReceiptFragmentFragment\n): TransactionResultReceipt => {\n const receipt = assembleReceiptByType(gqlReceipt);\n\n switch (receipt.type) {\n case ReceiptType.ReturnData: {\n return {\n ...receipt,\n data: gqlReceipt.data || '0x',\n };\n }\n case ReceiptType.LogData: {\n return {\n ...receipt,\n data: gqlReceipt.data || '0x',\n };\n }\n default:\n return receipt;\n }\n};\n\nexport const extractMintedAssetsFromReceipts = (\n receipts: Array<TransactionResultReceipt>\n): MintedAsset[] => {\n const mintedAssets: MintedAsset[] = [];\n\n receipts.forEach((receipt) => {\n if (receipt.type === ReceiptType.Mint) {\n mintedAssets.push({\n subId: receipt.subId,\n contractId: receipt.contractId,\n assetId: receipt.assetId,\n amount: receipt.val,\n });\n }\n });\n\n return mintedAssets;\n};\n\nexport const extractBurnedAssetsFromReceipts = (\n receipts: Array<TransactionResultReceipt>\n): BurnedAsset[] => {\n const burnedAssets: BurnedAsset[] = [];\n\n receipts.forEach((receipt) => {\n if (receipt.type === ReceiptType.Burn) {\n burnedAssets.push({\n subId: receipt.subId,\n contractId: receipt.contractId,\n assetId: receipt.assetId,\n amount: receipt.val,\n });\n }\n });\n\n return burnedAssets;\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\n\nimport type {\n BlockId,\n GqlTransactionStatusesNames,\n GraphqlTransactionStatus,\n Time,\n TransactionSummary,\n} from './types';\nimport { TransactionStatus } from './types';\n\n/** @hidden */\nexport const getTransactionStatusName = (gqlStatus: GqlTransactionStatusesNames) => {\n switch (gqlStatus) {\n case 'FailureStatus':\n return TransactionStatus.failure;\n case 'SuccessStatus':\n return TransactionStatus.success;\n case 'SubmittedStatus':\n return TransactionStatus.submitted;\n case 'SqueezedOutStatus':\n return TransactionStatus.squeezedout;\n default:\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_STATUS,\n `Invalid transaction status: ${gqlStatus}.`\n );\n }\n};\n\ntype IProcessGraphqlStatusResponse = Pick<\n TransactionSummary,\n 'time' | 'blockId' | 'isStatusPending' | 'isStatusSuccess' | 'isStatusFailure' | 'status'\n>;\n\n/** @hidden */\nexport const processGraphqlStatus = (gqlTransactionStatus?: GraphqlTransactionStatus) => {\n let time: Time | undefined;\n let blockId: BlockId | undefined;\n let status: TransactionStatus | undefined;\n\n let isStatusFailure = false;\n let isStatusSuccess = false;\n let isStatusPending = false;\n\n if (gqlTransactionStatus?.type) {\n status = getTransactionStatusName(gqlTransactionStatus.type);\n\n switch (gqlTransactionStatus.type) {\n case 'SuccessStatus':\n time = gqlTransactionStatus.time;\n blockId = gqlTransactionStatus.block.id;\n isStatusSuccess = true;\n break;\n\n case 'FailureStatus':\n time = gqlTransactionStatus.time;\n blockId = gqlTransactionStatus.block.id;\n isStatusFailure = true;\n break;\n\n case 'SubmittedStatus':\n time = gqlTransactionStatus.time;\n isStatusPending = true;\n break;\n default:\n }\n }\n\n const processedGraphqlStatus: IProcessGraphqlStatusResponse = {\n time,\n blockId,\n status,\n isStatusFailure,\n isStatusSuccess,\n isStatusPending,\n };\n\n return processedGraphqlStatus;\n};\n","import type { JsonAbi } from '@fuel-ts/abi-coder';\nimport { Interface, BigNumberCoder } from '@fuel-ts/abi-coder';\nimport { ReceiptType } from '@fuel-ts/transactions';\n\nimport type { TransactionResultReceipt } from './transaction-response';\n\n/** @hidden */\nexport function getDecodedLogs<T = unknown>(\n receipts: Array<TransactionResultReceipt>,\n mainAbi: JsonAbi,\n externalAbis: Record<string, JsonAbi> = {}\n): T[] {\n /**\n * This helper decodes logs from transaction receipts.\n * It loops through all receipts and decodes two types of logs:\n * - ReceiptType.LogData\n * - ReceiptType.Log\n *\n * The \"mainAbi\" parameter represents the ABI of the main contract used to create the transaction\n * or the ABI from a script used within a \"BaseInvocationScope\" context.\n * The \"externalAbis\" parameter is a record of contract ABIs that are also part of the transaction.\n * These ABIs were added using `contract.addContracts` or through a multicall with `contract.multiCall`.\n *\n * @param receipts - The array of transaction result receipts.\n * @param mainAbi - The ABI of the script or main contract.\n * @param externalAbis - The record of external contract ABIs.\n * @returns An array of decoded logs from Sway projects.\n */\n return receipts.reduce((logs: T[], receipt) => {\n if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {\n const interfaceToUse = new Interface(externalAbis[receipt.id] || mainAbi);\n\n const data =\n receipt.type === ReceiptType.Log\n ? new BigNumberCoder('u64').encode(receipt.val0)\n : receipt.data;\n\n const [decodedLog] = interfaceToUse.decodeLog(data, receipt.val1.toNumber());\n logs.push(decodedLog);\n }\n\n return logs;\n }, []);\n}\n","import type { ProviderOptions } from '../provider';\n\nimport { sleep } from './sleep';\n\ntype Backoff = 'linear' | 'exponential' | 'fixed';\n\n/**\n * Retry options scheme\n */\nexport type RetryOptions = {\n /**\n * Amount of attempts to retry before failing the call.\n */\n maxRetries: number;\n /**\n * Backoff strategy to use when retrying. Default is exponential.\n */\n backoff?: Backoff;\n /**\n * Starting delay for backoff strategy. Default is 150ms.\n */\n baseDelay?: number;\n};\n\n/**\n * Calculate the delay for the next retry attempt\n * @param options - Retry options configuration\n * @param retryAttemptNum - 1-based, tells which retry attempt is this\n * @returns Next wait delay\n */\nexport function getWaitDelay(options: RetryOptions, retryAttemptNum: number) {\n const duration = options.baseDelay ?? 150;\n\n switch (options.backoff) {\n case 'linear':\n return duration * retryAttemptNum;\n case 'fixed':\n return duration;\n case 'exponential':\n default:\n return 2 ** (retryAttemptNum - 1) * duration;\n }\n}\n\n/**\n * Returns a wrapped fetch function that will auto-execute itself in case of errors, until it succeeds\n * @param fetchFn - Function to be auto-retried\n * @param options - Retry options configuration\n * @param retryAttemptNum - ZERO=first call, ONE=first retry, TWO=second retry, etc.\n * @returns Whatever is the output of the `fetchFn` function\n */\nexport function autoRetryFetch(\n fetchFn: NonNullable<ProviderOptions['fetch']>,\n options?: RetryOptions,\n retryAttemptNum: number = 0\n): NonNullable<ProviderOptions['fetch']> {\n if (options === undefined) {\n return fetchFn;\n }\n\n return async (...args) => {\n try {\n return await fetchFn(...args);\n } catch (_error: unknown) {\n const error = _error as Error & { cause?: { code: string } };\n\n /**\n * So far, we are auto-retrying only for `ECONNREFUSED` error.\n * TODO: Investigate if we should consider more errors.\n */\n if (error.cause?.code !== 'ECONNREFUSED') {\n throw error;\n }\n const retryNum = retryAttemptNum + 1;\n\n if (retryNum > options.maxRetries) {\n throw error;\n }\n\n const delay = getWaitDelay(options, retryNum);\n\n await sleep(delay);\n\n return autoRetryFetch(fetchFn, options, retryNum)(...args);\n }\n };\n}\n","import type { BN } from '@fuel-ts/math';\n\nimport type { CoinQuantity } from '../coin-quantity';\n\nexport const mergeQuantities = (arr1: CoinQuantity[], arr2: CoinQuantity[]): CoinQuantity[] => {\n const resultMap: { [key: string]: BN } = {};\n\n function addToMap({ amount, assetId }: CoinQuantity) {\n if (resultMap[assetId]) {\n resultMap[assetId] = resultMap[assetId].add(amount);\n } else {\n resultMap[assetId] = amount;\n }\n }\n\n // Process both arrays\n arr1.forEach(addToMap);\n arr2.forEach(addToMap);\n\n // Convert the resultMap back to an array\n return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport { TransactionCoder } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type {\n GqlGetTransactionsByOwnerQueryVariables,\n GqlPageInfo,\n} from '../__generated__/operations';\nimport type Provider from '../provider';\nimport type { TransactionRequest } from '../transaction-request';\nimport type { TransactionResult } from '../transaction-response';\n\nimport { assembleTransactionSummary } from './assemble-transaction-summary';\nimport { processGqlReceipt } from './receipt';\nimport type { AbiMap, TransactionSummary } from './types';\n\n/** @hidden */\nexport interface GetTransactionSummaryParams {\n id: string;\n provider: Provider;\n abiMap?: AbiMap;\n}\n\nexport async function getTransactionSummary<TTransactionType = void>(\n params: GetTransactionSummaryParams\n): Promise<TransactionResult> {\n const { id, provider, abiMap } = params;\n\n const { transaction: gqlTransaction } = await provider.operations.getTransactionWithReceipts({\n transactionId: id,\n });\n\n if (!gqlTransaction) {\n throw new FuelError(\n ErrorCode.TRANSACTION_NOT_FOUND,\n `Transaction not found for given id: ${id}.`\n );\n }\n\n const [decodedTransaction] = new TransactionCoder().decode(\n arrayify(gqlTransaction.rawPayload),\n 0\n );\n\n const receipts = gqlTransaction.receipts?.map(processGqlReceipt) || [];\n\n const {\n consensusParameters: { gasPerByte, gasPriceFactor, maxInputs, gasCosts },\n } = provider.getChain();\n\n const transactionInfo = assembleTransactionSummary<TTransactionType>({\n id: gqlTransaction.id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: arrayify(gqlTransaction.rawPayload),\n gqlTransactionStatus: gqlTransaction.status,\n gasPerByte: bn(gasPerByte),\n gasPriceFactor: bn(gasPriceFactor),\n abiMap,\n maxInputs,\n gasCosts,\n });\n\n return {\n gqlTransaction,\n ...transactionInfo,\n };\n}\n\nexport interface GetTransactionSummaryFromRequestParams {\n transactionRequest: TransactionRequest;\n provider: Provider;\n abiMap?: AbiMap;\n}\n\n/** @hidden */\nexport async function getTransactionSummaryFromRequest<TTransactionType = void>(\n params: GetTransactionSummaryFromRequestParams\n): Promise<TransactionSummary<TTransactionType>> {\n const { provider, transactionRequest, abiMap } = params;\n\n const { receipts } = await provider.call(transactionRequest);\n\n const { gasPerByte, gasPriceFactor, gasCosts } = provider.getGasConfig();\n const maxInputs = provider.getChain().consensusParameters.maxInputs;\n\n const transaction = transactionRequest.toTransaction();\n const transactionBytes = transactionRequest.toTransactionBytes();\n\n const transactionSummary = assembleTransactionSummary<TTransactionType>({\n receipts,\n transaction,\n transactionBytes,\n abiMap,\n gasPerByte,\n gasPriceFactor,\n maxInputs,\n gasCosts,\n });\n\n return transactionSummary;\n}\n\nexport interface GetTransactionsSummariesParams {\n provider: Provider;\n filters: GqlGetTransactionsByOwnerQueryVariables;\n abiMap?: AbiMap;\n}\n\nexport interface GetTransactionsSummariesReturns {\n transactions: TransactionResult[];\n pageInfo: GqlPageInfo;\n}\n\n/** @hidden */\nexport async function getTransactionsSummaries(\n params: GetTransactionsSummariesParams\n): Promise<GetTransactionsSummariesReturns> {\n const { filters, provider, abiMap } = params;\n\n const { transactionsByOwner } = await provider.operations.getTransactionsByOwner(filters);\n\n const { edges, pageInfo } = transactionsByOwner;\n\n const {\n consensusParameters: { gasPerByte, gasPriceFactor, maxInputs, gasCosts },\n } = provider.getChain();\n\n const transactions = edges.map((edge) => {\n const { node: gqlTransaction } = edge;\n\n const { id, rawPayload, receipts: gqlReceipts, status } = gqlTransaction;\n\n const [decodedTransaction] = new TransactionCoder().decode(arrayify(rawPayload), 0);\n\n const receipts = gqlReceipts?.map(processGqlReceipt) || [];\n\n const transactionSummary = assembleTransactionSummary({\n id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: arrayify(rawPayload),\n gqlTransactionStatus: status,\n abiMap,\n gasPerByte,\n gasPriceFactor,\n maxInputs,\n gasCosts,\n });\n\n const output: TransactionResult = {\n gqlTransaction,\n ...transactionSummary,\n };\n\n return output;\n });\n\n return {\n transactions,\n pageInfo,\n };\n}\n","export const CHAIN_IDS = {\n eth: {\n sepolia: 11155111,\n foundry: 31337,\n },\n fuel: {\n beta5: 0,\n devnet: 10,\n },\n};\n","import { CHAIN_IDS } from '../chains';\n\nimport type { Assets } from './types';\n\nexport const assets: Assets = [\n {\n name: 'Ethereum',\n symbol: 'ETH',\n icon: 'eth.svg',\n networks: [\n {\n type: 'ethereum',\n chainId: CHAIN_IDS.eth.sepolia,\n decimals: 18,\n },\n {\n type: 'ethereum',\n chainId: CHAIN_IDS.eth.foundry,\n decimals: 18,\n },\n {\n type: 'fuel',\n chainId: CHAIN_IDS.fuel.beta5,\n decimals: 9,\n assetId: '0x0000000000000000000000000000000000000000000000000000000000000000',\n },\n {\n type: 'fuel',\n chainId: CHAIN_IDS.fuel.devnet,\n decimals: 9,\n assetId: '0x0000000000000000000000000000000000000000000000000000000000000000',\n },\n ],\n },\n];\n\nexport * from './utils';\nexport * from './types';\n","import { BigNumberCoder } from '@fuel-ts/abi-coder';\nimport type { B256Address, BytesLike } from '@fuel-ts/interfaces';\nimport { BN, type BigNumberish } from '@fuel-ts/math';\nimport { arrayify } from '@fuel-ts/utils';\nimport * as asm from '@fuels/vm-asm';\n\ninterface IAssembleTransferToContractScriptParams {\n hexlifiedContractId: B256Address;\n amountToTransfer: BigNumberish;\n assetId: BytesLike;\n}\n\nexport const formatTransferToContractScriptData = (\n params: IAssembleTransferToContractScriptParams\n) => {\n const { assetId, amountToTransfer, hexlifiedContractId } = params;\n\n const numberCoder = new BigNumberCoder('u64');\n\n const encoded = numberCoder.encode(new BN(amountToTransfer).toNumber());\n\n const scriptData = Uint8Array.from([\n ...arrayify(hexlifiedContractId),\n ...encoded,\n ...arrayify(assetId),\n ]);\n\n return scriptData;\n};\n\nexport const assembleTransferToContractScript = async (\n params: IAssembleTransferToContractScriptParams\n) => {\n const scriptData = formatTransferToContractScriptData(params);\n\n // implementation extracted from Rust SDK at:\n // https://github.com/FuelLabs/fuels-rs/blob/master/packages/fuels-core/src/types/transaction_builders.rs#L240-L272\n // This script loads:\n // - a pointer to the contract id,\n // - the actual amount\n // - a pointer to the asset id\n // into the registers 0x10, 0x12, 0x13\n // and calls the TR instruction\n\n // TODO: Remove ts-expect-error\n // @ts-expect-error method reference missing in DTS\n await asm.initWasm();\n\n // const gtf = fuelAsm.gtf(0x10, 0x00, 0xc);\n const gtf = asm.gtf(0x10, 0x00, asm.GTFArgs.ScriptData);\n const addi = asm.addi(0x11, 0x10, 0x20);\n const lw = asm.lw(0x12, 0x11, 0x0);\n const addi2 = asm.addi(0x13, 0x11, 0x8);\n const tr = asm.tr(0x10, 0x12, 0x13);\n const ret = asm.ret(0x1);\n\n const script = Uint8Array.from([\n ...gtf.to_bytes(),\n ...addi.to_bytes(),\n ...lw.to_bytes(),\n ...addi2.to_bytes(),\n ...tr.to_bytes(),\n ...ret.to_bytes(),\n ]);\n\n return { script, scriptData };\n};\n","import { Address } from '@fuel-ts/address';\nimport { randomBytes } from '@fuel-ts/crypto';\nimport { hash } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { toBytes } from '@fuel-ts/math';\nimport { hexlify, concat, arrayify } from '@fuel-ts/utils';\nimport { secp256k1 } from '@noble/curves/secp256k1';\n\nexport class Signer {\n readonly address: Address;\n\n readonly publicKey: string;\n\n readonly compressedPublicKey: string;\n\n readonly privateKey: string;\n\n /**\n * Create a Signer instance from a given private key\n *\n * @param privateKey - The private key to use for signing\n * @returns A new Signer instance\n */\n constructor(privateKey: BytesLike) {\n // A lot of common tools do not prefix private keys with a 0x\n if (typeof privateKey === 'string') {\n if (privateKey.match(/^[0-9a-f]*$/i) && privateKey.length === 64) {\n // eslint-disable-next-line no-param-reassign\n privateKey = `0x${privateKey}`;\n }\n }\n // Convert to byte array, normalize private key input allowing it to be BytesLike\n // like remove 0x prefix and accept array of bytes\n const privateKeyBytes = toBytes(privateKey, 32);\n\n this.privateKey = hexlify(privateKeyBytes);\n\n // Slice(1) removes the encoding scheme from the public key\n this.publicKey = hexlify(secp256k1.getPublicKey(privateKeyBytes, false).slice(1));\n this.compressedPublicKey = hexlify(secp256k1.getPublicKey(privateKeyBytes, true));\n this.address = Address.fromPublicKey(this.publicKey);\n }\n\n /**\n * Sign data using the Signer instance\n *\n * Signature is a 64 byte array of the concatenated r and s values with the compressed recoveryParam byte.\n * @ignore\n * [Read more](FuelLabs/fuel-specs/specs/protocol/cryptographic_primitives.md#public-key-cryptography)\n *\n * @param data - The data to be sign\n * @returns hashed signature\n */\n sign(data: BytesLike) {\n const signature = secp256k1.sign(arrayify(data), arrayify(this.privateKey));\n\n const r = toBytes(`0x${signature.r.toString(16)}`, 32);\n const s = toBytes(`0x${signature.s.toString(16)}`, 32);\n\n // add recoveryParam to first s byte\n s[0] |= (signature.recovery || 0) << 7;\n\n return hexlify(concat([r, s]));\n }\n\n /**\n * Add point on the current elliptic curve\n *\n * @param point - Point to add on the curve\n * @returns compressed point on the curve\n */\n addPoint(point: BytesLike) {\n const p0 = secp256k1.ProjectivePoint.fromHex(arrayify(this.compressedPublicKey));\n const p1 = secp256k1.ProjectivePoint.fromHex(arrayify(point));\n const result = p0.add(p1);\n return `0x${result.toHex(true)}`;\n }\n\n /**\n * Recover the public key from a signature performed with [`sign`](#sign).\n *\n * @param data - Data\n * @param signature - hashed signature\n * @returns public key from signature from the\n */\n static recoverPublicKey(data: BytesLike, signature: BytesLike): string {\n const signedMessageBytes = arrayify(signature);\n const r = signedMessageBytes.slice(0, 32);\n const s = signedMessageBytes.slice(32, 64);\n const recoveryParam = (s[0] & 0x80) >> 7;\n\n // remove recoveryParam from s first byte\n s[0] &= 0x7f;\n\n const sig = new secp256k1.Signature(BigInt(hexlify(r)), BigInt(hexlify(s))).addRecoveryBit(\n recoveryParam\n );\n\n const publicKey = sig.recoverPublicKey(arrayify(data)).toRawBytes(false).slice(1);\n return hexlify(publicKey);\n }\n\n /**\n * Recover the address from a signature performed with [`sign`](#sign).\n *\n * @param data - Data\n * @param signature - Signature\n * @returns Address from signature\n */\n static recoverAddress(data: BytesLike, signature: BytesLike): Address {\n return Address.fromPublicKey(Signer.recoverPublicKey(data, signature));\n }\n\n /**\n * Generate a random privateKey\n *\n * @param entropy - Adds extra entropy to generate the privateKey\n * @returns random 32-byte hashed\n */\n static generatePrivateKey(entropy?: BytesLike) {\n return entropy ? hash(concat([randomBytes(32), arrayify(entropy)])) : randomBytes(32);\n }\n\n /**\n * Extended publicKey from a compact publicKey\n *\n * @param publicKey - Compact publicKey\n * @returns extended publicKey\n */\n static extendPublicKey(publicKey: BytesLike) {\n const point = secp256k1.ProjectivePoint.fromHex(arrayify(publicKey));\n return hexlify(point.toRawBytes(false).slice(1));\n }\n}\n","import { Address } from '@fuel-ts/address';\nimport {\n bufferFromString,\n keccak256,\n randomBytes,\n scrypt,\n stringFromBuffer,\n decryptJsonWalletData,\n encryptJsonWalletData,\n} from '@fuel-ts/crypto';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\nimport { hexlify } from '@fuel-ts/utils';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport type KeystoreWallet = {\n id: string;\n version: number;\n address: string;\n crypto: KeystoreCrypto;\n};\n\ntype KeystoreCrypto = {\n cipher: 'aes-128-ctr';\n cipherparams: { iv: string };\n ciphertext: string;\n kdf: 'scrypt';\n mac: string;\n kdfparams: KDFParams;\n};\n\ntype KDFParams = {\n dklen: number;\n n: number;\n p: number;\n r: number;\n salt: string;\n};\n\n// Same values used in the Rust SDK\nexport const DEFAULT_KDF_PARAMS_LOG_N = 13;\nexport const DEFAULT_KDF_PARAMS_R = 8;\nexport const DEFAULT_KDF_PARAMS_P = 1;\nexport const DEFAULT_KEY_SIZE = 32;\nexport const DEFAULT_IV_SIZE = 16;\n\n/**\n * Removes the '0x' prefix from a hexadecimal string.\n * If the prefix does not exist, it returns the original string.\n */\nexport const removeHexPrefix = (hexString: string) => {\n if (/^0x/.test(hexString)) {\n return hexString.slice(2);\n }\n\n return hexString;\n};\n\nexport async function encryptKeystoreWallet(\n privateKey: string,\n address: string | AbstractAddress,\n password: string\n): Promise<string> {\n // Convert the hexlified private key string to a Buffer.\n const privateKeyBuffer = bufferFromString(removeHexPrefix(privateKey), 'hex');\n const ownerAddress = Address.fromAddressOrString(address);\n // Generate a random salt.\n const salt = randomBytes(DEFAULT_KEY_SIZE);\n\n const key = scrypt({\n password: bufferFromString(password),\n salt,\n dklen: DEFAULT_KEY_SIZE,\n n: 2 ** DEFAULT_KDF_PARAMS_LOG_N,\n r: DEFAULT_KDF_PARAMS_R,\n p: DEFAULT_KDF_PARAMS_P,\n });\n\n // Encrypt the private key using AES-128-CTR.\n const iv = randomBytes(DEFAULT_IV_SIZE);\n\n const ciphertext = await encryptJsonWalletData(privateKeyBuffer, key, iv);\n\n const data = Uint8Array.from([...key.subarray(16, 32), ...ciphertext]);\n\n // Calculate the MAC.\n const macHashUint8Array = keccak256(data);\n\n const mac = stringFromBuffer(macHashUint8Array, 'hex');\n\n // Construct keystore.\n const keystore: KeystoreWallet = {\n id: uuidv4(),\n version: 3,\n address: removeHexPrefix(ownerAddress.toHexString()),\n crypto: {\n cipher: 'aes-128-ctr',\n mac,\n cipherparams: { iv: stringFromBuffer(iv, 'hex') },\n ciphertext: stringFromBuffer(ciphertext, 'hex'),\n kdf: 'scrypt',\n kdfparams: {\n dklen: DEFAULT_KEY_SIZE,\n n: 2 ** DEFAULT_KDF_PARAMS_LOG_N,\n p: DEFAULT_KDF_PARAMS_P,\n r: DEFAULT_KDF_PARAMS_R,\n salt: stringFromBuffer(salt, 'hex'),\n },\n },\n };\n\n return JSON.stringify(keystore);\n}\n\nexport async function decryptKeystoreWallet(jsonWallet: string, password: string): Promise<string> {\n const keystoreWallet = JSON.parse(jsonWallet) as KeystoreWallet;\n\n // Extract the parameters needed for decryption.\n const {\n crypto: {\n mac,\n ciphertext,\n cipherparams: { iv },\n kdfparams: { dklen, n, r, p, salt },\n },\n } = keystoreWallet;\n\n const ciphertextBuffer = bufferFromString(ciphertext, 'hex');\n const ivBuffer = bufferFromString(iv, 'hex');\n const saltBuffer = bufferFromString(salt, 'hex');\n\n const passwordBuffer = bufferFromString(password);\n\n const key = scrypt({\n password: passwordBuffer,\n salt: saltBuffer,\n n,\n p,\n r,\n dklen,\n });\n\n // Verify the MAC. It should be the Keccak-256 hash of the concatenation of the second half of the derived key and the ciphertext.\n const data = Uint8Array.from([...key.subarray(16, 32), ...ciphertextBuffer]);\n\n const macHashUint8Array = keccak256(data);\n\n const macHash = stringFromBuffer(macHashUint8Array, 'hex');\n\n if (mac !== macHash) {\n throw new FuelError(\n ErrorCode.INVALID_PASSWORD,\n 'Failed to decrypt the keystore wallet, the provided password is incorrect.'\n );\n }\n\n // Decrypt the private key.\n const buffer = await decryptJsonWalletData(ciphertextBuffer, key, ivBuffer);\n\n const privateKey = hexlify(buffer);\n\n return privateKey;\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { sha256 } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { bn, toBytes, toHex } from '@fuel-ts/math';\nimport { arrayify, hexlify, concat } from '@fuel-ts/utils';\nimport { toBeHex, dataSlice, encodeBase58, decodeBase58, computeHmac, ripemd160 } from 'ethers';\n\nimport { Mnemonic } from '../mnemonic';\nimport { Signer } from '../signer';\n\n// \"Bitcoin seed\"\nconst HARDENED_INDEX = 0x80000000;\n\n// 4 byte: version bytes (mainnet: 0x0488B21E public, 0x0488ADE4 private; testnet: 0x043587CF public, 0x04358394 private)\nconst MainnetPRV = hexlify('0x0488ade4');\nconst MainnetPUB = hexlify('0x0488b21e');\nconst TestnetPRV = hexlify('0x04358394');\nconst TestnetPUB = hexlify('0x043587cf');\n\nfunction base58check(data: Uint8Array): string {\n return encodeBase58(concat([data, dataSlice(sha256(sha256(data)), 0, 4)]));\n}\n\nfunction getExtendedKeyPrefix(isPublic: boolean = false, testnet: boolean = false) {\n if (isPublic) {\n return testnet ? TestnetPUB : MainnetPUB;\n }\n return testnet ? TestnetPRV : MainnetPRV;\n}\n\nfunction isPublicExtendedKey(extendedKey: Uint8Array) {\n return [MainnetPUB, TestnetPUB].includes(hexlify(extendedKey.slice(0, 4)));\n}\n\nfunction isValidExtendedKey(extendedKey: Uint8Array) {\n return [MainnetPRV, TestnetPRV, MainnetPUB, TestnetPUB].includes(\n hexlify(extendedKey.slice(0, 4))\n );\n}\n\nfunction parsePath(path: string, depth: number = 0) {\n const components = path.split('/');\n\n if (components.length === 0 || (components[0] === 'm' && depth !== 0)) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, `invalid path - ${path}`);\n }\n\n if (components[0] === 'm') {\n components.shift();\n }\n\n return components.map((p) =>\n ~p.indexOf(`'`) ? parseInt(p, 10) + HARDENED_INDEX : parseInt(p, 10)\n );\n}\n\ntype HDWalletConfig = {\n privateKey?: BytesLike;\n publicKey?: BytesLike;\n chainCode: BytesLike;\n depth?: number;\n index?: number;\n parentFingerprint?: string;\n};\n\nclass HDWallet {\n depth: number = 0;\n index: number = 0;\n fingerprint: string = hexlify('0x00000000');\n parentFingerprint: string = hexlify('0x00000000');\n privateKey?: string;\n publicKey: string;\n chainCode: BytesLike;\n\n /**\n * HDWallet is a implementation of the BIP-0044 and BIP-0032, Multi-Account Hierarchy for Deterministic Wallets\n *\n * @param config - Wallet configurations\n */\n constructor(config: HDWalletConfig) {\n // TODO: set some asserts here\n\n if (config.privateKey) {\n const signer = new Signer(config.privateKey);\n this.publicKey = hexlify(signer.compressedPublicKey);\n this.privateKey = hexlify(config.privateKey);\n } else {\n if (!config.publicKey) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n 'Both public and private Key cannot be missing. At least one should be provided.'\n );\n }\n this.publicKey = hexlify(config.publicKey);\n }\n\n this.parentFingerprint = config.parentFingerprint || this.parentFingerprint;\n this.fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4);\n this.depth = config.depth || this.depth;\n this.index = config.index || this.index;\n this.chainCode = config.chainCode;\n }\n\n get extendedKey() {\n return this.toExtendedKey();\n }\n\n /**\n * Derive the current HDWallet instance navigating only on the index.\n * `Ex.: m/44'/0 -> Ex.: m/44'/1 -> m/44'/2`. [Learn more](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)\n *\n * @param index - Index of the child HDWallet.\n * @returns A new instance of HDWallet on the derived index\n */\n deriveIndex(index: number) {\n const privateKey = this.privateKey && arrayify(this.privateKey);\n const publicKey = arrayify(this.publicKey);\n const chainCode = arrayify(this.chainCode);\n const data = new Uint8Array(37);\n\n if (index & HARDENED_INDEX) {\n if (!privateKey) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n 'Cannot derive a hardened index without a private Key.'\n );\n }\n\n // 33 bytes: 0x00 || private key\n data.set(privateKey, 1);\n } else {\n data.set(arrayify(this.publicKey));\n }\n\n // child number: ser32(i)\n data.set(toBytes(index, 4), 33);\n\n const bytes = arrayify(computeHmac('sha512', chainCode, data));\n const IL = bytes.slice(0, 32);\n const IR = bytes.slice(32);\n\n if (privateKey) {\n const N = '0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141';\n // Child key ki is parse256(IL) + kpar (mod n).\n const ki = bn(IL).add(privateKey).mod(N).toBytes(32);\n\n return new HDWallet({\n privateKey: ki,\n chainCode: IR,\n index,\n depth: this.depth + 1,\n parentFingerprint: this.fingerprint,\n });\n }\n\n const signer = new Signer(hexlify(IL));\n const Ki = signer.addPoint(publicKey);\n\n return new HDWallet({\n publicKey: Ki,\n chainCode: IR,\n index,\n depth: this.depth + 1,\n parentFingerprint: this.fingerprint,\n });\n }\n\n /**\n * Derive the current HDWallet instance to the path. [Learn more](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)\n *\n * @param path - The string representation of the child HDWallet. `Ex.: m/44'/0'/0'/0/0`\n * @returns A new instance of HDWallet on the derived path\n */\n derivePath(path: string) {\n const paths = parsePath(path, this.depth);\n\n return paths.reduce((hdwallet, index) => hdwallet.deriveIndex(index), <HDWallet>this);\n }\n\n /**\n * Get the extendKey as defined on BIP-32 from the provided seed\n *\n * @param isPublic - enable to export public extendedKey, it not required when HDWallet didn't have the privateKey.\n * @param testnet - Inform if should use testnet or mainnet prefix, default value is true (`mainnet`).\n * @returns BIP-32 extended private key\n */\n toExtendedKey(isPublic: boolean = false, testnet: boolean = false): string {\n if (this.depth >= 256) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n `Exceeded max depth of 255. Current depth: ${this.depth}.`\n );\n }\n const prefix = getExtendedKeyPrefix(this.privateKey == null || isPublic, testnet);\n const depth = hexlify(Uint8Array.from([this.depth]));\n const parentFingerprint = this.parentFingerprint;\n const index = toHex(this.index, 4);\n // last 32 bites from the key\n const chainCode = this.chainCode;\n // first 32 bites from the key\n const key =\n this.privateKey != null && !isPublic ? concat(['0x00', this.privateKey]) : this.publicKey;\n const extendedKey = arrayify(concat([prefix, depth, parentFingerprint, index, chainCode, key]));\n\n return base58check(extendedKey);\n }\n\n /**\n * Create HDWallet instance from seed\n *\n * @param seed - Seed\n * @returns A new instance of HDWallet\n */\n static fromSeed(seed: string) {\n const masterKey = Mnemonic.masterKeysFromSeed(seed);\n\n return new HDWallet({\n chainCode: arrayify(masterKey.slice(32)),\n privateKey: arrayify(masterKey.slice(0, 32)),\n });\n }\n\n static fromExtendedKey(extendedKey: string) {\n const decoded = toBeHex(decodeBase58(extendedKey));\n const bytes = arrayify(decoded);\n const validChecksum = base58check(bytes.slice(0, 78)) === extendedKey;\n\n if (bytes.length !== 82 || !isValidExtendedKey(bytes)) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Provided key is not a valid extended key.');\n }\n if (!validChecksum) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Provided key has an invalid checksum.');\n }\n\n const depth = bytes[4];\n const parentFingerprint = hexlify(bytes.slice(5, 9));\n const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n const chainCode = hexlify(bytes.slice(13, 45));\n const key = bytes.slice(45, 78);\n\n if ((depth === 0 && parentFingerprint !== '0x00000000') || (depth === 0 && index !== 0)) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n 'Inconsistency detected: Depth is zero but fingerprint/index is non-zero.'\n );\n }\n\n if (isPublicExtendedKey(bytes)) {\n if (key[0] !== 3) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Invalid public extended key.');\n }\n\n return new HDWallet({\n publicKey: key,\n chainCode,\n index,\n depth,\n parentFingerprint,\n });\n }\n\n if (key[0] !== 0) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Invalid private extended key.');\n }\n\n return new HDWallet({\n privateKey: key.slice(1),\n chainCode,\n index,\n depth,\n parentFingerprint,\n });\n }\n}\n\nexport default HDWallet;\n","import { randomBytes } from '@fuel-ts/crypto';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { sha256 } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { arrayify, hexlify, concat } from '@fuel-ts/utils';\nimport { dataSlice, pbkdf2, computeHmac, encodeBase58 } from 'ethers';\n\nimport { english } from '../wordlists';\n\nimport type { MnemonicPhrase } from './utils';\nimport {\n entropyToMnemonicIndices,\n getWords,\n getPhrase,\n mnemonicWordsToEntropy,\n toUtf8Bytes,\n} from './utils';\n\n//\n// Constants\n//\n// \"Bitcoin seed\"\nconst MasterSecret = toUtf8Bytes('Bitcoin seed');\n// 4 byte: version bytes (mainnet: 0x0488B21E public, 0x0488ADE4 private; testnet: 0x043587CF public, 0x04358394 private)\nconst MainnetPRV = '0x0488ade4';\nconst TestnetPRV = '0x04358394';\nexport const MNEMONIC_SIZES = [12, 15, 18, 21, 24];\n\nfunction assertWordList(wordlist: Array<string>) {\n if (wordlist.length !== 2048) {\n throw new FuelError(\n ErrorCode.INVALID_WORD_LIST,\n `Expected word list length of 2048, but got ${wordlist.length}.`\n );\n }\n}\n\nfunction assertEntropy(entropy: BytesLike) {\n if (entropy.length % 4 !== 0 || entropy.length < 16 || entropy.length > 32) {\n throw new FuelError(\n ErrorCode.INVALID_ENTROPY,\n `Entropy should be between 16 and 32 bytes and a multiple of 4, but got ${entropy.length} bytes.`\n );\n }\n}\n\nfunction assertMnemonic(words: Array<string>) {\n if (!MNEMONIC_SIZES.includes(words.length)) {\n const errorMsg = `Invalid mnemonic size. Expected one of [${MNEMONIC_SIZES.join(\n ', '\n )}] words, but got ${words.length}.`;\n\n throw new FuelError(ErrorCode.INVALID_MNEMONIC, errorMsg);\n }\n}\n\nclass Mnemonic {\n wordlist: Array<string>;\n\n /**\n *\n * @param wordlist - Provide a wordlist with the list of words used to generate the mnemonic phrase. The default value is the English list.\n * @returns Mnemonic instance\n */\n constructor(wordlist: Array<string> = english) {\n this.wordlist = wordlist;\n\n assertWordList(this.wordlist);\n }\n\n /**\n *\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @returns Entropy hash\n */\n mnemonicToEntropy(phrase: MnemonicPhrase) {\n return Mnemonic.mnemonicToEntropy(phrase, this.wordlist);\n }\n\n /**\n *\n * @param entropy - Entropy source to the mnemonic phrase.\n * @returns Mnemonic phrase\n */\n entropyToMnemonic(entropy: BytesLike) {\n return Mnemonic.entropyToMnemonic(entropy, this.wordlist);\n }\n\n /**\n *\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @param wordlist - Provide a wordlist with the list of words used to generate the mnemonic phrase. The default value is the English list.\n * @returns Mnemonic phrase\n */\n static mnemonicToEntropy(phrase: MnemonicPhrase, wordlist: Array<string> = english): string {\n const words = getWords(phrase);\n\n assertMnemonic(words);\n\n return hexlify(mnemonicWordsToEntropy(words, wordlist));\n }\n\n /**\n * @param entropy - Entropy source to the mnemonic phrase.\n * @param testnet - Inform if should use testnet or mainnet prefix, default value is true (`mainnet`).\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static entropyToMnemonic(entropy: BytesLike, wordlist: Array<string> = english): string {\n const entropyBytes = arrayify(entropy);\n\n assertWordList(wordlist);\n assertEntropy(entropyBytes);\n\n return entropyToMnemonicIndices(entropyBytes)\n .map((i) => wordlist[i])\n .join(' ');\n }\n\n /**\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @param passphrase - Add additional security to protect the generated seed with a memorized passphrase. `Note: if the owner forgot the passphrase, all wallets and accounts derive from the phrase will be lost.`\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static mnemonicToSeed(phrase: MnemonicPhrase, passphrase: BytesLike = '') {\n assertMnemonic(getWords(phrase));\n\n const phraseBytes = toUtf8Bytes(getPhrase(phrase));\n const salt = toUtf8Bytes(`mnemonic${passphrase}`);\n\n return pbkdf2(phraseBytes, salt, 2048, 64, 'sha512');\n }\n\n /**\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @param passphrase - Add additional security to protect the generated seed with a memorized passphrase. `Note: if the owner forgot the passphrase, all wallets and accounts derive from the phrase will be lost.`\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static mnemonicToMasterKeys(phrase: MnemonicPhrase, passphrase: BytesLike = '') {\n const seed = Mnemonic.mnemonicToSeed(phrase, passphrase);\n return Mnemonic.masterKeysFromSeed(seed);\n }\n\n /**\n * Validates if given mnemonic is valid\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @returns true if phrase is a valid mnemonic\n */\n static isMnemonicValid(phrase: string) {\n const words = getWords(phrase);\n\n let i: number = 0;\n\n try {\n assertMnemonic(words);\n } catch {\n return false;\n }\n\n while (i < words.length) {\n if (Mnemonic.binarySearch(words[i]) === false) {\n return false;\n }\n i += 1;\n }\n\n return true;\n }\n\n static binarySearch(target: string): boolean {\n const words = english;\n let left: number = 0;\n let right: number = words.length - 1;\n\n while (left <= right) {\n const mid: number = Math.floor((left + right) / 2);\n\n if (words[mid] === target) {\n return true;\n }\n if (target < words[mid]) {\n right = mid - 1;\n } else {\n left = mid + 1;\n }\n }\n\n return false;\n }\n\n /**\n * @param seed - BIP39 seed\n * @param testnet - Inform if should use testnet or mainnet prefix, the default value is true (`mainnet`).\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static masterKeysFromSeed(seed: string): Uint8Array {\n const seedArray = arrayify(seed);\n\n if (seedArray.length < 16 || seedArray.length > 64) {\n throw new FuelError(\n ErrorCode.INVALID_SEED,\n `Seed length should be between 16 and 64 bytes, but received ${seedArray.length} bytes.`\n );\n }\n\n return arrayify(computeHmac('sha512', MasterSecret, seedArray));\n }\n\n /**\n * Get the extendKey as defined on BIP-32 from the provided seed\n *\n * @param seed - BIP39 seed\n * @param testnet - Inform if should use testnet or mainnet prefix, default value is true (`mainnet`).\n * @returns BIP-32 extended private key\n */\n static seedToExtendedKey(seed: string, testnet: boolean = false): string {\n const masterKey = Mnemonic.masterKeysFromSeed(seed);\n const prefix = arrayify(testnet ? TestnetPRV : MainnetPRV);\n const depth = '0x00';\n const fingerprint = '0x00000000';\n const index = '0x00000000';\n // last 32 bites from the key\n const chainCode = masterKey.slice(32);\n // first 32 bites from the key\n const privateKey = masterKey.slice(0, 32);\n const extendedKey = concat([\n prefix,\n depth,\n fingerprint,\n index,\n chainCode,\n concat(['0x00', privateKey]),\n ]);\n const checksum = dataSlice(sha256(sha256(extendedKey)), 0, 4);\n\n return encodeBase58(concat([extendedKey, checksum]));\n }\n\n /**\n * Create a new mnemonic using a randomly generated number as entropy.\n * As defined in BIP39, the entropy must be a multiple of 32 bits, and its size must be between 128 and 256 bits.\n * Therefore, the possible values for `strength` are 128, 160, 192, 224, and 256.\n * If not provided, the default entropy length will be set to 256 bits.\n * The return is a list of words that encodes the generated entropy.\n *\n *\n * @param size - Number of bytes used as an entropy\n * @param extraEntropy - Optional extra entropy to increase randomness\n * @returns A randomly generated mnemonic\n */\n static generate(size: number = 32, extraEntropy: BytesLike = '') {\n const entropy = extraEntropy\n ? sha256(concat([randomBytes(size), arrayify(extraEntropy)]))\n : randomBytes(size);\n return Mnemonic.entropyToMnemonic(entropy);\n }\n}\n\nexport default Mnemonic;\n","export const english = [\n 'abandon',\n 'ability',\n 'able',\n 'about',\n 'above',\n 'absent',\n 'absorb',\n 'abstract',\n 'absurd',\n 'abuse',\n 'access',\n 'accident',\n 'account',\n 'accuse',\n 'achieve',\n 'acid',\n 'acoustic',\n 'acquire',\n 'across',\n 'act',\n 'action',\n 'actor',\n 'actress',\n 'actual',\n 'adapt',\n 'add',\n 'addict',\n 'address',\n 'adjust',\n 'admit',\n 'adult',\n 'advance',\n 'advice',\n 'aerobic',\n 'affair',\n 'afford',\n 'afraid',\n 'again',\n 'age',\n 'agent',\n 'agree',\n 'ahead',\n 'aim',\n 'air',\n 'airport',\n 'aisle',\n 'alarm',\n 'album',\n 'alcohol',\n 'alert',\n 'alien',\n 'all',\n 'alley',\n 'allow',\n 'almost',\n 'alone',\n 'alpha',\n 'already',\n 'also',\n 'alter',\n 'always',\n 'amateur',\n 'amazing',\n 'among',\n 'amount',\n 'amused',\n 'analyst',\n 'anchor',\n 'ancient',\n 'anger',\n 'angle',\n 'angry',\n 'animal',\n 'ankle',\n 'announce',\n 'annual',\n 'another',\n 'answer',\n 'antenna',\n 'antique',\n 'anxiety',\n 'any',\n 'apart',\n 'apology',\n 'appear',\n 'apple',\n 'approve',\n 'april',\n 'arch',\n 'arctic',\n 'area',\n 'arena',\n 'argue',\n 'arm',\n 'armed',\n 'armor',\n 'army',\n 'around',\n 'arrange',\n 'arrest',\n 'arrive',\n 'arrow',\n 'art',\n 'artefact',\n 'artist',\n 'artwork',\n 'ask',\n 'aspect',\n 'assault',\n 'asset',\n 'assist',\n 'assume',\n 'asthma',\n 'athlete',\n 'atom',\n 'attack',\n 'attend',\n 'attitude',\n 'attract',\n 'auction',\n 'audit',\n 'august',\n 'aunt',\n 'author',\n 'auto',\n 'autumn',\n 'average',\n 'avocado',\n 'avoid',\n 'awake',\n 'aware',\n 'away',\n 'awesome',\n 'awful',\n 'awkward',\n 'axis',\n 'baby',\n 'bachelor',\n 'bacon',\n 'badge',\n 'bag',\n 'balance',\n 'balcony',\n 'ball',\n 'bamboo',\n 'banana',\n 'banner',\n 'bar',\n 'barely',\n 'bargain',\n 'barrel',\n 'base',\n 'basic',\n 'basket',\n 'battle',\n 'beach',\n 'bean',\n 'beauty',\n 'because',\n 'become',\n 'beef',\n 'before',\n 'begin',\n 'behave',\n 'behind',\n 'believe',\n 'below',\n 'belt',\n 'bench',\n 'benefit',\n 'best',\n 'betray',\n 'better',\n 'between',\n 'beyond',\n 'bicycle',\n 'bid',\n 'bike',\n 'bind',\n 'biology',\n 'bird',\n 'birth',\n 'bitter',\n 'black',\n 'blade',\n 'blame',\n 'blanket',\n 'blast',\n 'bleak',\n 'bless',\n 'blind',\n 'blood',\n 'blossom',\n 'blouse',\n 'blue',\n 'blur',\n 'blush',\n 'board',\n 'boat',\n 'body',\n 'boil',\n 'bomb',\n 'bone',\n 'bonus',\n 'book',\n 'boost',\n 'border',\n 'boring',\n 'borrow',\n 'boss',\n 'bottom',\n 'bounce',\n 'box',\n 'boy',\n 'bracket',\n 'brain',\n 'brand',\n 'brass',\n 'brave',\n 'bread',\n 'breeze',\n 'brick',\n 'bridge',\n 'brief',\n 'bright',\n 'bring',\n 'brisk',\n 'broccoli',\n 'broken',\n 'bronze',\n 'broom',\n 'brother',\n 'brown',\n 'brush',\n 'bubble',\n 'buddy',\n 'budget',\n 'buffalo',\n 'build',\n 'bulb',\n 'bulk',\n 'bullet',\n 'bundle',\n 'bunker',\n 'burden',\n 'burger',\n 'burst',\n 'bus',\n 'business',\n 'busy',\n 'butter',\n 'buyer',\n 'buzz',\n 'cabbage',\n 'cabin',\n 'cable',\n 'cactus',\n 'cage',\n 'cake',\n 'call',\n 'calm',\n 'camera',\n 'camp',\n 'can',\n 'canal',\n 'cancel',\n 'candy',\n 'cannon',\n 'canoe',\n 'canvas',\n 'canyon',\n 'capable',\n 'capital',\n 'captain',\n 'car',\n 'carbon',\n 'card',\n 'cargo',\n 'carpet',\n 'carry',\n 'cart',\n 'case',\n 'cash',\n 'casino',\n 'castle',\n 'casual',\n 'cat',\n 'catalog',\n 'catch',\n 'category',\n 'cattle',\n 'caught',\n 'cause',\n 'caution',\n 'cave',\n 'ceiling',\n 'celery',\n 'cement',\n 'census',\n 'century',\n 'cereal',\n 'certain',\n 'chair',\n 'chalk',\n 'champion',\n 'change',\n 'chaos',\n 'chapter',\n 'charge',\n 'chase',\n 'chat',\n 'cheap',\n 'check',\n 'cheese',\n 'chef',\n 'cherry',\n 'chest',\n 'chicken',\n 'chief',\n 'child',\n 'chimney',\n 'choice',\n 'choose',\n 'chronic',\n 'chuckle',\n 'chunk',\n 'churn',\n 'cigar',\n 'cinnamon',\n 'circle',\n 'citizen',\n 'city',\n 'civil',\n 'claim',\n 'clap',\n 'clarify',\n 'claw',\n 'clay',\n 'clean',\n 'clerk',\n 'clever',\n 'click',\n 'client',\n 'cliff',\n 'climb',\n 'clinic',\n 'clip',\n 'clock',\n 'clog',\n 'close',\n 'cloth',\n 'cloud',\n 'clown',\n 'club',\n 'clump',\n 'cluster',\n 'clutch',\n 'coach',\n 'coast',\n 'coconut',\n 'code',\n 'coffee',\n 'coil',\n 'coin',\n 'collect',\n 'color',\n 'column',\n 'combine',\n 'come',\n 'comfort',\n 'comic',\n 'common',\n 'company',\n 'concert',\n 'conduct',\n 'confirm',\n 'congress',\n 'connect',\n 'consider',\n 'control',\n 'convince',\n 'cook',\n 'cool',\n 'copper',\n 'copy',\n 'coral',\n 'core',\n 'corn',\n 'correct',\n 'cost',\n 'cotton',\n 'couch',\n 'country',\n 'couple',\n 'course',\n 'cousin',\n 'cover',\n 'coyote',\n 'crack',\n 'cradle',\n 'craft',\n 'cram',\n 'crane',\n 'crash',\n 'crater',\n 'crawl',\n 'crazy',\n 'cream',\n 'credit',\n 'creek',\n 'crew',\n 'cricket',\n 'crime',\n 'crisp',\n 'critic',\n 'crop',\n 'cross',\n 'crouch',\n 'crowd',\n 'crucial',\n 'cruel',\n 'cruise',\n 'crumble',\n 'crunch',\n 'crush',\n 'cry',\n 'crystal',\n 'cube',\n 'culture',\n 'cup',\n 'cupboard',\n 'curious',\n 'current',\n 'curtain',\n 'curve',\n 'cushion',\n 'custom',\n 'cute',\n 'cycle',\n 'dad',\n 'damage',\n 'damp',\n 'dance',\n 'danger',\n 'daring',\n 'dash',\n 'daughter',\n 'dawn',\n 'day',\n 'deal',\n 'debate',\n 'debris',\n 'decade',\n 'december',\n 'decide',\n 'decline',\n 'decorate',\n 'decrease',\n 'deer',\n 'defense',\n 'define',\n 'defy',\n 'degree',\n 'delay',\n 'deliver',\n 'demand',\n 'demise',\n 'denial',\n 'dentist',\n 'deny',\n 'depart',\n 'depend',\n 'deposit',\n 'depth',\n 'deputy',\n 'derive',\n 'describe',\n 'desert',\n 'design',\n 'desk',\n 'despair',\n 'destroy',\n 'detail',\n 'detect',\n 'develop',\n 'device',\n 'devote',\n 'diagram',\n 'dial',\n 'diamond',\n 'diary',\n 'dice',\n 'diesel',\n 'diet',\n 'differ',\n 'digital',\n 'dignity',\n 'dilemma',\n 'dinner',\n 'dinosaur',\n 'direct',\n 'dirt',\n 'disagree',\n 'discover',\n 'disease',\n 'dish',\n 'dismiss',\n 'disorder',\n 'display',\n 'distance',\n 'divert',\n 'divide',\n 'divorce',\n 'dizzy',\n 'doctor',\n 'document',\n 'dog',\n 'doll',\n 'dolphin',\n 'domain',\n 'donate',\n 'donkey',\n 'donor',\n 'door',\n 'dose',\n 'double',\n 'dove',\n 'draft',\n 'dragon',\n 'drama',\n 'drastic',\n 'draw',\n 'dream',\n 'dress',\n 'drift',\n 'drill',\n 'drink',\n 'drip',\n 'drive',\n 'drop',\n 'drum',\n 'dry',\n 'duck',\n 'dumb',\n 'dune',\n 'during',\n 'dust',\n 'dutch',\n 'duty',\n 'dwarf',\n 'dynamic',\n 'eager',\n 'eagle',\n 'early',\n 'earn',\n 'earth',\n 'easily',\n 'east',\n 'easy',\n 'echo',\n 'ecology',\n 'economy',\n 'edge',\n 'edit',\n 'educate',\n 'effort',\n 'egg',\n 'eight',\n 'either',\n 'elbow',\n 'elder',\n 'electric',\n 'elegant',\n 'element',\n 'elephant',\n 'elevator',\n 'elite',\n 'else',\n 'embark',\n 'embody',\n 'embrace',\n 'emerge',\n 'emotion',\n 'employ',\n 'empower',\n 'empty',\n 'enable',\n 'enact',\n 'end',\n 'endless',\n 'endorse',\n 'enemy',\n 'energy',\n 'enforce',\n 'engage',\n 'engine',\n 'enhance',\n 'enjoy',\n 'enlist',\n 'enough',\n 'enrich',\n 'enroll',\n 'ensure',\n 'enter',\n 'entire',\n 'entry',\n 'envelope',\n 'episode',\n 'equal',\n 'equip',\n 'era',\n 'erase',\n 'erode',\n 'erosion',\n 'error',\n 'erupt',\n 'escape',\n 'essay',\n 'essence',\n 'estate',\n 'eternal',\n 'ethics',\n 'evidence',\n 'evil',\n 'evoke',\n 'evolve',\n 'exact',\n 'example',\n 'excess',\n 'exchange',\n 'excite',\n 'exclude',\n 'excuse',\n 'execute',\n 'exercise',\n 'exhaust',\n 'exhibit',\n 'exile',\n 'exist',\n 'exit',\n 'exotic',\n 'expand',\n 'expect',\n 'expire',\n 'explain',\n 'expose',\n 'express',\n 'extend',\n 'extra',\n 'eye',\n 'eyebrow',\n 'fabric',\n 'face',\n 'faculty',\n 'fade',\n 'faint',\n 'faith',\n 'fall',\n 'false',\n 'fame',\n 'family',\n 'famous',\n 'fan',\n 'fancy',\n 'fantasy',\n 'farm',\n 'fashion',\n 'fat',\n 'fatal',\n 'father',\n 'fatigue',\n 'fault',\n 'favorite',\n 'feature',\n 'february',\n 'federal',\n 'fee',\n 'feed',\n 'feel',\n 'female',\n 'fence',\n 'festival',\n 'fetch',\n 'fever',\n 'few',\n 'fiber',\n 'fiction',\n 'field',\n 'figure',\n 'file',\n 'film',\n 'filter',\n 'final',\n 'find',\n 'fine',\n 'finger',\n 'finish',\n 'fire',\n 'firm',\n 'first',\n 'fiscal',\n 'fish',\n 'fit',\n 'fitness',\n 'fix',\n 'flag',\n 'flame',\n 'flash',\n 'flat',\n 'flavor',\n 'flee',\n 'flight',\n 'flip',\n 'float',\n 'flock',\n 'floor',\n 'flower',\n 'fluid',\n 'flush',\n 'fly',\n 'foam',\n 'focus',\n 'fog',\n 'foil',\n 'fold',\n 'follow',\n 'food',\n 'foot',\n 'force',\n 'forest',\n 'forget',\n 'fork',\n 'fortune',\n 'forum',\n 'forward',\n 'fossil',\n 'foster',\n 'found',\n 'fox',\n 'fragile',\n 'frame',\n 'frequent',\n 'fresh',\n 'friend',\n 'fringe',\n 'frog',\n 'front',\n 'frost',\n 'frown',\n 'frozen',\n 'fruit',\n 'fuel',\n 'fun',\n 'funny',\n 'furnace',\n 'fury',\n 'future',\n 'gadget',\n 'gain',\n 'galaxy',\n 'gallery',\n 'game',\n 'gap',\n 'garage',\n 'garbage',\n 'garden',\n 'garlic',\n 'garment',\n 'gas',\n 'gasp',\n 'gate',\n 'gather',\n 'gauge',\n 'gaze',\n 'general',\n 'genius',\n 'genre',\n 'gentle',\n 'genuine',\n 'gesture',\n 'ghost',\n 'giant',\n 'gift',\n 'giggle',\n 'ginger',\n 'giraffe',\n 'girl',\n 'give',\n 'glad',\n 'glance',\n 'glare',\n 'glass',\n 'glide',\n 'glimpse',\n 'globe',\n 'gloom',\n 'glory',\n 'glove',\n 'glow',\n 'glue',\n 'goat',\n 'goddess',\n 'gold',\n 'good',\n 'goose',\n 'gorilla',\n 'gospel',\n 'gossip',\n 'govern',\n 'gown',\n 'grab',\n 'grace',\n 'grain',\n 'grant',\n 'grape',\n 'grass',\n 'gravity',\n 'great',\n 'green',\n 'grid',\n 'grief',\n 'grit',\n 'grocery',\n 'group',\n 'grow',\n 'grunt',\n 'guard',\n 'guess',\n 'guide',\n 'guilt',\n 'guitar',\n 'gun',\n 'gym',\n 'habit',\n 'hair',\n 'half',\n 'hammer',\n 'hamster',\n 'hand',\n 'happy',\n 'harbor',\n 'hard',\n 'harsh',\n 'harvest',\n 'hat',\n 'have',\n 'hawk',\n 'hazard',\n 'head',\n 'health',\n 'heart',\n 'heavy',\n 'hedgehog',\n 'height',\n 'hello',\n 'helmet',\n 'help',\n 'hen',\n 'hero',\n 'hidden',\n 'high',\n 'hill',\n 'hint',\n 'hip',\n 'hire',\n 'history',\n 'hobby',\n 'hockey',\n 'hold',\n 'hole',\n 'holiday',\n 'hollow',\n 'home',\n 'honey',\n 'hood',\n 'hope',\n 'horn',\n 'horror',\n 'horse',\n 'hospital',\n 'host',\n 'hotel',\n 'hour',\n 'hover',\n 'hub',\n 'huge',\n 'human',\n 'humble',\n 'humor',\n 'hundred',\n 'hungry',\n 'hunt',\n 'hurdle',\n 'hurry',\n 'hurt',\n 'husband',\n 'hybrid',\n 'ice',\n 'icon',\n 'idea',\n 'identify',\n 'idle',\n 'ignore',\n 'ill',\n 'illegal',\n 'illness',\n 'image',\n 'imitate',\n 'immense',\n 'immune',\n 'impact',\n 'impose',\n 'improve',\n 'impulse',\n 'inch',\n 'include',\n 'income',\n 'increase',\n 'index',\n 'indicate',\n 'indoor',\n 'industry',\n 'infant',\n 'inflict',\n 'inform',\n 'inhale',\n 'inherit',\n 'initial',\n 'inject',\n 'injury',\n 'inmate',\n 'inner',\n 'innocent',\n 'input',\n 'inquiry',\n 'insane',\n 'insect',\n 'inside',\n 'inspire',\n 'install',\n 'intact',\n 'interest',\n 'into',\n 'invest',\n 'invite',\n 'involve',\n 'iron',\n 'island',\n 'isolate',\n 'issue',\n 'item',\n 'ivory',\n 'jacket',\n 'jaguar',\n 'jar',\n 'jazz',\n 'jealous',\n 'jeans',\n 'jelly',\n 'jewel',\n 'job',\n 'join',\n 'joke',\n 'journey',\n 'joy',\n 'judge',\n 'juice',\n 'jump',\n 'jungle',\n 'junior',\n 'junk',\n 'just',\n 'kangaroo',\n 'keen',\n 'keep',\n 'ketchup',\n 'key',\n 'kick',\n 'kid',\n 'kidney',\n 'kind',\n 'kingdom',\n 'kiss',\n 'kit',\n 'kitchen',\n 'kite',\n 'kitten',\n 'kiwi',\n 'knee',\n 'knife',\n 'knock',\n 'know',\n 'lab',\n 'label',\n 'labor',\n 'ladder',\n 'lady',\n 'lake',\n 'lamp',\n 'language',\n 'laptop',\n 'large',\n 'later',\n 'latin',\n 'laugh',\n 'laundry',\n 'lava',\n 'law',\n 'lawn',\n 'lawsuit',\n 'layer',\n 'lazy',\n 'leader',\n 'leaf',\n 'learn',\n 'leave',\n 'lecture',\n 'left',\n 'leg',\n 'legal',\n 'legend',\n 'leisure',\n 'lemon',\n 'lend',\n 'length',\n 'lens',\n 'leopard',\n 'lesson',\n 'letter',\n 'level',\n 'liar',\n 'liberty',\n 'library',\n 'license',\n 'life',\n 'lift',\n 'light',\n 'like',\n 'limb',\n 'limit',\n 'link',\n 'lion',\n 'liquid',\n 'list',\n 'little',\n 'live',\n 'lizard',\n 'load',\n 'loan',\n 'lobster',\n 'local',\n 'lock',\n 'logic',\n 'lonely',\n 'long',\n 'loop',\n 'lottery',\n 'loud',\n 'lounge',\n 'love',\n 'loyal',\n 'lucky',\n 'luggage',\n 'lumber',\n 'lunar',\n 'lunch',\n 'luxury',\n 'lyrics',\n 'machine',\n 'mad',\n 'magic',\n 'magnet',\n 'maid',\n 'mail',\n 'main',\n 'major',\n 'make',\n 'mammal',\n 'man',\n 'manage',\n 'mandate',\n 'mango',\n 'mansion',\n 'manual',\n 'maple',\n 'marble',\n 'march',\n 'margin',\n 'marine',\n 'market',\n 'marriage',\n 'mask',\n 'mass',\n 'master',\n 'match',\n 'material',\n 'math',\n 'matrix',\n 'matter',\n 'maximum',\n 'maze',\n 'meadow',\n 'mean',\n 'measure',\n 'meat',\n 'mechanic',\n 'medal',\n 'media',\n 'melody',\n 'melt',\n 'member',\n 'memory',\n 'mention',\n 'menu',\n 'mercy',\n 'merge',\n 'merit',\n 'merry',\n 'mesh',\n 'message',\n 'metal',\n 'method',\n 'middle',\n 'midnight',\n 'milk',\n 'million',\n 'mimic',\n 'mind',\n 'minimum',\n 'minor',\n 'minute',\n 'miracle',\n 'mirror',\n 'misery',\n 'miss',\n 'mistake',\n 'mix',\n 'mixed',\n 'mixture',\n 'mobile',\n 'model',\n 'modify',\n 'mom',\n 'moment',\n 'monitor',\n 'monkey',\n 'monster',\n 'month',\n 'moon',\n 'moral',\n 'more',\n 'morning',\n 'mosquito',\n 'mother',\n 'motion',\n 'motor',\n 'mountain',\n 'mouse',\n 'move',\n 'movie',\n 'much',\n 'muffin',\n 'mule',\n 'multiply',\n 'muscle',\n 'museum',\n 'mushroom',\n 'music',\n 'must',\n 'mutual',\n 'myself',\n 'mystery',\n 'myth',\n 'naive',\n 'name',\n 'napkin',\n 'narrow',\n 'nasty',\n 'nation',\n 'nature',\n 'near',\n 'neck',\n 'need',\n 'negative',\n 'neglect',\n 'neither',\n 'nephew',\n 'nerve',\n 'nest',\n 'net',\n 'network',\n 'neutral',\n 'never',\n 'news',\n 'next',\n 'nice',\n 'night',\n 'noble',\n 'noise',\n 'nominee',\n 'noodle',\n 'normal',\n 'north',\n 'nose',\n 'notable',\n 'note',\n 'nothing',\n 'notice',\n 'novel',\n 'now',\n 'nuclear',\n 'number',\n 'nurse',\n 'nut',\n 'oak',\n 'obey',\n 'object',\n 'oblige',\n 'obscure',\n 'observe',\n 'obtain',\n 'obvious',\n 'occur',\n 'ocean',\n 'october',\n 'odor',\n 'off',\n 'offer',\n 'office',\n 'often',\n 'oil',\n 'okay',\n 'old',\n 'olive',\n 'olympic',\n 'omit',\n 'once',\n 'one',\n 'onion',\n 'online',\n 'only',\n 'open',\n 'opera',\n 'opinion',\n 'oppose',\n 'option',\n 'orange',\n 'orbit',\n 'orchard',\n 'order',\n 'ordinary',\n 'organ',\n 'orient',\n 'original',\n 'orphan',\n 'ostrich',\n 'other',\n 'outdoor',\n 'outer',\n 'output',\n 'outside',\n 'oval',\n 'oven',\n 'over',\n 'own',\n 'owner',\n 'oxygen',\n 'oyster',\n 'ozone',\n 'pact',\n 'paddle',\n 'page',\n 'pair',\n 'palace',\n 'palm',\n 'panda',\n 'panel',\n 'panic',\n 'panther',\n 'paper',\n 'parade',\n 'parent',\n 'park',\n 'parrot',\n 'party',\n 'pass',\n 'patch',\n 'path',\n 'patient',\n 'patrol',\n 'pattern',\n 'pause',\n 'pave',\n 'payment',\n 'peace',\n 'peanut',\n 'pear',\n 'peasant',\n 'pelican',\n 'pen',\n 'penalty',\n 'pencil',\n 'people',\n 'pepper',\n 'perfect',\n 'permit',\n 'person',\n 'pet',\n 'phone',\n 'photo',\n 'phrase',\n 'physical',\n 'piano',\n 'picnic',\n 'picture',\n 'piece',\n 'pig',\n 'pigeon',\n 'pill',\n 'pilot',\n 'pink',\n 'pioneer',\n 'pipe',\n 'pistol',\n 'pitch',\n 'pizza',\n 'place',\n 'planet',\n 'plastic',\n 'plate',\n 'play',\n 'please',\n 'pledge',\n 'pluck',\n 'plug',\n 'plunge',\n 'poem',\n 'poet',\n 'point',\n 'polar',\n 'pole',\n 'police',\n 'pond',\n 'pony',\n 'pool',\n 'popular',\n 'portion',\n 'position',\n 'possible',\n 'post',\n 'potato',\n 'pottery',\n 'poverty',\n 'powder',\n 'power',\n 'practice',\n 'praise',\n 'predict',\n 'prefer',\n 'prepare',\n 'present',\n 'pretty',\n 'prevent',\n 'price',\n 'pride',\n 'primary',\n 'print',\n 'priority',\n 'prison',\n 'private',\n 'prize',\n 'problem',\n 'process',\n 'produce',\n 'profit',\n 'program',\n 'project',\n 'promote',\n 'proof',\n 'property',\n 'prosper',\n 'protect',\n 'proud',\n 'provide',\n 'public',\n 'pudding',\n 'pull',\n 'pulp',\n 'pulse',\n 'pumpkin',\n 'punch',\n 'pupil',\n 'puppy',\n 'purchase',\n 'purity',\n 'purpose',\n 'purse',\n 'push',\n 'put',\n 'puzzle',\n 'pyramid',\n 'quality',\n 'quantum',\n 'quarter',\n 'question',\n 'quick',\n 'quit',\n 'quiz',\n 'quote',\n 'rabbit',\n 'raccoon',\n 'race',\n 'rack',\n 'radar',\n 'radio',\n 'rail',\n 'rain',\n 'raise',\n 'rally',\n 'ramp',\n 'ranch',\n 'random',\n 'range',\n 'rapid',\n 'rare',\n 'rate',\n 'rather',\n 'raven',\n 'raw',\n 'razor',\n 'ready',\n 'real',\n 'reason',\n 'rebel',\n 'rebuild',\n 'recall',\n 'receive',\n 'recipe',\n 'record',\n 'recycle',\n 'reduce',\n 'reflect',\n 'reform',\n 'refuse',\n 'region',\n 'regret',\n 'regular',\n 'reject',\n 'relax',\n 'release',\n 'relief',\n 'rely',\n 'remain',\n 'remember',\n 'remind',\n 'remove',\n 'render',\n 'renew',\n 'rent',\n 'reopen',\n 'repair',\n 'repeat',\n 'replace',\n 'report',\n 'require',\n 'rescue',\n 'resemble',\n 'resist',\n 'resource',\n 'response',\n 'result',\n 'retire',\n 'retreat',\n 'return',\n 'reunion',\n 'reveal',\n 'review',\n 'reward',\n 'rhythm',\n 'rib',\n 'ribbon',\n 'rice',\n 'rich',\n 'ride',\n 'ridge',\n 'rifle',\n 'right',\n 'rigid',\n 'ring',\n 'riot',\n 'ripple',\n 'risk',\n 'ritual',\n 'rival',\n 'river',\n 'road',\n 'roast',\n 'robot',\n 'robust',\n 'rocket',\n 'romance',\n 'roof',\n 'rookie',\n 'room',\n 'rose',\n 'rotate',\n 'rough',\n 'round',\n 'route',\n 'royal',\n 'rubber',\n 'rude',\n 'rug',\n 'rule',\n 'run',\n 'runway',\n 'rural',\n 'sad',\n 'saddle',\n 'sadness',\n 'safe',\n 'sail',\n 'salad',\n 'salmon',\n 'salon',\n 'salt',\n 'salute',\n 'same',\n 'sample',\n 'sand',\n 'satisfy',\n 'satoshi',\n 'sauce',\n 'sausage',\n 'save',\n 'say',\n 'scale',\n 'scan',\n 'scare',\n 'scatter',\n 'scene',\n 'scheme',\n 'school',\n 'science',\n 'scissors',\n 'scorpion',\n 'scout',\n 'scrap',\n 'screen',\n 'script',\n 'scrub',\n 'sea',\n 'search',\n 'season',\n 'seat',\n 'second',\n 'secret',\n 'section',\n 'security',\n 'seed',\n 'seek',\n 'segment',\n 'select',\n 'sell',\n 'seminar',\n 'senior',\n 'sense',\n 'sentence',\n 'series',\n 'service',\n 'session',\n 'settle',\n 'setup',\n 'seven',\n 'shadow',\n 'shaft',\n 'shallow',\n 'share',\n 'shed',\n 'shell',\n 'sheriff',\n 'shield',\n 'shift',\n 'shine',\n 'ship',\n 'shiver',\n 'shock',\n 'shoe',\n 'shoot',\n 'shop',\n 'short',\n 'shoulder',\n 'shove',\n 'shrimp',\n 'shrug',\n 'shuffle',\n 'shy',\n 'sibling',\n 'sick',\n 'side',\n 'siege',\n 'sight',\n 'sign',\n 'silent',\n 'silk',\n 'silly',\n 'silver',\n 'similar',\n 'simple',\n 'since',\n 'sing',\n 'siren',\n 'sister',\n 'situate',\n 'six',\n 'size',\n 'skate',\n 'sketch',\n 'ski',\n 'skill',\n 'skin',\n 'skirt',\n 'skull',\n 'slab',\n 'slam',\n 'sleep',\n 'slender',\n 'slice',\n 'slide',\n 'slight',\n 'slim',\n 'slogan',\n 'slot',\n 'slow',\n 'slush',\n 'small',\n 'smart',\n 'smile',\n 'smoke',\n 'smooth',\n 'snack',\n 'snake',\n 'snap',\n 'sniff',\n 'snow',\n 'soap',\n 'soccer',\n 'social',\n 'sock',\n 'soda',\n 'soft',\n 'solar',\n 'soldier',\n 'solid',\n 'solution',\n 'solve',\n 'someone',\n 'song',\n 'soon',\n 'sorry',\n 'sort',\n 'soul',\n 'sound',\n 'soup',\n 'source',\n 'south',\n 'space',\n 'spare',\n 'spatial',\n 'spawn',\n 'speak',\n 'special',\n 'speed',\n 'spell',\n 'spend',\n 'sphere',\n 'spice',\n 'spider',\n 'spike',\n 'spin',\n 'spirit',\n 'split',\n 'spoil',\n 'sponsor',\n 'spoon',\n 'sport',\n 'spot',\n 'spray',\n 'spread',\n 'spring',\n 'spy',\n 'square',\n 'squeeze',\n 'squirrel',\n 'stable',\n 'stadium',\n 'staff',\n 'stage',\n 'stairs',\n 'stamp',\n 'stand',\n 'start',\n 'state',\n 'stay',\n 'steak',\n 'steel',\n 'stem',\n 'step',\n 'stereo',\n 'stick',\n 'still',\n 'sting',\n 'stock',\n 'stomach',\n 'stone',\n 'stool',\n 'story',\n 'stove',\n 'strategy',\n 'street',\n 'strike',\n 'strong',\n 'struggle',\n 'student',\n 'stuff',\n 'stumble',\n 'style',\n 'subject',\n 'submit',\n 'subway',\n 'success',\n 'such',\n 'sudden',\n 'suffer',\n 'sugar',\n 'suggest',\n 'suit',\n 'summer',\n 'sun',\n 'sunny',\n 'sunset',\n 'super',\n 'supply',\n 'supreme',\n 'sure',\n 'surface',\n 'surge',\n 'surprise',\n 'surround',\n 'survey',\n 'suspect',\n 'sustain',\n 'swallow',\n 'swamp',\n 'swap',\n 'swarm',\n 'swear',\n 'sweet',\n 'swift',\n 'swim',\n 'swing',\n 'switch',\n 'sword',\n 'symbol',\n 'symptom',\n 'syrup',\n 'system',\n 'table',\n 'tackle',\n 'tag',\n 'tail',\n 'talent',\n 'talk',\n 'tank',\n 'tape',\n 'target',\n 'task',\n 'taste',\n 'tattoo',\n 'taxi',\n 'teach',\n 'team',\n 'tell',\n 'ten',\n 'tenant',\n 'tennis',\n 'tent',\n 'term',\n 'test',\n 'text',\n 'thank',\n 'that',\n 'theme',\n 'then',\n 'theory',\n 'there',\n 'they',\n 'thing',\n 'this',\n 'thought',\n 'three',\n 'thrive',\n 'throw',\n 'thumb',\n 'thunder',\n 'ticket',\n 'tide',\n 'tiger',\n 'tilt',\n 'timber',\n 'time',\n 'tiny',\n 'tip',\n 'tired',\n 'tissue',\n 'title',\n 'toast',\n 'tobacco',\n 'today',\n 'toddler',\n 'toe',\n 'together',\n 'toilet',\n 'token',\n 'tomato',\n 'tomorrow',\n 'tone',\n 'tongue',\n 'tonight',\n 'tool',\n 'tooth',\n 'top',\n 'topic',\n 'topple',\n 'torch',\n 'tornado',\n 'tortoise',\n 'toss',\n 'total',\n 'tourist',\n 'toward',\n 'tower',\n 'town',\n 'toy',\n 'track',\n 'trade',\n 'traffic',\n 'tragic',\n 'train',\n 'transfer',\n 'trap',\n 'trash',\n 'travel',\n 'tray',\n 'treat',\n 'tree',\n 'trend',\n 'trial',\n 'tribe',\n 'trick',\n 'trigger',\n 'trim',\n 'trip',\n 'trophy',\n 'trouble',\n 'truck',\n 'true',\n 'truly',\n 'trumpet',\n 'trust',\n 'truth',\n 'try',\n 'tube',\n 'tuition',\n 'tumble',\n 'tuna',\n 'tunnel',\n 'turkey',\n 'turn',\n 'turtle',\n 'twelve',\n 'twenty',\n 'twice',\n 'twin',\n 'twist',\n 'two',\n 'type',\n 'typical',\n 'ugly',\n 'umbrella',\n 'unable',\n 'unaware',\n 'uncle',\n 'uncover',\n 'under',\n 'undo',\n 'unfair',\n 'unfold',\n 'unhappy',\n 'uniform',\n 'unique',\n 'unit',\n 'universe',\n 'unknown',\n 'unlock',\n 'until',\n 'unusual',\n 'unveil',\n 'update',\n 'upgrade',\n 'uphold',\n 'upon',\n 'upper',\n 'upset',\n 'urban',\n 'urge',\n 'usage',\n 'use',\n 'used',\n 'useful',\n 'useless',\n 'usual',\n 'utility',\n 'vacant',\n 'vacuum',\n 'vague',\n 'valid',\n 'valley',\n 'valve',\n 'van',\n 'vanish',\n 'vapor',\n 'various',\n 'vast',\n 'vault',\n 'vehicle',\n 'velvet',\n 'vendor',\n 'venture',\n 'venue',\n 'verb',\n 'verify',\n 'version',\n 'very',\n 'vessel',\n 'veteran',\n 'viable',\n 'vibrant',\n 'vicious',\n 'victory',\n 'video',\n 'view',\n 'village',\n 'vintage',\n 'violin',\n 'virtual',\n 'virus',\n 'visa',\n 'visit',\n 'visual',\n 'vital',\n 'vivid',\n 'vocal',\n 'voice',\n 'void',\n 'volcano',\n 'volume',\n 'vote',\n 'voyage',\n 'wage',\n 'wagon',\n 'wait',\n 'walk',\n 'wall',\n 'walnut',\n 'want',\n 'warfare',\n 'warm',\n 'warrior',\n 'wash',\n 'wasp',\n 'waste',\n 'water',\n 'wave',\n 'way',\n 'wealth',\n 'weapon',\n 'wear',\n 'weasel',\n 'weather',\n 'web',\n 'wedding',\n 'weekend',\n 'weird',\n 'welcome',\n 'west',\n 'wet',\n 'whale',\n 'what',\n 'wheat',\n 'wheel',\n 'when',\n 'where',\n 'whip',\n 'whisper',\n 'wide',\n 'width',\n 'wife',\n 'wild',\n 'will',\n 'win',\n 'window',\n 'wine',\n 'wing',\n 'wink',\n 'winner',\n 'winter',\n 'wire',\n 'wisdom',\n 'wise',\n 'wish',\n 'witness',\n 'wolf',\n 'woman',\n 'wonder',\n 'wood',\n 'wool',\n 'word',\n 'work',\n 'world',\n 'worry',\n 'worth',\n 'wrap',\n 'wreck',\n 'wrestle',\n 'wrist',\n 'write',\n 'wrong',\n 'yard',\n 'year',\n 'yellow',\n 'you',\n 'young',\n 'youth',\n 'zebra',\n 'zero',\n 'zone',\n 'zoo',\n];\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { sha256 } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { arrayify } from '@fuel-ts/utils';\n\n/* Mnemonic phrase composed by words from the provided wordlist it can be a text or a array of words */\nexport type MnemonicPhrase = string | Array<string>;\n\nexport function toUtf8Bytes(stri: string): Uint8Array {\n const str = stri.normalize('NFKD');\n\n const result = [];\n for (let i = 0; i < str.length; i += 1) {\n const c = str.charCodeAt(i);\n\n if (c < 0x80) {\n result.push(c);\n } else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n } else if ((c & 0xfc00) === 0xd800) {\n i += 1;\n const c2 = str.charCodeAt(i);\n\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new FuelError(\n ErrorCode.INVALID_INPUT_PARAMETERS,\n 'Invalid UTF-8 in the input string.'\n );\n }\n\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n } else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n\n return Uint8Array.from(result);\n}\n\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits: number): number {\n return (1 << bits) - 1;\n}\n\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits: number): number {\n return ((1 << bits) - 1) << (8 - bits);\n}\n\nexport function getWords(mnemonic: MnemonicPhrase): Array<string> {\n if (!Array.isArray(mnemonic)) {\n return mnemonic.split(/\\s+/);\n }\n return mnemonic;\n}\n\nexport function getPhrase(mnemonic: MnemonicPhrase): string {\n if (Array.isArray(mnemonic)) {\n return mnemonic.join(' ');\n }\n return mnemonic;\n}\n\nexport function entropyToMnemonicIndices(entropy: Uint8Array): Array<number> {\n const indices: Array<number> = [0];\n\n let remainingBits = 11;\n for (let i = 0; i < entropy.length; i += 1) {\n if (remainingBits > 8) {\n indices[indices.length - 1] <<= 8;\n indices[indices.length - 1] |= entropy[i];\n\n remainingBits -= 8;\n // This byte will complete an 11-bit index\n } else {\n indices[indices.length - 1] <<= remainingBits;\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n\n // Start the next word\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n\n remainingBits += 3;\n }\n }\n\n // Compute the checksum bits\n const checksumBits = entropy.length / 4;\n const checksum = arrayify(sha256(entropy))[0] & getUpperMask(checksumBits);\n\n // Shift the checksum into the word indices\n indices[indices.length - 1] <<= checksumBits;\n indices[indices.length - 1] |= checksum >> (8 - checksumBits);\n\n return indices;\n}\n\nexport function mnemonicWordsToEntropy(words: Array<string>, wordlist: Array<string>): BytesLike {\n const size = Math.ceil((11 * words.length) / 8);\n const entropy = arrayify(new Uint8Array(size));\n\n let offset = 0;\n for (let i = 0; i < words.length; i += 1) {\n const index = wordlist.indexOf(words[i].normalize('NFKD'));\n if (index === -1) {\n throw new FuelError(\n ErrorCode.INVALID_MNEMONIC,\n `Invalid mnemonic: the word '${words[i]}' is not found in the provided wordlist.`\n );\n }\n\n for (let bit = 0; bit < 11; bit += 1) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= 1 << (7 - (offset % 8));\n }\n offset += 1;\n }\n }\n const entropyBits = (32 * words.length) / 3;\n const checksumBits = words.length / 3;\n const checksumMask = getUpperMask(checksumBits);\n const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n throw new FuelError(\n ErrorCode.INVALID_CHECKSUM,\n 'Checksum validation failed for the provided mnemonic.'\n );\n }\n\n return entropy.slice(0, entropyBits / 8);\n}\n","//\n// Because WalletLocked and WalletUnlocked has a cycle dependency\n// it's not possible to split the two classes in different files\n//\n/* eslint-disable max-classes-per-file */\nimport type { BytesLike } from '@fuel-ts/interfaces';\n\nimport { Account } from '../account';\nimport { HDWallet } from '../hdwallet';\nimport { Mnemonic } from '../mnemonic';\nimport type { Provider } from '../providers';\nimport { Signer } from '../signer';\n\nimport { BaseWalletUnlocked } from './base-wallet-unlocked';\nimport { decryptKeystoreWallet } from './keystore-wallet';\n\nexport interface GenerateOptions {\n /** Additional entropy for the random bytes */\n entropy?: BytesLike;\n provider?: Provider;\n}\n\n/**\n * `WalletLocked` provides the functionalities for a locked wallet.\n */\nexport class WalletLocked extends Account {\n /**\n * Unlocks the wallet using the provided private key and returns an instance of WalletUnlocked.\n *\n * @param privateKey - The private key used to unlock the wallet.\n * @returns An instance of WalletUnlocked.\n */\n unlock(privateKey: BytesLike): WalletUnlocked {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return new WalletUnlocked(privateKey, this._provider);\n }\n}\n\n/**\n * `WalletUnlocked` provides the functionalities for an unlocked wallet.\n */\nexport class WalletUnlocked extends BaseWalletUnlocked {\n /**\n * Locks the wallet and returns an instance of WalletLocked.\n *\n * @returns An instance of WalletLocked.\n */\n lock(): WalletLocked {\n this.signer = () => new Signer('0x00');\n return new WalletLocked(this.address, this._provider);\n }\n\n /**\n * Generate a new Wallet Unlocked with a random key pair.\n *\n * @param generateOptions - Options to customize the generation process (optional).\n * @returns An instance of WalletUnlocked.\n */\n static generate(generateOptions?: GenerateOptions): WalletUnlocked {\n const privateKey = Signer.generatePrivateKey(generateOptions?.entropy);\n\n return new WalletUnlocked(privateKey, generateOptions?.provider);\n }\n\n /**\n * Create a Wallet Unlocked from a seed.\n *\n * @param seed - The seed phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @returns An instance of WalletUnlocked.\n */\n static fromSeed(seed: string, path?: string, provider?: Provider): WalletUnlocked {\n const hdWallet = HDWallet.fromSeed(seed);\n const childWallet = hdWallet.derivePath(path || WalletUnlocked.defaultPath);\n\n return new WalletUnlocked(<string>childWallet.privateKey, provider);\n }\n\n /**\n * Create a Wallet Unlocked from a mnemonic phrase.\n *\n * @param mnemonic - The mnemonic phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @param passphrase - The passphrase for the mnemonic (optional).\n * @returns An instance of WalletUnlocked.\n */\n static fromMnemonic(\n mnemonic: string,\n path?: string,\n passphrase?: BytesLike,\n provider?: Provider\n ): WalletUnlocked {\n const seed = Mnemonic.mnemonicToSeed(mnemonic, passphrase);\n const hdWallet = HDWallet.fromSeed(seed);\n const childWallet = hdWallet.derivePath(path || WalletUnlocked.defaultPath);\n\n return new WalletUnlocked(<string>childWallet.privateKey, provider);\n }\n\n /**\n * Create a Wallet Unlocked from an extended key.\n *\n * @param extendedKey - The extended key.\n * @param provider - A Provider instance (optional).\n * @returns An instance of WalletUnlocked.\n */\n static fromExtendedKey(extendedKey: string, provider?: Provider): WalletUnlocked {\n const hdWallet = HDWallet.fromExtendedKey(extendedKey);\n\n return new WalletUnlocked(<string>hdWallet.privateKey, provider);\n }\n\n /**\n * Create a Wallet Unlocked from an encrypted JSON.\n *\n * @param jsonWallet - The encrypted JSON keystore.\n * @param password - The password to decrypt the JSON.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static async fromEncryptedJson(\n jsonWallet: string,\n password: string,\n provider?: Provider\n ): Promise<WalletUnlocked> {\n const privateKey = await decryptKeystoreWallet(jsonWallet, password);\n\n return new WalletUnlocked(privateKey, provider);\n }\n}\n","import type { AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\n\nimport type { Provider } from '../providers';\n\nimport { WalletLocked, WalletUnlocked } from './wallets';\n\n/**\n * `Wallet` provides methods to create locked and unlocked wallet instances.\n */\nexport class Wallet {\n /**\n * Creates a locked wallet instance from an address and a provider.\n *\n * @param address - The address of the wallet.\n * @param provider - A Provider instance (optional).\n * @returns A locked wallet instance.\n */\n static fromAddress(address: string | AbstractAddress, provider?: Provider): WalletLocked {\n return new WalletLocked(address, provider);\n }\n\n /**\n * Creates an unlocked wallet instance from a private key and a provider.\n *\n * @param privateKey - The private key of the wallet.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static fromPrivateKey(privateKey: BytesLike, provider?: Provider) {\n return new WalletUnlocked(privateKey, provider);\n }\n\n /**\n * Generate a new Wallet Unlocked with a random key pair.\n *\n * @param generateOptions - Options to customize the generation process (optional).\n * @returns An unlocked wallet instance.\n */\n static generate = WalletUnlocked.generate;\n\n /**\n * Create a Wallet Unlocked from a seed.\n *\n * @param seed - The seed phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @returns An unlocked wallet instance.\n */\n static fromSeed = WalletUnlocked.fromSeed;\n\n /**\n * Create a Wallet Unlocked from a mnemonic phrase.\n *\n * @param mnemonic - The mnemonic phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @param passphrase - The passphrase for the mnemonic (optional).\n * @returns An unlocked wallet instance.\n */\n static fromMnemonic = WalletUnlocked.fromMnemonic;\n\n /**\n * Create a Wallet Unlocked from an extended key.\n *\n * @param extendedKey - The extended key.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static fromExtendedKey = WalletUnlocked.fromExtendedKey;\n\n /**\n * Create a Wallet Unlocked from an encrypted JSON.\n *\n * @param jsonWallet - The encrypted JSON keystore.\n * @param password - The password to decrypt the JSON.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static fromEncryptedJson = WalletUnlocked.fromEncryptedJson;\n}\n","import { randomBytes } from '@fuel-ts/crypto';\n\nimport type { Account } from '../account';\nimport { coinQuantityfy, ScriptTransactionRequest } from '../providers';\nimport type { CoinQuantityLike } from '../providers';\nimport { WalletUnlocked } from '../wallet';\n\nexport const seedTestWallet = async (wallet: Account, quantities: CoinQuantityLike[]) => {\n const genesisWallet = new WalletUnlocked(\n process.env.GENESIS_SECRET || randomBytes(32),\n wallet.provider\n );\n\n // Connect to the same Provider as wallet\n const resources = await genesisWallet.getResourcesToSpend(quantities);\n\n const { minGasPrice } = genesisWallet.provider.getGasConfig();\n\n // Create transaction\n const request = new ScriptTransactionRequest({\n gasLimit: 10000,\n gasPrice: minGasPrice,\n });\n\n request.addResources(resources);\n\n quantities\n .map(coinQuantityfy)\n .forEach(({ amount, assetId }) => request.addCoinOutput(wallet.address, amount, assetId));\n await genesisWallet.sendTransaction(request, { awaitExecution: true });\n};\n","import type { Provider, CoinQuantityLike } from '../providers';\nimport type { WalletUnlocked } from '../wallet';\nimport { Wallet } from '../wallet';\n\nimport { seedTestWallet } from './seedTestWallet';\n\nexport const generateTestWallet = async (\n provider: Provider,\n quantities?: CoinQuantityLike[]\n): Promise<WalletUnlocked> => {\n const wallet = Wallet.generate({ provider });\n if (quantities) {\n await seedTestWallet(wallet, quantities);\n }\n return wallet;\n};\n","import { BaseAssetId } from '@fuel-ts/address/configs';\nimport { toHex } from '@fuel-ts/math';\nimport { defaultChainConfig, defaultConsensusKey, hexlify } from '@fuel-ts/utils';\nimport { findBinPath } from '@fuel-ts/utils/cli-utils';\nimport type { ChildProcessWithoutNullStreams } from 'child_process';\nimport { spawn } from 'child_process';\nimport { randomUUID } from 'crypto';\nimport { existsSync, mkdirSync, rmSync, writeFileSync } from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport { getPortPromise } from 'portfinder';\nimport treeKill from 'tree-kill';\n\nimport { Provider } from '../providers';\nimport { Signer } from '../signer';\nimport type { WalletUnlocked } from '../wallet';\n\nimport { generateTestWallet } from './generateTestWallet';\n\nconst getFlagValueFromArgs = (args: string[], flag: string) => {\n const flagIndex = args.indexOf(flag);\n if (flagIndex === -1) {\n return undefined;\n }\n return args[flagIndex + 1];\n};\n\nconst extractRemainingArgs = (args: string[], flagsToRemove: string[]) => {\n const newArgs = [...args];\n flagsToRemove.forEach((flag) => {\n const flagIndex = newArgs.indexOf(flag);\n if (flagIndex !== -1) {\n newArgs.splice(flagIndex, 2);\n }\n });\n return newArgs;\n};\n\nexport type LaunchNodeOptions = {\n ip?: string;\n port?: string;\n args?: string[];\n useSystemFuelCore?: boolean;\n loggingEnabled?: boolean;\n debugEnabled?: boolean;\n basePath?: string;\n};\n\nexport type LaunchNodeResult = Promise<{\n cleanup: () => void;\n ip: string;\n port: string;\n chainConfigPath: string;\n}>;\n\nexport type KillNodeParams = {\n child: ChildProcessWithoutNullStreams;\n configPath: string;\n killFn: (pid: number) => void;\n state: {\n isDead: boolean;\n };\n};\n\nexport const killNode = (params: KillNodeParams) => {\n const { child, configPath, state, killFn } = params;\n if (!state.isDead) {\n if (child.pid) {\n state.isDead = true;\n killFn(Number(child.pid));\n }\n\n // Remove all the listeners we've added.\n child.stdout.removeAllListeners();\n child.stderr.removeAllListeners();\n\n // Remove the temporary folder and all its contents.\n if (existsSync(configPath)) {\n rmSync(configPath, { recursive: true });\n }\n }\n};\n\n// #region launchNode-launchNodeOptions\n/**\n * Launches a fuel-core node.\n * @param ip - the ip to bind to. (optional, defaults to 0.0.0.0)\n * @param port - the port to bind to. (optional, defaults to 4000 or the next available port)\n * @param args - additional arguments to pass to fuel-core.\n * @param useSystemFuelCore - whether to use the system fuel-core binary or the one provided by the \\@fuel-ts/fuel-core package.\n * @param loggingEnabled - whether the node should output logs. (optional, defaults to true)\n * @param debugEnabled - whether the node should log debug messages. (optional, defaults to false)\n * @param basePath - the base path to use for the temporary folder. (optional, defaults to os.tmpdir())\n * */\n// #endregion launchNode-launchNodeOptions\nexport const launchNode = async ({\n ip,\n port,\n args = [],\n useSystemFuelCore = false,\n loggingEnabled = true,\n debugEnabled = false,\n basePath,\n}: LaunchNodeOptions): LaunchNodeResult =>\n // eslint-disable-next-line no-async-promise-executor\n new Promise(async (resolve, reject) => {\n // filter out the flags chain, consensus-key, db-type, and poa-instant. we don't want to pass them twice to fuel-core. see line 214.\n const remainingArgs = extractRemainingArgs(args, [\n '--chain',\n '--consensus-key',\n '--db-type',\n '--poa-instant',\n ]);\n\n const chainConfigPath = getFlagValueFromArgs(args, '--chain');\n const consensusKey = getFlagValueFromArgs(args, '--consensus-key') || defaultConsensusKey;\n\n const dbTypeFlagValue = getFlagValueFromArgs(args, '--db-type');\n const useInMemoryDb = dbTypeFlagValue === 'in-memory' || dbTypeFlagValue === undefined;\n\n const poaInstantFlagValue = getFlagValueFromArgs(args, '--poa-instant');\n const poaInstant = poaInstantFlagValue === 'true' || poaInstantFlagValue === undefined;\n\n // This string is logged by the client when the node has successfully started. We use it to know when to resolve.\n const graphQLStartSubstring = 'Binding GraphQL provider to';\n\n const binPath = findBinPath('fuels-core', __dirname);\n\n const command = useSystemFuelCore ? 'fuel-core' : binPath;\n\n const ipToUse = ip || '0.0.0.0';\n\n const portToUse =\n port ||\n (\n await getPortPromise({\n port: 4000, // tries 4000 first, then 4001, then 4002, etc.\n stopPort: 5000, // don't try ports above 5000\n })\n ).toString();\n\n let chainConfigPathToUse: string;\n\n const prefix = basePath || os.tmpdir();\n const suffix = basePath ? '' : randomUUID();\n const tempDirPath = path.join(prefix, '.fuels', suffix);\n\n if (chainConfigPath) {\n chainConfigPathToUse = chainConfigPath;\n } else {\n if (!existsSync(tempDirPath)) {\n mkdirSync(tempDirPath, { recursive: true });\n }\n const tempChainConfigFilePath = path.join(tempDirPath, 'chainConfig.json');\n\n let chainConfig = defaultChainConfig;\n\n // If there's no genesis key, generate one and some coins to the genesis block.\n if (!process.env.GENESIS_SECRET) {\n const pk = Signer.generatePrivateKey();\n const signer = new Signer(pk);\n process.env.GENESIS_SECRET = hexlify(pk);\n\n chainConfig = {\n ...defaultChainConfig,\n initial_state: {\n ...defaultChainConfig.initial_state,\n coins: [\n ...defaultChainConfig.initial_state.coins,\n {\n owner: signer.address.toHexString(),\n amount: toHex(1_000_000_000),\n asset_id: BaseAssetId,\n },\n ],\n },\n };\n }\n\n // Write a temporary chain configuration file.\n writeFileSync(tempChainConfigFilePath, JSON.stringify(chainConfig), 'utf8');\n\n chainConfigPathToUse = tempChainConfigFilePath;\n }\n\n const child = spawn(\n command,\n [\n 'run',\n ['--ip', ipToUse],\n ['--port', portToUse],\n useInMemoryDb ? ['--db-type', 'in-memory'] : ['--db-path', tempDirPath],\n ['--min-gas-price', '0'],\n poaInstant ? ['--poa-instant', 'true'] : [],\n ['--consensus-key', consensusKey],\n ['--chain', chainConfigPathToUse as string],\n '--vm-backtrace',\n '--utxo-validation',\n '--debug',\n ...remainingArgs,\n ].flat(),\n {\n stdio: 'pipe',\n }\n );\n\n if (loggingEnabled) {\n child.stderr.pipe(process.stderr);\n }\n\n if (debugEnabled) {\n child.stdout.pipe(process.stdout);\n }\n\n const cleanupConfig: KillNodeParams = {\n child,\n configPath: tempDirPath,\n killFn: treeKill,\n state: {\n isDead: false,\n },\n };\n\n // Look for a specific graphql start point in the output.\n child.stderr.on('data', (chunk: string) => {\n // Look for the graphql service start.\n if (chunk.indexOf(graphQLStartSubstring) !== -1) {\n // Resolve with the cleanup method.\n resolve({\n cleanup: () => killNode(cleanupConfig),\n ip: ipToUse,\n port: portToUse,\n chainConfigPath: chainConfigPathToUse as string,\n });\n }\n if (/error/i.test(chunk)) {\n reject(chunk.toString());\n }\n });\n\n // Process exit.\n process.on('exit', () => killNode(cleanupConfig));\n\n // Catches ctrl+c event.\n process.on('SIGINT', () => killNode(cleanupConfig));\n\n // Catches \"kill pid\" (for example: nodemon restart).\n process.on('SIGUSR1', () => killNode(cleanupConfig));\n process.on('SIGUSR2', () => killNode(cleanupConfig));\n\n // Catches uncaught exceptions.\n process.on('beforeExit', () => killNode(cleanupConfig));\n process.on('uncaughtException', () => killNode(cleanupConfig));\n\n child.on('error', reject);\n });\n\nconst generateWallets = async (count: number, provider: Provider) => {\n const wallets: WalletUnlocked[] = [];\n for (let i = 0; i < count; i += 1) {\n const wallet = await generateTestWallet(provider, [[1_000, BaseAssetId]]);\n wallets.push(wallet);\n }\n return wallets;\n};\n\nexport type LaunchNodeAndGetWalletsResult = Promise<{\n wallets: WalletUnlocked[];\n stop: () => void;\n provider: Provider;\n}>;\n\n/**\n * Launches a fuel-core node and returns a provider, 10 wallets, and a cleanup function to stop the node.\n * @param launchNodeOptions - options to launch the fuel-core node with.\n * @param walletCount - the number of wallets to generate. (optional, defaults to 10)\n * */\nexport const launchNodeAndGetWallets = async ({\n launchNodeOptions,\n walletCount = 10,\n}: {\n launchNodeOptions?: Partial<LaunchNodeOptions>;\n walletCount?: number;\n} = {}): LaunchNodeAndGetWalletsResult => {\n const { cleanup: closeNode, ip, port } = await launchNode(launchNodeOptions || {});\n\n const provider = await Provider.create(`http://${ip}:${port}/graphql`);\n const wallets = await generateWallets(walletCount, provider);\n\n const cleanup = () => {\n closeNode();\n };\n\n return { wallets, stop: cleanup, provider };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,iBAA4B;AAE5B,IAAAC,iBAAwB;;;ACFxB,IAAAC,kBAAwB;AACxB,IAAAC,mBAA4B;AAC5B,IAAAC,kBAAqC;AACrC,wBAAgC;AAGhC,IAAAC,gBAAmB;AACnB,IAAAC,iBAAyB;;;ACPzB,qBAA4B;AAG5B,kBAAmB;AACnB,mBAAwB;AAQjB,IAAM,iBAAiB,CAAC,qBAAqD;AAClF,MAAI;AACJ,MAAI;AACJ,MAAIC;AACJ,MAAI,MAAM,QAAQ,gBAAgB,GAAG;AACnC,aAAS,iBAAiB,CAAC;AAC3B,cAAU,iBAAiB,CAAC,KAAK;AACjC,IAAAA,OAAM,iBAAiB,CAAC,KAAK;AAAA,EAC/B,OAAO;AACL,aAAS,iBAAiB;AAC1B,cAAU,iBAAiB,WAAW;AACtC,IAAAA,OAAM,iBAAiB,OAAO;AAAA,EAChC;AAEA,QAAM,eAAW,gBAAG,MAAM;AAC1B,SAAO;AAAA,IACL,aAAS,sBAAQ,OAAO;AAAA,IACxB,QAAQ,SAAS,GAAG,CAAC,QAAI,gBAAG,CAAC,IAAI;AAAA,IACjC,KAAKA,WAAM,gBAAGA,IAAG,IAAI;AAAA,EACvB;AACF;AAQO,IAAM,mBAAmB,CAAC,WAAoD;AACnF,QAAM,EAAE,QAAQ,QAAQ,IAAI;AAE5B,QAAM,iBAAiB,CAAC,GAAG,OAAO,cAAc;AAEhD,QAAM,WAAW,eAAe,UAAU,CAAC,iBAAiB,aAAa,YAAY,OAAO;AAE5F,MAAI,aAAa,IAAI;AACnB,mBAAe,QAAQ,EAAE,SAAS,eAAe,QAAQ,EAAE,OAAO,IAAI,MAAM;AAAA,EAC9E,OAAO;AACL,mBAAe,KAAK,EAAE,SAAS,OAAO,CAAC;AAAA,EACzC;AAEA,SAAO;AACT;;;ACtDA,IAAAC,kBAAwB;AACxB,IAAAC,kBAAqC;AAErC,IAAAC,gBAA4B;AAE5B,IAAAC,wBAKO;AACP,IAAAC,iBAA4C;AAC5C,sBAAkD;AAClD,IAAAA,iBAA2B;AAC3B,oBAAwB;AAExB,6BAA8B;AAC9B,IAAAC,gBAAsB;;;AChBtB,yBAAgB;AA4zCT,IAAM,6BAA6B,mBAAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCnC,IAAM,uCAAuC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4B7C,IAAM,iCAAiC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYxC;AAAA,EACJ;AACK,IAAM,6CAA6C,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUnD,IAAM,mDAAmD,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM1D;AACC,IAAM,0BAA0B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYhC,IAAM,iCAAiC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWvC,IAAM,6BAA6B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUnC,IAAM,kCAAkC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyCxC,IAAM,6BAA6B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOnC,IAAM,2BAA2B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYjC,IAAM,kCAAkC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASxC,IAAM,yCAAyC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ/C,IAAM,sCAAsC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAM5C,IAAM,wCAAwC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAM9C,IAAM,mCAAmC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMzC,IAAM,mCAAmC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAazC,IAAM,8BAA8B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAyJrC;AACC,IAAM,yCAAyC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAuBhD;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACK,IAAM,+BAA+B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWtC;AAAA,EACJ;AACK,IAAM,qCAAqC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO3C,IAAM,8BAA8B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQpC,IAAM,8BAA8B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBpC,IAAM,qBAAqB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO3B,IAAM,sBAAsB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM7B;AACC,IAAM,mBAAmB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM1B;AACC,IAAM,yBAAyB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhC;AACC,IAAM,qCAAqC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAS5C;AAAA,EACJ;AACK,IAAM,0BAA0B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUjC;AACC,IAAM,iCAAiC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBxC;AAAA,EACJ;AACK,IAAM,6BAA6B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMpC;AACC,IAAM,mBAAmB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM1B;AACC,IAAM,mCAAmC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAS1C;AAAA,EACJ;AACK,IAAM,oBAAoB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAU3B;AACC,IAAM,kBAAkB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMzB;AACC,IAAM,mBAAmB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgB1B;AACC,IAAM,0BAA0B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWjC;AAAA,EACJ;AACK,IAAM,sBAAsB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ5B,IAAM,6BAA6B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMpC;AACC,IAAM,qBAAqB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM5B;AACC,IAAM,sBAAsB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgB7B;AACC,IAAM,sBAAsB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgB7B;AACC,IAAM,0BAA0B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWjC;AACC,IAAM,2BAA2B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOjC,IAAM,iBAAiB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMxB;AACC,IAAM,iBAAiB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOvB,IAAM,wBAAwB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ9B,IAAM,yBAAyB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhC;AACC,IAAM,uBAAuB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM9B;AAEC,SAAS,OAAa,WAA4B;AACvD,SAAO;AAAA,IACL,WAAW,WAAyC,SAA0C;AAC5F,aAAO,UAA2D,oBAAoB,WAAW,OAAO;AAAA,IAC1G;AAAA,IACA,YAAY,WAA0C,SAA2C;AAC/F,aAAO,UAA6D,qBAAqB,WAAW,OAAO;AAAA,IAC7G;AAAA,IACA,SAAS,WAAuC,SAAwC;AACtF,aAAO,UAAuD,kBAAkB,WAAW,OAAO;AAAA,IACpG;AAAA,IACA,eAAe,WAA4C,SAA8C;AACvG,aAAO,UAAmE,wBAAwB,WAAW,OAAO;AAAA,IACtH;AAAA,IACA,2BAA2B,WAAwD,SAA0D;AAC3I,aAAO,UAA2F,oCAAoC,WAAW,OAAO;AAAA,IAC1J;AAAA,IACA,gBAAgB,WAA8C,SAA+C;AAC3G,aAAO,UAAqE,yBAAyB,WAAW,OAAO;AAAA,IACzH;AAAA,IACA,uBAAuB,WAAoD,SAAsD;AAC/H,aAAO,UAAmF,gCAAgC,WAAW,OAAO;AAAA,IAC9I;AAAA,IACA,mBAAmB,WAAgD,SAAkD;AACnH,aAAO,UAA2E,4BAA4B,WAAW,OAAO;AAAA,IAClI;AAAA,IACA,SAAS,WAAuC,SAAwC;AACtF,aAAO,UAAuD,kBAAkB,WAAW,OAAO;AAAA,IACpG;AAAA,IACA,yBAAyB,WAAuD,SAAwD;AACtI,aAAO,UAAuF,kCAAkC,WAAW,OAAO;AAAA,IACpJ;AAAA,IACA,UAAU,WAAwC,SAAyC;AACzF,aAAO,UAAyD,mBAAmB,WAAW,OAAO;AAAA,IACvG;AAAA,IACA,QAAQ,WAAqC,SAAuC;AAClF,aAAO,UAAqD,iBAAiB,WAAW,OAAO;AAAA,IACjG;AAAA,IACA,SAAS,WAAsC,SAAwC;AACrF,aAAO,UAAuD,kBAAkB,WAAW,OAAO;AAAA,IACpG;AAAA,IACA,gBAAgB,WAA6C,SAA+C;AAC1G,aAAO,UAAqE,yBAAyB,WAAW,OAAO;AAAA,IACzH;AAAA,IACA,YAAY,WAAyC,SAA2C;AAC9F,aAAO,UAA6D,qBAAqB,WAAW,OAAO;AAAA,IAC7G;AAAA,IACA,mBAAmB,WAAgD,SAAkD;AACnH,aAAO,UAA2E,4BAA4B,WAAW,OAAO;AAAA,IAClI;AAAA,IACA,WAAW,WAAwC,SAA0C;AAC3F,aAAO,UAA2D,oBAAoB,WAAW,OAAO;AAAA,IAC1G;AAAA,IACA,YAAY,WAAyC,SAA2C;AAC9F,aAAO,UAA6D,qBAAqB,WAAW,OAAO;AAAA,IAC7G;AAAA,IACA,YAAY,WAAyC,SAA2C;AAC9F,aAAO,UAA6D,qBAAqB,WAAW,OAAO;AAAA,IAC7G;AAAA,IACA,gBAAgB,WAA6C,SAA+C;AAC1G,aAAO,UAAqE,yBAAyB,WAAW,OAAO;AAAA,IACzH;AAAA,IACA,iBAAiB,WAA8C,SAAgD;AAC7G,aAAO,UAAuE,0BAA0B,WAAW,OAAO;AAAA,IAC5H;AAAA,IACA,OAAO,WAAuC,SAAyC;AACrF,aAAO,UAAyD,gBAAgB,WAAW,OAAO;AAAA,IACpG;AAAA,IACA,OAAO,WAAuC,SAAyC;AACrF,aAAO,UAAyD,gBAAgB,WAAW,OAAO;AAAA,IACpG;AAAA,IACA,cAAc,WAA8C,SAAgD;AAC1G,aAAO,UAAuE,uBAAuB,WAAW,OAAO;AAAA,IACzH;AAAA,IACA,eAAe,WAAmD,SAA2D;AAC3H,aAAO,UAAiF,wBAAwB,WAAW,OAAO;AAAA,IACpI;AAAA,IACA,aAAa,WAAiD,SAAyD;AACrH,aAAO,UAA6E,sBAAsB,WAAW,OAAO;AAAA,IAC9H;AAAA,EACF;AACF;;;AC/lEA,oBAAqC;AAErC,qBAAsB;AASf,IAAM,yBAAN,MAA8D;AAAA,EAI5D,YAAoB,SAAuC;AAAvC;AAAA,EAAwC;AAAA,EAH3D;AAAA,EAKR,MAAc,YAAY;AACxB,UAAM,EAAE,KAAK,OAAO,WAAW,QAAQ,IAAI,KAAK;AAEhD,UAAM,WAAW,MAAM,QAAQ,GAAG,WAAW;AAAA,MAC3C,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACnB,WAAO,sBAAM,KAAK;AAAA,QAClB;AAAA,MACF,CAAC;AAAA,MACD,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAGD,SAAK,SAAS,SAAS,KAAM,UAAU;AAAA,EACzC;AAAA,EAEQ,SAAmE,CAAC;AAAA,EACpE,kBAAkB;AAAA,EAE1B,MAAM,OAAkD;AACtD,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,KAAK,UAAU;AAAA,IACvB;AAGA,WAAO,MAAM;AACX,UAAI,KAAK,OAAO,SAAS,GAAG;AAE1B,cAAM,EAAE,MAAM,OAAO,IAAI,KAAK,OAAO,MAAM;AAC3C,YAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,gBAAM,IAAI;AAAA,YACR,wBAAU,MAAM;AAAA,YAChB,OAAO,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,KAAK,MAAM;AAAA,UAC9C;AAAA,QACF;AACA,eAAO,EAAE,OAAO,MAAM,MAAM,MAAM;AAAA,MACpC;AACA,YAAM,EAAE,OAAO,KAAK,IAAI,MAAM,KAAK,OAAO,KAAK;AAC/C,UAAI,MAAM;AACR,eAAO,EAAE,OAAO,KAAK;AAAA,MACvB;AAUA,YAAM,UAAU,uBAAsB,YACnC,OAAO,KAAK,EACZ,QAAQ,wBAAwB,EAAE;AAErC,UAAI,YAAY,IAAI;AAElB;AAAA,MACF;AAEA,YAAM,OAAO,GAAG,KAAK,kBAAkB;AACvC,YAAM,QAAQ;AAEd,YAAM,UAAU,CAAC,GAAG,KAAK,SAAS,KAAK,CAAC,EAAE,QAAQ,CAAC,UAAU,KAAK;AAElE,cAAQ,QAAQ,CAAC,UAAU;AACzB,YAAI;AACF,eAAK,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,UAAU,EAAE,CAAC,CAAC;AAAA,QAC1D,SAAS,GAAP;AACA,gBAAM,IAAI;AAAA,YACR,wBAAU;AAAA,YACV,6CAA6C;AAAA,UAC/C;AAAA,QACF;AAAA,MACF,CAAC;AAED,WAAK,kBAAkB,KAAK,QAAQ,QAAQ,KAAK,GAAG,EAAE;AAAA,IACxD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAsD;AAC1D,UAAM,KAAK,OAAO,OAAO;AACzB,SAAK,OAAO,YAAY;AACxB,WAAO,EAAE,MAAM,MAAM,OAAO,OAAU;AAAA,EACxC;AAAA,EAEA,CAAC,OAAO,aAAa,IAAgD;AACnE,WAAO;AAAA,EACT;AACF;AApGO,IAAM,wBAAN;AAEL,cAFW,uBAEI,eAAc,IAAI,YAAY;;;ACb/C,IAAAC,iBAAqC;AAErC,IAAAC,gBAAwB;AAQxB,IAAM,QAAe,CAAC;AAEtB,IAAM,oBAAoB,KAAK;AAExB,IAAM,cAAN,MAAkB;AAAA,EACvB;AAAA,EACA,YAAY,UAAkB,mBAAmB;AAC/C,SAAK,MAAM;AAEX,QAAI,OAAO,YAAY,YAAY,KAAK,OAAO,GAAG;AAChD,YAAM,IAAI;AAAA,QACR,yBAAU;AAAA,QACV,gBAAgB,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,OAAkB,iBAAiB,MAA6B;AAClE,UAAM,UAAM,uBAAQ,KAAK;AACzB,QAAI,MAAM,GAAG,GAAG;AACd,UAAI,CAAC,kBAAkB,MAAM,GAAG,EAAE,UAAU,KAAK,IAAI,GAAG;AACtD,eAAO,MAAM,GAAG,EAAE;AAAA,MACpB;AAEA,WAAK,IAAI,KAAK;AAAA,IAChB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAA0B;AAC5B,UAAM,YAAY,KAAK,IAAI,IAAI,KAAK;AACpC,UAAM,UAAM,uBAAQ,KAAK;AACzB,UAAM,GAAG,IAAI;AAAA,MACX,SAAS;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,aAA0B;AACxB,WAAO,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,MAAM,QAAQ;AAC9C,YAAM,OAAO,KAAK,IAAI,KAAK,KAAK;AAChC,UAAI,MAAM;AACR,aAAK,KAAK,IAAI;AAAA,MAChB;AAEA,aAAO;AAAA,IACT,GAAG,CAAC,CAAgB;AAAA,EACtB;AAAA,EAEA,gBAA6B;AAC3B,WAAO,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,MAAM,QAAQ;AAC9C,YAAM,OAAO,KAAK,IAAI,GAAG;AACzB,UAAI,MAAM;AACR,aAAK,KAAK,IAAI;AAAA,MAChB;AAEA,aAAO;AAAA,IACT,GAAG,CAAC,CAAgB;AAAA,EACtB;AAAA,EAEA,IAAI,OAAkB;AACpB,UAAM,UAAM,uBAAQ,KAAK;AACzB,WAAO,MAAM,GAAG;AAAA,EAClB;AACF;;;AC7EA,uBAAsC;AACtC,IAAAC,kBAA4B;AAC5B,IAAAC,iBAAqC;AAGrC,IAAAC,eAA6B;AAE7B,0BAA0B;AAC1B,IAAAC,gBAAkC;AAkF3B,IAAM,WAAW,CAAC,UAA0C;AACjE,QAAM,EAAE,KAAK,IAAI;AAEjB,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK,8BAAU,MAAM;AACnB,YAAM,gBAAY,wBAAS,MAAM,aAAa,IAAI;AAClD,YAAM,oBAAgB,wBAAS,MAAM,iBAAiB,IAAI;AAC1D,aAAO;AAAA,QACL,MAAM,8BAAU;AAAA,QAChB,UAAM,2BAAQ,wBAAS,MAAM,EAAE,EAAE,MAAM,GAAG,yBAAQ,CAAC;AAAA,QACnD,iBAAa,2BAAS,wBAAS,MAAM,EAAE,EAAE,MAAM,2BAAU,4BAAW,CAAC;AAAA,QACrE,WAAO,uBAAQ,MAAM,KAAK;AAAA,QAC1B,YAAQ,iBAAG,MAAM,MAAM;AAAA,QACvB,aAAS,uBAAQ,MAAM,OAAO;AAAA,QAC9B,WAAW;AAAA,UACT,iBAAa,2BAAS,wBAAS,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,UAC3D,aAAS,2BAAS,wBAAS,MAAM,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,QAC1D;AAAA,QACA,cAAc,MAAM;AAAA,QACpB,UAAU,MAAM,YAAY;AAAA,QAC5B,sBAAkB,iBAAG,MAAM,gBAAgB;AAAA,QAC3C,iBAAiB,UAAU;AAAA,QAC3B,qBAAqB,cAAc;AAAA,QACnC,eAAW,uBAAQ,SAAS;AAAA,QAC5B,mBAAe,uBAAQ,aAAa;AAAA,MACtC;AAAA,IACF;AAAA,IACA,KAAK,8BAAU,UAAU;AACvB,aAAO;AAAA,QACL,MAAM,8BAAU;AAAA,QAChB,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,QACb,WAAW;AAAA,QACX,WAAW;AAAA,UACT,iBAAa,2BAAS,wBAAS,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,UAC3D,aAAS,2BAAS,wBAAS,MAAM,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,QAC1D;AAAA,QACA,gBAAY,uBAAQ,MAAM,UAAU;AAAA,MACtC;AAAA,IACF;AAAA,IACA,KAAK,8BAAU,SAAS;AACtB,YAAM,gBAAY,wBAAS,MAAM,aAAa,IAAI;AAClD,YAAM,oBAAgB,wBAAS,MAAM,iBAAiB,IAAI;AAC1D,YAAM,WAAO,wBAAS,MAAM,QAAQ,IAAI;AACxC,aAAO;AAAA,QACL,MAAM,8BAAU;AAAA,QAChB,YAAQ,uBAAQ,MAAM,MAAM;AAAA,QAC5B,eAAW,uBAAQ,MAAM,SAAS;AAAA,QAClC,YAAQ,iBAAG,MAAM,MAAM;AAAA,QACvB,WAAO,uBAAQ,MAAM,KAAK;AAAA,QAC1B,cAAc,MAAM;AAAA,QACpB,sBAAkB,iBAAG,MAAM,gBAAgB;AAAA,QAC3C,iBAAiB,UAAU;AAAA,QAC3B,qBAAqB,cAAc;AAAA,QACnC,eAAW,uBAAQ,SAAS;AAAA,QAC5B,mBAAe,uBAAQ,aAAa;AAAA,QACpC,UAAM,uBAAQ,IAAI;AAAA,QAClB,YAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,IACA,SAAS;AACP,YAAM,IAAI;AAAA,QACR,yBAAU;AAAA,QACV,mCAAmC;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AACF;;;AC9JA,IAAAC,kBAA4B;AAC5B,IAAAC,iBAAqC;AAGrC,IAAAC,eAAmB;AAEnB,IAAAC,uBAA2B;AAC3B,IAAAC,gBAAwB;AAyCjB,IAAM,YAAY,CAAC,UAA4C;AACpE,QAAM,EAAE,KAAK,IAAI;AAEjB,UAAQ,MAAM;AAAA,IACZ,KAAK,gCAAW,MAAM;AACpB,aAAO;AAAA,QACL,MAAM,gCAAW;AAAA,QACjB,QAAI,uBAAQ,MAAM,EAAE;AAAA,QACpB,YAAQ,iBAAG,MAAM,MAAM;AAAA,QACvB,aAAS,uBAAQ,MAAM,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,IACA,KAAK,gCAAW,UAAU;AACxB,aAAO;AAAA,QACL,MAAM,gCAAW;AAAA,QACjB,YAAY,MAAM;AAAA,QAClB,aAAa;AAAA,QACb,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,KAAK,gCAAW,QAAQ;AACtB,aAAO;AAAA,QACL,MAAM,gCAAW;AAAA,QACjB,QAAI,uBAAQ,MAAM,EAAE;AAAA,QACpB,YAAQ,iBAAG,CAAC;AAAA,QACZ,aAAS,uBAAQ,MAAM,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,IACA,KAAK,gCAAW,UAAU;AACxB,aAAO;AAAA,QACL,MAAM,gCAAW;AAAA,QACjB,IAAI;AAAA,QACJ,YAAQ,iBAAG,CAAC;AAAA,QACZ,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,KAAK,gCAAW,iBAAiB;AAC/B,aAAO;AAAA,QACL,MAAM,gCAAW;AAAA,QACjB,gBAAY,uBAAQ,MAAM,UAAU;AAAA,QACpC,eAAW,uBAAQ,MAAM,SAAS;AAAA,MACpC;AAAA,IACF;AAAA,IACA,SAAS;AACP,YAAM,IAAI;AAAA,QACR,yBAAU;AAAA,QACV,oCAAoC;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF;;;ACjGA,IAAAC,oBAA4B;AAC5B,qBAAoC;AACpC,IAAAC,kBAAyC;AACzC,oBAA4B;AAG5B,IAAAC,eAAmB;AAEnB,IAAAC,uBAMO;AACP,IAAAC,gBAAgC;;;ACwBzB,IAAM,SAAS,CAAC,aAAyC,QAAQ;;;ACxCxE,IAAAC,kBAA4B;AAC5B,IAAAC,iBAAqC;AACrC,IAAAC,eAAmB;AAgBnB,IAAAC,uBAKO;AACP,IAAAH,kBAAkD;AAClD,IAAAI,gBAAyB;AAOzB,IAAM,wCAAwC,CAC5C,YAEA,QAAQ,SAAS,iCAAY,UAC7B,QAAQ,IAAI,SAAS,KAAK,MAAM;AAGlC,IAAM,mCAAmC,CACvC,YAEA,QAAQ,SAAS,iCAAY,SAC7B,QAAQ,eAAe;AAGlB,IAAM,6BAA6B,CAAC,aACzC,SAAS;AAAA,EAIP,CAAC,MAAM,YAAY;AACjB,QAAI,sCAAsC,OAAO,GAAG;AAClD,WAAK,uBAAuB,KAAK,OAAO;AAAA,IAC1C;AACA,QAAI,iCAAiC,OAAO,GAAG;AAC7C,WAAK,yBAAyB,KAAK,OAAO;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,wBAAwB,CAAC;AAAA,IACzB,0BAA0B,CAAC;AAAA,EAC7B;AACF;AAEF,IAAM,YAAY,CAAC,QAAwB,OAAO;AAE3C,SAAS,sBAAsB,SAAqC;AACzE,QAAM,EAAE,YAAY,IAAI;AAExB,UAAQ,aAAa;AAAA,IACnB,wBAA0B;AACxB,YAAM,cAA2B;AAAA,QAC/B,MAAM,iCAAY;AAAA,QAClB,MAAM,UAAU,QAAQ,UAAU,EAAE;AAAA,QACpC,IAAI,UAAU,SAAS,IAAI,EAAE;AAAA,QAC7B,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,SAAS,UAAU,QAAQ,OAAO;AAAA,QAClC,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,4BAA4B;AAC1B,YAAM,gBAA+B;AAAA,QACnC,MAAM,iCAAY;AAAA,QAClB,IAAI,UAAU,QAAQ,UAAU,EAAE;AAAA,QAClC,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,qCAAgC;AAC9B,YAAM,oBAAuC;AAAA,QAC3C,MAAM,iCAAY;AAAA,QAClB,IAAI,UAAU,QAAQ,UAAU,EAAE;AAAA,QAClC,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,QAAQ,UAAU,QAAQ,MAAM;AAAA,QAChC,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,0BAA2B;AACzB,YAAM,eAA6B;AAAA,QACjC,MAAM,iCAAY;AAAA,QAClB,IAAI,UAAU,QAAQ,UAAU,EAAE;AAAA,QAClC,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,YAAY,UAAU,QAAQ,UAAU;AAAA,MAC1C;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,4BAA4B;AAC1B,YAAM,gBAA+B;AAAA,QACnC,MAAM,iCAAY;AAAA,QAClB,IAAI,UAAU,QAAQ,UAAU,EAAE;AAAA,QAClC,SAAK,iBAAG,QAAQ,EAAE;AAAA,QAClB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,sBAAyB;AACvB,YAAM,aAAyB;AAAA,QAC7B,MAAM,iCAAY;AAAA,QAClB,IAAI,UAAU,QAAQ,UAAU,EAAE;AAAA,QAClC,UAAM,iBAAG,QAAQ,EAAE;AAAA,QACnB,UAAM,iBAAG,QAAQ,EAAE;AAAA,QACnB,UAAM,iBAAG,QAAQ,EAAE;AAAA,QACnB,UAAM,iBAAG,QAAQ,EAAE;AAAA,QACnB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,+BAA6B;AAC3B,YAAM,iBAAiC;AAAA,QACrC,MAAM,iCAAY;AAAA,QAClB,IAAI,UAAU,QAAQ,UAAU,EAAE;AAAA,QAClC,UAAM,iBAAG,QAAQ,EAAE;AAAA,QACnB,UAAM,iBAAG,QAAQ,EAAE;AAAA,QACnB,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,QAAQ,UAAU,QAAQ,MAAM;AAAA,QAChC,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,gCAA8B;AAC5B,YAAM,kBAAmC;AAAA,QACvC,MAAM,iCAAY;AAAA,QAClB,MAAM,UAAU,QAAQ,UAAU,EAAE;AAAA,QACpC,IAAI,UAAU,QAAQ,aAAa,SAAS,IAAI,EAAE;AAAA,QAClD,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,SAAS,UAAU,QAAQ,OAAO;AAAA,QAClC,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,uCAAiC;AAC/B,YAAM,qBAAyC;AAAA,QAC7C,MAAM,iCAAY;AAAA,QAClB,MAAM,UAAU,QAAQ,UAAU,EAAE;AAAA,QACpC,IAAI,UAAU,QAAQ,aAAa,QAAQ,IAAI,EAAE;AAAA,QACjD,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,SAAS,UAAU,QAAQ,OAAO;AAAA,QAClC,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,yCAAkC;AAChC,YAAM,sBAA2C;AAAA,QAC/C,MAAM,iCAAY;AAAA,QAClB,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,aAAS,iBAAG,QAAQ,OAAO;AAAA,MAC7B;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,qCAAgC;AAC9B,YAAM,SAAS,UAAU,QAAQ,MAAM;AACvC,YAAM,YAAY,UAAU,QAAQ,SAAS;AAC7C,YAAM,QAAQ,UAAU,QAAQ,KAAK;AACrC,YAAM,aAAS,iBAAG,QAAQ,MAAM;AAChC,YAAM,OAAO,QAAQ,WAAO,wBAAS,QAAQ,IAAI,IAAI,WAAW,KAAK,CAAC,CAAC;AACvE,YAAM,SAAS,UAAU,QAAQ,MAAM;AAEvC,YAAM,YAAY,4CAAuB,aAAa;AAAA,QACpD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,oBAAuC;AAAA,QAC3C,MAAM,iCAAY;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,wBAA0B;AACxB,YAAM,aAAa,UAAU,QAAQ,UAAU,EAAE;AACjD,YAAM,QAAQ,UAAU,QAAQ,KAAK;AACrC,YAAM,UAAU,sCAAiB,WAAW,YAAY,KAAK;AAE7D,YAAM,cAA2B;AAAA,QAC/B,MAAM,iCAAY;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,wBAA0B;AACxB,YAAM,aAAa,UAAU,QAAQ,UAAU,EAAE;AACjD,YAAM,QAAQ,UAAU,QAAQ,KAAK;AACrC,YAAM,UAAU,sCAAiB,WAAW,YAAY,KAAK;AAE7D,YAAM,cAA2B;AAAA,QAC/B,MAAM,iCAAY;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA;AACE,YAAM,IAAI,yBAAU,yBAAU,sBAAsB,yBAAyB,cAAc;AAAA,EAC/F;AACF;;;ACnRA,IAAAC,iBAAqC;;;ACCrC,IAAAC,eAAmB;AACnB,IAAAC,uBAAwC;AACxC,IAAAC,gBAAyB;AAUlB,IAAM,2BAA2B,CAAC,KAAS,UAAc,oBAC9D,iBAAG,KAAK,KAAK,IAAI,IAAI,QAAQ,EAAE,SAAS,IAAI,YAAY,SAAS,CAAC,CAAC;AAG9D,IAAM,yBAAyB,CAAC,aAAkD;AACvF,QAAM,eAAe,SAAS;AAAA,IAC5B,CAAC,YAAY,QAAQ,SAAS,iCAAY;AAAA,EAC5C;AAEA,QAAM,UAAU,aAAa,OAAO,CAAC,MAAM,YAAY,KAAK,IAAI,QAAQ,OAAO,OAAG,iBAAG,CAAC,CAAC;AAEvF,SAAO;AACT;AAEO,SAAS,yBAAyB,UAAmB,kBAAoC;AAC9F,QAAM,WAAO,iBAAG,iBAAiB,IAAI;AACrC,MAAI,qBAAiB,iBAAG,CAAC;AACzB,MAAI,iBAAiB,eAAe,kBAAkB;AACpD,yBAAiB,iBAAG,QAAQ,EAAE,QAAI,iBAAG,iBAAiB,WAAW,CAAC;AAAA,EACpE;AACA,MAAI,iBAAiB,eAAe,kBAAkB;AACpD,yBAAiB,iBAAG,QAAQ,EAAE,QAAI,iBAAG,iBAAiB,UAAU,CAAC;AAAA,EACnE;AACA,SAAO,KAAK,IAAI,cAAc;AAChC;AAEO,SAAS,gBACd,QACA,aACA,UACA;AACA,QAAM,eAA8B,CAAC;AACrC,QAAM,WAAW,OAAO,OAAO,CAAC,OAAO,UAAU;AAC/C,QAAI,eAAe,SAAS,MAAM,aAAa,MAAM,cAAc,MAAM;AACvE,aAAO,MAAM;AAAA,QACX,yBAAyB,aAAa,SAAS,gBAAgB,EAC5D,IAAI,6BAAyB,wBAAS,MAAM,SAAS,EAAE,QAAQ,SAAS,YAAY,CAAC,EACrF,QAAI,iBAAG,MAAM,gBAAgB,CAAC;AAAA,MACnC;AAAA,IACF;AACA,QAAI,kBAAkB,SAAS,CAAC,aAAa,SAAS,MAAM,YAAY,GAAG;AACzE,mBAAa,KAAK,MAAM,YAAY;AACpC,aAAO,MAAM,IAAI,SAAS,IAAI;AAAA,IAChC;AACA,WAAO;AAAA,EACT,OAAG,iBAAG,CAAC;AAEP,SAAO;AACT;AAUO,SAAS,UAAU,QAA0B;AAClD,QAAM,EAAE,UAAU,YAAY,QAAQ,aAAa,YAAY,IAAI;AAEnE,QAAM,YAAY,yBAAyB,aAAa,SAAS,gBAAgB;AACjF,QAAM,eAAW,iBAAG,WAAW,EAAE,IAAI,UAAU;AAC/C,QAAM,YAAY,gBAAgB,QAAQ,aAAa,QAAQ;AAE/D,QAAM,SAAS,UAAU,IAAI,QAAQ,EAAE,IAAI,SAAS,EAAE,IAAI,WAAW,EAAE,OAAO;AAE9E,SAAO;AACT;AAUO,SAAS,UAAU,QAA0B;AAClD,QAAM,EAAE,YAAY,iBAAiB,cAAc,QAAQ,eAAW,iBAAG,CAAC,EAAE,IAAI;AAEhF,MAAI,iCAA6B,iBAAG,CAAC;AAErC,MAAI,cAAc,GAAG,CAAC,KAAK,aAAa,IAAI,eAAe,GAAG;AAC5D,qCAA6B,iBAAG,YAAY,EAAE,IAAI,eAAe,EAAE,IAAI,UAAU;AAAA,EACnF;AAEA,SAAO,2BAA2B,IAAI,MAAM,EAAE,IAAI,QAAQ;AAC5D;AAEO,SAAS,gCAAgC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,kBAAkB,yBAAyB,mBAAmB,SAAS,YAAY;AACzF,QAAM,eAAe,yBAAyB,eAAe,SAAS,SAAS;AAC/E,QAAM,UAAU,yBAAyB,aAAa,SAAS,IAAI;AAEnE,QAAM,0BAAsB,iBAAG,IAAI,KAAK,KAAK,EAAE;AAC/C,QAAM,gBAAgB,yBAAyB,qBAAqB,SAAS,IAAI;AACjF,QAAM,cAAc,gBAAgB,IAAI,YAAY,EAAE,IAAI,OAAO,EAAE,IAAI,aAAa;AACpF,SAAO,YAAY,OAAO;AAC5B;AAEO,SAAS,gCAAgC;AAAA,EAC9C;AAAA,EACA;AACF,GAGG;AACD,SAAO,yBAAyB,aAAa,SAAS,IAAI;AAC5D;;;AClIA,IAAAC,gBAAwB;AACxB,mBAAsB;AAOtB,SAAS,UAAU,QAAa;AAC9B,SAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,QAAQ;AACnC,YAAQ,OAAO,GAAG,GAAG,YAAY,MAAM;AAAA,MACrC,KAAK;AACH,eAAO,GAAG,QAAI,uBAAQ,OAAO,GAAG,CAAC;AACjC;AAAA,MACF,KAAK;AACH,eAAO,GAAG,IAAI,UAAU,OAAO,GAAG,CAAC;AACnC;AAAA,MACF,KAAK;AACH,eAAO,GAAG,IAAI,OAAO,GAAG,EAAE,MAAM;AAChC;AAAA,MACF,KAAK;AACH,eAAO,GAAG,IAAI,OAAO,GAAG,EAAE,OAAO;AACjC;AAAA,MACF,KAAK;AACH,eAAO,GAAG,IAAI,UAAU,OAAO,GAAG,CAAC;AACnC;AAAA,MACF;AACE;AAAA,IACJ;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAOO,SAAS,cAAc,MAAW;AAIvC,SAAO,cAAU,oBAAM,IAAI,CAAC;AAC9B;;;AC5CO,SAAS,MAAM,MAAc;AAClC,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,eAAW,MAAM;AACf,cAAQ,IAAI;AAAA,IACd,GAAG,IAAI;AAAA,EACT,CAAC;AACH;;;ACPA,IAAAC,iBAAqC;AACrC,IAAAC,eAAmB;AAEnB,IAAAC,uBAA4B;AAC5B,IAAAC,kBAQO;AAWA,IAAM,qBAAqB,CAAC,WAA0B;AAC3D,MAAI,eAAe,0CAA0C,OAAO;AACpE,QAAM,SAAS,OAAO;AAEtB,MAAI,8BAAc,SAAS,OAAO,MAAM,GAAG;AACzC,mBAAe,GAAG;AAAA;AAAA;AAAA;AAAA,EAA6D,yCAAyB,OAAO;AAAA,EACjH;AAEA,SAAO,EAAE,cAAc,OAAO;AAChC;AAGA,IAAM,YAAY,CAAC,QAAiB,KAAK,UAAU,KAAK,MAAM,CAAC;AAQxD,IAAM,sBAAsB,CACjC,UACA,SACG;AACH,MAAI,eAAe;AAEnB,QAAM,gBAAgB,SAAS,KAAK,CAAC,EAAE,KAAK,MAAM,SAAS,iCAAY,MAAM;AAC7E,MAAI,SAAS;AAEb,MAAI,eAAe;AACjB,UAAM,gBAAY,iBAAG,cAAc,GAAG,EAAE,MAAM;AAE9C,YAAQ,WAAW;AAAA,MACjB,KAAK,uCAAuB;AAC1B,iBAAS;AACT,uBAAe,qEACb,KAAK,SAAS,UAAU,KAAK,CAAC,CAAC,IAAI;AAErC;AAAA,MACF;AAAA,MAEA,KAAK,yCAAyB;AAC5B,cAAM,QACJ,KAAK,UAAU,IAAI,cAAc,UAAU,KAAK,CAAC,CAAC,SAAS,UAAU,KAAK,CAAC,CAAC,OAAO;AAErF,iBAAS;AACT,uBAAe,+DAA+D;AAC9E;AAAA,MACF;AAAA,MAEA,KAAK,yCAAyB;AAC5B,cAAM,QACJ,KAAK,UAAU,IAAI,cAAc,UAAU,KAAK,CAAC,CAAC,SAAS,UAAU,KAAK,CAAC,CAAC,OAAO;AAErF,iBAAS;AACT,uBAAe,+DAA+D;AAC9E;AAAA,MACF;AAAA,MAEA,KAAK;AACH,iBAAS;AACT,uBAAe;AACf;AAAA,MAEF,KAAK;AACH,iBAAS;AACT,uBAAe;AACf;AAAA,MAEF;AACE,iBAAS;AACT,uBAAe,oDAAoD,cAAc;AAAA,IACrF;AAAA,EACF;AAEA,SAAO,EAAE,cAAc,OAAO;AAChC;AAaO,IAAM,iBAAiB,CAAC,WAAuC;AACpE,QAAM,EAAE,UAAU,QAAQ,KAAK,IAAI;AAEnC,QAAM,UAAU,SAAS,KAAK,CAAC,EAAE,KAAK,MAAM,SAAS,iCAAY,KAAK;AACtE,QAAM,WAAW,SAAS,KAAK,CAAC,EAAE,KAAK,MAAM,SAAS,iCAAY,MAAM;AAExE,QAAM,EAAE,cAAc,OAAO,IAC3B,QAAQ,SAAS,mBAAmB,UAChC,mBAAmB,MAAM,IACzB,oBAAoB,UAAU,IAAI;AAExC,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,EACF;AAEA,SAAO,IAAI,yBAAU,yBAAU,iBAAiB,cAAc,QAAQ;AACxE;;;ACtHO,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAE/C,YAA4B,OAAe;AACzC,UAAM;AADoB;AAE1B,SAAK,UAAU,qBAAqB;AAAA,EACtC;AAAA,EAJA,OAAO;AAKT;;;AClBA,IAAAC,gBAAkC;AAI3B,IAAM,aAAa,CAAC,UAA8C;AACvE,QAAM,WAAO,wBAAS,KAAK;AAE3B,SAAO;AAAA,IACL,UAAM,uBAAQ,IAAI;AAAA,IAClB,YAAY,KAAK;AAAA,EACnB;AACF;;;AT+EO,IAAe,yBAAf,MAA4E;AAAA;AAAA,EAIjF;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA,SAAoC,CAAC;AAAA;AAAA,EAErC,UAAsC,CAAC;AAAA;AAAA,EAEvC,YAAyC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1C,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAgC,CAAC,GAAG;AAClC,SAAK,eAAW,iBAAG,QAAQ;AAC3B,SAAK,WAAW,YAAY;AAC5B,SAAK,eAAe,mBAAe,iBAAG,YAAY,IAAI;AACtD,SAAK,SAAS,aAAS,iBAAG,MAAM,IAAI;AACpC,SAAK,SAAS,UAAU,CAAC;AACzB,SAAK,UAAU,WAAW,CAAC;AAC3B,SAAK,YAAY,aAAa,CAAC;AAAA,EACjC;AAAA,EAEA,OAAO,cAAc,KAA6B;AAChD,QAAI,cAAc;AAClB,UAAM,WAAqB,CAAC;AAE5B,QAAI,IAAI,UAAU;AAChB,qBAAe,gCAAW;AAC1B,eAAS,KAAK,EAAE,MAAM,IAAI,UAAU,MAAM,gCAAW,SAAS,CAAC;AAAA,IACjE;AACA,QAAI,IAAI,cAAc;AACpB,qBAAe,gCAAW;AAC1B,eAAS,KAAK,EAAE,MAAM,IAAI,cAAc,MAAM,gCAAW,aAAa,CAAC;AAAA,IACzE;AACA,QAAI,IAAI,WAAW,GAAG;AACpB,qBAAe,gCAAW;AAC1B,eAAS,KAAK,EAAE,MAAM,IAAI,UAAU,MAAM,gCAAW,SAAS,CAAC;AAAA,IACjE;AACA,QAAI,IAAI,QAAQ;AACd,qBAAe,gCAAW;AAC1B,eAAS,KAAK,EAAE,MAAM,IAAI,QAAQ,MAAM,gCAAW,OAAO,CAAC;AAAA,IAC7D;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQU,qBAAgD;AACxD,UAAM,SAAS,KAAK,QAAQ,IAAI,QAAQ,KAAK,CAAC;AAC9C,UAAM,UAAU,KAAK,SAAS,IAAI,SAAS,KAAK,CAAC;AACjD,UAAM,YAAY,KAAK,WAAW,IAAI,UAAU,KAAK,CAAC;AAEtD,UAAM,EAAE,aAAa,SAAS,IAAI,uBAAuB,cAAc,IAAI;AAE3E,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,OAAO;AAAA,MACpB,cAAc,QAAQ;AAAA,MACtB,gBAAgB,UAAU;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,qBAAiC;AAC/B,WAAO,IAAI,sCAAiB,EAAE,OAAO,KAAK,cAAc,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,UAAU,OAAwC;AAC1D,SAAK,OAAO,KAAK,KAAK;AACtB,WAAO,KAAK,OAAO,SAAS;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,WAAW,QAA0C;AAC7D,SAAK,QAAQ,KAAK,MAAM;AACxB,WAAO,KAAK,QAAQ,SAAS;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,WAAW,WAAsB;AAC/B,SAAK,UAAU,KAAK,SAAS;AAC7B,WAAO,KAAK,UAAU,SAAS;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASU,kBAA0B;AAElC,SAAK,eAAW,sBAAO,CAAC,6BAAa,2BAAW,CAAC,CAAC;AAClD,WAAO,KAAK,UAAU,SAAS;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,qBAAqB,SAAmC,WAAsB;AAC5E,UAAM,eAAe,uBAAQ,oBAAoB,OAAO;AACxD,UAAM,eAAe,KAAK,gCAAgC,YAAY;AACtE,QAAI,OAAO,iBAAiB,UAAU;AACpC,WAAK,cAAc,cAAc,SAAS;AAAA,IAC5C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,OAAe,SAAoC;AAC/D,QAAI,CAAC,KAAK,UAAU,KAAK,GAAG;AAC1B,YAAM,IAAI,sBAAsB,KAAK;AAAA,IACvC;AACA,SAAK,UAAU,KAAK,IAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,oBAAoB,SAA8B;AACtD,UAAM,WAAW,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAC5D,UAAM,QAAQ;AAAA,MACZ,SAAS,IAAI,OAAO,QAAQ;AAC1B,aAAK,WAAW,MAAM,IAAI,gBAAwC,IAAI,CAAC;AAAA,MACzE,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAA+C;AAC7C,WAAO,KAAK,OAAO;AAAA,MACjB,CAAC,UAAgD,MAAM,SAAS,+BAAU;AAAA,IAC5E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiD;AAC/C,WAAO,KAAK,QAAQ;AAAA,MAClB,CAAC,WAAmD,OAAO,SAAS,gCAAW;AAAA,IACjF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAqD;AACnD,WAAO,KAAK,QAAQ;AAAA,MAClB,CAAC,WAAqD,OAAO,SAAS,gCAAW;AAAA,IACnF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gCAAgC,OAAwC;AACtE,UAAM,mBAAe,2BAAW,KAAK;AAErC,UAAM,QAAQ,KAAK,OAAO,KAAK,CAAC,UAAU;AACxC,cAAQ,MAAM,MAAM;AAAA,QAClB,KAAK,+BAAU;AACb,qBAAO,uBAAsC,MAAO,KAAK,MAAM,aAAa,OAAO;AAAA,QACrF,KAAK,+BAAU;AACb,qBACE,uBAAyC,MAAO,SAAS,MAAM,aAAa,OAAO;AAAA,QAEvF;AACE,iBAAO;AAAA,MACX;AAAA,IACF,CAAC;AAED,WAAqC,OAAQ;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,aAAa,MAAY,WAAqC;AAC5D,UAAM,EAAE,SAAS,OAAO,OAAO,IAAI;AAEnC,QAAI;AAEJ,QAAI,WAAW;AACb,qBAAe;AAAA,IACjB,OAAO;AACL,qBAAe,KAAK,gCAAgC,KAAK;AAGzD,UAAI,OAAO,iBAAiB,UAAU;AACpC,uBAAe,KAAK,gBAAgB;AAAA,MACtC;AAAA,IACF;AAEA,UAAM,QAAqC;AAAA,MACzC,GAAG;AAAA,MACH,MAAM,+BAAU;AAAA,MAChB,OAAO,MAAM,OAAO;AAAA,MACpB;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA,WAAW,WAAW;AAAA,IACxB;AAGA,SAAK,UAAU,KAAK;AAGpB,SAAK,gBAAgB,OAAO,OAAO;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBAAgB,SAAsB,WAAqC;AACzE,UAAM,EAAE,WAAW,QAAQ,OAAO,IAAI;AAEtC,UAAM,UAAU;AAEhB,QAAI;AAEJ,QAAI,WAAW;AACb,qBAAe;AAAA,IACjB,OAAO;AACL,qBAAe,KAAK,gCAAgC,SAAS;AAG7D,UAAI,OAAO,iBAAiB,UAAU;AACpC,uBAAe,KAAK,gBAAgB;AAAA,MACtC;AAAA,IACF;AAEA,UAAM,QAAwC;AAAA,MAC5C,GAAG;AAAA,MACH,MAAM,+BAAU;AAAA,MAChB,QAAQ,OAAO,OAAO;AAAA,MACtB,WAAW,UAAU,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,MACA,WAAW,WAAW;AAAA,IACxB;AAGA,SAAK,UAAU,KAAK;AAGpB,SAAK,gBAAgB,WAAW,OAAO;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,UAAoB;AAC9B,QAAI,OAAO,QAAQ,GAAG;AACpB,WAAK,aAAa,QAAQ;AAAA,IAC5B,OAAO;AACL,WAAK,gBAAgB,QAAQ;AAAA,IAC/B;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,WAAoC;AAC/C,cAAU,QAAQ,CAAC,aAAa,KAAK,YAAY,QAAQ,CAAC;AAE1D,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,qBAAqB,UAAoB,WAAoC;AAC3E,QAAI,OAAO,QAAQ,GAAG;AACpB,WAAK,aAAa,UAAU,SAAS;AAAA,IACvC,OAAO;AACL,WAAK,gBAAgB,UAAU,SAAS;AAAA,IAC1C;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAsB,WAAuB,WAAoC;AAC/E,cAAU,QAAQ,CAAC,aAAa,KAAK,qBAAqB,UAAU,SAAS,CAAC;AAE9E,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,IAAiB,QAAsB,UAAqB,6BAAa;AACrF,SAAK,WAAW;AAAA,MACd,MAAM,gCAAW;AAAA,MACjB,QAAI,2BAAW,EAAE,EAAE,OAAO;AAAA,MAC1B;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe,IAAiB,YAAgC;AAC9D,eAAW,IAAI,cAAc,EAAE,QAAQ,CAAC,aAAa;AACnD,WAAK,WAAW;AAAA,QACd,MAAM,gCAAW;AAAA,QACjB,QAAI,2BAAW,EAAE,EAAE,OAAO;AAAA,QAC1B,QAAQ,SAAS;AAAA,QACjB,SAAS,SAAS;AAAA,MACpB,CAAC;AAAA,IACH,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,IAAiB,UAAqB,6BAAa;AAEjE,UAAM,eAAe,KAAK,iBAAiB,EAAE;AAAA,MAC3C,CAAC,eAAW,uBAAQ,OAAO,OAAO,MAAM;AAAA,IAC1C;AAGA,QAAI,CAAC,cAAc;AACjB,WAAK,WAAW;AAAA,QACd,MAAM,gCAAW;AAAA,QACjB,QAAI,2BAAW,EAAE,EAAE,OAAO;AAAA,QAC1B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AACT,WAAO,KAAK,mBAAmB,EAAE;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,WAA4B;AACtC,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,WAA0B;AACxC,UAAM,EAAE,UAAU,oBAAoB,IAAI;AAC1C,UAAM,EAAE,WAAW,IAAI;AACvB,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA,QAAQ,KAAK;AAAA,MACb,aAAa,KAAK,SAAS;AAAA,MAC3B,aAAa,KAAK,YAAY,QAAQ;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,gBAAgB,WAAsB,QAAgB;AACpD,UAAM,EAAE,oBAAoB,IAAI;AAChC,UAAM,EAAE,WAAW,IAAI;AAEvB,UAAM,kBAAkB,KAAK,cAAc,EAAE,UAAU;AAAA,MACrD,CAAC,KAAK,QAAQ,MAAM,IAAI;AAAA,MACxB;AAAA,IACF;AACA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,kBAAkB,YAA4B,gBAAkC;AAC9E,UAAM,iBAAiB,CAAC,YACtB,KAAK,OAAO,KAAK,CAAC,UAAU;AAC1B,UAAI,aAAa,OAAO;AACtB,eAAO,MAAM,YAAY;AAAA,MAC3B;AACA,aAAO;AAAA,IACT,CAAC;AAEH,UAAM,mBAAmB,CAAC,SAAiB,aAAiB;AAC1D,YAAM,aAAa,eAAe,OAAO;AAEzC,UAAI,cAAc,aAAa,YAAY;AACzC,mBAAW,SAAK,2BAAQ,2BAAY,6BAAW,CAAC;AAChD,mBAAW,SAAS;AAAA,MACtB,OAAO;AACL,aAAK,aAAa;AAAA,UAChB;AAAA,YACE,QAAI,2BAAQ,2BAAY,6BAAW,CAAC;AAAA,YACpC,QAAQ;AAAA,YACR;AAAA,YACA,OAAO,kBAAkB,uBAAQ,WAAW;AAAA,YAC5C,UAAU;AAAA,YACV,kBAAc,iBAAG,CAAC;AAAA,YAClB,kBAAc,iBAAG,CAAC;AAAA,UACpB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,qBAAiB,iCAAa,iBAAG,IAAe,CAAC;AACjD,eAAW,QAAQ,CAAC,MAAM,iBAAiB,EAAE,SAAS,EAAE,MAAM,CAAC;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,2BAA2C;AACzC,UAAM,kBAAkB,KAAK,eAAe,EAAE,IAAI,CAAC,EAAE,QAAQ,QAAQ,OAAO;AAAA,MAC1E,YAAQ,iBAAG,MAAM;AAAA,MACjB,SAAS,QAAQ,SAAS;AAAA,IAC5B,EAAE;AAEF,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,SAAS;AACP,WAAO,cAAc,IAAI;AAAA,EAC3B;AAAA,EAEA,sBAAsB,QAAmC;AACvD,SAAK,OAAO,QAAQ,CAAC,MAAM;AACzB,UAAI;AACJ,cAAQ,EAAE,MAAM;AAAA,QACd,KAAK,+BAAU;AACb,+BAAqB,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,+BAAU,QAAQ,EAAE,UAAU,EAAE,KAAK;AACxF;AAAA,QACF,KAAK,+BAAU;AACb,+BAAqB,OAAO;AAAA,YAC1B,CAAC,MAAM,EAAE,SAAS,+BAAU,WAAW,EAAE,WAAW,EAAE;AAAA,UACxD;AACA;AAAA,QACF;AACE;AAAA,MACJ;AACA,UACE,sBACA,sBAAsB,0BACtB,iBAAG,mBAAmB,gBAAgB,EAAE,GAAG,CAAC,GAC5C;AAEA,UAAE,YAAY,mBAAmB;AAEjC,UAAE,gBAAgB,mBAAmB;AAErC,UAAE,mBAAmB,mBAAmB;AAAA,MAC1C;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AUxrBA,IAAAC,kBAA4B;AAE5B,IAAAC,eAA4B;AAE5B,IAAAC,uBAA4C;AAC5C,IAAAC,iBAAkC;;;ACLlC,IAAAC,kBAA4B;AAC5B,oBAAwC;AACxC,IAAAC,eAAmB;AACnB,IAAAC,uBAAyE;AACzE,IAAAC,iBAAuB;AACvB,IAAAC,gBAAsB;AAUf,SAAS,gBAAgB,oBAAwC,SAAiB;AACvF,QAAM,cAAc,mBAAmB,cAAc;AAErD,MAAI,YAAY,SAAS,qCAAgB,QAAQ;AAC/C,gBAAY,eAAe;AAAA,EAC7B;AAGA,cAAY,SAAS,YAAY,OAAO,IAAI,CAAC,UAAU;AACrD,UAAM,iBAAa,qBAAM,KAAK;AAE9B,YAAQ,WAAW,MAAM;AAAA,MAEvB,KAAK,+BAAU,MAAM;AACnB,mBAAW,YAAY;AAAA,UACrB,aAAa;AAAA,UACb,SAAS;AAAA,QACX;AACA,mBAAW,uBAAmB,iBAAG,CAAC;AAClC,eAAO;AAAA,MACT;AAAA,MAEA,KAAK,+BAAU,SAAS;AACtB,mBAAW,uBAAmB,iBAAG,CAAC;AAClC,eAAO;AAAA,MACT;AAAA,MAEA,KAAK,+BAAU,UAAU;AACvB,mBAAW,YAAY;AAAA,UACrB,aAAa;AAAA,UACb,SAAS;AAAA,QACX;AACA,mBAAW,OAAO;AAClB,mBAAW,cAAc;AACzB,mBAAW,cAAc;AACzB,mBAAW,YAAY;AACvB,eAAO;AAAA,MACT;AAAA,MACA;AACE,eAAO;AAAA,IACX;AAAA,EACF,CAAC;AAED,cAAY,UAAU,YAAY,QAAQ,IAAI,CAAC,WAAW;AACxD,UAAM,kBAAc,qBAAM,MAAM;AAEhC,YAAQ,YAAY,MAAM;AAAA,MAExB,KAAK,gCAAW,UAAU;AACxB,oBAAY,cAAc;AAC1B,oBAAY,YAAY;AACxB,eAAO;AAAA,MACT;AAAA,MAEA,KAAK,gCAAW,QAAQ;AACtB,oBAAY,aAAS,iBAAG,CAAC;AACzB,eAAO;AAAA,MACT;AAAA,MAEA,KAAK,gCAAW,UAAU;AACxB,oBAAY,KAAK;AACjB,oBAAY,aAAS,iBAAG,CAAC;AACzB,oBAAY,UAAU;AACtB,eAAO;AAAA,MACT;AAAA,MACA;AACE,eAAO;AAAA,IACX;AAAA,EACF,CAAC;AACD,cAAY,iBAAiB;AAC7B,cAAY,YAAY,CAAC;AAEzB,QAAM,mBAAe,+BAAgB,OAAO;AAC5C,QAAM,uBAAmB,uBAAO,CAAC,cAAc,IAAI,sCAAiB,EAAE,OAAO,WAAW,CAAC,CAAC;AAC1F,aAAO,sBAAO,gBAAgB;AAChC;;;ACxFA,IAAAC,iBAAkC;AAYlC,IAAM,kBAAkB,CAAC,UAAiC;AACxD,QAAM,IAAI,IAAI,WAAW,EAAE;AAC3B,IAAE,QAAI,yBAAS,KAAK,CAAC;AACrB,SAAO;AACT;AAEO,IAAM,iBAAiB,CAAC,gBAA4D;AACzF,MAAI;AACJ,MAAI;AAEJ,MAAI,MAAM,QAAQ,WAAW,GAAG;AAC9B,UAAM,YAAY,CAAC;AACnB,YAAQ,YAAY,CAAC;AAAA,EACvB,OAAO;AACL,UAAM,YAAY;AAClB,YAAQ,YAAY;AAAA,EACtB;AAEA,SAAO;AAAA,IACL,SAAK,wBAAQ,GAAG;AAAA,IAChB,WAAO,wBAAQ,gBAAgB,KAAK,CAAC;AAAA,EACvC;AACF;;;AFJO,IAAM,2BAAN,cAAuC,uBAAuB;AAAA,EACnE,OAAO,KAAK,KAAmC;AAC7C,QAAI,eAAe,MAAM;AACvB,aAAO;AAAA,IACT;AACA,WAAO,IAAI,KAAK,GAAG;AAAA,EACrB;AAAA;AAAA,EAGA,OAAO,qCAAgB;AAAA;AAAA,EAEvB;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAkC,CAAC,GAAG;AACpC,UAAM,IAAI;AACV,SAAK,uBAAuB,wBAAwB;AACpD,SAAK,WAAO,wBAAQ,QAAQ,2BAAW;AACvC,SAAK,eAAe,CAAC,GAAI,gBAAgB,CAAC,CAAE;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAmC;AACjC,UAAM,kBAAkB,KAAK,mBAAmB;AAChD,UAAM,uBAAuB,KAAK;AAClC,UAAM,eAAe,KAAK,cAAc,IAAI,cAAc,KAAK,CAAC;AAChE,WAAO;AAAA,MACL,MAAM,qCAAgB;AAAA,MACtB,GAAG;AAAA,MACH,gBAAgB,gBAAgB,UAAU,oBAAoB,EAAE,aAAa;AAAA,MAC7E;AAAA,MACA,mBAAmB,aAAa;AAAA,MAChC,MAAM,KAAK,WAAO,wBAAQ,KAAK,IAAI,IAAI;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,4BAAuE;AACrE,WAAO,KAAK,QAAQ;AAAA,MAClB,CAAC,WACC,OAAO,SAAS,gCAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,SAAyB;AACxC,WAAO,gBAAgB,MAAM,OAAO;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,yBAEE,YAEA,WACA;AACA,SAAK,WAAW;AAAA,MACd,MAAM,gCAAW;AAAA,MACjB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,YAAY,UAA2B;AACrC,WAAO,gCAAgC;AAAA,MACrC,uBAAmB,qBAAG,yBAAS,KAAK,UAAU,KAAK,oBAAoB,KAAK,IAAI,EAAE,MAAM;AAAA,MACxF;AAAA,MACA,eAAe,KAAK,aAAa;AAAA,MACjC,aAAa,KAAK,SAAS;AAAA,IAC7B,CAAC;AAAA,EACH;AACF;;;AGvIA,IAAAC,oBAA0B;AAC1B,IAAAC,kBAA2B;AAC3B,IAAAC,mBAA4B;AAE5B,IAAAC,gBAAmB;AAGnB,IAAAC,uBAAuD;AACvD,IAAAC,iBAAkC;;;ACRlC,IAAAC,iBAAyB;AAKlB,IAAM,mBAAgD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM3D,WAAO,yBAAS,YAAY;AAAA,EAC5B,kBAAkB,MAAM,IAAI,WAAW,CAAC;AAC1C;AAGO,IAAM,iBAA8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWzD,WAAO,yBAAS,oCAAoC;AAAA,EACpD,kBAAkB,MAAM,IAAI,WAAW,CAAC;AAC1C;;;ADUO,IAAM,2BAAN,cAAuC,uBAAuB;AAAA,EACnE,OAAO,KAAK,KAAmC;AAC7C,QAAI,eAAe,MAAM;AACvB,aAAO;AAAA,IACT;AACA,WAAO,IAAI,KAAK,GAAG;AAAA,EACrB;AAAA;AAAA,EAGA,OAAO,qCAAgB;AAAA;AAAA,EAEvB;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,EAAE,QAAQ,YAAY,UAAU,GAAG,KAAK,IAAkC,CAAC,GAAG;AACxF,UAAM,IAAI;AACV,SAAK,eAAW,kBAAG,QAAQ;AAC3B,SAAK,aAAS,yBAAS,UAAU,iBAAiB,KAAK;AACvD,SAAK,iBAAa,yBAAS,cAAc,iBAAiB,iBAAiB,CAAC;AAC5E,SAAK,OAAO,KAAK;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAmC;AACjC,UAAM,aAAS,yBAAS,KAAK,UAAU,IAAI;AAC3C,UAAM,iBAAa,yBAAS,KAAK,cAAc,IAAI;AACnD,WAAO;AAAA,MACL,MAAM,qCAAgB;AAAA,MACtB,gBAAgB,KAAK;AAAA,MACrB,GAAG,MAAM,mBAAmB;AAAA,MAC5B,cAAc,OAAO;AAAA,MACrB,kBAAkB,WAAW;AAAA,MAC7B,cAAc;AAAA,MACd,YAAQ,wBAAQ,MAAM;AAAA,MACtB,gBAAY,wBAAQ,UAAU;AAAA,IAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAuD;AACrD,WAAO,KAAK,OAAO;AAAA,MACjB,CAAC,UAAoD,MAAM,SAAS,+BAAU;AAAA,IAChF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAAyD;AACvD,WAAO,KAAK,QAAQ;AAAA,MAClB,CAAC,WAAuD,OAAO,SAAS,gCAAW;AAAA,IACrF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAAyD;AACvD,WAAO,KAAK,QAAQ;AAAA,MAClB,CAAC,WAAuD,OAAO,SAAS,gCAAW;AAAA,IACrF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAa,QAAkC,MAAS;AACtD,SAAK,aAAa,OAAO,iBAAiB,IAAI;AAC9C,SAAK,SAAS,OAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,oBAA4B,GAAG;AAChD,QAAI,gBAAgB;AAEpB,WAAO,eAAe;AACpB,WAAK,WAAW;AAAA,QACd,MAAM,gCAAW;AAAA,MACnB,CAAC;AACD,uBAAiB;AAAA,IACnB;AAEA,WAAO,KAAK,QAAQ,SAAS;AAAA,EAC/B;AAAA,EAEA,gBAAgB,WAAsB,QAAgB;AACpD,UAAM,EAAE,oBAAoB,IAAI;AAChC,UAAM,EAAE,WAAW,IAAI;AAEvB,UAAM,kBAAkB,KAAK,cAAc,EAAE,UAAU;AAAA,MACrD,CAAC,KAAK,QAAQ,MAAM,IAAI;AAAA,MACxB;AAAA,IACF;AAEA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,KAAK;AAAA,MACnB,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,0BAA0B,UAAoD;AAC5E,UAAM,sBAAkB,4BAAW,QAAQ;AAG3C,QAAI,KAAK,kBAAkB,EAAE,KAAK,CAAC,MAAM,EAAE,eAAe,gBAAgB,OAAO,CAAC,GAAG;AACnF,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,MAAM,UAAU;AAAA,MACjC,MAAM,+BAAU;AAAA,MAChB,YAAY,gBAAgB,OAAO;AAAA,MACnC,WAAW;AAAA,IACb,CAAC;AAED,SAAK,WAAW;AAAA,MACd,MAAM,gCAAW;AAAA,MACjB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,SAAyB;AACxC,WAAO,gBAAgB,MAAM,OAAO;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,KAAc,MAA8C;AAClE,UAAM,eAAe,IAAI,4BAAU,GAAG;AACtC,SAAK,aAAa,aAAa,UAAU,KAAK,gBAAgB,IAAI;AAClE,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,UAA2B;AACrC,WAAO,gCAAgC;AAAA,MACrC;AAAA,MACA,aAAa,KAAK,SAAS;AAAA,IAC7B,CAAC;AAAA,EACH;AACF;;;AEvOA,IAAAC,iBAAqC;AACrC,IAAAC,wBAAgC;AAOzB,IAAM,wBAAwB,CAAC,QAAoD;AACxF,MAAI,eAAe,4BAA4B,eAAe,0BAA0B;AACtF,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,KAAK,IAAI;AAEjB,UAAQ,IAAI,MAAM;AAAA,IAChB,KAAK,sCAAgB,QAAQ;AAC3B,aAAO,yBAAyB,KAAK,GAAG;AAAA,IAC1C;AAAA,IACA,KAAK,sCAAgB,QAAQ;AAC3B,aAAO,yBAAyB,KAAK,GAAG;AAAA,IAC1C;AAAA,IACA,SAAS;AACP,YAAM,IAAI,yBAAU,yBAAU,0BAA0B,6BAA6B,OAAO;AAAA,IAC9F;AAAA,EACF;AACF;;;AC1BA,IAAAC,kBAAqC;AAErC,IAAAC,gBAAmB;AAiBnB,IAAAC,wBAAiC;AACjC,IAAAC,iBAAyB;;;AClBzB,IAAAC,iBAAkC;;;ACDlC,IAAAC,gBAAmB;AAEnB,IAAAC,wBAA8D;AAC9D,IAAAC,iBAAyB;AAwBlB,IAAM,0BAA0B,CAAC,WAA0C;AAChF,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,qBAAqB,EAAE,UAAU,UAAU;AAAA,EAC7C,IAAI;AAEJ,QAAM,iBAAa,kBAAG,UAAU,UAAU;AAC1C,QAAM,qBAAiB,kBAAG,UAAU,cAAc;AAElD,QAAM,uBAAmB,yBAAS,UAAU;AAE5C,QAAM,CAAC,WAAW,IAAI,IAAI,uCAAiB,EAAE,OAAO,kBAAkB,CAAC;AAEvE,MAAI,YAAY,SAAS,sCAAgB,MAAM;AAC7C,WAAO;AAAA,MACL,SAAK,kBAAG,CAAC;AAAA,MACT,YAAQ,kBAAG,CAAC;AAAA,MACZ,YAAQ,kBAAG,CAAC;AAAA,MACZ,oBAAgB,kBAAG,CAAC;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,EAAE,MAAM,WAAW,QAAQ,SAAS,IAAI;AAI9C,MAAI,kBAAc,kBAAG,CAAC;AACtB,MAAI,eAAW,kBAAG,CAAC;AAEnB,MAAI,SAAS,sCAAgB,QAAQ;AACnC,UAAM,EAAE,sBAAsB,aAAa,IAAI;AAE/C,UAAM,wBAAoB,sBAAG,yBAAS,UAAU,oBAAoB,EAAE,IAAI,EAAE,MAAM;AAElF,kBAAc,gCAAgC;AAAA,MAC5C;AAAA,MACA;AAAA,MACA,eAAe,aAAa,UAAU;AAAA,MACtC,aAAa,iBAAiB;AAAA,IAChC,CAAC;AAAA,EACH,OAAO;AACL,UAAM,EAAE,eAAe,IAAI;AAE3B,QAAI,gBAAgB;AAClB,iBAAW;AAAA,IACb;AAEA,kBAAc,gCAAgC;AAAA,MAC5C;AAAA,MACA,aAAa,iBAAiB;AAAA,IAChC,CAAC;AAAA,EACH;AAEA,QAAM,SAAS,UAAU;AAAA,IACvB;AAAA,IACA,gBAAY,kBAAG,UAAU;AAAA,IACzB;AAAA,IACA;AAAA,IACA,aAAa,iBAAiB;AAAA,EAChC,CAAC;AAED,QAAM,eAAW,kBAAG,SAAS,KAAK,CAAC,WAAW,OAAO,SAAS,iCAAW,QAAQ,GAAG,IAAI;AACxF,QAAM,eAAe,SAAS,KAAK,CAAC,WAAW,OAAO,SAAS,iCAAW,YAAY,GAAG;AAIzF,QAAM,kBAAkB,UAAU,OAAO,CAAC,KAAK,QAAQ,MAAM,IAAI,YAAY,CAAC;AAE9E,QAAM,SAAS,UAAU;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,yBAAyB,SAAS,UAAU,cAAc;AACjF,QAAM,SAAS,yBAAyB,QAAQ,UAAU,cAAc;AACxE,QAAM,SAAS,yBAAyB,QAAQ,UAAU,cAAc;AACxE,QAAM,MAAM,OAAO,IAAI,cAAc;AAErC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACpHA,IAAAC,mBAA4B;AAC5B,IAAAC,kBAAqC;AACrC,IAAAC,gBAAmB;AACnB,IAAAC,wBAA6C;;;ACH7C,IAAAC,oBAA6D;AAE7D,IAAAC,gBAAmB;AAUZ,IAAM,kBAAkB,CAAC,EAAE,KAAK,SAAS,YAAY,UAAU,MAA4B;AAChG,QAAM,eAAe,IAAI,4BAAU,GAAG;AACtC,QAAM,uBAAuB,QAAQ,OAAO,MAAM,CAAC;AACnD,QAAM,mBAAmB,aAAa,YAAY,oBAAoB;AACtE,QAAM,SAAS,iBAAiB,OAAO;AAEvC,MAAI;AAGJ,MAAI,iBAAiB,oBAAoB;AACvC,QAAI,YAAY;AAEd,YAAM,iBAAa,kBAAG,QAAQ,MAAM,EACjC,QAAI,uCAAoB,EAAE,WAAW,UAAU,SAAS,EAAE,CAAC,CAAC,EAC5D,SAAS;AAGZ,oBAAc,KAAK,WAAW,MAAM,CAAC,EAAE,MAAM,aAAa,CAAC;AAAA,IAC7D;AAAA,EACF,OAAO;AAEL,kBAAc,QAAQ,OAAO,MAAM;AAAA,EACrC;AAEA,MAAI;AACJ,MAAI,aAAa;AAEf,UAAM,OAAO,iBAAiB,gBAAgB,WAAW;AACzD,QAAI,MAAM;AAER,0BAAoB,OAAO,OAAO,CAAC,MAAM,OAAO,UAAU;AACxD,cAAM,QAAQ,KAAK,KAAK;AACxB,cAAM,OAAO,MAAM;AAEnB,YAAI,MAAM;AACR,iBAAO;AAAA,YACL,GAAG;AAAA;AAAA,YAEH,CAAC,IAAI,GAAG,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AAAA,UAC1C;AAAA,QACF;AAEA,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAAA,IACP;AAAA,EACF;AAEA,QAAM,OAAO;AAAA,IACX,mBAAmB,iBAAiB;AAAA,IACpC,cAAc,iBAAiB;AAAA,IAC/B;AAAA,IACA,GAAI,QAAQ,QAAQ,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,QAAQ;AAAA,EACzF;AAEA,SAAO;AACT;;;ACnEA,IAAAC,kBAAqC;AAErC,IAAAC,wBAA0B;AAGnB,SAAS,iBAA4B,QAAiB,OAAyB;AACpF,SAAO,OAAO,OAAO,CAAC,MAAM,MAAM,SAAS,EAAE,IAAI,CAAC;AACpD;AAGO,SAAS,gBAA2B,QAAiB,MAAiB;AAC3E,SAAO,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI;AAC7C;AAGO,SAAS,cAAc,QAAiB;AAC7C,SAAO,gBAA2B,QAAQ,gCAAU,IAAI;AAC1D;AAGO,SAAS,iBAAiB,QAAiB;AAChD,SAAO,gBAA8B,QAAQ,gCAAU,OAAO;AAChE;AAGO,SAAS,wBAAwB,QAAiB;AACvD,SAAO,iBAA2C,QAAQ,CAAC,gCAAU,MAAM,gCAAU,OAAO,CAAC;AAC/F;AAGO,SAAS,kBAAkB,QAAiB;AACjD,SAAO,gBAA+B,QAAQ,gCAAU,QAAQ;AAClE;AAGO,SAAS,oBAAoB,QAAiB,SAAiB;AACpE,QAAM,aAAa,cAAc,MAAM;AACvC,QAAM,gBAAgB,iBAAiB,MAAM;AAC7C,QAAM,YAAY,WAAW,KAAK,CAAC,MAAM,EAAE,YAAY,OAAO;AAE9D,QAAM,eAAe,cAAc;AAAA,IACjC,CAAC,MAAM,YAAY;AAAA,EACrB;AAEA,SAAO,aAAa;AACtB;AAGO,SAAS,0BACd,QACA,YAC2B;AAC3B,MAAI,cAAc,MAAM;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,SAAS,UAAU;AAEzC,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA,EACT;AACA,MAAI,cAAc,SAAS,gCAAU,UAAU;AAC7C,UAAM,IAAI;AAAA,MACR,0BAAU;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAGO,SAAS,uBAAuB,OAAc;AACnD,MAAI,MAAM,SAAS,gCAAU,MAAM;AACjC,WAAO,MAAM,MAAM,SAAS;AAAA,EAC9B;AAEA,MAAI,MAAM,SAAS,gCAAU,SAAS;AACpC,WAAO,MAAM,UAAU,SAAS;AAAA,EAClC;AAEA,SAAO;AACT;;;AC1EA,IAAAC,wBAA2B;AAGpB,SAAS,iBAA6B,SAAmB,MAAkB;AAChF,SAAO,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI;AAC9C;AAGO,SAAS,0BAA0B,SAAmB;AAC3D,SAAO,iBAAwC,SAAS,iCAAW,eAAe;AACpF;AAGO,SAAS,eAAe,SAAmB;AAChD,SAAO,iBAA6B,SAAS,iCAAW,IAAI;AAC9D;AAGO,SAAS,iBAAiB,SAAmB;AAClD,SAAO,iBAA+B,SAAS,iCAAW,MAAM;AAClE;AAGO,SAAS,mBAAmB,SAAmB;AACpD,SAAO,iBAAiC,SAAS,iCAAW,QAAQ;AACtE;;;AHQO,SAAS,kBACd,UACA,MACA;AACA,UAAQ,YAAY,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI;AACvD;AAGO,SAAS,uBAAuB,iBAAuD;AAC5F,UAAQ,iBAAiB;AAAA,IACvB,KAAK,sCAAgB;AACnB;AAAA,IACF,KAAK,sCAAgB;AACnB;AAAA,IACF,KAAK,sCAAgB;AACnB;AAAA,IACF;AACE,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,6BAA6B;AAAA,MAC/B;AAAA,EACJ;AACF;AAGO,SAAS,OAAO,iBAAkC,MAA2B;AAClF,QAAM,SAAS,uBAAuB,eAAe;AAErD,SAAO,WAAW;AACpB;AAGO,SAAS,WAAW,iBAAkC;AAC3D,SAAO,OAAO,kCAAyC;AACzD;AAGO,SAAS,aAAa,iBAAkC;AAC7D,SAAO,OAAO,sCAA2C;AAC3D;AAGO,SAAS,aAAa,iBAAkC;AAC7D,SAAO,OAAO,sCAA2C;AAC3D;AAQO,SAAS,gBAAgB,UAAsC;AACpE,SAAO,kBAAgD,UAAU,kCAAY,IAAI;AACnF;AAGO,SAAS,sBAAsB,UAAsC;AAC1E,SAAO,kBAAsD,UAAU,kCAAY,UAAU;AAC/F;AAGA,IAAM,cAAc,CAAC,KAAgB,QAAmB;AACtD,QAAM,UAAU,IAAI,cAAc,CAAC;AACnC,QAAM,UAAU,IAAI,cAAc,CAAC;AAGnC,QAAM,iBAAiB,QAAQ;AAAA,IAC7B,CAAC,WAAW,CAAC,QAAQ,KAAK,CAAC,WAAW,OAAO,YAAY,OAAO,OAAO;AAAA,EACzE;AAGA,QAAM,eAAe,QAAQ,IAAI,CAAC,WAAW;AAE3C,UAAM,gBAAgB,QAAQ,KAAK,CAAC,WAAW,OAAO,YAAY,OAAO,OAAO;AAChF,QAAI,CAAC,eAAe;AAElB,aAAO;AAAA,IACT;AAEA,UAAM,mBAAe,kBAAG,OAAO,MAAM,EAAE,IAAI,cAAc,MAAM;AAC/D,WAAO,EAAE,GAAG,QAAQ,QAAQ,aAAa;AAAA,EAC3C,CAAC;AAGD,SAAO,aAAa,OAAO,cAAc;AAC3C;AAGA,SAAS,gBAAgB,GAAc,GAAc;AACnD,SACE,EAAE,SAAS,EAAE,QACb,EAAE,MAAM,YAAY,EAAE,MAAM,WAC5B,EAAE,IAAI,YAAY,EAAE,IAAI,WACxB,EAAE,MAAM,SAAS,EAAE,MAAM,QACzB,EAAE,IAAI,SAAS,EAAE,IAAI;AAEzB;AAGO,SAAS,aAAa,YAAyB,OAAkB;AACtE,QAAM,gBAAgB,CAAC,GAAG,UAAU;AAGpC,QAAM,QAAQ,cAAc,UAAU,CAAC,OAAO,gBAAgB,IAAI,KAAK,CAAC;AAExE,MAAI,cAAc,KAAK,GAAG;AAExB,UAAM,oBAAoB,EAAE,GAAG,cAAc,KAAK,EAAE;AAEpD,QAAI,MAAM,YAAY,QAAQ;AAK5B,wBAAkB,aAAa,kBAAkB,YAAY,SACzD,YAAY,mBAAmB,KAAK,IACpC,MAAM;AAAA,IACZ;AAEA,QAAI,MAAM,OAAO,QAAQ;AAEvB,wBAAkB,QAAQ,CAAC,GAAI,kBAAkB,SAAS,CAAC,GAAI,GAAG,MAAM,KAAK;AAAA,IAC/E;AAEA,kBAAc,KAAK,IAAI;AAAA,EACzB,OAAO;AAEL,kBAAc,KAAK,KAAK;AAAA,EAC1B;AAEA,SAAO;AACT;AAQO,SAAS,8BAA8B;AAAA,EAC5C;AAAA,EACA;AACF,GAA2C;AACzC,QAAM,qBAAqB,sBAAsB,QAAQ;AAEzD,QAAM,6BAA6B,mBAAmB;AAAA,IACpD,CAAC,yBAAyB,YAAY;AAEpC,YAAM,UAAU;AAChB,YAAM,QAAQ,oBAAoB,QAAQ,OAAO;AACjD,UAAI,OAAO;AACT,cAAM,eAAe,uBAAuB,KAAK;AACjD,cAAM,yBAAyB,aAAa,yBAAyB;AAAA,UACnE;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA,SAAS;AAAA,UACX;AAAA,UACA,IAAI;AAAA,YACF;AAAA,YACA,SAAS,QAAQ,UAAU,SAAS;AAAA,YACpC;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV;AAAA,cACE,QAAQ,QAAQ;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAED,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAGO,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGgC;AAC9B,QAAM,uBAAuB,gBAAgB,QAAQ;AACrD,QAAM,kBAAkB,mBAAmB,OAAO;AAElD,QAAM,yBAAyB,gBAAgB,OAAO,CAAC,mBAAmB,WAAW;AACnF,UAAM,gBAAgB,0BAA0B,QAAQ,OAAO,UAAU;AAEzE,QAAI,eAAe;AACjB,YAAM,aAAa,qBAAqB,OAAO,CAAC,qBAAqB,YAAY;AAC/E,YAAI,QAAQ,OAAO,cAAc,YAAY;AAC3C,gBAAM,QAAQ,oBAAoB,QAAQ,QAAQ,OAAO;AACzD,cAAI,OAAO;AACT,kBAAM,eAAe,uBAAuB,KAAK;AACjD,kBAAM,QAAQ,CAAC;AAEf,kBAAM,MAAM,SAAS,cAAc,UAAU;AAC7C,gBAAI,KAAK;AACP,oBAAM;AAAA,gBACJ,gBAAgB;AAAA,kBACd;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF;AAEA,kBAAM,qBAAqB,aAAa,qBAAqB;AAAA,cAC3D;AAAA,cACA,MAAM;AAAA,gBACJ;AAAA,gBACA,SAAS;AAAA,cACX;AAAA,cACA,IAAI;AAAA,gBACF;AAAA,gBACA,SAAS,QAAQ;AAAA,cACnB;AAAA;AAAA,cAEA,YAAY,QAAQ,QAAQ,OAAO,IAC/B,SACA;AAAA,gBACE;AAAA,kBACE,QAAQ,QAAQ;AAAA,kBAChB,SAAS,QAAQ;AAAA,gBACnB;AAAA,cACF;AAAA,cACJ;AAAA,YACF,CAAC;AAED,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO;AAAA,MACT,GAAG,iBAAgC;AAEnC,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,CAAgB;AAEpB,SAAO;AACT;AAGA,SAAS,oCACP,SACA,gBACA,eACA;AACA,QAAM,EAAE,IAAI,WAAW,SAAS,OAAO,IAAI;AAC3C,MAAI,EAAE,MAAM,YAAY,IAAI;AAE5B,QAAM,SAAS,eAAe,KAAK,CAAC,UAAU,MAAM,eAAe,SAAS;AAI5E,MAAI,iCAAgB,aAAa;AAC/B,UAAM,SAAS,cAAc,KAAK,CAAC,WAAW,OAAO,YAAY,OAAO;AAExE,kBAAc,QAAQ,MAAM;AAAA,EAC9B;AAEA,QAAM,WAAW,eAAe,KAAK,CAAC,UAAU,MAAM,eAAe,WAAW;AAIhF,SAAO;AAAA,IACL;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,IAAI;AAAA,MACF,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,YAAY;AAAA,MACV;AAAA,QACE,SAAS,QAAQ,SAAS;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,GAA6C;AAC3C,MAAI,aAA0B,CAAC;AAE/B,QAAM,cAAc,eAAe,OAAO;AAC1C,QAAM,iBAAiB,kBAAkB,MAAM;AAC/C,QAAM,gBAAgB,iBAAiB,OAAO;AAK9C,cAAY,QAAQ,CAAC,WAAW;AAC9B,UAAM,EAAE,QAAQ,SAAS,GAAG,IAAI;AAEhC,UAAM,eAAe,cAAc,KAAK,CAAC,WAAW,OAAO,YAAY,OAAO;AAE9E,QAAI,cAAc;AAChB,mBAAa,aAAa,YAAY;AAAA,QACpC;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA,SAAS,aAAa;AAAA,QACxB;AAAA,QACA,IAAI;AAAA,UACF;AAAA,UACA,SAAS;AAAA,QACX;AAAA,QACA,YAAY;AAAA,UACV;AAAA,YACE;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAOD,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA,kCAAY;AAAA,EACd;AAMA,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA,kCAAY;AAAA,EACd;AAEA,GAAC,GAAG,kBAAkB,GAAG,mBAAmB,EAAE,QAAQ,CAAC,YAAY;AACjE,UAAM,YAAY,oCAAoC,SAAS,gBAAgB,aAAa;AAE5F,iBAAa,aAAa,YAAY,SAAS;AAAA,EACjD,CAAC;AAED,SAAO;AACT;AAGO,SAAS,yBAAyB,SAAgC;AACvE,QAAM,cAAc,eAAe,OAAO;AAC1C,QAAM,wBAAwB,YAAY,OAAO,CAAC,MAAM,WAAW;AACjE,UAAM,aAAa,aAAa,MAAM;AAAA,MACpC;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,SAAS;AAAA,MACX;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,SAAS,OAAO,GAAG,SAAS;AAAA,MAC9B;AAAA,MACA,YAAY;AAAA,QACV;AAAA,UACE,SAAS,OAAO,QAAQ,SAAS;AAAA,UACjC,QAAQ,OAAO;AAAA,QACjB;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,CAAgB;AAEpB,SAAO;AACT;AAGO,SAAS,6BAA6B,EAAE,QAAQ,QAAQ,GAAkC;AAC/F,QAAM,yBAAyB,0BAA0B,OAAO;AAChE,QAAM,QAAQ,wBAAwB,MAAM,EAAE,CAAC;AAC/C,QAAM,cAAc,uBAAuB,KAAK;AAChD,QAAM,4BAA4B,uBAAuB,OAAO,CAAC,MAAM,0BAA0B;AAC/F,UAAM,aAAa,aAAa,MAAM;AAAA,MACpC;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,SAAS;AAAA,MACX;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,SAAS,uBAAuB,cAAc;AAAA,MAChD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,CAAgB;AAEpB,SAAO;AACT;AAGO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,MAAI,aAAa,eAAe,GAAG;AACjC,WAAO;AAAA,MACL,GAAG,6BAA6B,EAAE,QAAQ,QAAQ,CAAC;AAAA,MACnD,GAAG,sBAAsB,EAAE,QAAQ,SAAS,SAAS,CAAC;AAAA,IACxD;AAAA,EACF;AAEA,MAAI,aAAa,eAAe,GAAG;AACjC,WAAO;AAAA,MACL,GAAG,sBAAsB,EAAE,QAAQ,SAAS,SAAS,CAAC;AAAA,MACtD,GAAG,0BAA0B;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACD,GAAG,8BAA8B,EAAE,QAAQ,SAAS,CAAC;AAAA,IACvD;AAAA,EACF;AAEA,SAAO,CAAC,GAAG,yBAAyB,OAAO,CAAC;AAC9C;;;AI/eA,IAAAC,wBAA4B;AAQrB,IAAM,oBAAoB,CAC/B,eAC6B;AAC7B,QAAM,UAAU,sBAAsB,UAAU;AAEhD,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK,kCAAY,YAAY;AAC3B,aAAO;AAAA,QACL,GAAG;AAAA,QACH,MAAM,WAAW,QAAQ;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,KAAK,kCAAY,SAAS;AACxB,aAAO;AAAA,QACL,GAAG;AAAA,QACH,MAAM,WAAW,QAAQ;AAAA,MAC3B;AAAA,IACF;AAAA,IACA;AACE,aAAO;AAAA,EACX;AACF;AAEO,IAAM,kCAAkC,CAC7C,aACkB;AAClB,QAAM,eAA8B,CAAC;AAErC,WAAS,QAAQ,CAAC,YAAY;AAC5B,QAAI,QAAQ,SAAS,kCAAY,MAAM;AACrC,mBAAa,KAAK;AAAA,QAChB,OAAO,QAAQ;AAAA,QACf,YAAY,QAAQ;AAAA,QACpB,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEO,IAAM,kCAAkC,CAC7C,aACkB;AAClB,QAAM,eAA8B,CAAC;AAErC,WAAS,QAAQ,CAAC,YAAY;AAC5B,QAAI,QAAQ,SAAS,kCAAY,MAAM;AACrC,mBAAa,KAAK;AAAA,QAChB,OAAO,QAAQ;AAAA,QACf,YAAY,QAAQ;AAAA,QACpB,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;ACnEA,IAAAC,kBAAqC;AAY9B,IAAM,2BAA2B,CAAC,cAA2C;AAClF,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH;AAAA,IACF,KAAK;AACH;AAAA,IACF,KAAK;AACH;AAAA,IACF,KAAK;AACH;AAAA,IACF;AACE,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,+BAA+B;AAAA,MACjC;AAAA,EACJ;AACF;AAQO,IAAM,uBAAuB,CAAC,yBAAoD;AACvF,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,MAAI,kBAAkB;AACtB,MAAI,kBAAkB;AACtB,MAAI,kBAAkB;AAEtB,MAAI,sBAAsB,MAAM;AAC9B,aAAS,yBAAyB,qBAAqB,IAAI;AAE3D,YAAQ,qBAAqB,MAAM;AAAA,MACjC,KAAK;AACH,eAAO,qBAAqB;AAC5B,kBAAU,qBAAqB,MAAM;AACrC,0BAAkB;AAClB;AAAA,MAEF,KAAK;AACH,eAAO,qBAAqB;AAC5B,kBAAU,qBAAqB,MAAM;AACrC,0BAAkB;AAClB;AAAA,MAEF,KAAK;AACH,eAAO,qBAAqB;AAC5B,0BAAkB;AAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,yBAAwD;AAAA,IAC5D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AACT;;;AP7CO,SAAS,2BACd,QACA;AACA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,CAAC;AAAA,IACV;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,UAAU,uBAAuB,QAAQ;AAE/C,QAAM,iBAAa,wBAAQ,gBAAgB;AAE3C,QAAM,aAAa,cAAc;AAAA,IAC/B,iBAAiB,YAAY;AAAA,IAC7B,QAAQ,YAAY,UAAU,CAAC;AAAA,IAC/B,SAAS,YAAY,WAAW,CAAC;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,WAAW,uBAAuB,YAAY,IAAI;AAExD,QAAM,EAAE,IAAI,IAAI,wBAAwB;AAAA,IACtC;AAAA,IACA;AAAA,IACA,qBAAqB;AAAA,MACnB;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,EAAE,iBAAiB,iBAAiB,iBAAiB,SAAS,QAAQ,KAAK,IAC/E,qBAAqB,oBAAoB;AAE3C,QAAM,eAAe,gCAAgC,QAAQ;AAC7D,QAAM,eAAe,gCAAgC,QAAQ;AAE7D,MAAI;AAEJ,MAAI,MAAM;AACR,WAAO,wBAAS,UAAU,IAAI;AAAA,EAChC;AAEA,QAAM,qBAA2D;AAAA,IAC/D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,WAAW,YAAY,IAAI;AAAA,IACvC,cAAc,aAAa,YAAY,IAAI;AAAA,IAC3C,cAAc,aAAa,YAAY,IAAI;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AACT;;;AQhHA,IAAAC,oBAA0C;AAC1C,IAAAC,wBAA4B;AAKrB,SAAS,eACd,UACA,SACA,eAAwC,CAAC,GACpC;AAiBL,SAAO,SAAS,OAAO,CAAC,MAAW,YAAY;AAC7C,QAAI,QAAQ,SAAS,kCAAY,WAAW,QAAQ,SAAS,kCAAY,KAAK;AAC5E,YAAM,iBAAiB,IAAI,4BAAU,aAAa,QAAQ,EAAE,KAAK,OAAO;AAExE,YAAM,OACJ,QAAQ,SAAS,kCAAY,MACzB,IAAI,iCAAe,KAAK,EAAE,OAAO,QAAQ,IAAI,IAC7C,QAAQ;AAEd,YAAM,CAAC,UAAU,IAAI,eAAe,UAAU,MAAM,QAAQ,KAAK,SAAS,CAAC;AAC3E,WAAK,KAAK,UAAU;AAAA,IACtB;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;ATsCO,IAAM,sBAAN,MAA0B;AAAA;AAAA,EAE/B;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA,cAAc,kBAAG,CAAC;AAAA;AAAA,EAElB;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,IAAY,UAAoB,MAA6B;AACvE,SAAK,KAAK;AACV,SAAK,WAAW;AAChB,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,aAAa,OACX,IACA,UACA,MAC8B;AAC9B,UAAM,WAAW,IAAI,oBAAoB,IAAI,UAAU,IAAI;AAC3D,UAAM,SAAS,MAAM;AACrB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAiC;AACrC,UAAM,WAAW,MAAM,KAAK,SAAS,WAAW,2BAA2B;AAAA,MACzE,eAAe,KAAK;AAAA,IACtB,CAAC;AAED,QAAI,CAAC,SAAS,aAAa;AACzB,YAAM,eAAe,KAAK,SAAS,WAAW,aAAa;AAAA,QACzD,eAAe,KAAK;AAAA,MACtB,CAAC;AAED,uBAAiB,EAAE,aAAa,KAAK,cAAc;AACjD,YAAI,cAAc;AAChB;AAAA,QACF;AAAA,MACF;AAEA,aAAO,KAAK,MAAM;AAAA,IACpB;AAEA,SAAK,iBAAiB,SAAS;AAE/B,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,kBAA2C,yBAAyC;AAClF,WAAO,IAAI,uCAAiB,EAAE;AAAA,UAC5B,yBAAS,wBAAwB,UAAU;AAAA,MAC3C;AAAA,IACF,IAAI,CAAC;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,sBACJ,iBAC+C;AAC/C,QAAI,cAAc,KAAK;AAEvB,QAAI,CAAC,aAAa;AAChB,oBAAc,MAAM,KAAK,MAAM;AAAA,IACjC;AAEA,UAAM,qBAAqB,KAAK;AAAA,MAC9B;AAAA,IACF;AAEA,UAAM,WAAW,YAAY,UAAU,IAAI,iBAAiB,KAAK,CAAC;AAElE,UAAM,EAAE,YAAY,gBAAgB,SAAS,IAAI,KAAK,SAAS,aAAa;AAC5E,UAAM,YAAY,KAAK,SAAS,SAAS,EAAE,oBAAoB;AAE/D,UAAM,qBAAqB,2BAA6C;AAAA,MACtE,IAAI,KAAK;AAAA,MACT;AAAA,MACA,aAAa;AAAA,MACb,sBAAkB,yBAAS,YAAY,UAAU;AAAA,MACjD,sBAAsB,YAAY;AAAA,MAClC;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,sBAAsB;AAClC,UAAM,SAAS,KAAK,gBAAgB,QAAQ;AAC5C,QAAI,UAAU,WAAW,mBAAmB;AAC1C;AAAA,IACF;AAEA,UAAM,eAAe,KAAK,SAAS,WAAW,aAAa;AAAA,MACzD,eAAe,KAAK;AAAA,IACtB,CAAC;AAED,qBAAiB,EAAE,aAAa,KAAK,cAAc;AACjD,UAAI,aAAa,SAAS,qBAAqB;AAC7C,cAAM,IAAI;AAAA,UACR,0BAAU;AAAA,UACV,yCAAyC,aAAa;AAAA,QACxD;AAAA,MACF;AACA,UAAI,aAAa,SAAS,mBAAmB;AAC3C;AAAA,MACF;AAAA,IACF;AAEA,UAAM,KAAK,MAAM;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cACJ,iBAC8C;AAC9C,UAAM,KAAK,oBAAoB;AAE/B,UAAM,qBAAqB,MAAM,KAAK,sBAAwC,eAAe;AAE7F,UAAM,oBAAyD;AAAA,MAC7D,gBAAgB,KAAK;AAAA,MACrB,GAAG;AAAA,IACL;AAEA,QAAI,OAAuB,CAAC;AAE5B,QAAI,KAAK,MAAM;AACb,aAAO;AAAA,QACL,mBAAmB;AAAA,QACnB,KAAK,KAAK;AAAA,QACV,KAAK,KAAK;AAAA,MACZ;AAEA,wBAAkB,OAAO;AAAA,IAC3B;AAEA,QAAI,kBAAkB,iBAAiB;AACrC,YAAM;AAAA,QACJ;AAAA,QACA,gBAAgB,EAAE,OAAO;AAAA,MAC3B,IAAI;AAEJ,YAAM,eAAe;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KACJ,iBAC8C;AAC9C,WAAO,KAAK,cAAgC,eAAe;AAAA,EAC7D;AACF;;;AUhQO,SAAS,aAAa,SAAuB,iBAAyB;AAC3E,QAAM,WAAW,QAAQ,aAAa;AAEtC,UAAQ,QAAQ,SAAS;AAAA,IACvB,KAAK;AACH,aAAO,WAAW;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL;AACE,aAAO,MAAM,kBAAkB,KAAK;AAAA,EACxC;AACF;AASO,SAAS,eACd,SACA,SACA,kBAA0B,GACa;AACvC,MAAI,YAAY,QAAW;AACzB,WAAO;AAAA,EACT;AAEA,SAAO,UAAU,SAAS;AACxB,QAAI;AACF,aAAO,MAAM,QAAQ,GAAG,IAAI;AAAA,IAC9B,SAAS,QAAP;AACA,YAAM,QAAQ;AAMd,UAAI,MAAM,OAAO,SAAS,gBAAgB;AACxC,cAAM;AAAA,MACR;AACA,YAAM,WAAW,kBAAkB;AAEnC,UAAI,WAAW,QAAQ,YAAY;AACjC,cAAM;AAAA,MACR;AAEA,YAAM,QAAQ,aAAa,SAAS,QAAQ;AAE5C,YAAM,MAAM,KAAK;AAEjB,aAAO,eAAe,SAAS,SAAS,QAAQ,EAAE,GAAG,IAAI;AAAA,IAC3D;AAAA,EACF;AACF;;;AClFO,IAAM,kBAAkB,CAAC,MAAsB,SAAyC;AAC7F,QAAM,YAAmC,CAAC;AAE1C,WAAS,SAAS,EAAE,QAAQ,QAAQ,GAAiB;AACnD,QAAI,UAAU,OAAO,GAAG;AACtB,gBAAU,OAAO,IAAI,UAAU,OAAO,EAAE,IAAI,MAAM;AAAA,IACpD,OAAO;AACL,gBAAU,OAAO,IAAI;AAAA,IACvB;AAAA,EACF;AAGA,OAAK,QAAQ,QAAQ;AACrB,OAAK,QAAQ,QAAQ;AAGrB,SAAO,OAAO,QAAQ,SAAS,EAAE,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,SAAS,OAAO,EAAE;AACnF;;;AjCmCA,IAAM,cAAc;AAsGpB,IAAM,kBAAkB,CAAC,UAAmD;AAC1E,QAAM,EAAE,MAAM,UAAU,qBAAqB,YAAY,IAAI;AAE7D,QAAM,EAAE,gBAAgB,WAAW,iBAAiB,cAAc,UAAU,SAAS,IACnF;AAEF,SAAO;AAAA,IACL;AAAA,IACA,qBAAiB,kBAAG,QAAQ;AAAA,IAC5B,qBAAqB;AAAA,MACnB,qBAAiB,kBAAG,eAAe,eAAe;AAAA,MAClD,eAAW,kBAAG,SAAS,SAAS;AAAA,MAChC,gBAAY,kBAAG,SAAS,UAAU;AAAA,MAClC,kBAAc,kBAAG,SAAS,YAAY;AAAA,MACtC,iBAAa,kBAAG,SAAS,WAAW;AAAA,MACpC,qBAAiB,kBAAG,aAAa,eAAe;AAAA,MAChD,yBAAqB,kBAAG,aAAa,mBAAmB;AAAA,MACxD,qBAAiB,kBAAG,eAAe,eAAe;AAAA,MAClD,wBAAoB,kBAAG,gBAAgB,kBAAkB;AAAA,MACzD,4BAAwB,kBAAG,gBAAgB,sBAAsB;AAAA,MACjE,wBAAoB,kBAAG,gBAAgB,kBAAkB;AAAA,MACzD,oBAAgB,kBAAG,UAAU,cAAc;AAAA,MAC3C,gBAAY,kBAAG,UAAU,UAAU;AAAA,MACnC,0BAAsB,kBAAG,gBAAgB,oBAAoB;AAAA,MAC7D,aAAS,kBAAG,oBAAoB,OAAO;AAAA,MACvC;AAAA,IACF;AAAA,IACA;AAAA,IACA,aAAa;AAAA,MACX,IAAI,YAAY;AAAA,MAChB,YAAQ,kBAAG,YAAY,OAAO,MAAM;AAAA,MACpC,MAAM,YAAY,OAAO;AAAA,MACzB,cAAc,YAAY,aAAa,IAAI,CAAC,OAAO;AAAA,QACjD,IAAI,EAAE;AAAA,MACR,EAAE;AAAA,IACJ;AAAA,EACF;AACF;AAnMA;AA8SA,IAAqB,YAArB,MAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6ClB,YAED,KACP,UAA2B,CAAC,GAC5B;AAFO;AAmOT;AAAA;AAAA;AAAA;AAjRA;AACA;AAUA,mCAA2B;AAAA,MACzB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,MACP,cAAc;AAAA,IAChB;AAiCE,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,GAAG,QAAQ;AAC7C,SAAK,MAAM;AAEX,SAAK,aAAa,KAAK,iBAAiB;AACxC,SAAK,QAAQ,QAAQ,YAAY,IAAI,YAAY,QAAQ,SAAS,IAAI;AAAA,EACxE;AAAA,EAnDA,OAAO,0BAA0B;AAC/B,cAAS,gBAAgB,CAAC;AAC1B,cAAS,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EAYA,OAAe,WAAW,SAAiE;AACzF,UAAM,EAAE,cAAc,QAAQ,IAAI;AAElC,WAAO,eAAe,UAAU,SAAS;AACvC,YAAM,MAAM,KAAK,CAAC;AAClB,YAAM,UAAU,KAAK,CAAC;AACtB,YAAM,SAAS,UAAU,YAAY,QAAQ,OAAO,IAAI;AAExD,UAAI,cAA2B,EAAE,GAAG,SAAS,OAAO;AAEpD,UAAI,QAAQ,mBAAmB;AAC7B,sBAAc,MAAM,QAAQ,kBAAkB,WAAW;AAAA,MAC3D;AAEA,aAAO,QAAQ,QAAQ,QAAQ,MAAM,KAAK,aAAa,OAAO,IAAI,MAAM,KAAK,WAAW;AAAA,IAC1F,GAAG,YAAY;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA,aAAa,OAAO,KAAa,UAA2B,CAAC,GAAG;AAC9D,UAAM,WAAW,IAAI,UAAS,KAAK,OAAO;AAC1C,UAAM,SAAS,sBAAsB;AACrC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AACT,UAAM,QAAQ,UAAS,eAAe,KAAK,GAAG;AAC9C,QAAI,CAAC,OAAO;AACV,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,UAAM,OAAO,UAAS,cAAc,KAAK,GAAG;AAC5C,QAAI,CAAC,MAAM;AACT,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe;AACb,UAAM,EAAE,YAAY,IAAI,KAAK,QAAQ;AACrC,UAAM,EAAE,aAAa,oBAAoB,gBAAgB,YAAY,SAAS,IAC5E,KAAK,SAAS,EAAE;AAClB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,KAAa,SAA2B;AACpD,SAAK,MAAM;AACX,SAAK,UAAU,WAAW,KAAK;AAC/B,SAAK,aAAa,KAAK,iBAAiB;AACxC,UAAM,KAAK,sBAAsB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,wBAAwB;AAC5B,UAAM,QAAQ,MAAM,KAAK,WAAW;AACpC,UAAM,WAAW,MAAM,KAAK,UAAU;AAEtC,cAAS,+BAA+B,QAAQ;AAEhD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAe,+BAA+B,UAAoB;AAChE,UAAM,EAAE,kBAAkB,kBAAkB,iBAAiB,QAC3D,mDAAkC,SAAS,WAAW;AAExD,QAAI,CAAC,oBAAoB,CAAC,kBAAkB;AAC1C,YAAM,IAAI;AAAA,QACR,0BAAU,MAAM;AAAA,QAChB,wBAAwB,SAAS,mCAAmC;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,mBAAmB;AACzB,UAAM,UAAU,UAAS,WAAW,KAAK,OAAO;AAChD,UAAM,YAAY,IAAI,qCAAc,KAAK,KAAK;AAAA,MAC5C,OAAO,CAAC,KAAa,gBAA6B,QAAQ,KAAK,aAAa,KAAK,OAAO;AAAA,IAC1F,CAAC;AAED,UAAM,eAAe,CAAC,OAAqB,SAAkC;AAC3E,YAAM,eAAe,MAAM,YAAY,KAAK,CAAC,MAAM,EAAE,SAAS,qBAAqB;AAGnF,YAAM,iBAAiB,cAAc,cAAc;AAEnD,UAAI,gBAAgB;AAClB,eAAO,IAAI,sBAAsB;AAAA,UAC/B,KAAK,KAAK;AAAA,UACV;AAAA,UACA,SAAS,CAAC,KAAK,gBAAgB,QAAQ,KAAe,aAAa,KAAK,OAAO;AAAA,UAC/E,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AACA,aAAO,UAAU,QAAQ,OAAO,IAAI;AAAA,IACtC;AAGA,WAAO,OAAiB,YAAY;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAA8B;AAClC,UAAM;AAAA,MACJ,UAAU,EAAE,YAAY;AAAA,IAC1B,IAAI,MAAM,KAAK,WAAW,WAAW;AACrC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,aAA+B;AACnC,UAAM;AAAA,MACJ;AAAA,MACA,qBAAqB,EAAE,QAAQ;AAAA,IACjC,IAAI,MAAM,KAAK,SAAS;AACxB,UAAM,UAAU,IAAI,sBAAQ,MAAM,QAAQ,SAAS,CAAC;AACpD,WAAO,QAAQ,QAAQ,OAAO;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,iBAA8B;AAClC,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,WAAW,SAAS;AACjD,eAAO,kBAAG,MAAM,YAAY,OAAO,QAAQ,EAAE;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAA+B;AACnC,UAAM,EAAE,SAAS,IAAI,MAAM,KAAK,WAAW,YAAY;AAEvD,UAAM,oBAA8B;AAAA,MAClC,cAAU,kBAAG,SAAS,QAAQ;AAAA,MAC9B,WAAO,kBAAG,SAAS,KAAK;AAAA,MACxB,iBAAa,kBAAG,SAAS,WAAW;AAAA,MACpC,aAAa,SAAS;AAAA,MACtB,gBAAgB,SAAS;AAAA,MACzB,aAAa,SAAS;AAAA,MACtB,OAAO,SAAS;AAAA,IAClB;AAEA,cAAS,cAAc,KAAK,GAAG,IAAI;AAEnC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAiC;AACrC,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,WAAW,SAAS;AAEjD,UAAM,iBAAiB,gBAAgB,KAAK;AAE5C,cAAS,eAAe,KAAK,GAAG,IAAI;AAEpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa;AACX,UAAM;AAAA,MACJ,qBAAqB,EAAE,QAAQ;AAAA,IACjC,IAAI,KAAK,SAAS;AAClB,WAAO,QAAQ,SAAS;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA,MAAM,gBACJ,wBACA,EAAE,yBAAyB,MAAM,iBAAiB,MAAM,IAA0B,CAAC,GACrD;AAC9B,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,0BAAK,8BAAL,WAAkB,mBAAmB;AACrC,QAAI,wBAAwB;AAC1B,YAAM,KAAK,uBAAuB,kBAAkB;AAAA,IACtD;AAGA,UAAM,yBAAqB,wBAAQ,mBAAmB,mBAAmB,CAAC;AAE1E,QAAI;AAEJ,QAAI,mBAAmB,SAAS,sCAAgB,QAAQ;AACtD,aAAO,mBAAmB;AAAA,IAC5B;AAEA,QAAI,gBAAgB;AAClB,YAAM,eAAe,KAAK,WAAW,eAAe,EAAE,mBAAmB,CAAC;AAC1E,uBAAiB,EAAE,eAAe,KAAK,cAAc;AACnD,YAAI,eAAe,SAAS,qBAAqB;AAC/C,gBAAM,IAAI;AAAA,YACR,0BAAU;AAAA,YACV,yCAAyC,eAAe;AAAA,UAC1D;AAAA,QACF;AAEA,YAAI,eAAe,SAAS,mBAAmB;AAC7C;AAAA,QACF;AAAA,MACF;AAEA,YAAMC,iBAAgB,mBAAmB,iBAAiB,KAAK,WAAW,CAAC;AAC3E,YAAM,WAAW,IAAI,oBAAoBA,gBAAe,MAAM,IAAI;AAClE,YAAM,SAAS,MAAM;AACrB,aAAO;AAAA,IACT;AAEA,UAAM;AAAA,MACJ,QAAQ,EAAE,IAAI,cAAc;AAAA,IAC9B,IAAI,MAAM,KAAK,WAAW,OAAO,EAAE,mBAAmB,CAAC;AAEvD,WAAO,IAAI,oBAAoB,eAAe,MAAM,IAAI;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,KACJ,wBACA,EAAE,gBAAgB,yBAAyB,KAAK,IAAwB,CAAC,GACpD;AACrB,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,QAAI,wBAAwB;AAC1B,aAAO,KAAK,uBAAuB,kBAAkB;AAAA,IACvD;AACA,UAAM,yBAAqB,wBAAQ,mBAAmB,mBAAmB,CAAC;AAC1E,UAAM,EAAE,QAAQ,YAAY,IAAI,MAAM,KAAK,WAAW,OAAO;AAAA,MAC3D;AAAA,MACA,gBAAgB,kBAAkB;AAAA,IACpC,CAAC;AACD,UAAM,WAAW,YAAY,IAAI,iBAAiB;AAClD,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,mBAAmB,oBAAqE;AAC5F,UAAM,2BAA2B;AAAA,MAC/B,mBAAmB,OAAO;AAAA,QACxB,CAAC,UACC,eAAe,SACf,MAAM,aACN,KAAC,+BAAW,yBAAS,MAAM,SAAS,OAAG,yBAAS,IAAI,CAAC,KACrD,IAAI,iBAAG,MAAM,gBAAgB,EAAE,OAAO;AAAA,MAC1C;AAAA,IACF;AACA,QAAI,CAAC,0BAA0B;AAC7B,aAAO;AAAA,IACT;AACA,UAAM,yBAAqB,wBAAQ,mBAAmB,mBAAmB,CAAC;AAC1E,UAAM,WAAW,MAAM,KAAK,WAAW,mBAAmB;AAAA,MACxD;AAAA,IACF,CAAC;AAED,UAAM;AAAA,MACJ,oBAAoB,EAAE,OAAO;AAAA,IAC/B,IAAI;AAEJ,QAAI,QAAQ;AACV,aAAO,QAAQ,CAAC,OAAO,UAAU;AAC/B,YAAI,sBAAsB,aAAS,kBAAG,MAAM,gBAAgB,EAAE,GAAG,CAAC,GAAG;AAEnE,UAA8B,mBAAmB,OAAO,KAAK,EAAG,mBAC9D,MAAM;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,uBACJ,oBACwC;AACxC,QAAI,mBAAmB,SAAS,sCAAgB,QAAQ;AACtD,aAAO;AAAA,QACL,UAAU,CAAC;AAAA,QACX,iBAAiB;AAAA,QACjB,oBAAoB,CAAC;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,KAAK,mBAAmB,kBAAkB;AAEhD,QAAI,WAAuC,CAAC;AAC5C,UAAM,qBAA+B,CAAC;AACtC,QAAI,kBAAkB;AAEtB,aAAS,UAAU,GAAG,UAAU,aAAa,WAAW;AACtD,YAAM,EAAE,QAAQ,YAAY,IAAI,MAAM,KAAK,WAAW,OAAO;AAAA,QAC3D,wBAAoB,wBAAQ,mBAAmB,mBAAmB,CAAC;AAAA,QACnE,gBAAgB;AAAA,MAClB,CAAC;AACD,iBAAW,YAAY,IAAI,iBAAiB;AAC5C,YAAM,EAAE,wBAAwB,yBAAyB,IACvD,2BAA2B,QAAQ;AAErC,YAAM,oBACJ,uBAAuB,WAAW,KAAK,yBAAyB,WAAW;AAE7E,UAAI,mBAAmB;AACrB,2BAAmB,uBAAuB;AAC1C,2BAAmB,mBAAmB,uBAAuB,MAAM;AACnE,iCAAyB,QAAQ,CAAC,EAAE,WAAW,MAAM;AACnD,6BAAmB,0BAA0B,wBAAQ,WAAW,UAAU,CAAC;AAC3E,6BAAmB,KAAK,UAAU;AAAA,QACpC,CAAC;AAAA,MACH,OAAO;AACL;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,QAAoD;AACtE,UAAM,EAAE,mBAAmB,IAAI;AAC/B,UAAM,EAAE,gBAAgB,aAAa,YAAY,IAAI,KAAK,aAAa;AAEvE,UAAM,YAAY,KAAK,SAAS;AAEhC,UAAM,WAAW,mBAAmB,SAAS,GAAG,CAAC,IAAI,cAAc,mBAAmB;AACtF,uBAAmB,WAAW;AAE9B,UAAM,SAAS,mBAAmB,gBAAgB,SAAS;AAC3D,UAAM,SAAS,yBAAyB,QAAQ,UAAU,cAAc,EAAE,mBAAmB;AAG7F,QAAI,mBAAmB,SAAS,sCAAgB,QAAQ;AAEtD,UAAI,mBAAmB,SAAS,GAAG,CAAC,GAAG;AACrC,2BAAmB,WAAW;AAc9B,2BAAmB,WAAW,YAAY;AAAA,UACxC,mBAAmB,gBAAgB,WAAW,MAAM;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,mBAAmB,gBAAgB,WAAW,MAAM;AACnE,UAAM,SAAS,yBAAyB,QAAQ,UAAU,cAAc,EAAE,mBAAmB;AAE7F,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,SACJ,wBACA,EAAE,yBAAyB,KAAK,IAA+B,CAAC,GAC3C;AACrB,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,QAAI,wBAAwB;AAC1B,aAAO,KAAK,uBAAuB,kBAAkB;AAAA,IACvD;AACA,UAAM,yBAAqB,wBAAQ,mBAAmB,mBAAmB,CAAC;AAC1E,UAAM,EAAE,QAAQ,YAAY,IAAI,MAAM,KAAK,WAAW,OAAO;AAAA,MAC3D;AAAA,MACA,gBAAgB;AAAA,IAClB,CAAC;AACD,UAAM,WAAW,YAAY,IAAI,iBAAiB;AAClD,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAM,mBACJ,wBACA,uBAAuC,CAAC,GACxC;AAAA,IACE,yBAAyB;AAAA,IACzB,qBAAqB;AAAA,IACrB;AAAA,IACA;AAAA,EACF,IAA2B,CAAC,GACF;AAC1B,UAAM,qBAAiB,qBAAM,sBAAsB,sBAAsB,CAAC;AAC1E,UAAM,EAAE,YAAY,IAAI,KAAK,aAAa;AAC1C,UAAM,kBAAc,mBAAI,eAAe,UAAU,WAAW;AAC5D,UAAM,sBAAsB,eAAe,SAAS,sCAAgB;AAIpE,UAAM,wBAAwB,eAAe,yBAAyB;AAEtE,UAAM,gBAAgB,gBAAgB,uBAAuB,oBAAoB;AAEjF,mBAAe,kBAAkB,eAAe,gBAAgB,OAAO;AAEvE,QAAI,qBAAqB;AACvB,qBAAe,eAAW,kBAAG,CAAC;AAAA,IAChC;AAKA,QAAI,oBAAoB;AAOtB,UAAI,kBAAkB,sCAAsC,gBAAgB;AAC1E,QAAC,eAAiC,iCAAiC,cAAc;AAAA,MACnF;AACA,YAAM,KAAK,mBAAmB,cAAc;AAAA,IAC9C;AAEA,QAAI,qBAAqB,qBAAqB;AAC5C,YAAM,kBAAkB,cAAc;AAAA,IACxC;AAKA,QAAI,EAAE,QAAQ,QAAQ,QAAQ,OAAO,IAAI,KAAK,oBAAoB;AAAA,MAChE,oBAAoB;AAAA,IACtB,CAAC;AAKD,QAAI,WAAuC,CAAC;AAC5C,QAAI,qBAA+B,CAAC;AACpC,QAAI,kBAAkB;AACtB,QAAI,cAAU,kBAAG,CAAC;AAElB,QAAI,uBAAuB,wBAAwB;AAOjD,qBAAe,eAAW,kBAAG,CAAC;AAG9B,YAAM,SAAS,MAAM,KAAK,uBAAuB,cAAc;AAE/D,iBAAW,OAAO;AAClB,wBAAkB,OAAO;AACzB,2BAAqB,OAAO;AAE5B,gBAAU,sBAAsB,uBAAuB,QAAQ,IAAI;AAEnE,qBAAe,WAAW;AAC1B,qBAAe,WAAW;AAG1B,OAAC,EAAE,QAAQ,QAAQ,QAAQ,OAAO,IAAI,KAAK,oBAAoB;AAAA,QAC7D,oBAAoB;AAAA,MACtB,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,oBAAoB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB,eAAe;AAAA,MAChC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,2BACJ,OACA,wBACA,uBAAuC,CAAC,GACxC;AACA,UAAM,eAAe,wBAAQ,oBAAoB,KAAK;AACtD,UAAM,qBAAqB,0BAAsB,qBAAM,sBAAsB,CAAC;AAC9E,UAAM,kBAAkB,MAAM,KAAK,mBAAmB,oBAAoB,oBAAoB;AAG9F,uBAAmB;AAAA,MACjB,MAAM,KAAK,oBAAoB,cAAc,gBAAgB,kBAAkB;AAAA,IACjF;AAOA,UAAM,EAAE,oBAAoB,GAAG,OAAO,IAAI,MAAM,KAAK;AAAA,MACnD;AAAA,MACA;AAAA,IACF;AACA,UAAM,YAAY,MAAM,KAAK,oBAAoB,cAAc,kBAAkB;AAEjF,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAEJ,OAEA,SAEA,gBACiB;AACjB,UAAM,eAAe,wBAAQ,oBAAoB,KAAK;AACtD,UAAM,SAAS,MAAM,KAAK,WAAW,SAAS;AAAA,MAC5C,OAAO;AAAA,MACP,GAAG;AAAA,MACH,QAAQ,EAAE,OAAO,aAAa,OAAO,GAAG,SAAS,eAAW,wBAAQ,OAAO,EAAE;AAAA,IAC/E,CAAC;AAED,UAAM,QAAQ,OAAO,MAAM,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAExD,WAAO,MAAM,IAAI,CAAC,UAAU;AAAA,MAC1B,IAAI,KAAK;AAAA,MACT,SAAS,KAAK;AAAA,MACd,YAAQ,kBAAG,KAAK,MAAM;AAAA,MACtB,OAAO,wBAAQ,oBAAoB,KAAK,KAAK;AAAA,MAC7C,cAAU,kBAAG,KAAK,QAAQ,EAAE,SAAS;AAAA,MACrC,kBAAc,kBAAG,KAAK,YAAY;AAAA,MAClC,kBAAc,kBAAG,KAAK,YAAY;AAAA,IACpC,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBAEJ,OAEA,YAEA,aACqB;AACrB,UAAM,eAAe,wBAAQ,oBAAoB,KAAK;AACtD,UAAM,eAAe;AAAA,MACnB,UAAU,aAAa,UAAU,IAAI,CAAC,cAAU,wBAAQ,KAAK,CAAC,KAAK,CAAC;AAAA,MACpE,OAAO,aAAa,OAAO,IAAI,CAAC,WAAO,wBAAQ,EAAE,CAAC,KAAK,CAAC;AAAA,IAC1D;AAEA,QAAI,KAAK,OAAO;AACd,YAAM,cAAc,IAAI;AAAA,QACtB,aAAa,MAAM,OAAO,KAAK,OAAO,cAAc,EAAE,IAAI,CAAC,WAAO,wBAAQ,EAAE,CAAC,CAAC;AAAA,MAChF;AACA,mBAAa,QAAQ,MAAM,KAAK,WAAW;AAAA,IAC7C;AACA,UAAM,aAAa;AAAA,MACjB,OAAO,aAAa,OAAO;AAAA,MAC3B,eAAe,WACZ,IAAI,cAAc,EAClB,IAAI,CAAC,EAAE,SAAS,QAAQ,KAAK,YAAY,OAAO;AAAA,QAC/C,aAAS,wBAAQ,OAAO;AAAA,QACxB,QAAQ,OAAO,SAAS,EAAE;AAAA,QAC1B,KAAK,cAAc,YAAY,SAAS,EAAE,IAAI;AAAA,MAChD,EAAE;AAAA,MACJ,aAAa;AAAA,IACf;AAEA,UAAM,SAAS,MAAM,KAAK,WAAW,gBAAgB,UAAU;AAE/D,UAAM,QAAQ,OAAO,aAClB,KAAK,EACL,IAAI,CAAC,SAAS;AACb,cAAQ,KAAK,YAAY;AAAA,QACvB,KAAK;AACH,iBAAO;AAAA,YACL,YAAQ,kBAAG,KAAK,MAAM;AAAA,YACtB,SAAS,KAAK;AAAA,YACd,cAAU,kBAAG,KAAK,QAAQ;AAAA,YAC1B,QAAQ,wBAAQ,oBAAoB,KAAK,MAAM;AAAA,YAC/C,WAAW,wBAAQ,oBAAoB,KAAK,SAAS;AAAA,YACrD,OAAO,KAAK;AAAA,UACd;AAAA,QACF,KAAK;AACH,iBAAO;AAAA,YACL,IAAI,KAAK;AAAA,YACT,YAAQ,kBAAG,KAAK,MAAM;AAAA,YACtB,SAAS,KAAK;AAAA,YACd,OAAO,wBAAQ,oBAAoB,KAAK,KAAK;AAAA,YAC7C,cAAU,kBAAG,KAAK,QAAQ,EAAE,SAAS;AAAA,YACrC,kBAAc,kBAAG,KAAK,YAAY;AAAA,YAClC,kBAAc,kBAAG,KAAK,YAAY;AAAA,UACpC;AAAA,QACF;AACE,iBAAO;AAAA,MACX;AAAA,IACF,CAAC,EACA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SAEJ,YACuB;AACvB,QAAI;AACJ,QAAI,OAAO,eAAe,UAAU;AAClC,kBAAY,EAAE,YAAQ,kBAAG,UAAU,EAAE,SAAS,EAAE,EAAE;AAAA,IACpD,WAAW,eAAe,UAAU;AAClC,kBAAY,EAAE,SAAS,MAAM,KAAK,eAAe,GAAG,SAAS,EAAE,EAAE;AAAA,IACnE,WAAW,WAAW,WAAW,IAAI;AACnC,kBAAY,EAAE,SAAS,WAAW;AAAA,IACpC,OAAO;AACL,kBAAY,EAAE,aAAS,kBAAG,UAAU,EAAE,SAAS,EAAE,EAAE;AAAA,IACrD;AAEA,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,WAAW,SAAS,SAAS;AAE1D,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,MACL,IAAI,MAAM;AAAA,MACV,YAAQ,kBAAG,MAAM,OAAO,MAAM;AAAA,MAC9B,MAAM,MAAM,OAAO;AAAA,MACnB,gBAAgB,MAAM,aAAa,IAAI,CAAC,OAAO,GAAG,EAAE;AAAA,IACtD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,UAAU,QAAsD;AACpE,UAAM,EAAE,QAAQ,YAAY,IAAI,MAAM,KAAK,WAAW,UAAU,MAAM;AAEtE,UAAM,SAAkB,YAAY,MAAM,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO;AAAA,MAClE,IAAI,MAAM;AAAA,MACV,YAAQ,kBAAG,MAAM,OAAO,MAAM;AAAA,MAC9B,MAAM,MAAM,OAAO;AAAA,MACnB,gBAAgB,MAAM,aAAa,IAAI,CAAC,OAAO,GAAG,EAAE;AAAA,IACtD,EAAE;AAEF,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,yBAEJ,YAC2D;AAC3D,QAAI;AACJ,QAAI,OAAO,eAAe,UAAU;AAClC,kBAAY,EAAE,iBAAa,kBAAG,UAAU,EAAE,SAAS,EAAE,EAAE;AAAA,IACzD,WAAW,eAAe,UAAU;AAClC,kBAAY,EAAE,cAAc,MAAM,KAAK,eAAe,GAAG,SAAS,EAAE;AAAA,IACtE,OAAO;AACL,kBAAY,EAAE,SAAS,WAAW;AAAA,IACpC;AAEA,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,WAAW,yBAAyB,SAAS;AAE1E,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,MACL,IAAI,MAAM;AAAA,MACV,YAAQ,kBAAG,MAAM,OAAO,QAAQ,EAAE;AAAA,MAClC,MAAM,MAAM,OAAO;AAAA,MACnB,gBAAgB,MAAM,aAAa,IAAI,CAAC,OAAO,GAAG,EAAE;AAAA,MACpD,cAAc,MAAM,aAAa;AAAA,QAC/B,CAAC,OAAO,IAAI,uCAAiB,EAAE,WAAO,yBAAS,GAAG,UAAU,GAAG,CAAC,IAAI,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eACJ,eAC+C;AAC/C,UAAM,EAAE,YAAY,IAAI,MAAM,KAAK,WAAW,eAAe,EAAE,cAAc,CAAC;AAC9E,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACT;AACA,WAAO,IAAI,uCAAiB,EAAE;AAAA,UAC5B,yBAAS,YAAY,UAAU;AAAA,MAC/B;AAAA,IACF,IAAI,CAAC;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAY,YAAoD;AACpE,UAAM,EAAE,SAAS,IAAI,MAAM,KAAK,WAAW,YAAY,EAAE,WAAW,CAAC;AACrE,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,mBAEJ,YAEA,SACa;AACb,UAAM,EAAE,gBAAgB,IAAI,MAAM,KAAK,WAAW,mBAAmB;AAAA,MACnE,UAAU,wBAAQ,oBAAoB,UAAU,EAAE,OAAO;AAAA,MACzD,WAAO,wBAAQ,OAAO;AAAA,IACxB,CAAC;AACD,eAAO,kBAAG,gBAAgB,QAAQ,EAAE;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,WAEJ,OAEA,SACa;AACb,UAAM,EAAE,QAAQ,IAAI,MAAM,KAAK,WAAW,WAAW;AAAA,MACnD,OAAO,wBAAQ,oBAAoB,KAAK,EAAE,OAAO;AAAA,MACjD,aAAS,wBAAQ,OAAO;AAAA,IAC1B,CAAC;AACD,eAAO,kBAAG,QAAQ,QAAQ,EAAE;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,YAEJ,OAEA,gBACyB;AACzB,UAAM,SAAS,MAAM,KAAK,WAAW,YAAY;AAAA,MAC/C,OAAO;AAAA,MACP,GAAG;AAAA,MACH,QAAQ,EAAE,OAAO,wBAAQ,oBAAoB,KAAK,EAAE,OAAO,EAAE;AAAA,IAC/D,CAAC;AAED,UAAM,WAAW,OAAO,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAE9D,WAAO,SAAS,IAAI,CAAC,aAAa;AAAA,MAChC,SAAS,QAAQ;AAAA,MACjB,YAAQ,kBAAG,QAAQ,MAAM;AAAA,IAC3B,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,YAEJ,SAEA,gBACoB;AACpB,UAAM,SAAS,MAAM,KAAK,WAAW,YAAY;AAAA,MAC/C,OAAO;AAAA,MACP,GAAG;AAAA,MACH,OAAO,wBAAQ,oBAAoB,OAAO,EAAE,OAAO;AAAA,IACrD,CAAC;AAED,UAAM,WAAW,OAAO,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAE9D,WAAO,SAAS,IAAI,CAAC,aAAa;AAAA,MAChC,WAAW,wCAAkB,aAAa;AAAA,QACxC,QAAQ,QAAQ;AAAA,QAChB,WAAW,QAAQ;AAAA,QACnB,OAAO,QAAQ;AAAA,QACf,YAAQ,kBAAG,QAAQ,MAAM;AAAA,QACzB,MAAM,QAAQ;AAAA,MAChB,CAAC;AAAA,MACD,QAAQ,wBAAQ,oBAAoB,QAAQ,MAAM;AAAA,MAClD,WAAW,wBAAQ,oBAAoB,QAAQ,SAAS;AAAA,MACxD,OAAO,QAAQ;AAAA,MACf,YAAQ,kBAAG,QAAQ,MAAM;AAAA,MACzB,MAAM,wCAAkB,WAAW,QAAQ,IAAI;AAAA,MAC/C,cAAU,kBAAG,QAAQ,QAAQ;AAAA,IAC/B,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,gBAEJ,eACA,OACA,eACA,mBAC8B;AAC9B,QAAI,cAOA;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAEA,QAAI,iBAAiB,mBAAmB;AACtC,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAEA,QAAI,eAAe;AACjB,oBAAc;AAAA,QACZ,GAAG;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,QAAI,mBAAmB;AACrB,oBAAc;AAAA,QACZ,GAAG;AAAA;AAAA;AAAA,QAGH,mBAAmB,kBAAkB,SAAS,EAAE,SAAS;AAAA,MAC3D;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,KAAK,WAAW,gBAAgB,WAAW;AAEhE,QAAI,CAAC,OAAO,cAAc;AACxB,aAAO;AAAA,IACT;AAEA,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,OAAO;AAEX,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,gBAAY,kBAAG,aAAa,UAAU;AAAA,QACtC,UAAU,aAAa;AAAA,MACzB;AAAA,MACA,YAAY;AAAA,QACV,gBAAY,kBAAG,WAAW,UAAU;AAAA,QACpC,UAAU,WAAW;AAAA,MACvB;AAAA,MACA,oBAAoB;AAAA,QAClB,IAAI,mBAAmB;AAAA,QACvB,cAAU,kBAAG,mBAAmB,QAAQ;AAAA,QACxC,uBAAmB,kBAAG,mBAAmB,iBAAiB;AAAA,QAC1D,kBAAkB,mBAAmB;AAAA,QACrC,YAAQ,kBAAG,mBAAmB,MAAM;AAAA,QACpC,UAAU,mBAAmB;AAAA,QAC7B,MAAM,mBAAmB;AAAA,QACzB,iBAAiB,mBAAmB;AAAA,QACpC,oBAAoB,mBAAmB;AAAA,QACvC,yBAAqB,kBAAG,mBAAmB,mBAAmB;AAAA,MAChE;AAAA,MACA,mBAAmB;AAAA,QACjB,IAAI,kBAAkB;AAAA,QACtB,cAAU,kBAAG,kBAAkB,QAAQ;AAAA,QACvC,uBAAmB,kBAAG,kBAAkB,iBAAiB;AAAA,QACzD,kBAAkB,kBAAkB;AAAA,QACpC,YAAQ,kBAAG,kBAAkB,MAAM;AAAA,QACnC,UAAU,kBAAkB;AAAA,QAC5B,MAAM,kBAAkB;AAAA,QACxB,iBAAiB,kBAAkB;AAAA,QACnC,oBAAoB,kBAAkB;AAAA,QACtC,yBAAqB,kBAAG,kBAAkB,mBAAmB;AAAA,MAC/D;AAAA,MACA,QAAQ,wBAAQ,oBAAoB,MAAM;AAAA,MAC1C,WAAW,wBAAQ,oBAAoB,SAAS;AAAA,MAChD;AAAA,MACA,YAAQ,kBAAG,MAAM;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAEJ,OACwB;AACxB,UAAM,SAAS,MAAM,KAAK,WAAW,iBAAiB,EAAE,MAAM,CAAC;AAC/D,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,cAAc,QAAgB,WAAoB;AACtD,UAAM,EAAE,eAAe,kBAAkB,IAAI,MAAM,KAAK,WAAW,cAAc;AAAA,MAC/E,qBAAiB,kBAAG,MAAM,EAAE,SAAS,EAAE;AAAA,MACvC,gBAAgB,YAAY,wBAAS,qBAAqB,SAAS,EAAE,QAAQ,IAAI;AAAA,IACnF,CAAC;AACD,eAAO,kBAAG,iBAAiB;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAM,uBAAuB,eAAqD;AAChF,WAAO,IAAI,oBAAoB,eAAe,IAAI;AAAA,EACpD;AACF;AA9pCA,IAAqB,WAArB;AAkRE;AAAA,iBAAY,SAAC,QAAyC;AACpD,MAAI,CAAC,KAAK,OAAO;AACf;AAAA,EACF;AAEA,SAAO,QAAQ,CAAC,UAAU;AACxB,QAAI,MAAM,SAAS,gCAAU,MAAM;AACjC,WAAK,OAAO,IAAI,MAAM,EAAE;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;AAnRA,cATmB,UASJ,kBAAiC,CAAC;AACjD,cAVmB,UAUJ,iBAA+B,CAAC;;;AkCxTjD,IAAAC,kBAAqC;AACrC,IAAAC,gBAAmB;AACnB,IAAAC,wBAAiC;AACjC,IAAAC,iBAAyB;;;ACHlB,IAAM,YAAY;AAAA,EACvB,KAAK;AAAA,IACH,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACF;;;ACLO,IAAM,SAAiB;AAAA,EAC5B;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS,UAAU,IAAI;AAAA,QACvB,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS,UAAU,IAAI;AAAA,QACvB,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS,UAAU,KAAK;AAAA,QACxB,UAAU;AAAA,QACV,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS,UAAU,KAAK;AAAA,QACxB,UAAU;AAAA,QACV,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;AClCA,IAAAC,oBAA+B;AAE/B,IAAAC,gBAAsC;AACtC,IAAAC,iBAAyB;AACzB,UAAqB;AAQd,IAAM,qCAAqC,CAChD,WACG;AACH,QAAM,EAAE,SAAS,kBAAkB,oBAAoB,IAAI;AAE3D,QAAM,cAAc,IAAI,iCAAe,KAAK;AAE5C,QAAM,UAAU,YAAY,OAAO,IAAI,iBAAG,gBAAgB,EAAE,SAAS,CAAC;AAEtE,QAAM,aAAa,WAAW,KAAK;AAAA,IACjC,OAAG,yBAAS,mBAAmB;AAAA,IAC/B,GAAG;AAAA,IACH,OAAG,yBAAS,OAAO;AAAA,EACrB,CAAC;AAED,SAAO;AACT;AAEO,IAAM,mCAAmC,OAC9C,WACG;AACH,QAAM,aAAa,mCAAmC,MAAM;AAa5D,QAAU,aAAS;AAGnB,QAAMC,OAAU,QAAI,IAAM,GAAU,YAAQ,UAAU;AACtD,QAAMC,QAAW,SAAK,IAAM,IAAM,EAAI;AACtC,QAAMC,MAAS,OAAG,IAAM,IAAM,CAAG;AACjC,QAAMC,SAAY,SAAK,IAAM,IAAM,CAAG;AACtC,QAAMC,MAAS,OAAG,IAAM,IAAM,EAAI;AAClC,QAAMC,OAAU,QAAI,CAAG;AAEvB,QAAM,SAAS,WAAW,KAAK;AAAA,IAC7B,GAAGL,KAAI,SAAS;AAAA,IAChB,GAAGC,MAAK,SAAS;AAAA,IACjB,GAAGC,IAAG,SAAS;AAAA,IACf,GAAGC,OAAM,SAAS;AAAA,IAClB,GAAGC,IAAG,SAAS;AAAA,IACf,GAAGC,KAAI,SAAS;AAAA,EAClB,CAAC;AAED,SAAO,EAAE,QAAQ,WAAW;AAC9B;;;AvCxBO,IAAM,UAAN,cAAsB,kCAAgB;AAAA;AAAA;AAAA;AAAA,EAIlC;AAAA;AAAA;AAAA;AAAA,EAKC;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQV,YAAY,SAAmC,UAAqB,WAA2B;AAC7F,UAAM;AACN,SAAK,YAAY;AACjB,SAAK,aAAa;AAClB,SAAK,UAAU,wBAAQ,iBAAiB,OAAO;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,WAAqB;AACvB,QAAI,CAAC,KAAK,WAAW;AACnB,YAAM,IAAI,0BAAU,0BAAU,kBAAkB,kBAAkB;AAAA,IACpE;AAEA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,SAAS,UAAoB;AAC/B,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,UAA8B;AACpC,SAAK,YAAY;AACjB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,oBACJ,YACA,aACqB;AACrB,WAAO,KAAK,SAAS,oBAAoB,KAAK,SAAS,YAAY,WAAW;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SAAS,SAAsC;AACnD,UAAM,QAAQ,CAAC;AAEf,UAAM,WAAW;AACjB,QAAI;AAEJ,eAAS;AACP,YAAM,YAAY,MAAM,KAAK,SAAS,SAAS,KAAK,SAAS,SAAS;AAAA,QACpE,OAAO;AAAA,QACP,OAAO;AAAA,MACT,CAAC;AAED,YAAM,KAAK,GAAG,SAAS;AAEvB,YAAM,cAAc,UAAU,UAAU;AACxC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAGA,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,gCAAgC;AAAA,MAClC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAkC;AACtC,UAAM,WAAW,CAAC;AAElB,UAAM,WAAW;AACjB,QAAI;AAEJ,eAAS;AACP,YAAM,eAAe,MAAM,KAAK,SAAS,YAAY,KAAK,SAAS;AAAA,QACjE,OAAO;AAAA,QACP,OAAO;AAAA,MACT,CAAC;AAED,eAAS,KAAK,GAAG,YAAY;AAE7B,YAAM,cAAc,aAAa,UAAU;AAC3C,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAGA,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,gCAAgC;AAAA,MAClC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,WAAW,UAAqB,8BAA0B;AAC9D,UAAM,SAAS,MAAM,KAAK,SAAS,WAAW,KAAK,SAAS,OAAO;AACnE,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAuC;AAC3C,UAAM,WAAW,CAAC;AAElB,UAAM,WAAW;AACjB,QAAI;AAEJ,eAAS;AACP,YAAM,eAAe,MAAM,KAAK,SAAS,YAAY,KAAK,SAAS;AAAA,QACjE,OAAO;AAAA,QACP,OAAO;AAAA,MACT,CAAC;AAED,eAAS,KAAK,GAAG,YAAY;AAE7B,YAAM,cAAc,aAAa,UAAU;AAC3C,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAGA,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,gCAAgC;AAAA,MAClC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,KACJ,SACA,gBACA,KACe;AACf,UAAM,oBAAoB,iBAAiB;AAAA,MACzC,YAAQ,kBAAG,GAAG;AAAA,MACd,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAED,UAAM,iBAA8D,CAAC;AAErE,sBAAkB,QAAQ,CAAC,EAAE,QAAQ,QAAQ,MAAM;AACjD,qBAAe,OAAO,IAAI;AAAA,QACxB,UAAU;AAAA,QACV,WAAO,kBAAG,CAAC;AAAA,MACb;AAAA,IACF,CAAC;AAED,UAAM,cAA2B,CAAC;AAClC,UAAM,iBAA8B,CAAC;AAErC,UAAM,QAAQ,KAAK,QAAQ,OAAO;AAElC,YAAQ,OAAO,QAAQ,CAAC,UAAU;AAChC,YAAM,aAAa,YAAY;AAE/B,UAAI,YAAY;AACd,cAAMC,UAAS,WAAW;AAE1B,YAAIA,SAAQ;AACV,gBAAM,UAAU,OAAO,MAAM,OAAO;AACpC,cAAI,MAAM,UAAU,SAAS,eAAe,OAAO,GAAG;AACpD,kBAAM,aAAS,kBAAG,MAAM,MAAM;AAC9B,2BAAe,OAAO,EAAE,QAAQ,eAAe,OAAO,EAAE,MAAM,IAAI,MAAM;AAGxE,wBAAY,KAAK,MAAM,EAAE;AAAA,UAC3B;AAAA,QACF,WAAW,MAAM,cAAc,SAAS,MAAM,UAAU,eAAe,4BAAW,GAAG;AACnF,yBAAe,4BAAW,EAAE,QAAQ,eAAe,4BAAW,EAAE,MAAM,IAAI,MAAM,MAAM;AAGtF,yBAAe,KAAK,MAAM,KAAK;AAAA,QACjC;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,oBAAoC,CAAC;AAC3C,WAAO,QAAQ,cAAc,EAAE,QAAQ,CAAC,CAAC,SAAS,EAAE,OAAO,SAAS,CAAC,MAAM;AACzE,UAAI,MAAM,GAAG,QAAQ,GAAG;AACtB,0BAAkB,KAAK;AAAA,UACrB;AAAA,UACA,QAAQ,SAAS,IAAI,KAAK;AAAA,QAC5B,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,UAAM,kBAAkB,kBAAkB;AAE1C,QAAI,iBAAiB;AACnB,YAAM,YAAY,MAAM,KAAK,oBAAoB,mBAAmB;AAAA,QAClE,UAAU;AAAA,QACV,OAAO;AAAA,MACT,CAAC;AACD,cAAQ,aAAa,SAAS;AAAA,IAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,eAEJ,aAEA,QAEA,UAAqB,8BAErB,WAAyB,CAAC,GACG;AAC7B,UAAM,EAAE,YAAY,IAAI,KAAK,SAAS,aAAa;AACnD,UAAM,SAAS,EAAE,UAAU,aAAa,GAAG,SAAS;AACpD,UAAM,UAAU,IAAI,yBAAyB,MAAM;AACnD,YAAQ,cAAc,wBAAQ,oBAAoB,WAAW,GAAG,QAAQ,OAAO;AAC/E,UAAM,EAAE,QAAQ,oBAAoB,SAAS,gBAAgB,IAC3D,MAAM,KAAK,SAAS,mBAAmB,SAAS,CAAC,GAAG;AAAA,MAClD,wBAAwB;AAAA,MACxB,gBAAgB;AAAA,IAClB,CAAC;AAEH,YAAQ,eAAW,kBAAG,SAAS,YAAY,WAAW;AACtD,YAAQ,eAAW,kBAAG,SAAS,YAAY,OAAO;AAElD,SAAK,YAAY;AAAA,MACf;AAAA,MACA,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB;AAAA,IACF,CAAC;AAED,UAAM,KAAK,KAAK,SAAS,oBAAoB,MAAM;AAEnD,YAAQ,sBAAsB,eAAe;AAE7C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,SAEJ,aAEA,QAEA,UAAqB,8BAErB,WAAyB,CAAC,GACI;AAC9B,YAAI,kBAAG,MAAM,EAAE,IAAI,CAAC,GAAG;AACrB,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AACA,UAAM,UAAU,MAAM,KAAK,eAAe,aAAa,QAAQ,SAAS,QAAQ;AAChF,WAAO,KAAK,gBAAgB,SAAS,EAAE,wBAAwB,MAAM,CAAC;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,mBAEJ,YAEA,QAEA,UAAqB,8BAErB,WAAyB,CAAC,GACI;AAC9B,YAAI,kBAAG,MAAM,EAAE,IAAI,CAAC,GAAG;AACrB,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAEA,UAAM,kBAAkB,wBAAQ,oBAAoB,UAAU;AAC9D,UAAM,EAAE,YAAY,IAAI,KAAK,SAAS,aAAa;AACnD,UAAM,SAAS,EAAE,UAAU,aAAa,GAAG,SAAS;AAEpD,UAAM,EAAE,QAAQ,WAAW,IAAI,MAAM,iCAAiC;AAAA,MACpE,qBAAqB,gBAAgB,OAAO;AAAA,MAC5C,sBAAkB,kBAAG,MAAM;AAAA,MAC3B;AAAA,IACF,CAAC;AAED,UAAM,UAAU,IAAI,yBAAyB;AAAA,MAC3C,GAAG;AAAA,MACH;AAAA,MACA;AAAA,IACF,CAAC;AAED,YAAQ,0BAA0B,eAAe;AAEjD,UAAM,EAAE,QAAQ,oBAAoB,QAAQ,IAAI,MAAM,KAAK,SAAS;AAAA,MAClE;AAAA,MACA,CAAC,EAAE,YAAQ,kBAAG,MAAM,GAAG,SAAS,OAAO,OAAO,EAAE,CAAC;AAAA,IACnD;AAEA,YAAQ,eAAW,kBAAG,OAAO,YAAY,OAAO;AAEhD,SAAK,YAAY;AAAA,MACf;AAAA,MACA,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB;AAAA,IACF,CAAC;AAED,UAAM,KAAK,KAAK,SAAS,oBAAoB,MAAM;AAEnD,WAAO,KAAK,gBAAgB,OAAO;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBAEJ,WAEA,QAEA,WAAyB,CAAC,GACI;AAC9B,UAAM,EAAE,YAAY,IAAI,KAAK,SAAS,aAAa;AAEnD,UAAM,mBAAmB,wBAAQ,oBAAoB,SAAS;AAE9D,UAAM,yBAAqB;AAAA,MACzB,KAAK,OAAO,iBAAiB,YAAY,EAAE,UAAU,CAAC,EAAE,SAAS,IAAI,GAAG,CAAC;AAAA,IAC3E;AACA,UAAM,sBAAkB;AAAA,MACtB,KAAK,WAAO,kBAAG,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,IAAI,GAAG,CAAC;AAAA,IAC/D;AACA,UAAM,SAAS,IAAI,WAAW;AAAA,MAC5B,OAAG,yBAAS,eAAe,KAAK;AAAA,MAChC,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAED,UAAM,SAAuC,EAAE,QAAQ,UAAU,aAAa,GAAG,SAAS;AAE1F,UAAM,UAAU,IAAI,yBAAyB,MAAM;AACnD,UAAM,uBAAuB,CAAC,EAAE,YAAQ,kBAAG,MAAM,GAAG,SAAS,6BAAY,CAAC;AAE1E,UAAM,EAAE,oBAAoB,QAAQ,QAAQ,IAAI,MAAM,KAAK,SAAS;AAAA,MAClE;AAAA,MACA;AAAA,IACF;AAEA,YAAQ,eAAW,kBAAG,OAAO,YAAY,OAAO;AAEhD,SAAK,YAAY;AAAA,MACf;AAAA,MACA,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB;AAAA,IACF,CAAC;AAED,UAAM,KAAK,KAAK,SAAS,oBAAoB,MAAM;AAEnD,WAAO,KAAK,gBAAgB,OAAO;AAAA,EACrC;AAAA,EAEA,MAAM,YAAY,SAAkC;AAClD,QAAI,CAAC,KAAK,YAAY;AACpB,YAAM,IAAI,0BAAU,0BAAU,mBAAmB,2CAA2C;AAAA,IAC9F;AACA,WAAO,KAAK,WAAW,YAAY,KAAK,QAAQ,SAAS,GAAG,OAAO;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBAAgB,wBAAiE;AACrF,QAAI,CAAC,KAAK,YAAY;AACpB,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,WAAW,gBAAgB,KAAK,QAAQ,SAAS,GAAG,sBAAsB;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBACJ,wBACA,EAAE,yBAAyB,MAAM,eAAe,IAA0B,CAAC,GAC7C;AAC9B,QAAI,KAAK,YAAY;AACnB,aAAO,KAAK,SAAS;AAAA,QACnB,MAAM,KAAK,WAAW,gBAAgB,KAAK,QAAQ,SAAS,GAAG,sBAAsB;AAAA,MACvF;AAAA,IACF;AACA,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,QAAI,wBAAwB;AAC1B,YAAM,KAAK,SAAS,uBAAuB,kBAAkB;AAAA,IAC/D;AACA,WAAO,KAAK,SAAS,gBAAgB,oBAAoB;AAAA,MACvD;AAAA,MACA,wBAAwB;AAAA,IAC1B,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,oBACJ,wBACA,EAAE,yBAAyB,KAAK,IAA+B,CAAC,GAC3C;AACrB,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,QAAI,wBAAwB;AAC1B,YAAM,KAAK,SAAS,uBAAuB,kBAAkB;AAAA,IAC/D;AACA,WAAO,KAAK,SAAS,SAAS,oBAAoB,EAAE,wBAAwB,MAAM,CAAC;AAAA,EACrF;AAAA,EAEQ,YAAY;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKG;AACD,QAAI,YAAY,GAAG,QAAQ,GAAG;AAC5B,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,cAAc,0CAA0C;AAAA,MAC1D;AAAA,IACF;AAEA,QAAI,QAAQ,GAAG,QAAQ,GAAG;AACxB,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,cAAc,0CAA0C;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AACF;;;AwCjlBA,IAAAC,kBAAwB;AACxB,IAAAC,iBAA4B;AAC5B,IAAAC,iBAAqB;AAErB,IAAAC,gBAAwB;AACxB,IAAAC,iBAA0C;AAC1C,uBAA0B;AAEnB,IAAM,SAAN,MAAa;AAAA,EACT;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQT,YAAY,YAAuB;AAEjC,QAAI,OAAO,eAAe,UAAU;AAClC,UAAI,WAAW,MAAM,cAAc,KAAK,WAAW,WAAW,IAAI;AAEhE,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAGA,UAAM,sBAAkB,uBAAQ,YAAY,EAAE;AAE9C,SAAK,iBAAa,wBAAQ,eAAe;AAGzC,SAAK,gBAAY,wBAAQ,2BAAU,aAAa,iBAAiB,KAAK,EAAE,MAAM,CAAC,CAAC;AAChF,SAAK,0BAAsB,wBAAQ,2BAAU,aAAa,iBAAiB,IAAI,CAAC;AAChF,SAAK,UAAU,wBAAQ,cAAc,KAAK,SAAS;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,KAAK,MAAiB;AACpB,UAAM,YAAY,2BAAU,SAAK,yBAAS,IAAI,OAAG,yBAAS,KAAK,UAAU,CAAC;AAE1E,UAAM,QAAI,uBAAQ,KAAK,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE;AACrD,UAAM,QAAI,uBAAQ,KAAK,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE;AAGrD,MAAE,CAAC,MAAM,UAAU,YAAY,MAAM;AAErC,eAAO,4BAAQ,uBAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,OAAkB;AACzB,UAAM,KAAK,2BAAU,gBAAgB,YAAQ,yBAAS,KAAK,mBAAmB,CAAC;AAC/E,UAAM,KAAK,2BAAU,gBAAgB,YAAQ,yBAAS,KAAK,CAAC;AAC5D,UAAM,SAAS,GAAG,IAAI,EAAE;AACxB,WAAO,KAAK,OAAO,MAAM,IAAI;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,iBAAiB,MAAiB,WAA8B;AACrE,UAAM,yBAAqB,yBAAS,SAAS;AAC7C,UAAM,IAAI,mBAAmB,MAAM,GAAG,EAAE;AACxC,UAAM,IAAI,mBAAmB,MAAM,IAAI,EAAE;AACzC,UAAM,iBAAiB,EAAE,CAAC,IAAI,QAAS;AAGvC,MAAE,CAAC,KAAK;AAER,UAAM,MAAM,IAAI,2BAAU,UAAU,WAAO,wBAAQ,CAAC,CAAC,GAAG,WAAO,wBAAQ,CAAC,CAAC,CAAC,EAAE;AAAA,MAC1E;AAAA,IACF;AAEA,UAAM,YAAY,IAAI,qBAAiB,yBAAS,IAAI,CAAC,EAAE,WAAW,KAAK,EAAE,MAAM,CAAC;AAChF,eAAO,wBAAQ,SAAS;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,eAAe,MAAiB,WAA+B;AACpE,WAAO,wBAAQ,cAAc,OAAO,iBAAiB,MAAM,SAAS,CAAC;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,mBAAmB,SAAqB;AAC7C,WAAO,cAAU,yBAAK,uBAAO,KAAC,4BAAY,EAAE,OAAG,yBAAS,OAAO,CAAC,CAAC,CAAC,QAAI,4BAAY,EAAE;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,gBAAgB,WAAsB;AAC3C,UAAM,QAAQ,2BAAU,gBAAgB,YAAQ,yBAAS,SAAS,CAAC;AACnE,eAAO,wBAAQ,MAAM,WAAW,KAAK,EAAE,MAAM,CAAC,CAAC;AAAA,EACjD;AACF;;;ACrIA,IAAAC,kBAAwB;AACxB,IAAAC,iBAQO;AACP,IAAAC,kBAAqC;AAErC,IAAAC,iBAAwB;AACxB,kBAA6B;AA2BtB,IAAM,2BAA2B;AACjC,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAC7B,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AAMxB,IAAM,kBAAkB,CAAC,cAAsB;AACpD,MAAI,MAAM,KAAK,SAAS,GAAG;AACzB,WAAO,UAAU,MAAM,CAAC;AAAA,EAC1B;AAEA,SAAO;AACT;AAEA,eAAsB,sBACpB,YACA,SACA,UACiB;AAEjB,QAAM,uBAAmB,iCAAiB,gBAAgB,UAAU,GAAG,KAAK;AAC5E,QAAM,eAAe,wBAAQ,oBAAoB,OAAO;AAExD,QAAM,WAAO,4BAAY,gBAAgB;AAEzC,QAAM,UAAM,uBAAO;AAAA,IACjB,cAAU,iCAAiB,QAAQ;AAAA,IACnC;AAAA,IACA,OAAO;AAAA,IACP,GAAG,KAAK;AAAA,IACR,GAAG;AAAA,IACH,GAAG;AAAA,EACL,CAAC;AAGD,QAAM,SAAK,4BAAY,eAAe;AAEtC,QAAM,aAAa,UAAM,sCAAsB,kBAAkB,KAAK,EAAE;AAExE,QAAM,OAAO,WAAW,KAAK,CAAC,GAAG,IAAI,SAAS,IAAI,EAAE,GAAG,GAAG,UAAU,CAAC;AAGrE,QAAM,wBAAoB,0BAAU,IAAI;AAExC,QAAM,UAAM,iCAAiB,mBAAmB,KAAK;AAGrD,QAAM,WAA2B;AAAA,IAC/B,QAAI,YAAAC,IAAO;AAAA,IACX,SAAS;AAAA,IACT,SAAS,gBAAgB,aAAa,YAAY,CAAC;AAAA,IACnD,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR;AAAA,MACA,cAAc,EAAE,QAAI,iCAAiB,IAAI,KAAK,EAAE;AAAA,MAChD,gBAAY,iCAAiB,YAAY,KAAK;AAAA,MAC9C,KAAK;AAAA,MACL,WAAW;AAAA,QACT,OAAO;AAAA,QACP,GAAG,KAAK;AAAA,QACR,GAAG;AAAA,QACH,GAAG;AAAA,QACH,UAAM,iCAAiB,MAAM,KAAK;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,SAAO,KAAK,UAAU,QAAQ;AAChC;AAEA,eAAsB,sBAAsB,YAAoB,UAAmC;AACjG,QAAM,iBAAiB,KAAK,MAAM,UAAU;AAG5C,QAAM;AAAA,IACJ,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA,cAAc,EAAE,GAAG;AAAA,MACnB,WAAW,EAAE,OAAO,GAAG,GAAG,GAAG,KAAK;AAAA,IACpC;AAAA,EACF,IAAI;AAEJ,QAAM,uBAAmB,iCAAiB,YAAY,KAAK;AAC3D,QAAM,eAAW,iCAAiB,IAAI,KAAK;AAC3C,QAAM,iBAAa,iCAAiB,MAAM,KAAK;AAE/C,QAAM,qBAAiB,iCAAiB,QAAQ;AAEhD,QAAM,UAAM,uBAAO;AAAA,IACjB,UAAU;AAAA,IACV,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAGD,QAAM,OAAO,WAAW,KAAK,CAAC,GAAG,IAAI,SAAS,IAAI,EAAE,GAAG,GAAG,gBAAgB,CAAC;AAE3E,QAAM,wBAAoB,0BAAU,IAAI;AAExC,QAAM,cAAU,iCAAiB,mBAAmB,KAAK;AAEzD,MAAI,QAAQ,SAAS;AACnB,UAAM,IAAI;AAAA,MACR,0BAAU;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAGA,QAAM,SAAS,UAAM,sCAAsB,kBAAkB,KAAK,QAAQ;AAE1E,QAAM,iBAAa,wBAAQ,MAAM;AAEjC,SAAO;AACT;;;A1C7IO,IAAM,qBAAN,cAAiC,QAAQ;AAAA;AAAA;AAAA;AAAA,EAS9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,YAAuB,UAAqB;AACtD,UAAM,SAAS,IAAI,OAAO,UAAU;AACpC,UAAM,OAAO,SAAS,QAAQ;AAC9B,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,aAAqB;AACvB,WAAO,KAAK,OAAO,EAAE;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,YAAoB;AACtB,WAAO,KAAK,OAAO,EAAE;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAY,SAAkC;AAClD,UAAM,gBAAgB,MAAM,KAAK,OAAO,EAAE,SAAK,4BAAY,OAAO,CAAC;AACnE,eAAO,wBAAQ,aAAa;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBAAgB,wBAAiE;AACrF,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,UAAM,UAAU,KAAK,SAAS,WAAW;AACzC,UAAM,oBAAoB,mBAAmB,iBAAiB,OAAO;AACrE,UAAM,YAAY,MAAM,KAAK,OAAO,EAAE,KAAK,iBAAiB;AAC5D,eAAO,wBAAQ,SAAS;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,sCAAsC,wBAAgD;AAC1F,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,UAAM,oBAAoB,MAAM,KAAK,gBAAgB,kBAAkB;AAEvE,uBAAmB,qBAAqB,KAAK,SAAS,iBAAiB;AAEvE,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBACJ,wBACA,EAAE,yBAAyB,MAAM,eAAe,IAA0B,CAAC,GAC7C;AAC9B,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,QAAI,wBAAwB;AAC1B,YAAM,KAAK,SAAS,uBAAuB,kBAAkB;AAAA,IAC/D;AACA,WAAO,KAAK,SAAS;AAAA,MACnB,MAAM,KAAK,sCAAsC,kBAAkB;AAAA,MACnE,EAAE,gBAAgB,wBAAwB,MAAM;AAAA,IAClD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,oBACJ,wBACA,EAAE,yBAAyB,KAAK,IAA+B,CAAC,GAC3C;AACrB,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,QAAI,wBAAwB;AAC1B,YAAM,KAAK,SAAS,uBAAuB,kBAAkB;AAAA,IAC/D;AACA,WAAO,KAAK,SAAS;AAAA,MACnB,MAAM,KAAK,sCAAsC,kBAAkB;AAAA,MACnE;AAAA,QACE,gBAAgB;AAAA,QAChB,wBAAwB;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,UAAmC;AAC/C,WAAO,sBAAsB,KAAK,YAAY,KAAK,SAAS,QAAQ;AAAA,EACtE;AACF;AAAA;AAAA;AAAA;AA3HE,cAJW,oBAIJ,eAAc;;;A2CzBvB,IAAAC,kBAAqC;AACrC,IAAAC,iBAAuB;AAEvB,IAAAC,gBAAmC;AACnC,IAAAC,iBAA0C;AAC1C,IAAAC,iBAAuF;;;ACLvF,IAAAC,iBAA4B;AAC5B,IAAAC,kBAAqC;AACrC,IAAAC,iBAAuB;AAEvB,IAAAC,iBAA0C;AAC1C,IAAAC,iBAA6D;;;ACLtD,IAAM,UAAU;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;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","names":["import_hasher","import_utils","import_address","import_configs","import_errors","import_math","import_utils","max","import_address","import_errors","import_math","import_transactions","import_utils","import_ramda","gql","import_errors","import_utils","import_configs","import_errors","import_math","import_utils","import_configs","import_errors","import_math","import_transactions","import_utils","import_abi_coder","import_configs","import_math","import_transactions","import_utils","import_configs","import_errors","import_math","import_transactions","import_utils","import_errors","import_math","import_transactions","import_utils","import_utils","import_errors","import_math","import_transactions","import_configs","import_utils","import_configs","import_math","import_transactions","import_utils","import_configs","import_math","import_transactions","import_utils","import_ramda","import_utils","import_abi_coder","import_address","import_configs","import_math","import_transactions","import_utils","import_utils","import_errors","import_transactions","import_errors","import_math","import_transactions","import_utils","import_utils","import_math","import_transactions","import_utils","import_configs","import_errors","import_math","import_transactions","import_abi_coder","import_math","import_errors","import_transactions","import_transactions","import_transactions","import_errors","import_abi_coder","import_transactions","transactionId","import_errors","import_math","import_transactions","import_utils","import_abi_coder","import_math","import_utils","gtf","addi","lw","addi2","tr","ret","isCoin","import_address","import_crypto","import_hasher","import_math","import_utils","import_address","import_crypto","import_errors","import_utils","uuidv4","import_errors","import_hasher","import_math","import_utils","import_ethers","import_crypto","import_errors","import_hasher","import_utils","import_ethers","import_errors","import_hasher","import_utils","MainnetPRV","TestnetPRV","path","path","import_crypto","import_configs","import_math","import_utils","import_crypto","os","path","treeKill"]}
1
+ {"version":3,"sources":["../src/test-utils/index.ts","../src/wallet/base-wallet-unlocked.ts","../src/account.ts","../src/providers/coin-quantity.ts","../src/providers/provider.ts","../src/providers/__generated__/operations.ts","../src/providers/fuel-graphql-subscriber.ts","../src/providers/memory-cache.ts","../src/providers/transaction-request/input.ts","../src/providers/transaction-request/output.ts","../src/providers/transaction-request/transaction-request.ts","../src/providers/resource.ts","../src/providers/utils/receipts.ts","../src/providers/utils/block-explorer.ts","../src/providers/utils/gas.ts","../src/providers/utils/json.ts","../src/providers/utils/sleep.ts","../src/providers/utils/extract-tx-error.ts","../src/providers/transaction-request/errors.ts","../src/providers/transaction-request/witness.ts","../src/providers/transaction-request/create-transaction-request.ts","../src/providers/transaction-request/hash-transaction.ts","../src/providers/transaction-request/storage-slot.ts","../src/providers/transaction-request/script-transaction-request.ts","../src/providers/transaction-request/scripts.ts","../src/providers/transaction-request/utils.ts","../src/providers/transaction-response/transaction-response.ts","../src/providers/transaction-summary/assemble-transaction-summary.ts","../src/providers/transaction-summary/calculate-transaction-fee.ts","../src/providers/transaction-summary/operations.ts","../src/providers/transaction-summary/call.ts","../src/providers/transaction-summary/input.ts","../src/providers/transaction-summary/output.ts","../src/providers/transaction-summary/receipt.ts","../src/providers/transaction-summary/status.ts","../src/providers/transaction-response/getDecodedLogs.ts","../src/providers/utils/auto-retry-fetch.ts","../src/providers/utils/merge-quantities.ts","../src/providers/transaction-summary/get-transaction-summary.ts","../src/providers/chains.ts","../src/providers/assets/index.ts","../src/utils/formatTransferToContractScriptData.ts","../src/signer/signer.ts","../src/wallet/keystore-wallet.ts","../src/hdwallet/hdwallet.ts","../src/mnemonic/mnemonic.ts","../src/wordlists/words/english.ts","../src/mnemonic/utils.ts","../src/wallet/wallets.ts","../src/wallet/wallet.ts","../src/test-utils/seedTestWallet.ts","../src/test-utils/generateTestWallet.ts","../src/test-utils/launchNode.ts"],"sourcesContent":["export * from './generateTestWallet';\nexport * from './seedTestWallet';\nexport * from './launchNode';\n","import { hashMessage } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { hexlify } from '@fuel-ts/utils';\n\nimport { Account } from '../account';\nimport { transactionRequestify } from '../providers';\nimport type {\n TransactionResponse,\n TransactionRequestLike,\n CallResult,\n Provider,\n ProviderSendTxParams,\n EstimateTransactionParams,\n} from '../providers';\nimport { Signer } from '../signer';\n\nimport { encryptKeystoreWallet } from './keystore-wallet';\n\n/**\n * `BaseWalletUnlocked` provides the base functionalities for an unlocked wallet.\n */\nexport class BaseWalletUnlocked extends Account {\n /**\n * Default HDWallet path.\n */\n static defaultPath = \"m/44'/1179993420'/0'/0/0\";\n\n /**\n * A function that returns the wallet's signer.\n */\n signer: () => Signer;\n\n /**\n * Creates a new BaseWalletUnlocked instance.\n *\n * @param privateKey - The private key of the wallet.\n * @param provider - A Provider instance (optional).\n */\n constructor(privateKey: BytesLike, provider?: Provider) {\n const signer = new Signer(privateKey);\n super(signer.address, provider);\n this.signer = () => signer;\n }\n\n /**\n * Gets the private key of the wallet.\n *\n * @returns The private key of the wallet.\n */\n get privateKey(): string {\n return this.signer().privateKey;\n }\n\n /**\n * Gets the public key of the wallet.\n *\n * @returns\n */\n get publicKey(): string {\n return this.signer().publicKey;\n }\n\n /**\n * Signs a message with the wallet's private key.\n *\n * @param message - The message to sign.\n * @returns A promise that resolves to the signature as a ECDSA 64 bytes string.\n */\n async signMessage(message: string): Promise<string> {\n const signedMessage = await this.signer().sign(hashMessage(message));\n return hexlify(signedMessage);\n }\n\n /**\n * Signs a transaction with the wallet's private key.\n *\n * @param transactionRequestLike - The transaction request to sign.\n * @returns A promise that resolves to the signature as a ECDSA 64 bytes string.\n */\n async signTransaction(transactionRequestLike: TransactionRequestLike): Promise<string> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n const chainId = this.provider.getChainId();\n const hashedTransaction = transactionRequest.getTransactionId(chainId);\n const signature = await this.signer().sign(hashedTransaction);\n return hexlify(signature);\n }\n\n /**\n * Populates a transaction with the witnesses signature.\n *\n * @param transactionRequestLike - The transaction request to populate.\n * @returns The populated transaction request.\n */\n async populateTransactionWitnessesSignature(transactionRequestLike: TransactionRequestLike) {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n const signedTransaction = await this.signTransaction(transactionRequest);\n\n transactionRequest.updateWitnessByOwner(this.address, signedTransaction);\n\n return transactionRequest;\n }\n\n /**\n * Populates the witness signature for a transaction and sends it to the network using `provider.sendTransaction`.\n *\n * @param transactionRequestLike - The transaction request to send.\n * @returns A promise that resolves to the TransactionResponse object.\n */\n async sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = false, awaitExecution }: ProviderSendTxParams = {}\n ): Promise<TransactionResponse> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.sendTransaction(\n await this.populateTransactionWitnessesSignature(transactionRequest),\n { awaitExecution, estimateTxDependencies: false }\n );\n }\n\n /**\n * Populates the witness signature for a transaction and sends a call to the network using `provider.call`.\n *\n * @param transactionRequestLike - The transaction request to simulate.\n * @returns A promise that resolves to the CallResult object.\n */\n async simulateTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true }: EstimateTransactionParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.call(\n await this.populateTransactionWitnessesSignature(transactionRequest),\n {\n utxoValidation: true,\n estimateTxDependencies: false,\n }\n );\n }\n\n async encrypt(password: string): Promise<string> {\n return encryptKeystoreWallet(this.privateKey, this.address, password);\n }\n}\n","import { Address } from '@fuel-ts/address';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { AbstractAccount } from '@fuel-ts/interfaces';\nimport type { AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish, BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport { arrayify, isDefined } from '@fuel-ts/utils';\nimport { clone } from 'ramda';\n\nimport type { FuelConnector } from './connectors';\nimport type {\n TransactionRequestLike,\n CallResult,\n TransactionRequest,\n Coin,\n CoinQuantityLike,\n CoinQuantity,\n Message,\n Resource,\n ExcludeResourcesOption,\n Provider,\n ScriptTransactionRequestLike,\n ProviderSendTxParams,\n TransactionResponse,\n EstimateTransactionParams,\n TransactionCost,\n} from './providers';\nimport {\n withdrawScript,\n ScriptTransactionRequest,\n transactionRequestify,\n addAmountToCoinQuantities,\n cacheTxInputsFromOwner,\n} from './providers';\nimport { assembleTransferToContractScript } from './utils/formatTransferToContractScriptData';\n\nexport type TxParamsType = Pick<\n ScriptTransactionRequestLike,\n 'gasLimit' | 'tip' | 'maturity' | 'maxFee' | 'witnessLimit'\n>;\n\nexport type EstimatedTxParams = Pick<\n TransactionCost,\n 'maxFee' | 'estimatedPredicates' | 'addedSignatures' | 'requiredQuantities'\n>;\n\n/**\n * `Account` provides an abstraction for interacting with accounts or wallets on the network.\n */\nexport class Account extends AbstractAccount {\n /**\n * The address associated with the account.\n */\n readonly address: AbstractAddress;\n\n /**\n * The provider used to interact with the network.\n */\n protected _provider?: Provider;\n\n protected _connector?: FuelConnector;\n\n /**\n * Creates a new Account instance.\n *\n * @param address - The address of the account.\n * @param provider - A Provider instance (optional).\n */\n constructor(address: string | AbstractAddress, provider?: Provider, connector?: FuelConnector) {\n super();\n this._provider = provider;\n this._connector = connector;\n this.address = Address.fromDynamicInput(address);\n }\n\n /**\n * The provider used to interact with the network.\n *\n * @returns A Provider instance.\n *\n * @throws `FuelError` if the provider is not set.\n */\n get provider(): Provider {\n if (!this._provider) {\n throw new FuelError(ErrorCode.MISSING_PROVIDER, 'Provider not set');\n }\n\n return this._provider;\n }\n\n /**\n * Sets the provider for the account.\n *\n * @param provider - A Provider instance.\n */\n set provider(provider: Provider) {\n this._provider = provider;\n }\n\n /**\n * Changes the provider connection for the account.\n *\n * @param provider - A Provider instance.\n * @returns The updated Provider instance.\n */\n connect(provider: Provider): Provider {\n this._provider = provider;\n return this.provider;\n }\n\n /**\n * Retrieves resources satisfying the spend query for the account.\n *\n * @param quantities - IDs of coins to exclude.\n * @param excludedIds - IDs of resources to be excluded from the query.\n * @returns A promise that resolves to an array of Resources.\n */\n async getResourcesToSpend(\n quantities: CoinQuantityLike[] /** IDs of coins to exclude */,\n excludedIds?: ExcludeResourcesOption\n ): Promise<Resource[]> {\n return this.provider.getResourcesToSpend(this.address, quantities, excludedIds);\n }\n\n /**\n * Retrieves coins owned by the account.\n *\n * @param assetId - The asset ID of the coins to retrieve.\n * @returns A promise that resolves to an array of Coins.\n */\n async getCoins(assetId?: BytesLike): Promise<Coin[]> {\n const coins = [];\n\n const pageSize = 9999;\n let cursor;\n // eslint-disable-next-line no-unreachable-loop\n for (;;) {\n const pageCoins = await this.provider.getCoins(this.address, assetId, {\n first: pageSize,\n after: cursor,\n });\n\n coins.push(...pageCoins);\n\n const hasNextPage = pageCoins.length >= pageSize;\n if (!hasNextPage) {\n break;\n }\n\n // TODO: implement pagination\n throw new FuelError(\n ErrorCode.NOT_SUPPORTED,\n `Wallets containing more than ${pageSize} coins exceed the current supported limit.`\n );\n }\n\n return coins;\n }\n\n /**\n * Retrieves messages owned by the account.\n *\n * @returns A promise that resolves to an array of Messages.\n */\n async getMessages(): Promise<Message[]> {\n const messages = [];\n\n const pageSize = 9999;\n let cursor;\n // eslint-disable-next-line no-unreachable-loop\n for (;;) {\n const pageMessages = await this.provider.getMessages(this.address, {\n first: pageSize,\n after: cursor,\n });\n\n messages.push(...pageMessages);\n\n const hasNextPage = pageMessages.length >= pageSize;\n if (!hasNextPage) {\n break;\n }\n\n // TODO: implement pagination\n throw new FuelError(\n ErrorCode.NOT_SUPPORTED,\n `Wallets containing more than ${pageSize} messages exceed the current supported limit.`\n );\n }\n\n return messages;\n }\n\n /**\n * Retrieves the balance of the account for the given asset.\n *\n * @param assetId - The asset ID to check the balance for.\n * @returns A promise that resolves to the balance amount.\n */\n async getBalance(assetId?: BytesLike): Promise<BN> {\n const assetIdToFetch = assetId ?? this.provider.getBaseAssetId();\n const amount = await this.provider.getBalance(this.address, assetIdToFetch);\n return amount;\n }\n\n /**\n * Retrieves all the balances for the account.\n *\n * @returns A promise that resolves to an array of Coins and their quantities.\n */\n async getBalances(): Promise<CoinQuantity[]> {\n const balances = [];\n\n const pageSize = 9999;\n let cursor;\n // eslint-disable-next-line no-unreachable-loop\n for (;;) {\n const pageBalances = await this.provider.getBalances(this.address, {\n first: pageSize,\n after: cursor,\n });\n\n balances.push(...pageBalances);\n\n const hasNextPage = pageBalances.length >= pageSize;\n if (!hasNextPage) {\n break;\n }\n\n // TODO: implement pagination\n throw new FuelError(\n ErrorCode.NOT_SUPPORTED,\n `Wallets containing more than ${pageSize} balances exceed the current supported limit.`\n );\n }\n\n return balances;\n }\n\n /**\n * Adds resources to the transaction enough to fund it.\n *\n * @param request - The transaction request.\n * @param coinQuantities - The coin quantities required to execute the transaction.\n * @param fee - The estimated transaction fee.\n * @returns A promise that resolves when the resources are added to the transaction.\n */\n async fund<T extends TransactionRequest>(request: T, params: EstimatedTxParams): Promise<T> {\n const { addedSignatures, estimatedPredicates, maxFee: fee, requiredQuantities } = params;\n const baseAssetId = this.provider.getBaseAssetId();\n\n const txRequest = request as T;\n const requiredQuantitiesWithFee = addAmountToCoinQuantities({\n amount: bn(fee),\n assetId: baseAssetId,\n coinQuantities: requiredQuantities,\n });\n\n const quantitiesDict: Record<string, { required: BN; owned: BN }> = {};\n\n requiredQuantitiesWithFee.forEach(({ amount, assetId }) => {\n quantitiesDict[assetId] = {\n required: amount,\n owned: bn(0),\n };\n });\n\n txRequest.inputs.forEach((input) => {\n const isResource = 'amount' in input;\n if (!isResource) {\n return;\n }\n const isCoin = 'owner' in input;\n const assetId = isCoin ? String(input.assetId) : baseAssetId;\n if (quantitiesDict[assetId]) {\n quantitiesDict[assetId].owned = quantitiesDict[assetId].owned.add(input.amount);\n }\n });\n\n const missingQuantities: CoinQuantity[] = [];\n Object.entries(quantitiesDict).forEach(([assetId, { owned, required }]) => {\n if (owned.lt(required)) {\n missingQuantities.push({\n assetId,\n amount: required.sub(owned),\n });\n }\n });\n\n const needsToBeFunded = missingQuantities.length;\n\n if (needsToBeFunded) {\n const excludedIds = cacheTxInputsFromOwner(txRequest.inputs, this.address.toB256());\n\n const resources = await this.getResourcesToSpend(missingQuantities, excludedIds);\n\n txRequest.addResources(resources);\n }\n\n txRequest.shiftPredicateData();\n txRequest.updatePredicateGasUsed(estimatedPredicates);\n\n const requestToReestimate = clone(txRequest);\n if (addedSignatures) {\n Array.from({ length: addedSignatures }).forEach(() => requestToReestimate.addEmptyWitness());\n }\n const { maxFee } = await this.provider.estimateTxGasAndFee({\n transactionRequest: requestToReestimate,\n });\n\n txRequest.maxFee = maxFee;\n\n return txRequest;\n }\n\n /**\n * A helper that creates a transfer transaction request and returns it.\n *\n * @param destination - The address of the destination.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The transaction parameters (gasLimit, tip, maturity, maxFee, witnessLimit).\n * @returns A promise that resolves to the prepared transaction request.\n */\n async createTransfer(\n /** Address of the destination */\n destination: string | AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId?: BytesLike,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionRequest> {\n const request = new ScriptTransactionRequest(txParams);\n const assetIdToTransfer = assetId ?? this.provider.getBaseAssetId();\n request.addCoinOutput(Address.fromAddressOrString(destination), amount, assetIdToTransfer);\n const txCost = await this.provider.getTransactionCost(request, {\n estimateTxDependencies: true,\n resourcesOwner: this,\n });\n\n this.validateGasLimitAndMaxFee({\n gasUsed: txCost.gasUsed,\n maxFee: txCost.maxFee,\n txParams,\n });\n\n request.gasLimit = txCost.gasUsed;\n request.maxFee = txCost.maxFee;\n\n await this.fund(request, txCost);\n\n return request;\n }\n\n /**\n * Transfers coins to a destination address.\n *\n * @param destination - The address of the destination.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The transaction parameters (gasLimit, maturity).\n * @returns A promise that resolves to the transaction response.\n */\n async transfer(\n /** Address of the destination */\n destination: string | AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId?: BytesLike,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionResponse> {\n if (bn(amount).lte(0)) {\n throw new FuelError(\n ErrorCode.INVALID_TRANSFER_AMOUNT,\n 'Transfer amount must be a positive number.'\n );\n }\n const assetIdToTransfer = assetId ?? this.provider.getBaseAssetId();\n const request = await this.createTransfer(destination, amount, assetIdToTransfer, txParams);\n return this.sendTransaction(request, { estimateTxDependencies: false });\n }\n\n /**\n * Transfers coins to a contract address.\n *\n * @param contractId - The address of the contract.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The optional transaction parameters.\n * @returns A promise that resolves to the transaction response.\n */\n async transferToContract(\n /** Contract address */\n contractId: string | AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId?: BytesLike,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionResponse> {\n if (bn(amount).lte(0)) {\n throw new FuelError(\n ErrorCode.INVALID_TRANSFER_AMOUNT,\n 'Transfer amount must be a positive number.'\n );\n }\n\n const contractAddress = Address.fromAddressOrString(contractId);\n const assetIdToTransfer = assetId ?? this.provider.getBaseAssetId();\n const { script, scriptData } = await assembleTransferToContractScript({\n hexlifiedContractId: contractAddress.toB256(),\n amountToTransfer: bn(amount),\n assetId: assetIdToTransfer,\n });\n\n const request = new ScriptTransactionRequest({\n ...txParams,\n script,\n scriptData,\n });\n\n request.addContractInputAndOutput(contractAddress);\n\n const txCost = await this.provider.getTransactionCost(request, {\n resourcesOwner: this,\n quantitiesToContract: [{ amount: bn(amount), assetId: String(assetIdToTransfer) }],\n });\n\n this.validateGasLimitAndMaxFee({\n gasUsed: txCost.gasUsed,\n maxFee: txCost.maxFee,\n txParams,\n });\n\n request.gasLimit = txCost.gasUsed;\n request.maxFee = txCost.maxFee;\n\n await this.fund(request, txCost);\n\n return this.sendTransaction(request);\n }\n\n /**\n * Withdraws an amount of the base asset to the base chain.\n *\n * @param recipient - Address of the recipient on the base chain.\n * @param amount - Amount of base asset.\n * @param txParams - The optional transaction parameters.\n * @returns A promise that resolves to the transaction response.\n */\n async withdrawToBaseLayer(\n /** Address of the recipient on the base chain */\n recipient: string | AbstractAddress,\n /** Amount of base asset */\n amount: BigNumberish,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionResponse> {\n const recipientAddress = Address.fromAddressOrString(recipient);\n // add recipient and amount to the transaction script code\n const recipientDataArray = arrayify(\n '0x'.concat(recipientAddress.toHexString().substring(2).padStart(64, '0'))\n );\n const amountDataArray = arrayify(\n '0x'.concat(bn(amount).toHex().substring(2).padStart(16, '0'))\n );\n const script = new Uint8Array([\n ...arrayify(withdrawScript.bytes),\n ...recipientDataArray,\n ...amountDataArray,\n ]);\n\n const params: ScriptTransactionRequestLike = { script, ...txParams };\n\n const baseAssetId = this.provider.getBaseAssetId();\n const request = new ScriptTransactionRequest(params);\n const quantitiesToContract = [{ amount: bn(amount), assetId: baseAssetId }];\n\n const txCost = await this.provider.getTransactionCost(request, { quantitiesToContract });\n\n this.validateGasLimitAndMaxFee({\n gasUsed: txCost.gasUsed,\n maxFee: txCost.maxFee,\n txParams,\n });\n\n request.maxFee = txCost.maxFee;\n request.gasLimit = txCost.gasUsed;\n\n await this.fund(request, txCost);\n\n return this.sendTransaction(request);\n }\n\n async signMessage(message: string): Promise<string> {\n if (!this._connector) {\n throw new FuelError(ErrorCode.MISSING_CONNECTOR, 'A connector is required to sign messages.');\n }\n return this._connector.signMessage(this.address.toString(), message);\n }\n\n /**\n * Signs a transaction with the wallet's private key.\n *\n * @param transactionRequestLike - The transaction request to sign.\n * @returns A promise that resolves to the signature of the transaction.\n */\n async signTransaction(transactionRequestLike: TransactionRequestLike): Promise<string> {\n if (!this._connector) {\n throw new FuelError(\n ErrorCode.MISSING_CONNECTOR,\n 'A connector is required to sign transactions.'\n );\n }\n return this._connector.signTransaction(this.address.toString(), transactionRequestLike);\n }\n\n /**\n * Sends a transaction to the network.\n *\n * @param transactionRequestLike - The transaction request to be sent.\n * @returns A promise that resolves to the transaction response.\n */\n async sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true, awaitExecution }: ProviderSendTxParams = {}\n ): Promise<TransactionResponse> {\n if (this._connector) {\n return this.provider.getTransactionResponse(\n await this._connector.sendTransaction(this.address.toString(), transactionRequestLike)\n );\n }\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.sendTransaction(transactionRequest, {\n awaitExecution,\n estimateTxDependencies: false,\n });\n }\n\n /**\n * Simulates a transaction.\n *\n * @param transactionRequestLike - The transaction request to be simulated.\n * @returns A promise that resolves to the call result.\n */\n async simulateTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true }: EstimateTransactionParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.simulate(transactionRequest, { estimateTxDependencies: false });\n }\n\n private validateGasLimitAndMaxFee({\n txParams: { gasLimit: setGasLimit, maxFee: setMaxFee },\n gasUsed,\n maxFee,\n }: {\n gasUsed: BN;\n maxFee: BN;\n txParams: Pick<TxParamsType, 'gasLimit' | 'maxFee'>;\n }) {\n if (isDefined(setGasLimit) && gasUsed.gt(setGasLimit)) {\n throw new FuelError(\n ErrorCode.GAS_LIMIT_TOO_LOW,\n `Gas limit '${setGasLimit}' is lower than the required: '${gasUsed}'.`\n );\n }\n\n if (isDefined(setMaxFee) && maxFee.gt(setMaxFee)) {\n throw new FuelError(\n ErrorCode.MAX_FEE_TOO_LOW,\n `Max fee '${setMaxFee}' is lower than the required: '${maxFee}'.`\n );\n }\n }\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish, BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport { hexlify } from '@fuel-ts/utils';\n\nexport type CoinQuantityLike =\n | [amount: BigNumberish, assetId: BytesLike, max?: BigNumberish]\n | { amount: BigNumberish; assetId: BytesLike; max?: BigNumberish };\nexport type CoinQuantity = { amount: BN; assetId: string; max?: BN };\n\n/** @hidden */\nexport const coinQuantityfy = (coinQuantityLike: CoinQuantityLike): CoinQuantity => {\n let assetId;\n let amount;\n let max;\n if (Array.isArray(coinQuantityLike)) {\n amount = coinQuantityLike[0];\n assetId = coinQuantityLike[1];\n max = coinQuantityLike[2] ?? undefined;\n } else {\n amount = coinQuantityLike.amount;\n assetId = coinQuantityLike.assetId;\n max = coinQuantityLike.max ?? undefined;\n }\n\n const bnAmount = bn(amount);\n return {\n assetId: hexlify(assetId),\n amount: bnAmount.lt(1) ? bn(1) : bnAmount,\n max: max ? bn(max) : undefined,\n };\n};\n\nexport interface IAddAmountToAssetParams {\n assetId: string;\n amount: BN;\n coinQuantities: CoinQuantity[];\n}\n\nexport const addAmountToCoinQuantities = (params: IAddAmountToAssetParams): CoinQuantity[] => {\n const { amount, assetId } = params;\n\n const coinQuantities = [...params.coinQuantities];\n\n const assetIdx = coinQuantities.findIndex((coinQuantity) => coinQuantity.assetId === assetId);\n\n if (assetIdx !== -1) {\n coinQuantities[assetIdx].amount = coinQuantities[assetIdx].amount.add(amount);\n } else {\n coinQuantities.push({ assetId, amount });\n }\n\n return coinQuantities;\n};\n","import { Address } from '@fuel-ts/address';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAccount, AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport { BN, bn } from '@fuel-ts/math';\nimport type { Transaction } from '@fuel-ts/transactions';\nimport {\n InputType,\n TransactionType,\n InputMessageCoder,\n TransactionCoder,\n} from '@fuel-ts/transactions';\nimport { arrayify, hexlify, DateTime } from '@fuel-ts/utils';\nimport { checkFuelCoreVersionCompatibility } from '@fuel-ts/versions';\nimport { equalBytes } from '@noble/curves/abstract/utils';\nimport { Network } from 'ethers';\nimport type { DocumentNode } from 'graphql';\nimport { GraphQLClient } from 'graphql-request';\nimport { clone } from 'ramda';\n\nimport type { Predicate } from '../predicate';\n\nimport { getSdk as getOperationsSdk } from './__generated__/operations';\nimport type {\n GqlChainInfoFragmentFragment,\n GqlDryRunFailureStatusFragmentFragment,\n GqlDryRunSuccessStatusFragmentFragment,\n GqlGasCosts,\n GqlGetBlocksQueryVariables,\n} from './__generated__/operations';\nimport type { Coin } from './coin';\nimport type { CoinQuantity, CoinQuantityLike } from './coin-quantity';\nimport { coinQuantityfy } from './coin-quantity';\nimport { FuelGraphqlSubscriber } from './fuel-graphql-subscriber';\nimport { MemoryCache } from './memory-cache';\nimport type { Message, MessageCoin, MessageProof, MessageStatus } from './message';\nimport type { ExcludeResourcesOption, Resource } from './resource';\nimport type {\n TransactionRequestLike,\n TransactionRequest,\n TransactionRequestInput,\n CoinTransactionRequestInput,\n ScriptTransactionRequest,\n JsonAbisFromAllCalls,\n} from './transaction-request';\nimport { transactionRequestify } from './transaction-request';\nimport type { TransactionResultReceipt } from './transaction-response';\nimport { TransactionResponse } from './transaction-response';\nimport { processGqlReceipt } from './transaction-summary/receipt';\nimport { calculateGasFee, getGasUsedFromReceipts, getReceiptsWithMissingData } from './utils';\nimport type { RetryOptions } from './utils/auto-retry-fetch';\nimport { autoRetryFetch } from './utils/auto-retry-fetch';\nimport { mergeQuantities } from './utils/merge-quantities';\n\nconst MAX_RETRIES = 10;\n\nexport type DryRunStatus =\n | Omit<GqlDryRunFailureStatusFragmentFragment, '__typename'>\n | Omit<GqlDryRunSuccessStatusFragmentFragment, '__typename'>;\n\nexport type CallResult = {\n receipts: TransactionResultReceipt[];\n dryrunStatus?: DryRunStatus;\n};\n\nexport type EstimateTxDependenciesReturns = CallResult & {\n outputVariables: number;\n missingContractIds: string[];\n};\n\n/**\n * A Fuel block\n */\nexport type Block = {\n id: string;\n height: BN;\n time: string;\n transactionIds: string[];\n};\n\n/**\n * Deployed Contract bytecode and contract id\n */\nexport type ContractResult = {\n id: string;\n bytecode: string;\n};\n\ntype ConsensusParameters = {\n contractMaxSize: BN;\n maxInputs: BN;\n maxOutputs: BN;\n maxWitnesses: BN;\n maxGasPerTx: BN;\n maxScriptLength: BN;\n maxScriptDataLength: BN;\n maxStorageSlots: BN;\n maxPredicateLength: BN;\n maxPredicateDataLength: BN;\n maxGasPerPredicate: BN;\n gasPriceFactor: BN;\n gasPerByte: BN;\n maxMessageDataLength: BN;\n chainId: BN;\n gasCosts: GqlGasCosts;\n baseAssetId: string;\n};\n\n/**\n * Chain information\n */\nexport type ChainInfo = {\n name: string;\n baseChainHeight: BN;\n consensusParameters: ConsensusParameters;\n gasCosts: GqlGasCosts;\n latestBlock: {\n id: string;\n height: BN;\n time: string;\n transactions: Array<{ id: string }>;\n };\n};\n\n/**\n * Node information\n */\nexport type NodeInfo = {\n utxoValidation: boolean;\n vmBacktrace: boolean;\n maxTx: BN;\n maxDepth: BN;\n nodeVersion: string;\n};\n\nexport type NodeInfoAndConsensusParameters = {\n nodeVersion: string;\n gasPerByte: BN;\n gasPriceFactor: BN;\n maxGasPerTx: BN;\n};\n\n// #region cost-estimation-1\nexport type TransactionCost = {\n gasPrice: BN;\n gasUsed: BN;\n minGas: BN;\n minFee: BN;\n maxFee: BN;\n maxGas: BN;\n receipts: TransactionResultReceipt[];\n outputVariables: number;\n missingContractIds: string[];\n estimatedPredicates: TransactionRequestInput[];\n requiredQuantities: CoinQuantity[];\n addedSignatures: number;\n};\n// #endregion cost-estimation-1\n\nconst processGqlChain = (chain: GqlChainInfoFragmentFragment): ChainInfo => {\n const { name, daHeight, consensusParameters, latestBlock } = chain;\n\n const { contractParams, feeParams, predicateParams, scriptParams, txParams, gasCosts } =\n consensusParameters;\n\n return {\n name,\n baseChainHeight: bn(daHeight),\n consensusParameters: {\n contractMaxSize: bn(contractParams.contractMaxSize),\n maxInputs: bn(txParams.maxInputs),\n maxOutputs: bn(txParams.maxOutputs),\n maxWitnesses: bn(txParams.maxWitnesses),\n maxGasPerTx: bn(txParams.maxGasPerTx),\n maxScriptLength: bn(scriptParams.maxScriptLength),\n maxScriptDataLength: bn(scriptParams.maxScriptDataLength),\n maxStorageSlots: bn(contractParams.maxStorageSlots),\n maxPredicateLength: bn(predicateParams.maxPredicateLength),\n maxPredicateDataLength: bn(predicateParams.maxPredicateDataLength),\n maxGasPerPredicate: bn(predicateParams.maxGasPerPredicate),\n gasPriceFactor: bn(feeParams.gasPriceFactor),\n gasPerByte: bn(feeParams.gasPerByte),\n maxMessageDataLength: bn(predicateParams.maxMessageDataLength),\n chainId: bn(consensusParameters.chainId),\n baseAssetId: consensusParameters.baseAssetId,\n gasCosts,\n },\n gasCosts,\n latestBlock: {\n id: latestBlock.id,\n height: bn(latestBlock.height),\n time: latestBlock.header.time,\n transactions: latestBlock.transactions.map((i) => ({\n id: i.id,\n })),\n },\n };\n};\n\n/**\n * @hidden\n *\n * Cursor pagination arguments\n *\n * https://relay.dev/graphql/connections.htm#sec-Arguments\n */\nexport type CursorPaginationArgs = {\n /** Forward pagination limit */\n first?: number | null;\n /** Forward pagination cursor */\n after?: string | null;\n /** Backward pagination limit */\n last?: number | null;\n /** Backward pagination cursor */\n before?: string | null;\n};\n\n/*\n * Provider initialization options\n */\nexport type ProviderOptions = {\n /**\n * Custom fetch function to use for making requests.\n */\n fetch?: (\n url: string,\n requestInit?: RequestInit,\n providerOptions?: Omit<ProviderOptions, 'fetch'>\n ) => Promise<Response>;\n /**\n * Timeout [ms] after which every request will be aborted.\n */\n timeout?: number;\n /**\n * Cache UTXOs for the given time [ms].\n */\n cacheUtxo?: number;\n /**\n * Retry options to use when fetching data from the node.\n */\n retryOptions?: RetryOptions;\n /**\n * Middleware to modify the request before it is sent.\n * This can be used to add headers, modify the body, etc.\n */\n requestMiddleware?: (request: RequestInit) => RequestInit | Promise<RequestInit>;\n};\n\n/**\n * UTXO Validation Param\n */\nexport type UTXOValidationParams = {\n utxoValidation?: boolean;\n};\n\n/**\n * Transaction estimation Param\n */\nexport type EstimateTransactionParams = {\n estimateTxDependencies?: boolean;\n};\n\nexport type TransactionCostParams = EstimateTransactionParams & {\n resourcesOwner?: AbstractAccount;\n quantitiesToContract?: CoinQuantity[];\n signatureCallback?: (request: ScriptTransactionRequest) => Promise<ScriptTransactionRequest>;\n};\n\n/**\n * Provider Call transaction params\n */\nexport type ProviderCallParams = UTXOValidationParams & EstimateTransactionParams;\n\n/**\n * Provider Send transaction params\n */\nexport type ProviderSendTxParams = EstimateTransactionParams & {\n /**\n * By default, the promise will resolve immediately after the transaction is submitted.\n *\n * If set to true, the promise will resolve only when the transaction changes status\n * from `SubmittedStatus` to one of `SuccessStatus`, `FailureStatus` or `SqueezedOutStatus`.\n *\n */\n awaitExecution?: boolean;\n};\n\n/**\n * URL - Consensus Params mapping.\n */\ntype ChainInfoCache = Record<string, ChainInfo>;\n\n/**\n * URL - Node Info mapping.\n */\ntype NodeInfoCache = Record<string, NodeInfo>;\n\n/**\n * A provider for connecting to a node\n */\nexport default class Provider {\n operations: ReturnType<typeof getOperationsSdk>;\n cache?: MemoryCache;\n\n static clearChainAndNodeCaches() {\n Provider.nodeInfoCache = {};\n Provider.chainInfoCache = {};\n }\n\n private static chainInfoCache: ChainInfoCache = {};\n private static nodeInfoCache: NodeInfoCache = {};\n\n options: ProviderOptions = {\n timeout: undefined,\n cacheUtxo: undefined,\n fetch: undefined,\n retryOptions: undefined,\n };\n\n private static getFetchFn(options: ProviderOptions): NonNullable<ProviderOptions['fetch']> {\n const { retryOptions, timeout } = options;\n\n return autoRetryFetch(async (...args) => {\n const url = args[0];\n const request = args[1];\n const signal = timeout ? AbortSignal.timeout(timeout) : undefined;\n\n let fullRequest: RequestInit = { ...request, signal };\n\n if (options.requestMiddleware) {\n fullRequest = await options.requestMiddleware(fullRequest);\n }\n\n return options.fetch ? options.fetch(url, fullRequest, options) : fetch(url, fullRequest);\n }, retryOptions);\n }\n\n /**\n * Constructor to initialize a Provider.\n *\n * @param url - GraphQL endpoint of the Fuel node\n * @param chainInfo - Chain info of the Fuel node\n * @param options - Additional options for the provider\n * @hidden\n */\n protected constructor(\n /** GraphQL endpoint of the Fuel node */\n public url: string,\n options: ProviderOptions = {}\n ) {\n this.options = { ...this.options, ...options };\n this.url = url;\n\n this.operations = this.createOperations();\n this.cache = options.cacheUtxo ? new MemoryCache(options.cacheUtxo) : undefined;\n }\n\n /**\n * Creates a new instance of the Provider class. This is the recommended way to initialize a Provider.\n * @param url - GraphQL endpoint of the Fuel node\n * @param options - Additional options for the provider\n */\n static async create(url: string, options: ProviderOptions = {}) {\n const provider = new Provider(url, options);\n await provider.fetchChainAndNodeInfo();\n return provider;\n }\n\n /**\n * Returns the cached chainInfo for the current URL.\n */\n getChain() {\n const chain = Provider.chainInfoCache[this.url];\n if (!chain) {\n throw new FuelError(\n ErrorCode.CHAIN_INFO_CACHE_EMPTY,\n 'Chain info cache is empty. Make sure you have called `Provider.create` to initialize the provider.'\n );\n }\n return chain;\n }\n\n /**\n * Returns the cached nodeInfo for the current URL.\n */\n getNode() {\n const node = Provider.nodeInfoCache[this.url];\n if (!node) {\n throw new FuelError(\n ErrorCode.NODE_INFO_CACHE_EMPTY,\n 'Node info cache is empty. Make sure you have called `Provider.create` to initialize the provider.'\n );\n }\n return node;\n }\n\n /**\n * Returns some helpful parameters related to gas fees.\n */\n getGasConfig() {\n const { maxGasPerTx, maxGasPerPredicate, gasPriceFactor, gasPerByte, gasCosts } =\n this.getChain().consensusParameters;\n return {\n maxGasPerTx,\n maxGasPerPredicate,\n gasPriceFactor,\n gasPerByte,\n gasCosts,\n };\n }\n\n /**\n * Updates the URL for the provider and fetches the consensus parameters for the new URL, if needed.\n */\n async connect(url: string, options?: ProviderOptions) {\n this.url = url;\n this.options = options ?? this.options;\n this.operations = this.createOperations();\n await this.fetchChainAndNodeInfo();\n }\n\n /**\n * Fetches both the chain and node information, saves it to the cache, and return it.\n *\n * @returns NodeInfo and Chain\n */\n async fetchChainAndNodeInfo() {\n const chain = await this.fetchChain();\n const nodeInfo = await this.fetchNode();\n\n Provider.ensureClientVersionIsSupported(nodeInfo);\n\n return {\n chain,\n nodeInfo,\n };\n }\n\n private static ensureClientVersionIsSupported(nodeInfo: NodeInfo) {\n const { isMajorSupported, isMinorSupported, supportedVersion } =\n checkFuelCoreVersionCompatibility(nodeInfo.nodeVersion);\n\n if (!isMajorSupported || !isMinorSupported) {\n throw new FuelError(\n FuelError.CODES.UNSUPPORTED_FUEL_CLIENT_VERSION,\n `Fuel client version: ${nodeInfo.nodeVersion}, Supported version: ${supportedVersion}`\n );\n }\n }\n\n /**\n * Create GraphQL client and set operations.\n *\n * @returns The operation SDK object\n */\n private createOperations() {\n const fetchFn = Provider.getFetchFn(this.options);\n const gqlClient = new GraphQLClient(this.url, {\n fetch: (url: string, requestInit: RequestInit) => fetchFn(url, requestInit, this.options),\n });\n\n const executeQuery = (query: DocumentNode, vars: Record<string, unknown>) => {\n const opDefinition = query.definitions.find((x) => x.kind === 'OperationDefinition') as {\n operation: string;\n };\n const isSubscription = opDefinition?.operation === 'subscription';\n\n if (isSubscription) {\n return new FuelGraphqlSubscriber({\n url: this.url,\n query,\n fetchFn: (url, requestInit) => fetchFn(url as string, requestInit, this.options),\n variables: vars,\n });\n }\n return gqlClient.request(query, vars);\n };\n\n // @ts-expect-error This is due to this function being generic. Its type is specified when calling a specific operation via provider.operations.xyz.\n return getOperationsSdk(executeQuery);\n }\n\n /**\n * Returns the version of the connected node.\n *\n * @returns A promise that resolves to the version string.\n */\n async getVersion(): Promise<string> {\n const {\n nodeInfo: { nodeVersion },\n } = await this.operations.getVersion();\n return nodeVersion;\n }\n\n /**\n * @hidden\n *\n * Returns the network configuration of the connected Fuel node.\n *\n * @returns A promise that resolves to the network configuration object\n */\n async getNetwork(): Promise<Network> {\n const {\n name,\n consensusParameters: { chainId },\n } = await this.getChain();\n const network = new Network(name, chainId.toNumber());\n return Promise.resolve(network);\n }\n\n /**\n * Returns the block number.\n *\n * @returns A promise that resolves to the block number\n */\n async getBlockNumber(): Promise<BN> {\n const { chain } = await this.operations.getChain();\n return bn(chain.latestBlock.height, 10);\n }\n\n /**\n * Returns the chain information.\n * @param url - The URL of the Fuel node\n * @returns NodeInfo object\n */\n async fetchNode(): Promise<NodeInfo> {\n const { nodeInfo } = await this.operations.getNodeInfo();\n\n const processedNodeInfo: NodeInfo = {\n maxDepth: bn(nodeInfo.maxDepth),\n maxTx: bn(nodeInfo.maxTx),\n nodeVersion: nodeInfo.nodeVersion,\n utxoValidation: nodeInfo.utxoValidation,\n vmBacktrace: nodeInfo.vmBacktrace,\n };\n\n Provider.nodeInfoCache[this.url] = processedNodeInfo;\n\n return processedNodeInfo;\n }\n\n /**\n * Fetches the `chainInfo` for the given node URL.\n * @param url - The URL of the Fuel node\n * @returns ChainInfo object\n */\n async fetchChain(): Promise<ChainInfo> {\n const { chain } = await this.operations.getChain();\n\n const processedChain = processGqlChain(chain);\n\n Provider.chainInfoCache[this.url] = processedChain;\n\n return processedChain;\n }\n\n /**\n * Returns the chain ID\n * @returns A promise that resolves to the chain ID number\n */\n getChainId() {\n const {\n consensusParameters: { chainId },\n } = this.getChain();\n return chainId.toNumber();\n }\n\n /**\n * Returns the base asset ID for the current provider network\n *\n * @returns the base asset ID\n */\n getBaseAssetId() {\n const {\n consensusParameters: { baseAssetId },\n } = this.getChain();\n return baseAssetId;\n }\n\n /**\n * @hidden\n */\n #cacheInputs(inputs: TransactionRequestInput[]): void {\n if (!this.cache) {\n return;\n }\n\n inputs.forEach((input) => {\n if (input.type === InputType.Coin) {\n this.cache?.set(input.id);\n }\n });\n }\n\n /**\n * Submits a transaction to the chain to be executed.\n *\n * If the transaction is missing any dependencies,\n * the transaction will be mutated and those dependencies will be added.\n *\n * @param transactionRequestLike - The transaction request object.\n * @returns A promise that resolves to the transaction response object.\n */\n // #region Provider-sendTransaction\n async sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true, awaitExecution = false }: ProviderSendTxParams = {}\n ): Promise<TransactionResponse> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n this.#cacheInputs(transactionRequest.inputs);\n if (estimateTxDependencies) {\n await this.estimateTxDependencies(transactionRequest);\n }\n // #endregion Provider-sendTransaction\n\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n\n let abis: JsonAbisFromAllCalls | undefined;\n\n if (transactionRequest.type === TransactionType.Script) {\n abis = transactionRequest.abis;\n }\n\n if (awaitExecution) {\n const subscription = this.operations.submitAndAwait({ encodedTransaction });\n for await (const { submitAndAwait } of subscription) {\n if (submitAndAwait.type === 'SqueezedOutStatus') {\n throw new FuelError(\n ErrorCode.TRANSACTION_SQUEEZED_OUT,\n `Transaction Squeezed Out with reason: ${submitAndAwait.reason}`\n );\n }\n\n if (submitAndAwait.type !== 'SubmittedStatus') {\n break;\n }\n }\n\n const transactionId = transactionRequest.getTransactionId(this.getChainId());\n const response = new TransactionResponse(transactionId, this, abis);\n await response.fetch();\n return response;\n }\n\n const {\n submit: { id: transactionId },\n } = await this.operations.submit({ encodedTransaction });\n\n return new TransactionResponse(transactionId, this, abis);\n }\n\n /**\n * Executes a transaction without actually submitting it to the chain.\n *\n * If the transaction is missing any dependencies,\n * the transaction will be mutated and those dependencies will be added.\n *\n * @param transactionRequestLike - The transaction request object.\n * @param utxoValidation - Additional provider call parameters.\n * @returns A promise that resolves to the call result object.\n */\n async call(\n transactionRequestLike: TransactionRequestLike,\n { utxoValidation, estimateTxDependencies = true }: ProviderCallParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n return this.estimateTxDependencies(transactionRequest);\n }\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n const { dryRun: dryRunStatuses } = await this.operations.dryRun({\n encodedTransactions: encodedTransaction,\n utxoValidation: utxoValidation || false,\n });\n const [{ receipts: rawReceipts, status }] = dryRunStatuses;\n const receipts = rawReceipts.map(processGqlReceipt);\n\n return { receipts, dryrunStatus: status };\n }\n\n /**\n * Verifies whether enough gas is available to complete transaction.\n *\n * @param transactionRequest - The transaction request object.\n * @returns A promise that resolves to the estimated transaction request object.\n */\n async estimatePredicates(transactionRequest: TransactionRequest): Promise<TransactionRequest> {\n const shouldEstimatePredicates = Boolean(\n transactionRequest.inputs.find(\n (input) =>\n 'predicate' in input &&\n input.predicate &&\n !equalBytes(arrayify(input.predicate), arrayify('0x')) &&\n new BN(input.predicateGasUsed).isZero()\n )\n );\n if (!shouldEstimatePredicates) {\n return transactionRequest;\n }\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n const response = await this.operations.estimatePredicates({\n encodedTransaction,\n });\n\n const {\n estimatePredicates: { inputs },\n } = response;\n\n if (inputs) {\n inputs.forEach((input, index) => {\n if ('predicateGasUsed' in input && bn(input.predicateGasUsed).gt(0)) {\n // eslint-disable-next-line no-param-reassign\n (<CoinTransactionRequestInput>transactionRequest.inputs[index]).predicateGasUsed =\n input.predicateGasUsed;\n }\n });\n }\n\n return transactionRequest;\n }\n\n /**\n * Will dryRun a transaction and check for missing dependencies.\n *\n * If there are missing variable outputs,\n * `addVariableOutputs` is called on the transaction.\n *\n *\n * @param transactionRequest - The transaction request object.\n * @returns A promise.\n */\n async estimateTxDependencies(\n transactionRequest: TransactionRequest\n ): Promise<EstimateTxDependenciesReturns> {\n if (transactionRequest.type === TransactionType.Create) {\n return {\n receipts: [],\n outputVariables: 0,\n missingContractIds: [],\n };\n }\n\n let receipts: TransactionResultReceipt[] = [];\n const missingContractIds: string[] = [];\n let outputVariables = 0;\n let dryrunStatus: DryRunStatus | undefined;\n\n for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {\n const {\n dryRun: [{ receipts: rawReceipts, status }],\n } = await this.operations.dryRun({\n encodedTransactions: [hexlify(transactionRequest.toTransactionBytes())],\n utxoValidation: false,\n });\n\n receipts = rawReceipts.map(processGqlReceipt);\n dryrunStatus = status;\n\n const { missingOutputVariables, missingOutputContractIds } =\n getReceiptsWithMissingData(receipts);\n\n const hasMissingOutputs =\n missingOutputVariables.length !== 0 || missingOutputContractIds.length !== 0;\n\n if (hasMissingOutputs) {\n outputVariables += missingOutputVariables.length;\n transactionRequest.addVariableOutputs(missingOutputVariables.length);\n missingOutputContractIds.forEach(({ contractId }) => {\n transactionRequest.addContractInputAndOutput(Address.fromString(contractId));\n missingContractIds.push(contractId);\n });\n\n const { maxFee } = await this.estimateTxGasAndFee({\n transactionRequest,\n });\n\n // eslint-disable-next-line no-param-reassign\n transactionRequest.maxFee = maxFee;\n } else {\n break;\n }\n }\n\n return {\n receipts,\n outputVariables,\n missingContractIds,\n dryrunStatus,\n };\n }\n\n /**\n * Dry runs multiple transactions and checks for missing dependencies in batches.\n *\n * Transactions are dry run in batches. After each dry run, transactions requiring\n * further modifications are identified. The method iteratively updates these transactions\n * and performs subsequent dry runs until all dependencies for each transaction are satisfied.\n *\n * @param transactionRequests - Array of transaction request objects.\n * @returns A promise that resolves to an array of results for each transaction.\n */\n async estimateMultipleTxDependencies(\n transactionRequests: TransactionRequest[]\n ): Promise<EstimateTxDependenciesReturns[]> {\n const results: EstimateTxDependenciesReturns[] = transactionRequests.map(() => ({\n receipts: [],\n outputVariables: 0,\n missingContractIds: [],\n dryrunStatus: undefined,\n }));\n\n const allRequests = clone(transactionRequests);\n\n // Map of original request index to its serialized transaction (for ScriptTransactionRequest only)\n const serializedTransactionsMap = new Map();\n\n // Prepare ScriptTransactionRequests and their indices\n allRequests.forEach((req, index) => {\n if (req.type === TransactionType.Script) {\n serializedTransactionsMap.set(index, hexlify(req.toTransactionBytes()));\n }\n });\n\n // Indices of ScriptTransactionRequests\n let transactionsToProcess = Array.from(serializedTransactionsMap.keys());\n let attempt = 0;\n\n while (transactionsToProcess.length > 0 && attempt < MAX_RETRIES) {\n const encodedTransactions = transactionsToProcess.map((index) =>\n serializedTransactionsMap.get(index)\n );\n const dryRunResults = await this.operations.dryRun({\n encodedTransactions,\n utxoValidation: false,\n });\n\n const nextRoundTransactions = [];\n\n for (let i = 0; i < dryRunResults.dryRun.length; i++) {\n const requestIdx = transactionsToProcess[i];\n const { receipts: rawReceipts, status } = dryRunResults.dryRun[i];\n const result = results[requestIdx];\n result.receipts = rawReceipts.map(processGqlReceipt);\n result.dryrunStatus = status;\n const { missingOutputVariables, missingOutputContractIds } = getReceiptsWithMissingData(\n result.receipts\n );\n const hasMissingOutputs =\n missingOutputVariables.length > 0 || missingOutputContractIds.length > 0;\n const request = allRequests[requestIdx];\n if (hasMissingOutputs && request?.type === TransactionType.Script) {\n result.outputVariables += missingOutputVariables.length;\n request.addVariableOutputs(missingOutputVariables.length);\n missingOutputContractIds.forEach(({ contractId }) => {\n request.addContractInputAndOutput(Address.fromString(contractId));\n result.missingContractIds.push(contractId);\n });\n const { maxFee } = await this.estimateTxGasAndFee({\n transactionRequest: request,\n });\n request.maxFee = maxFee;\n // Prepare for the next round of dry run\n serializedTransactionsMap.set(requestIdx, hexlify(request.toTransactionBytes()));\n nextRoundTransactions.push(requestIdx);\n }\n }\n\n transactionsToProcess = nextRoundTransactions;\n attempt += 1;\n }\n\n return results;\n }\n\n async dryRunMultipleTransactions(\n transactionRequests: TransactionRequest[],\n { utxoValidation, estimateTxDependencies = true }: ProviderCallParams = {}\n ): Promise<CallResult[]> {\n if (estimateTxDependencies) {\n return this.estimateMultipleTxDependencies(transactionRequests);\n }\n const encodedTransactions = transactionRequests.map((tx) => hexlify(tx.toTransactionBytes()));\n const { dryRun: dryRunStatuses } = await this.operations.dryRun({\n encodedTransactions,\n utxoValidation: utxoValidation || false,\n });\n\n const results = dryRunStatuses.map(({ receipts: rawReceipts, status }) => {\n const receipts = rawReceipts.map(processGqlReceipt);\n return { receipts, dryrunStatus: status };\n });\n\n return results;\n }\n\n /**\n * Estimates the transaction gas and fee based on the provided transaction request.\n * @param transactionRequest - The transaction request object.\n * @returns An object containing the estimated minimum gas, minimum fee, maximum gas, and maximum fee.\n */\n async estimateTxGasAndFee(params: { transactionRequest: TransactionRequest; gasPrice?: BN }) {\n const { transactionRequest } = params;\n let { gasPrice } = params;\n\n const chainInfo = this.getChain();\n const { gasPriceFactor, maxGasPerTx } = this.getGasConfig();\n\n const minGas = transactionRequest.calculateMinGas(chainInfo);\n if (!gasPrice) {\n gasPrice = await this.estimateGasPrice(10);\n }\n\n const minFee = calculateGasFee({\n gasPrice: bn(gasPrice),\n gas: minGas,\n priceFactor: gasPriceFactor,\n tip: transactionRequest.tip,\n }).add(1);\n\n let gasLimit = bn(0);\n\n // Only Script transactions consume gas\n if (transactionRequest.type === TransactionType.Script) {\n // If the gasLimit is set to 0, it means we need to estimate it.\n gasLimit = transactionRequest.gasLimit;\n if (transactionRequest.gasLimit.eq(0)) {\n transactionRequest.gasLimit = minGas;\n\n /*\n * Adjusting the gasLimit of a transaction (TX) impacts its maxGas.\n * Consequently, this affects the maxFee, as it is derived from the maxGas. To accurately estimate the\n * gasLimit for a transaction, especially when the exact gas consumption is uncertain (as in an estimation dry-run),\n * the following steps are required:\n * 1 - Initially, set the gasLimit using the calculated minGas.\n * 2 - Based on this initial gasLimit, calculate the maxGas.\n * 3 - Get the maximum gas per transaction allowed by the chain, and subtract the previously calculated maxGas from this limit.\n * 4 - The result of this subtraction should then be adopted as the new, definitive gasLimit.\n * 5 - Recalculate the maxGas with the updated gasLimit. This new maxGas is then used to compute the maxFee.\n * 6 - The calculated maxFee represents the safe, estimated cost required to fund the transaction.\n */\n transactionRequest.gasLimit = maxGasPerTx.sub(\n transactionRequest.calculateMaxGas(chainInfo, minGas)\n );\n\n gasLimit = transactionRequest.gasLimit;\n }\n }\n const maxGas = transactionRequest.calculateMaxGas(chainInfo, minGas);\n const maxFee = calculateGasFee({\n gasPrice: bn(gasPrice),\n gas: maxGas,\n priceFactor: gasPriceFactor,\n tip: transactionRequest.tip,\n }).add(1);\n\n return {\n minGas,\n minFee,\n maxGas,\n maxFee,\n gasPrice,\n gasLimit,\n };\n }\n\n /**\n * Executes a signed transaction without applying the states changes\n * on the chain.\n *\n * If the transaction is missing any dependencies,\n * the transaction will be mutated and those dependencies will be added\n *\n * @param transactionRequestLike - The transaction request object.\n * @returns A promise that resolves to the call result object.\n */\n async simulate(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true }: EstimateTransactionParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n return this.estimateTxDependencies(transactionRequest);\n }\n const encodedTransactions = [hexlify(transactionRequest.toTransactionBytes())];\n\n const { dryRun: dryRunStatuses } = await this.operations.dryRun({\n encodedTransactions,\n utxoValidation: true,\n });\n\n const callResult = dryRunStatuses.map((dryRunStatus) => {\n const { id, receipts, status } = dryRunStatus;\n\n const processedReceipts = receipts.map(processGqlReceipt);\n\n return { id, receipts: processedReceipts, status };\n });\n\n return { receipts: callResult[0].receipts };\n }\n\n /**\n * Returns a transaction cost to enable user\n * to set gasLimit and also reserve balance amounts\n * on the the transaction.\n *\n * @privateRemarks\n * The tolerance is add on top of the gasUsed calculated\n * from the node, this create a safe margin costs like\n * change states on transfer that don't occur on the dryRun\n * transaction. The default value is 0.2 or 20%\n *\n * @param transactionRequestLike - The transaction request object.\n * @param tolerance - The tolerance to add on top of the gasUsed.\n * @returns A promise that resolves to the transaction cost object.\n */\n async getTransactionCost(\n transactionRequestLike: TransactionRequestLike,\n { resourcesOwner, signatureCallback, quantitiesToContract = [] }: TransactionCostParams = {}\n ): Promise<TransactionCost> {\n const txRequestClone = clone(transactionRequestify(transactionRequestLike));\n const isScriptTransaction = txRequestClone.type === TransactionType.Script;\n const baseAssetId = this.getBaseAssetId();\n\n // Fund with fake UTXOs to avoid not enough funds error\n // Getting coin quantities from amounts being transferred\n const coinOutputsQuantities = txRequestClone.getCoinOutputsQuantities();\n // Combining coin quantities from amounts being transferred and forwarding to contracts\n const allQuantities = mergeQuantities(coinOutputsQuantities, quantitiesToContract);\n // Funding transaction with fake utxos\n txRequestClone.fundWithFakeUtxos(allQuantities, baseAssetId, resourcesOwner?.address);\n\n /**\n * Estimate predicates gasUsed\n */\n // Remove gasLimit to avoid gasLimit when estimating predicates\n txRequestClone.maxFee = bn(0);\n if (isScriptTransaction) {\n txRequestClone.gasLimit = bn(0);\n }\n\n /**\n * The fake utxos added above can be from a predicate\n * If the resources owner is a predicate,\n * we need to populate the resources with the predicate's data\n * so that predicate estimation can happen.\n */\n if (resourcesOwner && 'populateTransactionPredicateData' in resourcesOwner) {\n (resourcesOwner as Predicate<[]>).populateTransactionPredicateData(txRequestClone);\n }\n\n const signedRequest = clone(txRequestClone) as ScriptTransactionRequest;\n\n let addedSignatures = 0;\n if (signatureCallback && isScriptTransaction) {\n const lengthBefore = signedRequest.witnesses.length;\n await signatureCallback(signedRequest);\n addedSignatures = signedRequest.witnesses.length - lengthBefore;\n }\n\n await this.estimatePredicates(signedRequest);\n\n /**\n * Calculate minGas and maxGas based on the real transaction\n */\n // eslint-disable-next-line prefer-const\n let { maxFee, maxGas, minFee, minGas, gasPrice, gasLimit } = await this.estimateTxGasAndFee({\n transactionRequest: signedRequest,\n });\n\n let receipts: TransactionResultReceipt[] = [];\n let missingContractIds: string[] = [];\n let outputVariables = 0;\n let gasUsed = bn(0);\n\n txRequestClone.updatePredicateGasUsed(signedRequest.inputs);\n\n txRequestClone.maxFee = maxFee;\n if (isScriptTransaction) {\n txRequestClone.gasLimit = gasLimit;\n if (signatureCallback) {\n await signatureCallback(txRequestClone);\n }\n\n const result = await this.estimateTxDependencies(txRequestClone);\n receipts = result.receipts;\n outputVariables = result.outputVariables;\n missingContractIds = result.missingContractIds;\n gasUsed = isScriptTransaction ? getGasUsedFromReceipts(receipts) : gasUsed;\n\n txRequestClone.gasLimit = gasUsed;\n\n ({ maxFee, maxGas, minFee, minGas, gasPrice } = await this.estimateTxGasAndFee({\n transactionRequest: txRequestClone,\n gasPrice,\n }));\n }\n\n return {\n requiredQuantities: allQuantities,\n receipts,\n gasUsed,\n gasPrice,\n minGas,\n maxGas,\n minFee,\n maxFee,\n outputVariables,\n missingContractIds,\n addedSignatures,\n estimatedPredicates: txRequestClone.inputs,\n };\n }\n\n async getResourcesForTransaction(\n owner: string | AbstractAddress,\n transactionRequestLike: TransactionRequestLike,\n quantitiesToContract: CoinQuantity[] = []\n ) {\n const ownerAddress = Address.fromAddressOrString(owner);\n const transactionRequest = transactionRequestify(clone(transactionRequestLike));\n const transactionCost = await this.getTransactionCost(transactionRequest, {\n quantitiesToContract,\n });\n\n // Add the required resources to the transaction from the owner\n transactionRequest.addResources(\n await this.getResourcesToSpend(ownerAddress, transactionCost.requiredQuantities)\n );\n // Refetch transaction costs with the new resources\n // TODO: we could find a way to avoid fetch estimatePredicates again, by returning the transaction or\n // returning a specific gasUsed by the predicate.\n // Also for the dryRun we could have the same issue as we are going to run twice the dryRun and the\n // estimateTxDependencies as we don't have access to the transaction, maybe returning the transaction would\n // be better.\n const { requiredQuantities, ...txCost } = await this.getTransactionCost(transactionRequest, {\n quantitiesToContract,\n });\n const resources = await this.getResourcesToSpend(ownerAddress, requiredQuantities);\n\n return {\n resources,\n requiredQuantities,\n ...txCost,\n };\n }\n\n /**\n * Returns coins for the given owner.\n */\n async getCoins(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** The asset ID of coins to get */\n assetId?: BytesLike,\n /** Pagination arguments */\n paginationArgs?: CursorPaginationArgs\n ): Promise<Coin[]> {\n const ownerAddress = Address.fromAddressOrString(owner);\n const result = await this.operations.getCoins({\n first: 10,\n ...paginationArgs,\n filter: { owner: ownerAddress.toB256(), assetId: assetId && hexlify(assetId) },\n });\n\n const coins = result.coins.edges.map((edge) => edge.node);\n\n return coins.map((coin) => ({\n id: coin.utxoId,\n assetId: coin.assetId,\n amount: bn(coin.amount),\n owner: Address.fromAddressOrString(coin.owner),\n blockCreated: bn(coin.blockCreated),\n txCreatedIdx: bn(coin.txCreatedIdx),\n }));\n }\n\n /**\n * Returns resources for the given owner satisfying the spend query.\n *\n * @param owner - The address to get resources for.\n * @param quantities - The quantities to get.\n * @param excludedIds - IDs of excluded resources from the selection.\n * @returns A promise that resolves to the resources.\n */\n async getResourcesToSpend(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** The quantities to get */\n quantities: CoinQuantityLike[],\n /** IDs of excluded resources from the selection. */\n excludedIds?: ExcludeResourcesOption\n ): Promise<Resource[]> {\n const ownerAddress = Address.fromAddressOrString(owner);\n const excludeInput = {\n messages: excludedIds?.messages?.map((nonce) => hexlify(nonce)) || [],\n utxos: excludedIds?.utxos?.map((id) => hexlify(id)) || [],\n };\n\n if (this.cache) {\n const uniqueUtxos = new Set(\n excludeInput.utxos.concat(this.cache?.getActiveData().map((id) => hexlify(id)))\n );\n excludeInput.utxos = Array.from(uniqueUtxos);\n }\n const coinsQuery = {\n owner: ownerAddress.toB256(),\n queryPerAsset: quantities\n .map(coinQuantityfy)\n .map(({ assetId, amount, max: maxPerAsset }) => ({\n assetId: hexlify(assetId),\n amount: amount.toString(10),\n max: maxPerAsset ? maxPerAsset.toString(10) : undefined,\n })),\n excludedIds: excludeInput,\n };\n\n const result = await this.operations.getCoinsToSpend(coinsQuery);\n\n const coins = result.coinsToSpend\n .flat()\n .map((coin) => {\n switch (coin.__typename) {\n case 'MessageCoin':\n return {\n amount: bn(coin.amount),\n assetId: coin.assetId,\n daHeight: bn(coin.daHeight),\n sender: Address.fromAddressOrString(coin.sender),\n recipient: Address.fromAddressOrString(coin.recipient),\n nonce: coin.nonce,\n } as MessageCoin;\n case 'Coin':\n return {\n id: coin.utxoId,\n amount: bn(coin.amount),\n assetId: coin.assetId,\n owner: Address.fromAddressOrString(coin.owner),\n blockCreated: bn(coin.blockCreated),\n txCreatedIdx: bn(coin.txCreatedIdx),\n } as Coin;\n default:\n return null;\n }\n })\n .filter((v) => !!v) as Array<Resource>;\n\n return coins;\n }\n\n /**\n * Returns block matching the given ID or height.\n *\n * @param idOrHeight - ID or height of the block.\n * @returns A promise that resolves to the block.\n */\n async getBlock(\n /** ID or height of the block */\n idOrHeight: string | number | 'latest'\n ): Promise<Block | null> {\n let variables;\n if (typeof idOrHeight === 'number') {\n variables = { height: bn(idOrHeight).toString(10) };\n } else if (idOrHeight === 'latest') {\n variables = { height: (await this.getBlockNumber()).toString(10) };\n } else if (idOrHeight.length === 66) {\n variables = { blockId: idOrHeight };\n } else {\n variables = { blockId: bn(idOrHeight).toString(10) };\n }\n\n const { block } = await this.operations.getBlock(variables);\n\n if (!block) {\n return null;\n }\n\n return {\n id: block.id,\n height: bn(block.height),\n time: block.header.time,\n transactionIds: block.transactions.map((tx) => tx.id),\n };\n }\n\n /**\n * Returns all the blocks matching the given parameters.\n *\n * @param params - The parameters to query blocks.\n * @returns A promise that resolves to the blocks.\n */\n async getBlocks(params: GqlGetBlocksQueryVariables): Promise<Block[]> {\n const { blocks: fetchedData } = await this.operations.getBlocks(params);\n\n const blocks: Block[] = fetchedData.edges.map(({ node: block }) => ({\n id: block.id,\n height: bn(block.height),\n time: block.header.time,\n transactionIds: block.transactions.map((tx) => tx.id),\n }));\n\n return blocks;\n }\n\n /**\n * Returns block matching the given ID or type, including transaction data.\n *\n * @param idOrHeight - ID or height of the block.\n * @returns A promise that resolves to the block.\n */\n async getBlockWithTransactions(\n /** ID or height of the block */\n idOrHeight: string | number | 'latest'\n ): Promise<(Block & { transactions: Transaction[] }) | null> {\n let variables;\n if (typeof idOrHeight === 'number') {\n variables = { blockHeight: bn(idOrHeight).toString(10) };\n } else if (idOrHeight === 'latest') {\n variables = { blockHeight: (await this.getBlockNumber()).toString() };\n } else {\n variables = { blockId: idOrHeight };\n }\n\n const { block } = await this.operations.getBlockWithTransactions(variables);\n\n if (!block) {\n return null;\n }\n\n return {\n id: block.id,\n height: bn(block.height, 10),\n time: block.header.time,\n transactionIds: block.transactions.map((tx) => tx.id),\n transactions: block.transactions.map(\n (tx) => new TransactionCoder().decode(arrayify(tx.rawPayload), 0)?.[0]\n ),\n };\n }\n\n /**\n * Get transaction with the given ID.\n *\n * @param transactionId - ID of the transaction.\n * @returns A promise that resolves to the transaction.\n */\n async getTransaction<TTransactionType = void>(\n transactionId: string\n ): Promise<Transaction<TTransactionType> | null> {\n const { transaction } = await this.operations.getTransaction({ transactionId });\n if (!transaction) {\n return null;\n }\n return new TransactionCoder().decode(\n arrayify(transaction.rawPayload),\n 0\n )?.[0] as Transaction<TTransactionType>;\n }\n\n /**\n * Get deployed contract with the given ID.\n *\n * @param contractId - ID of the contract.\n * @returns A promise that resolves to the contract.\n */\n async getContract(contractId: string): Promise<ContractResult | null> {\n const { contract } = await this.operations.getContract({ contractId });\n if (!contract) {\n return null;\n }\n return contract;\n }\n\n /**\n * Returns the balance for the given contract for the given asset ID.\n *\n * @param contractId - The contract ID to get the balance for.\n * @param assetId - The asset ID of coins to get.\n * @returns A promise that resolves to the balance.\n */\n async getContractBalance(\n /** The contract ID to get the balance for */\n contractId: string | AbstractAddress,\n /** The asset ID of coins to get */\n assetId: BytesLike\n ): Promise<BN> {\n const { contractBalance } = await this.operations.getContractBalance({\n contract: Address.fromAddressOrString(contractId).toB256(),\n asset: hexlify(assetId),\n });\n return bn(contractBalance.amount, 10);\n }\n\n /**\n * Returns the balance for the given owner for the given asset ID.\n *\n * @param owner - The address to get coins for.\n * @param assetId - The asset ID of coins to get.\n * @returns A promise that resolves to the balance.\n */\n async getBalance(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** The asset ID of coins to get */\n assetId: BytesLike\n ): Promise<BN> {\n const { balance } = await this.operations.getBalance({\n owner: Address.fromAddressOrString(owner).toB256(),\n assetId: hexlify(assetId),\n });\n return bn(balance.amount, 10);\n }\n\n /**\n * Returns balances for the given owner.\n *\n * @param owner - The address to get coins for.\n * @param paginationArgs - Pagination arguments.\n * @returns A promise that resolves to the balances.\n */\n async getBalances(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** Pagination arguments */\n paginationArgs?: CursorPaginationArgs\n ): Promise<CoinQuantity[]> {\n const result = await this.operations.getBalances({\n first: 10,\n ...paginationArgs,\n filter: { owner: Address.fromAddressOrString(owner).toB256() },\n });\n\n const balances = result.balances.edges.map((edge) => edge.node);\n\n return balances.map((balance) => ({\n assetId: balance.assetId,\n amount: bn(balance.amount),\n }));\n }\n\n /**\n * Returns message for the given address.\n *\n * @param address - The address to get message from.\n * @param paginationArgs - Pagination arguments.\n * @returns A promise that resolves to the messages.\n */\n async getMessages(\n /** The address to get message from */\n address: string | AbstractAddress,\n /** Pagination arguments */\n paginationArgs?: CursorPaginationArgs\n ): Promise<Message[]> {\n const result = await this.operations.getMessages({\n first: 10,\n ...paginationArgs,\n owner: Address.fromAddressOrString(address).toB256(),\n });\n\n const messages = result.messages.edges.map((edge) => edge.node);\n\n return messages.map((message) => ({\n messageId: InputMessageCoder.getMessageId({\n sender: message.sender,\n recipient: message.recipient,\n nonce: message.nonce,\n amount: bn(message.amount),\n data: message.data,\n }),\n sender: Address.fromAddressOrString(message.sender),\n recipient: Address.fromAddressOrString(message.recipient),\n nonce: message.nonce,\n amount: bn(message.amount),\n data: InputMessageCoder.decodeData(message.data),\n daHeight: bn(message.daHeight),\n }));\n }\n\n /**\n * Returns Message Proof for given transaction id and the message id from MessageOut receipt.\n *\n * @param transactionId - The transaction to get message from.\n * @param messageId - The message id from MessageOut receipt.\n * @param commitBlockId - The commit block id.\n * @param commitBlockHeight - The commit block height.\n * @returns A promise that resolves to the message proof.\n */\n async getMessageProof(\n /** The transaction to get message from */\n transactionId: string,\n nonce: string,\n commitBlockId?: string,\n commitBlockHeight?: BN\n ): Promise<MessageProof | null> {\n let inputObject: {\n /** The transaction to get message from */\n transactionId: string;\n /** The message id from MessageOut receipt */\n nonce: string;\n commitBlockId?: string;\n commitBlockHeight?: string;\n } = {\n transactionId,\n nonce,\n };\n\n if (commitBlockId && commitBlockHeight) {\n throw new FuelError(\n ErrorCode.INVALID_INPUT_PARAMETERS,\n 'commitBlockId and commitBlockHeight cannot be used together'\n );\n }\n\n if (commitBlockId) {\n inputObject = {\n ...inputObject,\n commitBlockId,\n };\n }\n\n if (commitBlockHeight) {\n inputObject = {\n ...inputObject,\n // Conver BN into a number string required on the query\n // This should problably be fixed on the fuel client side\n commitBlockHeight: commitBlockHeight.toNumber().toString(),\n };\n }\n\n const result = await this.operations.getMessageProof(inputObject);\n\n if (!result.messageProof) {\n return null;\n }\n\n const {\n messageProof,\n messageBlockHeader,\n commitBlockHeader,\n blockProof,\n sender,\n recipient,\n amount,\n data,\n } = result.messageProof;\n\n return {\n messageProof: {\n proofIndex: bn(messageProof.proofIndex),\n proofSet: messageProof.proofSet,\n },\n blockProof: {\n proofIndex: bn(blockProof.proofIndex),\n proofSet: blockProof.proofSet,\n },\n messageBlockHeader: {\n id: messageBlockHeader.id,\n daHeight: bn(messageBlockHeader.daHeight),\n transactionsCount: bn(messageBlockHeader.transactionsCount),\n transactionsRoot: messageBlockHeader.transactionsRoot,\n height: bn(messageBlockHeader.height),\n prevRoot: messageBlockHeader.prevRoot,\n time: messageBlockHeader.time,\n applicationHash: messageBlockHeader.applicationHash,\n messageReceiptCount: bn(messageBlockHeader.messageReceiptCount),\n messageOutboxRoot: messageBlockHeader.messageOutboxRoot,\n consensusParametersVersion: messageBlockHeader.consensusParametersVersion,\n eventInboxRoot: messageBlockHeader.eventInboxRoot,\n stateTransitionBytecodeVersion: messageBlockHeader.stateTransitionBytecodeVersion,\n },\n commitBlockHeader: {\n id: commitBlockHeader.id,\n daHeight: bn(commitBlockHeader.daHeight),\n transactionsCount: bn(commitBlockHeader.transactionsCount),\n transactionsRoot: commitBlockHeader.transactionsRoot,\n height: bn(commitBlockHeader.height),\n prevRoot: commitBlockHeader.prevRoot,\n time: commitBlockHeader.time,\n applicationHash: commitBlockHeader.applicationHash,\n messageReceiptCount: bn(commitBlockHeader.messageReceiptCount),\n messageOutboxRoot: commitBlockHeader.messageOutboxRoot,\n consensusParametersVersion: commitBlockHeader.consensusParametersVersion,\n eventInboxRoot: commitBlockHeader.eventInboxRoot,\n stateTransitionBytecodeVersion: commitBlockHeader.stateTransitionBytecodeVersion,\n },\n sender: Address.fromAddressOrString(sender),\n recipient: Address.fromAddressOrString(recipient),\n nonce,\n amount: bn(amount),\n data,\n };\n }\n\n async getLatestGasPrice(): Promise<BN> {\n const { latestGasPrice } = await this.operations.getLatestGasPrice();\n return bn(latestGasPrice.gasPrice);\n }\n\n async estimateGasPrice(blockHorizon: number): Promise<BN> {\n const { estimateGasPrice } = await this.operations.estimateGasPrice({\n blockHorizon: String(blockHorizon),\n });\n return bn(estimateGasPrice.gasPrice);\n }\n\n /**\n * Returns Message Proof for given transaction id and the message id from MessageOut receipt.\n *\n * @param nonce - The nonce of the message to get status from.\n * @returns A promise that resolves to the message status\n */\n async getMessageStatus(\n /** The nonce of the message to get status from */\n nonce: string\n ): Promise<MessageStatus> {\n const result = await this.operations.getMessageStatus({ nonce });\n return result.messageStatus;\n }\n\n /**\n * Lets you produce blocks with custom timestamps and the block number of the last block produced.\n *\n * @param amount - The amount of blocks to produce\n * @param startTime - The UNIX timestamp (milliseconds) to set for the first produced block\n * @returns A promise that resolves to the block number of the last produced block.\n */\n async produceBlocks(amount: number, startTime?: number) {\n const { produceBlocks: latestBlockHeight } = await this.operations.produceBlocks({\n blocksToProduce: bn(amount).toString(10),\n startTimestamp: startTime ? DateTime.fromUnixMilliseconds(startTime).toTai64() : undefined,\n });\n return bn(latestBlockHeight);\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async getTransactionResponse(transactionId: string): Promise<TransactionResponse> {\n return new TransactionResponse(transactionId, this);\n }\n}\n","import type { DocumentNode } from 'graphql';\nimport gql from 'graphql-tag';\nexport type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n Address: string;\n AssetId: string;\n BlockId: string;\n Bytes32: string;\n ContractId: string;\n HexString: string;\n Nonce: string;\n Salt: string;\n Signature: any;\n Tai64Timestamp: string;\n TransactionId: string;\n TxPointer: any;\n U16: any;\n U32: any;\n U64: string;\n UtxoId: string;\n};\n\nexport type GqlBalance = {\n __typename: 'Balance';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n owner: Scalars['Address'];\n};\n\nexport type GqlBalanceConnection = {\n __typename: 'BalanceConnection';\n /** A list of edges. */\n edges: Array<GqlBalanceEdge>;\n /** A list of nodes. */\n nodes: Array<GqlBalance>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlBalanceEdge = {\n __typename: 'BalanceEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlBalance;\n};\n\nexport type GqlBalanceFilterInput = {\n /** Filter coins based on the `owner` field */\n owner: Scalars['Address'];\n};\n\nexport type GqlBlock = {\n __typename: 'Block';\n consensus: GqlConsensus;\n header: GqlHeader;\n height: Scalars['U32'];\n id: Scalars['BlockId'];\n transactions: Array<GqlTransaction>;\n};\n\nexport type GqlBlockConnection = {\n __typename: 'BlockConnection';\n /** A list of edges. */\n edges: Array<GqlBlockEdge>;\n /** A list of nodes. */\n nodes: Array<GqlBlock>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlBlockEdge = {\n __typename: 'BlockEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlBlock;\n};\n\n/** Breakpoint, defined as a tuple of contract ID and relative PC offset inside it */\nexport type GqlBreakpoint = {\n contract: Scalars['ContractId'];\n pc: Scalars['U64'];\n};\n\nexport type GqlChainInfo = {\n __typename: 'ChainInfo';\n consensusParameters: GqlConsensusParameters;\n daHeight: Scalars['U64'];\n gasCosts: GqlGasCosts;\n latestBlock: GqlBlock;\n name: Scalars['String'];\n};\n\nexport type GqlChangeOutput = {\n __typename: 'ChangeOutput';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n to: Scalars['Address'];\n};\n\nexport type GqlCoin = {\n __typename: 'Coin';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n /** TxPointer - the height of the block this coin was created in */\n blockCreated: Scalars['U32'];\n owner: Scalars['Address'];\n /** TxPointer - the index of the transaction that created this coin */\n txCreatedIdx: Scalars['U16'];\n utxoId: Scalars['UtxoId'];\n};\n\nexport type GqlCoinConnection = {\n __typename: 'CoinConnection';\n /** A list of edges. */\n edges: Array<GqlCoinEdge>;\n /** A list of nodes. */\n nodes: Array<GqlCoin>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlCoinEdge = {\n __typename: 'CoinEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlCoin;\n};\n\nexport type GqlCoinFilterInput = {\n /** Returns coins only with `asset_id`. */\n assetId?: InputMaybe<Scalars['AssetId']>;\n /** Returns coins owned by the `owner`. */\n owner: Scalars['Address'];\n};\n\nexport type GqlCoinOutput = {\n __typename: 'CoinOutput';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n to: Scalars['Address'];\n};\n\n/** The schema analog of the [`coins::CoinType`]. */\nexport type GqlCoinType = GqlCoin | GqlMessageCoin;\n\nexport type GqlConsensus = GqlGenesis | GqlPoAConsensus;\n\nexport type GqlConsensusParameters = {\n __typename: 'ConsensusParameters';\n baseAssetId: Scalars['AssetId'];\n blockGasLimit: Scalars['U64'];\n chainId: Scalars['U64'];\n contractParams: GqlContractParameters;\n feeParams: GqlFeeParameters;\n gasCosts: GqlGasCosts;\n predicateParams: GqlPredicateParameters;\n privilegedAddress: Scalars['Address'];\n scriptParams: GqlScriptParameters;\n txParams: GqlTxParameters;\n version: GqlConsensusParametersVersion;\n};\n\nexport enum GqlConsensusParametersVersion {\n V1 = 'V1'\n}\n\nexport type GqlContract = {\n __typename: 'Contract';\n bytecode: Scalars['HexString'];\n id: Scalars['ContractId'];\n salt: Scalars['Salt'];\n};\n\nexport type GqlContractBalance = {\n __typename: 'ContractBalance';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n contract: Scalars['ContractId'];\n};\n\nexport type GqlContractBalanceConnection = {\n __typename: 'ContractBalanceConnection';\n /** A list of edges. */\n edges: Array<GqlContractBalanceEdge>;\n /** A list of nodes. */\n nodes: Array<GqlContractBalance>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlContractBalanceEdge = {\n __typename: 'ContractBalanceEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlContractBalance;\n};\n\nexport type GqlContractBalanceFilterInput = {\n /** Filter assets based on the `contractId` field */\n contract: Scalars['ContractId'];\n};\n\nexport type GqlContractCreated = {\n __typename: 'ContractCreated';\n contract: Scalars['ContractId'];\n stateRoot: Scalars['Bytes32'];\n};\n\nexport type GqlContractOutput = {\n __typename: 'ContractOutput';\n balanceRoot: Scalars['Bytes32'];\n inputIndex: Scalars['U16'];\n stateRoot: Scalars['Bytes32'];\n};\n\nexport type GqlContractParameters = {\n __typename: 'ContractParameters';\n contractMaxSize: Scalars['U64'];\n maxStorageSlots: Scalars['U64'];\n version: GqlContractParametersVersion;\n};\n\nexport enum GqlContractParametersVersion {\n V1 = 'V1'\n}\n\nexport type GqlDependentCost = GqlHeavyOperation | GqlLightOperation;\n\nexport type GqlDryRunFailureStatus = {\n __typename: 'DryRunFailureStatus';\n programState?: Maybe<GqlProgramState>;\n reason: Scalars['String'];\n receipts: Array<GqlReceipt>;\n};\n\nexport type GqlDryRunSuccessStatus = {\n __typename: 'DryRunSuccessStatus';\n programState?: Maybe<GqlProgramState>;\n receipts: Array<GqlReceipt>;\n};\n\nexport type GqlDryRunTransactionExecutionStatus = {\n __typename: 'DryRunTransactionExecutionStatus';\n id: Scalars['TransactionId'];\n receipts: Array<GqlReceipt>;\n status: GqlDryRunTransactionStatus;\n};\n\nexport type GqlDryRunTransactionStatus = GqlDryRunFailureStatus | GqlDryRunSuccessStatus;\n\nexport type GqlEstimateGasPrice = {\n __typename: 'EstimateGasPrice';\n gasPrice: Scalars['U64'];\n};\n\nexport type GqlExcludeInput = {\n /** Messages to exclude from the selection. */\n messages: Array<Scalars['Nonce']>;\n /** Utxos to exclude from the selection. */\n utxos: Array<Scalars['UtxoId']>;\n};\n\nexport type GqlFailureStatus = {\n __typename: 'FailureStatus';\n block: GqlBlock;\n programState?: Maybe<GqlProgramState>;\n reason: Scalars['String'];\n receipts: Array<GqlReceipt>;\n time: Scalars['Tai64Timestamp'];\n transactionId: Scalars['TransactionId'];\n};\n\nexport type GqlFeeParameters = {\n __typename: 'FeeParameters';\n gasPerByte: Scalars['U64'];\n gasPriceFactor: Scalars['U64'];\n version: GqlFeeParametersVersion;\n};\n\nexport enum GqlFeeParametersVersion {\n V1 = 'V1'\n}\n\nexport type GqlGasCosts = {\n __typename: 'GasCosts';\n add: Scalars['U64'];\n addi: Scalars['U64'];\n aloc: Scalars['U64'];\n and: Scalars['U64'];\n andi: Scalars['U64'];\n bal: Scalars['U64'];\n bhei: Scalars['U64'];\n bhsh: Scalars['U64'];\n burn: Scalars['U64'];\n call: GqlDependentCost;\n cb: Scalars['U64'];\n ccp: GqlDependentCost;\n cfei: Scalars['U64'];\n cfsi: Scalars['U64'];\n contractRoot: GqlDependentCost;\n croo: GqlDependentCost;\n csiz: GqlDependentCost;\n div: Scalars['U64'];\n divi: Scalars['U64'];\n eck1: Scalars['U64'];\n ecr1: Scalars['U64'];\n ed19: Scalars['U64'];\n eq: Scalars['U64'];\n exp: Scalars['U64'];\n expi: Scalars['U64'];\n flag: Scalars['U64'];\n gm: Scalars['U64'];\n gt: Scalars['U64'];\n gtf: Scalars['U64'];\n ji: Scalars['U64'];\n jmp: Scalars['U64'];\n jmpb: Scalars['U64'];\n jmpf: Scalars['U64'];\n jne: Scalars['U64'];\n jneb: Scalars['U64'];\n jnef: Scalars['U64'];\n jnei: Scalars['U64'];\n jnzb: Scalars['U64'];\n jnzf: Scalars['U64'];\n jnzi: Scalars['U64'];\n k256: GqlDependentCost;\n lb: Scalars['U64'];\n ldc: GqlDependentCost;\n log: Scalars['U64'];\n logd: GqlDependentCost;\n lt: Scalars['U64'];\n lw: Scalars['U64'];\n mcl: GqlDependentCost;\n mcli: GqlDependentCost;\n mcp: GqlDependentCost;\n mcpi: GqlDependentCost;\n meq: GqlDependentCost;\n mint: Scalars['U64'];\n mldv: Scalars['U64'];\n mlog: Scalars['U64'];\n modOp: Scalars['U64'];\n modi: Scalars['U64'];\n moveOp: Scalars['U64'];\n movi: Scalars['U64'];\n mroo: Scalars['U64'];\n mul: Scalars['U64'];\n muli: Scalars['U64'];\n newStoragePerByte: Scalars['U64'];\n noop: Scalars['U64'];\n not: Scalars['U64'];\n or: Scalars['U64'];\n ori: Scalars['U64'];\n poph: Scalars['U64'];\n popl: Scalars['U64'];\n pshh: Scalars['U64'];\n pshl: Scalars['U64'];\n ret: Scalars['U64'];\n retd: GqlDependentCost;\n rvrt: Scalars['U64'];\n s256: GqlDependentCost;\n sb: Scalars['U64'];\n scwq: GqlDependentCost;\n sll: Scalars['U64'];\n slli: Scalars['U64'];\n smo: GqlDependentCost;\n srl: Scalars['U64'];\n srli: Scalars['U64'];\n srw: Scalars['U64'];\n srwq: GqlDependentCost;\n stateRoot: GqlDependentCost;\n sub: Scalars['U64'];\n subi: Scalars['U64'];\n sw: Scalars['U64'];\n sww: Scalars['U64'];\n swwq: GqlDependentCost;\n time: Scalars['U64'];\n tr: Scalars['U64'];\n tro: Scalars['U64'];\n version: GqlGasCostsVersion;\n vmInitialization: GqlDependentCost;\n wdam: Scalars['U64'];\n wdcm: Scalars['U64'];\n wddv: Scalars['U64'];\n wdmd: Scalars['U64'];\n wdml: Scalars['U64'];\n wdmm: Scalars['U64'];\n wdop: Scalars['U64'];\n wqam: Scalars['U64'];\n wqcm: Scalars['U64'];\n wqdv: Scalars['U64'];\n wqmd: Scalars['U64'];\n wqml: Scalars['U64'];\n wqmm: Scalars['U64'];\n wqop: Scalars['U64'];\n xor: Scalars['U64'];\n xori: Scalars['U64'];\n};\n\nexport enum GqlGasCostsVersion {\n V1 = 'V1'\n}\n\nexport type GqlGenesis = {\n __typename: 'Genesis';\n /**\n * The chain configs define what consensus type to use, what settlement layer to use,\n * rules of block validity, etc.\n */\n chainConfigHash: Scalars['Bytes32'];\n /** The Binary Merkle Tree root of all genesis coins. */\n coinsRoot: Scalars['Bytes32'];\n /** The Binary Merkle Tree root of state, balances, contracts code hash of each contract. */\n contractsRoot: Scalars['Bytes32'];\n /** The Binary Merkle Tree root of all genesis messages. */\n messagesRoot: Scalars['Bytes32'];\n};\n\nexport type GqlHeader = {\n __typename: 'Header';\n /** Hash of the application header. */\n applicationHash: Scalars['Bytes32'];\n /** The version of the consensus parameters used to create this block. */\n consensusParametersVersion: Scalars['U32'];\n /** The layer 1 height of messages and events to include since the last layer 1 block number. */\n daHeight: Scalars['U64'];\n /** Merkle root of inbox events in this block. */\n eventInboxRoot: Scalars['Bytes32'];\n /** Fuel block height. */\n height: Scalars['U32'];\n /** Hash of the header */\n id: Scalars['BlockId'];\n /** Merkle root of message receipts in this block. */\n messageOutboxRoot: Scalars['Bytes32'];\n /** Number of message receipts in this block. */\n messageReceiptCount: Scalars['U64'];\n /** Merkle root of all previous block header hashes. */\n prevRoot: Scalars['Bytes32'];\n /** The version of the state transition bytecode used to create this block. */\n stateTransitionBytecodeVersion: Scalars['U32'];\n /** The block producer time. */\n time: Scalars['Tai64Timestamp'];\n /** Number of transactions in this block. */\n transactionsCount: Scalars['U64'];\n /** Merkle root of transactions. */\n transactionsRoot: Scalars['Bytes32'];\n};\n\nexport type GqlHeavyOperation = {\n __typename: 'HeavyOperation';\n base: Scalars['U64'];\n gasPerUnit: Scalars['U64'];\n};\n\nexport type GqlInput = GqlInputCoin | GqlInputContract | GqlInputMessage;\n\nexport type GqlInputCoin = {\n __typename: 'InputCoin';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n owner: Scalars['Address'];\n predicate: Scalars['HexString'];\n predicateData: Scalars['HexString'];\n predicateGasUsed: Scalars['U64'];\n txPointer: Scalars['TxPointer'];\n utxoId: Scalars['UtxoId'];\n witnessIndex: Scalars['Int'];\n};\n\nexport type GqlInputContract = {\n __typename: 'InputContract';\n balanceRoot: Scalars['Bytes32'];\n contractId: Scalars['ContractId'];\n stateRoot: Scalars['Bytes32'];\n txPointer: Scalars['TxPointer'];\n utxoId: Scalars['UtxoId'];\n};\n\nexport type GqlInputMessage = {\n __typename: 'InputMessage';\n amount: Scalars['U64'];\n data: Scalars['HexString'];\n nonce: Scalars['Nonce'];\n predicate: Scalars['HexString'];\n predicateData: Scalars['HexString'];\n predicateGasUsed: Scalars['U64'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n witnessIndex: Scalars['U16'];\n};\n\nexport type GqlLatestGasPrice = {\n __typename: 'LatestGasPrice';\n blockHeight: Scalars['U32'];\n gasPrice: Scalars['U64'];\n};\n\nexport type GqlLightOperation = {\n __typename: 'LightOperation';\n base: Scalars['U64'];\n unitsPerGas: Scalars['U64'];\n};\n\nexport type GqlMerkleProof = {\n __typename: 'MerkleProof';\n proofIndex: Scalars['U64'];\n proofSet: Array<Scalars['Bytes32']>;\n};\n\nexport type GqlMessage = {\n __typename: 'Message';\n amount: Scalars['U64'];\n daHeight: Scalars['U64'];\n data: Scalars['HexString'];\n nonce: Scalars['Nonce'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n};\n\nexport type GqlMessageCoin = {\n __typename: 'MessageCoin';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n daHeight: Scalars['U64'];\n nonce: Scalars['Nonce'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n};\n\nexport type GqlMessageConnection = {\n __typename: 'MessageConnection';\n /** A list of edges. */\n edges: Array<GqlMessageEdge>;\n /** A list of nodes. */\n nodes: Array<GqlMessage>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlMessageEdge = {\n __typename: 'MessageEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlMessage;\n};\n\nexport type GqlMessageProof = {\n __typename: 'MessageProof';\n amount: Scalars['U64'];\n blockProof: GqlMerkleProof;\n commitBlockHeader: GqlHeader;\n data: Scalars['HexString'];\n messageBlockHeader: GqlHeader;\n messageProof: GqlMerkleProof;\n nonce: Scalars['Nonce'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n};\n\nexport enum GqlMessageState {\n NotFound = 'NOT_FOUND',\n Spent = 'SPENT',\n Unspent = 'UNSPENT'\n}\n\nexport type GqlMessageStatus = {\n __typename: 'MessageStatus';\n state: GqlMessageState;\n};\n\nexport type GqlMutation = {\n __typename: 'Mutation';\n /**\n * Resume execution of the VM instance after a breakpoint.\n * Runs until the next breakpoint or until the transaction completes.\n */\n continueTx: GqlRunResult;\n /** Execute a dry-run of multiple transactions using a fork of current state, no changes are committed. */\n dryRun: Array<GqlDryRunTransactionExecutionStatus>;\n /** End debugger session. */\n endSession: Scalars['Boolean'];\n /** Execute a single fuel-asm instruction. */\n execute: Scalars['Boolean'];\n /**\n * Sequentially produces `blocks_to_produce` blocks. The first block starts with\n * `start_timestamp`. If the block production in the [`crate::service::Config`] is\n * `Trigger::Interval { block_time }`, produces blocks with `block_time ` intervals between\n * them. The `start_timestamp` is the timestamp in seconds.\n */\n produceBlocks: Scalars['U32'];\n /** Reset the VM instance to the initial state. */\n reset: Scalars['Boolean'];\n /** Set a breakpoint for a VM instance. */\n setBreakpoint: Scalars['Boolean'];\n /** Set single-stepping mode for the VM instance. */\n setSingleStepping: Scalars['Boolean'];\n /**\n * Initialize a new debugger session, returning its ID.\n * A new VM instance is spawned for each session.\n * The session is run in a separate database transaction,\n * on top of the most recent node state.\n */\n startSession: Scalars['ID'];\n /**\n * Run a single transaction in given session until it\n * hits a breakpoint or completes.\n */\n startTx: GqlRunResult;\n /**\n * Submits transaction to the `TxPool`.\n *\n * Returns submitted transaction if the transaction is included in the `TxPool` without problems.\n */\n submit: GqlTransaction;\n};\n\n\nexport type GqlMutationContinueTxArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationDryRunArgs = {\n txs: Array<Scalars['HexString']>;\n utxoValidation?: InputMaybe<Scalars['Boolean']>;\n};\n\n\nexport type GqlMutationEndSessionArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationExecuteArgs = {\n id: Scalars['ID'];\n op: Scalars['String'];\n};\n\n\nexport type GqlMutationProduceBlocksArgs = {\n blocksToProduce: Scalars['U32'];\n startTimestamp?: InputMaybe<Scalars['Tai64Timestamp']>;\n};\n\n\nexport type GqlMutationResetArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationSetBreakpointArgs = {\n breakpoint: GqlBreakpoint;\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationSetSingleSteppingArgs = {\n enable: Scalars['Boolean'];\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationStartTxArgs = {\n id: Scalars['ID'];\n txJson: Scalars['String'];\n};\n\n\nexport type GqlMutationSubmitArgs = {\n tx: Scalars['HexString'];\n};\n\nexport type GqlNodeInfo = {\n __typename: 'NodeInfo';\n maxDepth: Scalars['U64'];\n maxTx: Scalars['U64'];\n nodeVersion: Scalars['String'];\n peers: Array<GqlPeerInfo>;\n utxoValidation: Scalars['Boolean'];\n vmBacktrace: Scalars['Boolean'];\n};\n\nexport type GqlOutput = GqlChangeOutput | GqlCoinOutput | GqlContractCreated | GqlContractOutput | GqlVariableOutput;\n\n/**\n * A separate `Breakpoint` type to be used as an output, as a single\n * type cannot act as both input and output type in async-graphql\n */\nexport type GqlOutputBreakpoint = {\n __typename: 'OutputBreakpoint';\n contract: Scalars['ContractId'];\n pc: Scalars['U64'];\n};\n\n/** Information about pagination in a connection */\nexport type GqlPageInfo = {\n __typename: 'PageInfo';\n /** When paginating forwards, the cursor to continue. */\n endCursor?: Maybe<Scalars['String']>;\n /** When paginating forwards, are there more items? */\n hasNextPage: Scalars['Boolean'];\n /** When paginating backwards, are there more items? */\n hasPreviousPage: Scalars['Boolean'];\n /** When paginating backwards, the cursor to continue. */\n startCursor?: Maybe<Scalars['String']>;\n};\n\nexport type GqlPeerInfo = {\n __typename: 'PeerInfo';\n /** The advertised multi-addrs that can be used to connect to this peer */\n addresses: Array<Scalars['String']>;\n /** The internal fuel p2p reputation of this peer */\n appScore: Scalars['Float'];\n /** The last reported height of the peer */\n blockHeight?: Maybe<Scalars['U32']>;\n /** The self-reported version of the client the peer is using */\n clientVersion?: Maybe<Scalars['String']>;\n /** The libp2p peer id */\n id: Scalars['String'];\n /** The last heartbeat from this peer in unix epoch time ms */\n lastHeartbeatMs: Scalars['U64'];\n};\n\nexport type GqlPoAConsensus = {\n __typename: 'PoAConsensus';\n /** Gets the signature of the block produced by `PoA` consensus. */\n signature: Scalars['Signature'];\n};\n\nexport type GqlPolicies = {\n __typename: 'Policies';\n maturity?: Maybe<Scalars['U32']>;\n maxFee?: Maybe<Scalars['U64']>;\n tip?: Maybe<Scalars['U64']>;\n witnessLimit?: Maybe<Scalars['U64']>;\n};\n\nexport type GqlPredicateParameters = {\n __typename: 'PredicateParameters';\n maxGasPerPredicate: Scalars['U64'];\n maxMessageDataLength: Scalars['U64'];\n maxPredicateDataLength: Scalars['U64'];\n maxPredicateLength: Scalars['U64'];\n version: GqlPredicateParametersVersion;\n};\n\nexport enum GqlPredicateParametersVersion {\n V1 = 'V1'\n}\n\nexport type GqlProgramState = {\n __typename: 'ProgramState';\n data: Scalars['HexString'];\n returnType: GqlReturnType;\n};\n\nexport type GqlQuery = {\n __typename: 'Query';\n balance: GqlBalance;\n balances: GqlBalanceConnection;\n block?: Maybe<GqlBlock>;\n blocks: GqlBlockConnection;\n chain: GqlChainInfo;\n /** Gets the coin by `utxo_id`. */\n coin?: Maybe<GqlCoin>;\n /** Gets all unspent coins of some `owner` maybe filtered with by `asset_id` per page. */\n coins: GqlCoinConnection;\n /**\n * For each `query_per_asset`, get some spendable coins(of asset specified by the query) owned by\n * `owner` that add up at least the query amount. The returned coins can be spent.\n * The number of coins is optimized to prevent dust accumulation.\n *\n * The query supports excluding and maximum the number of coins.\n *\n * Returns:\n * The list of spendable coins per asset from the query. The length of the result is\n * the same as the length of `query_per_asset`. The ordering of assets and `query_per_asset`\n * is the same.\n */\n coinsToSpend: Array<Array<GqlCoinType>>;\n contract?: Maybe<GqlContract>;\n contractBalance: GqlContractBalance;\n contractBalances: GqlContractBalanceConnection;\n estimateGasPrice: GqlEstimateGasPrice;\n /** Estimate the predicate gas for the provided transaction */\n estimatePredicates: GqlTransaction;\n /** Returns true when the GraphQL API is serving requests. */\n health: Scalars['Boolean'];\n latestGasPrice: GqlLatestGasPrice;\n /** Read read a range of memory bytes. */\n memory: Scalars['String'];\n message?: Maybe<GqlMessage>;\n messageProof?: Maybe<GqlMessageProof>;\n messageStatus: GqlMessageStatus;\n messages: GqlMessageConnection;\n nodeInfo: GqlNodeInfo;\n /** Read register value by index. */\n register: Scalars['U64'];\n transaction?: Maybe<GqlTransaction>;\n transactions: GqlTransactionConnection;\n transactionsByOwner: GqlTransactionConnection;\n};\n\n\nexport type GqlQueryBalanceArgs = {\n assetId: Scalars['AssetId'];\n owner: Scalars['Address'];\n};\n\n\nexport type GqlQueryBalancesArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n filter: GqlBalanceFilterInput;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryBlockArgs = {\n height?: InputMaybe<Scalars['U32']>;\n id?: InputMaybe<Scalars['BlockId']>;\n};\n\n\nexport type GqlQueryBlocksArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryCoinArgs = {\n utxoId: Scalars['UtxoId'];\n};\n\n\nexport type GqlQueryCoinsArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n filter: GqlCoinFilterInput;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryCoinsToSpendArgs = {\n excludedIds?: InputMaybe<GqlExcludeInput>;\n owner: Scalars['Address'];\n queryPerAsset: Array<GqlSpendQueryElementInput>;\n};\n\n\nexport type GqlQueryContractArgs = {\n id: Scalars['ContractId'];\n};\n\n\nexport type GqlQueryContractBalanceArgs = {\n asset: Scalars['AssetId'];\n contract: Scalars['ContractId'];\n};\n\n\nexport type GqlQueryContractBalancesArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n filter: GqlContractBalanceFilterInput;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryEstimateGasPriceArgs = {\n blockHorizon?: InputMaybe<Scalars['U32']>;\n};\n\n\nexport type GqlQueryEstimatePredicatesArgs = {\n tx: Scalars['HexString'];\n};\n\n\nexport type GqlQueryMemoryArgs = {\n id: Scalars['ID'];\n size: Scalars['U32'];\n start: Scalars['U32'];\n};\n\n\nexport type GqlQueryMessageArgs = {\n nonce: Scalars['Nonce'];\n};\n\n\nexport type GqlQueryMessageProofArgs = {\n commitBlockHeight?: InputMaybe<Scalars['U32']>;\n commitBlockId?: InputMaybe<Scalars['BlockId']>;\n nonce: Scalars['Nonce'];\n transactionId: Scalars['TransactionId'];\n};\n\n\nexport type GqlQueryMessageStatusArgs = {\n nonce: Scalars['Nonce'];\n};\n\n\nexport type GqlQueryMessagesArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n owner?: InputMaybe<Scalars['Address']>;\n};\n\n\nexport type GqlQueryRegisterArgs = {\n id: Scalars['ID'];\n register: Scalars['U32'];\n};\n\n\nexport type GqlQueryTransactionArgs = {\n id: Scalars['TransactionId'];\n};\n\n\nexport type GqlQueryTransactionsArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryTransactionsByOwnerArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n owner: Scalars['Address'];\n};\n\nexport type GqlReceipt = {\n __typename: 'Receipt';\n amount?: Maybe<Scalars['U64']>;\n assetId?: Maybe<Scalars['AssetId']>;\n /** Set in the case of a Panic receipt to indicate a missing contract input id */\n contractId?: Maybe<Scalars['ContractId']>;\n data?: Maybe<Scalars['HexString']>;\n digest?: Maybe<Scalars['Bytes32']>;\n gas?: Maybe<Scalars['U64']>;\n gasUsed?: Maybe<Scalars['U64']>;\n id?: Maybe<Scalars['ContractId']>;\n is?: Maybe<Scalars['U64']>;\n len?: Maybe<Scalars['U64']>;\n nonce?: Maybe<Scalars['Nonce']>;\n param1?: Maybe<Scalars['U64']>;\n param2?: Maybe<Scalars['U64']>;\n pc?: Maybe<Scalars['U64']>;\n ptr?: Maybe<Scalars['U64']>;\n ra?: Maybe<Scalars['U64']>;\n rb?: Maybe<Scalars['U64']>;\n rc?: Maybe<Scalars['U64']>;\n rd?: Maybe<Scalars['U64']>;\n reason?: Maybe<Scalars['U64']>;\n receiptType: GqlReceiptType;\n recipient?: Maybe<Scalars['Address']>;\n result?: Maybe<Scalars['U64']>;\n sender?: Maybe<Scalars['Address']>;\n subId?: Maybe<Scalars['Bytes32']>;\n to?: Maybe<Scalars['ContractId']>;\n toAddress?: Maybe<Scalars['Address']>;\n val?: Maybe<Scalars['U64']>;\n};\n\nexport enum GqlReceiptType {\n Burn = 'BURN',\n Call = 'CALL',\n Log = 'LOG',\n LogData = 'LOG_DATA',\n MessageOut = 'MESSAGE_OUT',\n Mint = 'MINT',\n Panic = 'PANIC',\n Return = 'RETURN',\n ReturnData = 'RETURN_DATA',\n Revert = 'REVERT',\n ScriptResult = 'SCRIPT_RESULT',\n Transfer = 'TRANSFER',\n TransferOut = 'TRANSFER_OUT'\n}\n\nexport enum GqlReturnType {\n Return = 'RETURN',\n ReturnData = 'RETURN_DATA',\n Revert = 'REVERT'\n}\n\nexport type GqlRunResult = {\n __typename: 'RunResult';\n breakpoint?: Maybe<GqlOutputBreakpoint>;\n jsonReceipts: Array<Scalars['String']>;\n state: GqlRunState;\n};\n\nexport enum GqlRunState {\n /** Stopped on a breakpoint */\n Breakpoint = 'BREAKPOINT',\n /** All breakpoints have been processed, and the program has terminated */\n Completed = 'COMPLETED'\n}\n\nexport type GqlScriptParameters = {\n __typename: 'ScriptParameters';\n maxScriptDataLength: Scalars['U64'];\n maxScriptLength: Scalars['U64'];\n version: GqlScriptParametersVersion;\n};\n\nexport enum GqlScriptParametersVersion {\n V1 = 'V1'\n}\n\nexport type GqlSpendQueryElementInput = {\n /** Target amount for the query. */\n amount: Scalars['U64'];\n /** Identifier of the asset to spend. */\n assetId: Scalars['AssetId'];\n /** The maximum number of currencies for selection. */\n max?: InputMaybe<Scalars['U32']>;\n};\n\nexport type GqlSqueezedOutStatus = {\n __typename: 'SqueezedOutStatus';\n reason: Scalars['String'];\n};\n\nexport type GqlSubmittedStatus = {\n __typename: 'SubmittedStatus';\n time: Scalars['Tai64Timestamp'];\n};\n\nexport type GqlSubscription = {\n __typename: 'Subscription';\n /**\n * Returns a stream of status updates for the given transaction id.\n * If the current status is [`TransactionStatus::Success`], [`TransactionStatus::SqueezedOut`]\n * or [`TransactionStatus::Failed`] the stream will return that and end immediately.\n * If the current status is [`TransactionStatus::Submitted`] this will be returned\n * and the stream will wait for a future update.\n *\n * This stream will wait forever so it's advised to use within a timeout.\n *\n * It is possible for the stream to miss an update if it is polled slower\n * then the updates arrive. In such a case the stream will close without\n * a status. If this occurs the stream can simply be restarted to return\n * the latest status.\n */\n statusChange: GqlTransactionStatus;\n /** Submits transaction to the `TxPool` and await either confirmation or failure. */\n submitAndAwait: GqlTransactionStatus;\n};\n\n\nexport type GqlSubscriptionStatusChangeArgs = {\n id: Scalars['TransactionId'];\n};\n\n\nexport type GqlSubscriptionSubmitAndAwaitArgs = {\n tx: Scalars['HexString'];\n};\n\nexport type GqlSuccessStatus = {\n __typename: 'SuccessStatus';\n block: GqlBlock;\n programState?: Maybe<GqlProgramState>;\n receipts: Array<GqlReceipt>;\n time: Scalars['Tai64Timestamp'];\n transactionId: Scalars['TransactionId'];\n};\n\nexport type GqlTransaction = {\n __typename: 'Transaction';\n bytecodeWitnessIndex?: Maybe<Scalars['U16']>;\n id: Scalars['TransactionId'];\n inputAssetIds?: Maybe<Array<Scalars['AssetId']>>;\n inputContract?: Maybe<GqlInputContract>;\n inputContracts?: Maybe<Array<Scalars['ContractId']>>;\n inputs?: Maybe<Array<GqlInput>>;\n isCreate: Scalars['Boolean'];\n isMint: Scalars['Boolean'];\n isScript: Scalars['Boolean'];\n maturity?: Maybe<Scalars['U32']>;\n mintAmount?: Maybe<Scalars['U64']>;\n mintAssetId?: Maybe<Scalars['AssetId']>;\n mintGasPrice?: Maybe<Scalars['U64']>;\n outputContract?: Maybe<GqlContractOutput>;\n outputs: Array<GqlOutput>;\n policies?: Maybe<GqlPolicies>;\n /** Return the transaction bytes using canonical encoding */\n rawPayload: Scalars['HexString'];\n receiptsRoot?: Maybe<Scalars['Bytes32']>;\n salt?: Maybe<Scalars['Salt']>;\n script?: Maybe<Scalars['HexString']>;\n scriptData?: Maybe<Scalars['HexString']>;\n scriptGasLimit?: Maybe<Scalars['U64']>;\n status?: Maybe<GqlTransactionStatus>;\n storageSlots?: Maybe<Array<Scalars['HexString']>>;\n txPointer?: Maybe<Scalars['TxPointer']>;\n witnesses?: Maybe<Array<Scalars['HexString']>>;\n};\n\nexport type GqlTransactionConnection = {\n __typename: 'TransactionConnection';\n /** A list of edges. */\n edges: Array<GqlTransactionEdge>;\n /** A list of nodes. */\n nodes: Array<GqlTransaction>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlTransactionEdge = {\n __typename: 'TransactionEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlTransaction;\n};\n\nexport type GqlTransactionStatus = GqlFailureStatus | GqlSqueezedOutStatus | GqlSubmittedStatus | GqlSuccessStatus;\n\nexport type GqlTxParameters = {\n __typename: 'TxParameters';\n maxGasPerTx: Scalars['U64'];\n maxInputs: Scalars['U16'];\n maxOutputs: Scalars['U16'];\n maxSize: Scalars['U64'];\n maxWitnesses: Scalars['U32'];\n version: GqlTxParametersVersion;\n};\n\nexport enum GqlTxParametersVersion {\n V1 = 'V1'\n}\n\nexport type GqlVariableOutput = {\n __typename: 'VariableOutput';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n to: Scalars['Address'];\n};\n\ntype GqlTransactionStatusFragment_FailureStatus_Fragment = { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> };\n\ntype GqlTransactionStatusFragment_SqueezedOutStatus_Fragment = { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' };\n\ntype GqlTransactionStatusFragment_SubmittedStatus_Fragment = { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' };\n\ntype GqlTransactionStatusFragment_SuccessStatus_Fragment = { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null };\n\nexport type GqlTransactionStatusFragmentFragment = GqlTransactionStatusFragment_FailureStatus_Fragment | GqlTransactionStatusFragment_SqueezedOutStatus_Fragment | GqlTransactionStatusFragment_SubmittedStatus_Fragment | GqlTransactionStatusFragment_SuccessStatus_Fragment;\n\ntype GqlTransactionStatusSubscriptionFragment_FailureStatus_Fragment = { __typename: 'FailureStatus', type: 'FailureStatus' };\n\ntype GqlTransactionStatusSubscriptionFragment_SqueezedOutStatus_Fragment = { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' };\n\ntype GqlTransactionStatusSubscriptionFragment_SubmittedStatus_Fragment = { __typename: 'SubmittedStatus', type: 'SubmittedStatus' };\n\ntype GqlTransactionStatusSubscriptionFragment_SuccessStatus_Fragment = { __typename: 'SuccessStatus', type: 'SuccessStatus' };\n\nexport type GqlTransactionStatusSubscriptionFragmentFragment = GqlTransactionStatusSubscriptionFragment_FailureStatus_Fragment | GqlTransactionStatusSubscriptionFragment_SqueezedOutStatus_Fragment | GqlTransactionStatusSubscriptionFragment_SubmittedStatus_Fragment | GqlTransactionStatusSubscriptionFragment_SuccessStatus_Fragment;\n\nexport type GqlTransactionFragmentFragment = { __typename: 'Transaction', id: string, rawPayload: string, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null };\n\ntype GqlInputEstimatePredicatesFragment_InputCoin_Fragment = { __typename: 'InputCoin', predicateGasUsed: string };\n\ntype GqlInputEstimatePredicatesFragment_InputContract_Fragment = { __typename: 'InputContract' };\n\ntype GqlInputEstimatePredicatesFragment_InputMessage_Fragment = { __typename: 'InputMessage', predicateGasUsed: string };\n\nexport type GqlInputEstimatePredicatesFragmentFragment = GqlInputEstimatePredicatesFragment_InputCoin_Fragment | GqlInputEstimatePredicatesFragment_InputContract_Fragment | GqlInputEstimatePredicatesFragment_InputMessage_Fragment;\n\nexport type GqlTransactionEstimatePredicatesFragmentFragment = { __typename: 'Transaction', inputs?: Array<{ __typename: 'InputCoin', predicateGasUsed: string } | { __typename: 'InputContract' } | { __typename: 'InputMessage', predicateGasUsed: string }> | null };\n\nexport type GqlDryRunFailureStatusFragmentFragment = { __typename: 'DryRunFailureStatus', reason: string, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null };\n\nexport type GqlDryRunSuccessStatusFragmentFragment = { __typename: 'DryRunSuccessStatus', programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null };\n\nexport type GqlReceiptFragmentFragment = { __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null };\n\ntype GqlDryRunTransactionStatusFragment_DryRunFailureStatus_Fragment = { __typename: 'DryRunFailureStatus', reason: string, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null };\n\ntype GqlDryRunTransactionStatusFragment_DryRunSuccessStatus_Fragment = { __typename: 'DryRunSuccessStatus', programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null };\n\nexport type GqlDryRunTransactionStatusFragmentFragment = GqlDryRunTransactionStatusFragment_DryRunFailureStatus_Fragment | GqlDryRunTransactionStatusFragment_DryRunSuccessStatus_Fragment;\n\nexport type GqlDryRunTransactionExecutionStatusFragmentFragment = { __typename: 'DryRunTransactionExecutionStatus', id: string, status: { __typename: 'DryRunFailureStatus', reason: string, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | { __typename: 'DryRunSuccessStatus', programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> };\n\nexport type GqlBlockFragmentFragment = { __typename: 'Block', id: string, height: any, header: { __typename: 'Header', time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> };\n\nexport type GqlCoinFragmentFragment = { __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, blockCreated: any, txCreatedIdx: any };\n\nexport type GqlMessageCoinFragmentFragment = { __typename: 'MessageCoin', sender: string, recipient: string, nonce: string, amount: string, assetId: string, daHeight: string };\n\nexport type GqlMessageFragmentFragment = { __typename: 'Message', amount: string, sender: string, recipient: string, data: string, nonce: string, daHeight: string };\n\nexport type GqlMessageProofFragmentFragment = { __typename: 'MessageProof', sender: string, recipient: string, nonce: string, amount: string, data: string, messageProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, blockProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, messageBlockHeader: { __typename: 'Header', id: string, daHeight: string, consensusParametersVersion: any, stateTransitionBytecodeVersion: any, transactionsCount: string, messageReceiptCount: string, transactionsRoot: string, messageOutboxRoot: string, eventInboxRoot: string, height: any, prevRoot: string, time: string, applicationHash: string }, commitBlockHeader: { __typename: 'Header', id: string, daHeight: string, consensusParametersVersion: any, stateTransitionBytecodeVersion: any, transactionsCount: string, messageReceiptCount: string, transactionsRoot: string, messageOutboxRoot: string, eventInboxRoot: string, height: any, prevRoot: string, time: string, applicationHash: string } };\n\nexport type GqlBalanceFragmentFragment = { __typename: 'Balance', owner: string, amount: string, assetId: string };\n\nexport type GqlTxParametersFragmentFragment = { __typename: 'TxParameters', version: GqlTxParametersVersion, maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string };\n\nexport type GqlPredicateParametersFragmentFragment = { __typename: 'PredicateParameters', version: GqlPredicateParametersVersion, maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string };\n\nexport type GqlScriptParametersFragmentFragment = { __typename: 'ScriptParameters', version: GqlScriptParametersVersion, maxScriptLength: string, maxScriptDataLength: string };\n\nexport type GqlContractParametersFragmentFragment = { __typename: 'ContractParameters', version: GqlContractParametersVersion, contractMaxSize: string, maxStorageSlots: string };\n\nexport type GqlFeeParametersFragmentFragment = { __typename: 'FeeParameters', version: GqlFeeParametersVersion, gasPriceFactor: string, gasPerByte: string };\n\ntype GqlDependentCostFragment_HeavyOperation_Fragment = { __typename: 'HeavyOperation', base: string, gasPerUnit: string };\n\ntype GqlDependentCostFragment_LightOperation_Fragment = { __typename: 'LightOperation', base: string, unitsPerGas: string };\n\nexport type GqlDependentCostFragmentFragment = GqlDependentCostFragment_HeavyOperation_Fragment | GqlDependentCostFragment_LightOperation_Fragment;\n\nexport type GqlGasCostsFragmentFragment = { __typename: 'GasCosts', version: GqlGasCostsVersion, add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, croo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } };\n\nexport type GqlConsensusParametersFragmentFragment = { __typename: 'ConsensusParameters', version: GqlConsensusParametersVersion, baseAssetId: string, chainId: string, txParams: { __typename: 'TxParameters', version: GqlTxParametersVersion, maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string }, predicateParams: { __typename: 'PredicateParameters', version: GqlPredicateParametersVersion, maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string }, scriptParams: { __typename: 'ScriptParameters', version: GqlScriptParametersVersion, maxScriptLength: string, maxScriptDataLength: string }, contractParams: { __typename: 'ContractParameters', version: GqlContractParametersVersion, contractMaxSize: string, maxStorageSlots: string }, feeParams: { __typename: 'FeeParameters', version: GqlFeeParametersVersion, gasPriceFactor: string, gasPerByte: string }, gasCosts: { __typename: 'GasCosts', version: GqlGasCostsVersion, add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, croo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } } };\n\nexport type GqlChainInfoFragmentFragment = { __typename: 'ChainInfo', name: string, daHeight: string, latestBlock: { __typename: 'Block', id: string, height: any, header: { __typename: 'Header', time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> }, consensusParameters: { __typename: 'ConsensusParameters', version: GqlConsensusParametersVersion, baseAssetId: string, chainId: string, txParams: { __typename: 'TxParameters', version: GqlTxParametersVersion, maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string }, predicateParams: { __typename: 'PredicateParameters', version: GqlPredicateParametersVersion, maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string }, scriptParams: { __typename: 'ScriptParameters', version: GqlScriptParametersVersion, maxScriptLength: string, maxScriptDataLength: string }, contractParams: { __typename: 'ContractParameters', version: GqlContractParametersVersion, contractMaxSize: string, maxStorageSlots: string }, feeParams: { __typename: 'FeeParameters', version: GqlFeeParametersVersion, gasPriceFactor: string, gasPerByte: string }, gasCosts: { __typename: 'GasCosts', version: GqlGasCostsVersion, add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, croo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } } } };\n\nexport type GqlContractBalanceFragmentFragment = { __typename: 'ContractBalance', contract: string, amount: string, assetId: string };\n\nexport type GqlPageInfoFragmentFragment = { __typename: 'PageInfo', hasPreviousPage: boolean, hasNextPage: boolean, startCursor?: string | null, endCursor?: string | null };\n\nexport type GqlGetVersionQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetVersionQuery = { __typename: 'Query', nodeInfo: { __typename: 'NodeInfo', nodeVersion: string } };\n\nexport type GqlNodeInfoFragmentFragment = { __typename: 'NodeInfo', utxoValidation: boolean, vmBacktrace: boolean, maxTx: string, maxDepth: string, nodeVersion: string };\n\nexport type GqlGetNodeInfoQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetNodeInfoQuery = { __typename: 'Query', nodeInfo: { __typename: 'NodeInfo', utxoValidation: boolean, vmBacktrace: boolean, maxTx: string, maxDepth: string, nodeVersion: string } };\n\nexport type GqlGetChainQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetChainQuery = { __typename: 'Query', chain: { __typename: 'ChainInfo', name: string, daHeight: string, latestBlock: { __typename: 'Block', id: string, height: any, header: { __typename: 'Header', time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> }, consensusParameters: { __typename: 'ConsensusParameters', version: GqlConsensusParametersVersion, baseAssetId: string, chainId: string, txParams: { __typename: 'TxParameters', version: GqlTxParametersVersion, maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string }, predicateParams: { __typename: 'PredicateParameters', version: GqlPredicateParametersVersion, maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string }, scriptParams: { __typename: 'ScriptParameters', version: GqlScriptParametersVersion, maxScriptLength: string, maxScriptDataLength: string }, contractParams: { __typename: 'ContractParameters', version: GqlContractParametersVersion, contractMaxSize: string, maxStorageSlots: string }, feeParams: { __typename: 'FeeParameters', version: GqlFeeParametersVersion, gasPriceFactor: string, gasPerByte: string }, gasCosts: { __typename: 'GasCosts', version: GqlGasCostsVersion, add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, croo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } } } } };\n\nexport type GqlGetTransactionQueryVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n}>;\n\n\nexport type GqlGetTransactionQuery = { __typename: 'Query', transaction?: { __typename: 'Transaction', id: string, rawPayload: string, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } | null };\n\nexport type GqlGetTransactionWithReceiptsQueryVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n}>;\n\n\nexport type GqlGetTransactionWithReceiptsQuery = { __typename: 'Query', transaction?: { __typename: 'Transaction', id: string, rawPayload: string, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } | null };\n\nexport type GqlGetTransactionsQueryVariables = Exact<{\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetTransactionsQuery = { __typename: 'Query', transactions: { __typename: 'TransactionConnection', edges: Array<{ __typename: 'TransactionEdge', node: { __typename: 'Transaction', id: string, rawPayload: string, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } }> } };\n\nexport type GqlGetTransactionsByOwnerQueryVariables = Exact<{\n owner: Scalars['Address'];\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetTransactionsByOwnerQuery = { __typename: 'Query', transactionsByOwner: { __typename: 'TransactionConnection', pageInfo: { __typename: 'PageInfo', hasPreviousPage: boolean, hasNextPage: boolean, startCursor?: string | null, endCursor?: string | null }, edges: Array<{ __typename: 'TransactionEdge', node: { __typename: 'Transaction', id: string, rawPayload: string, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } }> } };\n\nexport type GqlEstimatePredicatesQueryVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n}>;\n\n\nexport type GqlEstimatePredicatesQuery = { __typename: 'Query', estimatePredicates: { __typename: 'Transaction', inputs?: Array<{ __typename: 'InputCoin', predicateGasUsed: string } | { __typename: 'InputContract' } | { __typename: 'InputMessage', predicateGasUsed: string }> | null } };\n\nexport type GqlGetBlockQueryVariables = Exact<{\n blockId?: InputMaybe<Scalars['BlockId']>;\n height?: InputMaybe<Scalars['U32']>;\n}>;\n\n\nexport type GqlGetBlockQuery = { __typename: 'Query', block?: { __typename: 'Block', id: string, height: any, header: { __typename: 'Header', time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> } | null };\n\nexport type GqlGetBlockWithTransactionsQueryVariables = Exact<{\n blockId?: InputMaybe<Scalars['BlockId']>;\n blockHeight?: InputMaybe<Scalars['U32']>;\n}>;\n\n\nexport type GqlGetBlockWithTransactionsQuery = { __typename: 'Query', block?: { __typename: 'Block', id: string, height: any, transactions: Array<{ __typename: 'Transaction', id: string, rawPayload: string, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null }>, header: { __typename: 'Header', time: string } } | null };\n\nexport type GqlGetBlocksQueryVariables = Exact<{\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetBlocksQuery = { __typename: 'Query', blocks: { __typename: 'BlockConnection', edges: Array<{ __typename: 'BlockEdge', node: { __typename: 'Block', id: string, height: any, header: { __typename: 'Header', time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> } }> } };\n\nexport type GqlGetCoinQueryVariables = Exact<{\n coinId: Scalars['UtxoId'];\n}>;\n\n\nexport type GqlGetCoinQuery = { __typename: 'Query', coin?: { __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, blockCreated: any, txCreatedIdx: any } | null };\n\nexport type GqlGetCoinsQueryVariables = Exact<{\n filter: GqlCoinFilterInput;\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetCoinsQuery = { __typename: 'Query', coins: { __typename: 'CoinConnection', edges: Array<{ __typename: 'CoinEdge', node: { __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, blockCreated: any, txCreatedIdx: any } }> } };\n\nexport type GqlGetCoinsToSpendQueryVariables = Exact<{\n owner: Scalars['Address'];\n queryPerAsset: Array<GqlSpendQueryElementInput> | GqlSpendQueryElementInput;\n excludedIds?: InputMaybe<GqlExcludeInput>;\n}>;\n\n\nexport type GqlGetCoinsToSpendQuery = { __typename: 'Query', coinsToSpend: Array<Array<{ __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, blockCreated: any, txCreatedIdx: any } | { __typename: 'MessageCoin', sender: string, recipient: string, nonce: string, amount: string, assetId: string, daHeight: string }>> };\n\nexport type GqlGetContractQueryVariables = Exact<{\n contractId: Scalars['ContractId'];\n}>;\n\n\nexport type GqlGetContractQuery = { __typename: 'Query', contract?: { __typename: 'Contract', bytecode: string, id: string } | null };\n\nexport type GqlGetContractBalanceQueryVariables = Exact<{\n contract: Scalars['ContractId'];\n asset: Scalars['AssetId'];\n}>;\n\n\nexport type GqlGetContractBalanceQuery = { __typename: 'Query', contractBalance: { __typename: 'ContractBalance', contract: string, amount: string, assetId: string } };\n\nexport type GqlGetBalanceQueryVariables = Exact<{\n owner: Scalars['Address'];\n assetId: Scalars['AssetId'];\n}>;\n\n\nexport type GqlGetBalanceQuery = { __typename: 'Query', balance: { __typename: 'Balance', owner: string, amount: string, assetId: string } };\n\nexport type GqlGetLatestGasPriceQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetLatestGasPriceQuery = { __typename: 'Query', latestGasPrice: { __typename: 'LatestGasPrice', gasPrice: string } };\n\nexport type GqlEstimateGasPriceQueryVariables = Exact<{\n blockHorizon: Scalars['U32'];\n}>;\n\n\nexport type GqlEstimateGasPriceQuery = { __typename: 'Query', estimateGasPrice: { __typename: 'EstimateGasPrice', gasPrice: string } };\n\nexport type GqlGetBalancesQueryVariables = Exact<{\n filter: GqlBalanceFilterInput;\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetBalancesQuery = { __typename: 'Query', balances: { __typename: 'BalanceConnection', edges: Array<{ __typename: 'BalanceEdge', node: { __typename: 'Balance', owner: string, amount: string, assetId: string } }> } };\n\nexport type GqlGetMessagesQueryVariables = Exact<{\n owner: Scalars['Address'];\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetMessagesQuery = { __typename: 'Query', messages: { __typename: 'MessageConnection', edges: Array<{ __typename: 'MessageEdge', node: { __typename: 'Message', amount: string, sender: string, recipient: string, data: string, nonce: string, daHeight: string } }> } };\n\nexport type GqlGetMessageProofQueryVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n nonce: Scalars['Nonce'];\n commitBlockId?: InputMaybe<Scalars['BlockId']>;\n commitBlockHeight?: InputMaybe<Scalars['U32']>;\n}>;\n\n\nexport type GqlGetMessageProofQuery = { __typename: 'Query', messageProof?: { __typename: 'MessageProof', sender: string, recipient: string, nonce: string, amount: string, data: string, messageProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, blockProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, messageBlockHeader: { __typename: 'Header', id: string, daHeight: string, consensusParametersVersion: any, stateTransitionBytecodeVersion: any, transactionsCount: string, messageReceiptCount: string, transactionsRoot: string, messageOutboxRoot: string, eventInboxRoot: string, height: any, prevRoot: string, time: string, applicationHash: string }, commitBlockHeader: { __typename: 'Header', id: string, daHeight: string, consensusParametersVersion: any, stateTransitionBytecodeVersion: any, transactionsCount: string, messageReceiptCount: string, transactionsRoot: string, messageOutboxRoot: string, eventInboxRoot: string, height: any, prevRoot: string, time: string, applicationHash: string } } | null };\n\nexport type GqlGetMessageStatusQueryVariables = Exact<{\n nonce: Scalars['Nonce'];\n}>;\n\n\nexport type GqlGetMessageStatusQuery = { __typename: 'Query', messageStatus: { __typename: 'MessageStatus', state: GqlMessageState } };\n\nexport type GqlDryRunMutationVariables = Exact<{\n encodedTransactions: Array<Scalars['HexString']> | Scalars['HexString'];\n utxoValidation?: InputMaybe<Scalars['Boolean']>;\n}>;\n\n\nexport type GqlDryRunMutation = { __typename: 'Mutation', dryRun: Array<{ __typename: 'DryRunTransactionExecutionStatus', id: string, status: { __typename: 'DryRunFailureStatus', reason: string, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | { __typename: 'DryRunSuccessStatus', programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> }> };\n\nexport type GqlSubmitMutationVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n}>;\n\n\nexport type GqlSubmitMutation = { __typename: 'Mutation', submit: { __typename: 'Transaction', id: string } };\n\nexport type GqlProduceBlocksMutationVariables = Exact<{\n startTimestamp?: InputMaybe<Scalars['Tai64Timestamp']>;\n blocksToProduce: Scalars['U32'];\n}>;\n\n\nexport type GqlProduceBlocksMutation = { __typename: 'Mutation', produceBlocks: any };\n\nexport type GqlSubmitAndAwaitSubscriptionVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n}>;\n\n\nexport type GqlSubmitAndAwaitSubscription = { __typename: 'Subscription', submitAndAwait: { __typename: 'FailureStatus', type: 'FailureStatus' } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', type: 'SuccessStatus' } };\n\nexport type GqlStatusChangeSubscriptionVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n}>;\n\n\nexport type GqlStatusChangeSubscription = { __typename: 'Subscription', statusChange: { __typename: 'FailureStatus', type: 'FailureStatus' } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', type: 'SuccessStatus' } };\n\nexport const TransactionStatusSubscriptionFragmentFragmentDoc = gql`\n fragment transactionStatusSubscriptionFragment on TransactionStatus {\n type: __typename\n ... on SqueezedOutStatus {\n reason\n }\n}\n `;\nexport const ReceiptFragmentFragmentDoc = gql`\n fragment receiptFragment on Receipt {\n id\n pc\n is\n to\n toAddress\n amount\n assetId\n gas\n param1\n param2\n val\n ptr\n digest\n reason\n ra\n rb\n rc\n rd\n len\n receiptType\n result\n gasUsed\n data\n sender\n recipient\n nonce\n contractId\n subId\n}\n `;\nexport const TransactionStatusFragmentFragmentDoc = gql`\n fragment transactionStatusFragment on TransactionStatus {\n type: __typename\n ... on SubmittedStatus {\n time\n }\n ... on SuccessStatus {\n block {\n id\n }\n time\n receipts {\n ...receiptFragment\n }\n programState {\n returnType\n data\n }\n receipts {\n ...receiptFragment\n }\n }\n ... on FailureStatus {\n block {\n id\n }\n time\n reason\n receipts {\n ...receiptFragment\n }\n }\n ... on SqueezedOutStatus {\n reason\n }\n}\n ${ReceiptFragmentFragmentDoc}`;\nexport const TransactionFragmentFragmentDoc = gql`\n fragment transactionFragment on Transaction {\n id\n rawPayload\n status {\n ...transactionStatusFragment\n }\n}\n ${TransactionStatusFragmentFragmentDoc}`;\nexport const InputEstimatePredicatesFragmentFragmentDoc = gql`\n fragment inputEstimatePredicatesFragment on Input {\n ... on InputCoin {\n predicateGasUsed\n }\n ... on InputMessage {\n predicateGasUsed\n }\n}\n `;\nexport const TransactionEstimatePredicatesFragmentFragmentDoc = gql`\n fragment transactionEstimatePredicatesFragment on Transaction {\n inputs {\n ...inputEstimatePredicatesFragment\n }\n}\n ${InputEstimatePredicatesFragmentFragmentDoc}`;\nexport const DryRunFailureStatusFragmentFragmentDoc = gql`\n fragment dryRunFailureStatusFragment on DryRunFailureStatus {\n reason\n programState {\n returnType\n data\n }\n}\n `;\nexport const DryRunSuccessStatusFragmentFragmentDoc = gql`\n fragment dryRunSuccessStatusFragment on DryRunSuccessStatus {\n programState {\n returnType\n data\n }\n}\n `;\nexport const DryRunTransactionStatusFragmentFragmentDoc = gql`\n fragment dryRunTransactionStatusFragment on DryRunTransactionStatus {\n ... on DryRunFailureStatus {\n ...dryRunFailureStatusFragment\n }\n ... on DryRunSuccessStatus {\n ...dryRunSuccessStatusFragment\n }\n}\n ${DryRunFailureStatusFragmentFragmentDoc}\n${DryRunSuccessStatusFragmentFragmentDoc}`;\nexport const DryRunTransactionExecutionStatusFragmentFragmentDoc = gql`\n fragment dryRunTransactionExecutionStatusFragment on DryRunTransactionExecutionStatus {\n id\n status {\n ...dryRunTransactionStatusFragment\n }\n receipts {\n ...receiptFragment\n }\n}\n ${DryRunTransactionStatusFragmentFragmentDoc}\n${ReceiptFragmentFragmentDoc}`;\nexport const CoinFragmentFragmentDoc = gql`\n fragment coinFragment on Coin {\n __typename\n utxoId\n owner\n amount\n assetId\n blockCreated\n txCreatedIdx\n}\n `;\nexport const MessageCoinFragmentFragmentDoc = gql`\n fragment messageCoinFragment on MessageCoin {\n __typename\n sender\n recipient\n nonce\n amount\n assetId\n daHeight\n}\n `;\nexport const MessageFragmentFragmentDoc = gql`\n fragment messageFragment on Message {\n amount\n sender\n recipient\n data\n nonce\n daHeight\n}\n `;\nexport const MessageProofFragmentFragmentDoc = gql`\n fragment messageProofFragment on MessageProof {\n messageProof {\n proofSet\n proofIndex\n }\n blockProof {\n proofSet\n proofIndex\n }\n messageBlockHeader {\n id\n daHeight\n consensusParametersVersion\n stateTransitionBytecodeVersion\n transactionsCount\n messageReceiptCount\n transactionsRoot\n messageOutboxRoot\n eventInboxRoot\n height\n prevRoot\n time\n applicationHash\n }\n commitBlockHeader {\n id\n daHeight\n consensusParametersVersion\n stateTransitionBytecodeVersion\n transactionsCount\n messageReceiptCount\n transactionsRoot\n messageOutboxRoot\n eventInboxRoot\n height\n prevRoot\n time\n applicationHash\n }\n sender\n recipient\n nonce\n amount\n data\n}\n `;\nexport const BalanceFragmentFragmentDoc = gql`\n fragment balanceFragment on Balance {\n owner\n amount\n assetId\n}\n `;\nexport const BlockFragmentFragmentDoc = gql`\n fragment blockFragment on Block {\n id\n height\n header {\n time\n }\n transactions {\n id\n }\n}\n `;\nexport const TxParametersFragmentFragmentDoc = gql`\n fragment TxParametersFragment on TxParameters {\n version\n maxInputs\n maxOutputs\n maxWitnesses\n maxGasPerTx\n maxSize\n}\n `;\nexport const PredicateParametersFragmentFragmentDoc = gql`\n fragment PredicateParametersFragment on PredicateParameters {\n version\n maxPredicateLength\n maxPredicateDataLength\n maxGasPerPredicate\n maxMessageDataLength\n}\n `;\nexport const ScriptParametersFragmentFragmentDoc = gql`\n fragment ScriptParametersFragment on ScriptParameters {\n version\n maxScriptLength\n maxScriptDataLength\n}\n `;\nexport const ContractParametersFragmentFragmentDoc = gql`\n fragment ContractParametersFragment on ContractParameters {\n version\n contractMaxSize\n maxStorageSlots\n}\n `;\nexport const FeeParametersFragmentFragmentDoc = gql`\n fragment FeeParametersFragment on FeeParameters {\n version\n gasPriceFactor\n gasPerByte\n}\n `;\nexport const DependentCostFragmentFragmentDoc = gql`\n fragment DependentCostFragment on DependentCost {\n __typename\n ... on LightOperation {\n base\n unitsPerGas\n }\n ... on HeavyOperation {\n base\n gasPerUnit\n }\n}\n `;\nexport const GasCostsFragmentFragmentDoc = gql`\n fragment GasCostsFragment on GasCosts {\n version\n add\n addi\n aloc\n and\n andi\n bal\n bhei\n bhsh\n burn\n cb\n cfei\n cfsi\n div\n divi\n ecr1\n eck1\n ed19\n eq\n exp\n expi\n flag\n gm\n gt\n gtf\n ji\n jmp\n jne\n jnei\n jnzi\n jmpf\n jmpb\n jnzf\n jnzb\n jnef\n jneb\n lb\n log\n lt\n lw\n mint\n mlog\n modOp\n modi\n moveOp\n movi\n mroo\n mul\n muli\n mldv\n noop\n not\n or\n ori\n poph\n popl\n pshh\n pshl\n ret\n rvrt\n sb\n sll\n slli\n srl\n srli\n srw\n sub\n subi\n sw\n sww\n time\n tr\n tro\n wdcm\n wqcm\n wdop\n wqop\n wdml\n wqml\n wddv\n wqdv\n wdmd\n wqmd\n wdam\n wqam\n wdmm\n wqmm\n xor\n xori\n call {\n ...DependentCostFragment\n }\n ccp {\n ...DependentCostFragment\n }\n croo {\n ...DependentCostFragment\n }\n csiz {\n ...DependentCostFragment\n }\n k256 {\n ...DependentCostFragment\n }\n ldc {\n ...DependentCostFragment\n }\n logd {\n ...DependentCostFragment\n }\n mcl {\n ...DependentCostFragment\n }\n mcli {\n ...DependentCostFragment\n }\n mcp {\n ...DependentCostFragment\n }\n mcpi {\n ...DependentCostFragment\n }\n meq {\n ...DependentCostFragment\n }\n retd {\n ...DependentCostFragment\n }\n s256 {\n ...DependentCostFragment\n }\n scwq {\n ...DependentCostFragment\n }\n smo {\n ...DependentCostFragment\n }\n srwq {\n ...DependentCostFragment\n }\n swwq {\n ...DependentCostFragment\n }\n contractRoot {\n ...DependentCostFragment\n }\n stateRoot {\n ...DependentCostFragment\n }\n vmInitialization {\n ...DependentCostFragment\n }\n newStoragePerByte\n}\n ${DependentCostFragmentFragmentDoc}`;\nexport const ConsensusParametersFragmentFragmentDoc = gql`\n fragment consensusParametersFragment on ConsensusParameters {\n version\n txParams {\n ...TxParametersFragment\n }\n predicateParams {\n ...PredicateParametersFragment\n }\n scriptParams {\n ...ScriptParametersFragment\n }\n contractParams {\n ...ContractParametersFragment\n }\n feeParams {\n ...FeeParametersFragment\n }\n gasCosts {\n ...GasCostsFragment\n }\n baseAssetId\n chainId\n}\n ${TxParametersFragmentFragmentDoc}\n${PredicateParametersFragmentFragmentDoc}\n${ScriptParametersFragmentFragmentDoc}\n${ContractParametersFragmentFragmentDoc}\n${FeeParametersFragmentFragmentDoc}\n${GasCostsFragmentFragmentDoc}`;\nexport const ChainInfoFragmentFragmentDoc = gql`\n fragment chainInfoFragment on ChainInfo {\n name\n latestBlock {\n ...blockFragment\n }\n daHeight\n consensusParameters {\n ...consensusParametersFragment\n }\n}\n ${BlockFragmentFragmentDoc}\n${ConsensusParametersFragmentFragmentDoc}`;\nexport const ContractBalanceFragmentFragmentDoc = gql`\n fragment contractBalanceFragment on ContractBalance {\n contract\n amount\n assetId\n}\n `;\nexport const PageInfoFragmentFragmentDoc = gql`\n fragment pageInfoFragment on PageInfo {\n hasPreviousPage\n hasNextPage\n startCursor\n endCursor\n}\n `;\nexport const NodeInfoFragmentFragmentDoc = gql`\n fragment nodeInfoFragment on NodeInfo {\n utxoValidation\n vmBacktrace\n maxTx\n maxDepth\n nodeVersion\n}\n `;\nexport const GetVersionDocument = gql`\n query getVersion {\n nodeInfo {\n nodeVersion\n }\n}\n `;\nexport const GetNodeInfoDocument = gql`\n query getNodeInfo {\n nodeInfo {\n ...nodeInfoFragment\n }\n}\n ${NodeInfoFragmentFragmentDoc}`;\nexport const GetChainDocument = gql`\n query getChain {\n chain {\n ...chainInfoFragment\n }\n}\n ${ChainInfoFragmentFragmentDoc}`;\nexport const GetTransactionDocument = gql`\n query getTransaction($transactionId: TransactionId!) {\n transaction(id: $transactionId) {\n ...transactionFragment\n }\n}\n ${TransactionFragmentFragmentDoc}`;\nexport const GetTransactionWithReceiptsDocument = gql`\n query getTransactionWithReceipts($transactionId: TransactionId!) {\n transaction(id: $transactionId) {\n ...transactionFragment\n }\n}\n ${TransactionFragmentFragmentDoc}`;\nexport const GetTransactionsDocument = gql`\n query getTransactions($after: String, $before: String, $first: Int, $last: Int) {\n transactions(after: $after, before: $before, first: $first, last: $last) {\n edges {\n node {\n ...transactionFragment\n }\n }\n }\n}\n ${TransactionFragmentFragmentDoc}`;\nexport const GetTransactionsByOwnerDocument = gql`\n query getTransactionsByOwner($owner: Address!, $after: String, $before: String, $first: Int, $last: Int) {\n transactionsByOwner(\n owner: $owner\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n pageInfo {\n ...pageInfoFragment\n }\n edges {\n node {\n ...transactionFragment\n }\n }\n }\n}\n ${PageInfoFragmentFragmentDoc}\n${TransactionFragmentFragmentDoc}`;\nexport const EstimatePredicatesDocument = gql`\n query estimatePredicates($encodedTransaction: HexString!) {\n estimatePredicates(tx: $encodedTransaction) {\n ...transactionEstimatePredicatesFragment\n }\n}\n ${TransactionEstimatePredicatesFragmentFragmentDoc}`;\nexport const GetBlockDocument = gql`\n query getBlock($blockId: BlockId, $height: U32) {\n block(id: $blockId, height: $height) {\n ...blockFragment\n }\n}\n ${BlockFragmentFragmentDoc}`;\nexport const GetBlockWithTransactionsDocument = gql`\n query getBlockWithTransactions($blockId: BlockId, $blockHeight: U32) {\n block(id: $blockId, height: $blockHeight) {\n ...blockFragment\n transactions {\n ...transactionFragment\n }\n }\n}\n ${BlockFragmentFragmentDoc}\n${TransactionFragmentFragmentDoc}`;\nexport const GetBlocksDocument = gql`\n query getBlocks($after: String, $before: String, $first: Int, $last: Int) {\n blocks(after: $after, before: $before, first: $first, last: $last) {\n edges {\n node {\n ...blockFragment\n }\n }\n }\n}\n ${BlockFragmentFragmentDoc}`;\nexport const GetCoinDocument = gql`\n query getCoin($coinId: UtxoId!) {\n coin(utxoId: $coinId) {\n ...coinFragment\n }\n}\n ${CoinFragmentFragmentDoc}`;\nexport const GetCoinsDocument = gql`\n query getCoins($filter: CoinFilterInput!, $after: String, $before: String, $first: Int, $last: Int) {\n coins(\n filter: $filter\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n edges {\n node {\n ...coinFragment\n }\n }\n }\n}\n ${CoinFragmentFragmentDoc}`;\nexport const GetCoinsToSpendDocument = gql`\n query getCoinsToSpend($owner: Address!, $queryPerAsset: [SpendQueryElementInput!]!, $excludedIds: ExcludeInput) {\n coinsToSpend(\n owner: $owner\n queryPerAsset: $queryPerAsset\n excludedIds: $excludedIds\n ) {\n ...coinFragment\n ...messageCoinFragment\n }\n}\n ${CoinFragmentFragmentDoc}\n${MessageCoinFragmentFragmentDoc}`;\nexport const GetContractDocument = gql`\n query getContract($contractId: ContractId!) {\n contract(id: $contractId) {\n bytecode\n id\n }\n}\n `;\nexport const GetContractBalanceDocument = gql`\n query getContractBalance($contract: ContractId!, $asset: AssetId!) {\n contractBalance(contract: $contract, asset: $asset) {\n ...contractBalanceFragment\n }\n}\n ${ContractBalanceFragmentFragmentDoc}`;\nexport const GetBalanceDocument = gql`\n query getBalance($owner: Address!, $assetId: AssetId!) {\n balance(owner: $owner, assetId: $assetId) {\n ...balanceFragment\n }\n}\n ${BalanceFragmentFragmentDoc}`;\nexport const GetLatestGasPriceDocument = gql`\n query getLatestGasPrice {\n latestGasPrice {\n gasPrice\n }\n}\n `;\nexport const EstimateGasPriceDocument = gql`\n query estimateGasPrice($blockHorizon: U32!) {\n estimateGasPrice(blockHorizon: $blockHorizon) {\n gasPrice\n }\n}\n `;\nexport const GetBalancesDocument = gql`\n query getBalances($filter: BalanceFilterInput!, $after: String, $before: String, $first: Int, $last: Int) {\n balances(\n filter: $filter\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n edges {\n node {\n ...balanceFragment\n }\n }\n }\n}\n ${BalanceFragmentFragmentDoc}`;\nexport const GetMessagesDocument = gql`\n query getMessages($owner: Address!, $after: String, $before: String, $first: Int, $last: Int) {\n messages(\n owner: $owner\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n edges {\n node {\n ...messageFragment\n }\n }\n }\n}\n ${MessageFragmentFragmentDoc}`;\nexport const GetMessageProofDocument = gql`\n query getMessageProof($transactionId: TransactionId!, $nonce: Nonce!, $commitBlockId: BlockId, $commitBlockHeight: U32) {\n messageProof(\n transactionId: $transactionId\n nonce: $nonce\n commitBlockId: $commitBlockId\n commitBlockHeight: $commitBlockHeight\n ) {\n ...messageProofFragment\n }\n}\n ${MessageProofFragmentFragmentDoc}`;\nexport const GetMessageStatusDocument = gql`\n query getMessageStatus($nonce: Nonce!) {\n messageStatus(nonce: $nonce) {\n state\n }\n}\n `;\nexport const DryRunDocument = gql`\n mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean) {\n dryRun(txs: $encodedTransactions, utxoValidation: $utxoValidation) {\n ...dryRunTransactionExecutionStatusFragment\n }\n}\n ${DryRunTransactionExecutionStatusFragmentFragmentDoc}`;\nexport const SubmitDocument = gql`\n mutation submit($encodedTransaction: HexString!) {\n submit(tx: $encodedTransaction) {\n id\n }\n}\n `;\nexport const ProduceBlocksDocument = gql`\n mutation produceBlocks($startTimestamp: Tai64Timestamp, $blocksToProduce: U32!) {\n produceBlocks(\n blocksToProduce: $blocksToProduce\n startTimestamp: $startTimestamp\n )\n}\n `;\nexport const SubmitAndAwaitDocument = gql`\n subscription submitAndAwait($encodedTransaction: HexString!) {\n submitAndAwait(tx: $encodedTransaction) {\n ...transactionStatusSubscriptionFragment\n }\n}\n ${TransactionStatusSubscriptionFragmentFragmentDoc}`;\nexport const StatusChangeDocument = gql`\n subscription statusChange($transactionId: TransactionId!) {\n statusChange(id: $transactionId) {\n ...transactionStatusSubscriptionFragment\n }\n}\n ${TransactionStatusSubscriptionFragmentFragmentDoc}`;\nexport type Requester<C = {}, E = unknown> = <R, V>(doc: DocumentNode, vars?: V, options?: C) => Promise<R> | AsyncIterable<R>\nexport function getSdk<C, E>(requester: Requester<C, E>) {\n return {\n getVersion(variables?: GqlGetVersionQueryVariables, options?: C): Promise<GqlGetVersionQuery> {\n return requester<GqlGetVersionQuery, GqlGetVersionQueryVariables>(GetVersionDocument, variables, options) as Promise<GqlGetVersionQuery>;\n },\n getNodeInfo(variables?: GqlGetNodeInfoQueryVariables, options?: C): Promise<GqlGetNodeInfoQuery> {\n return requester<GqlGetNodeInfoQuery, GqlGetNodeInfoQueryVariables>(GetNodeInfoDocument, variables, options) as Promise<GqlGetNodeInfoQuery>;\n },\n getChain(variables?: GqlGetChainQueryVariables, options?: C): Promise<GqlGetChainQuery> {\n return requester<GqlGetChainQuery, GqlGetChainQueryVariables>(GetChainDocument, variables, options) as Promise<GqlGetChainQuery>;\n },\n getTransaction(variables: GqlGetTransactionQueryVariables, options?: C): Promise<GqlGetTransactionQuery> {\n return requester<GqlGetTransactionQuery, GqlGetTransactionQueryVariables>(GetTransactionDocument, variables, options) as Promise<GqlGetTransactionQuery>;\n },\n getTransactionWithReceipts(variables: GqlGetTransactionWithReceiptsQueryVariables, options?: C): Promise<GqlGetTransactionWithReceiptsQuery> {\n return requester<GqlGetTransactionWithReceiptsQuery, GqlGetTransactionWithReceiptsQueryVariables>(GetTransactionWithReceiptsDocument, variables, options) as Promise<GqlGetTransactionWithReceiptsQuery>;\n },\n getTransactions(variables?: GqlGetTransactionsQueryVariables, options?: C): Promise<GqlGetTransactionsQuery> {\n return requester<GqlGetTransactionsQuery, GqlGetTransactionsQueryVariables>(GetTransactionsDocument, variables, options) as Promise<GqlGetTransactionsQuery>;\n },\n getTransactionsByOwner(variables: GqlGetTransactionsByOwnerQueryVariables, options?: C): Promise<GqlGetTransactionsByOwnerQuery> {\n return requester<GqlGetTransactionsByOwnerQuery, GqlGetTransactionsByOwnerQueryVariables>(GetTransactionsByOwnerDocument, variables, options) as Promise<GqlGetTransactionsByOwnerQuery>;\n },\n estimatePredicates(variables: GqlEstimatePredicatesQueryVariables, options?: C): Promise<GqlEstimatePredicatesQuery> {\n return requester<GqlEstimatePredicatesQuery, GqlEstimatePredicatesQueryVariables>(EstimatePredicatesDocument, variables, options) as Promise<GqlEstimatePredicatesQuery>;\n },\n getBlock(variables?: GqlGetBlockQueryVariables, options?: C): Promise<GqlGetBlockQuery> {\n return requester<GqlGetBlockQuery, GqlGetBlockQueryVariables>(GetBlockDocument, variables, options) as Promise<GqlGetBlockQuery>;\n },\n getBlockWithTransactions(variables?: GqlGetBlockWithTransactionsQueryVariables, options?: C): Promise<GqlGetBlockWithTransactionsQuery> {\n return requester<GqlGetBlockWithTransactionsQuery, GqlGetBlockWithTransactionsQueryVariables>(GetBlockWithTransactionsDocument, variables, options) as Promise<GqlGetBlockWithTransactionsQuery>;\n },\n getBlocks(variables?: GqlGetBlocksQueryVariables, options?: C): Promise<GqlGetBlocksQuery> {\n return requester<GqlGetBlocksQuery, GqlGetBlocksQueryVariables>(GetBlocksDocument, variables, options) as Promise<GqlGetBlocksQuery>;\n },\n getCoin(variables: GqlGetCoinQueryVariables, options?: C): Promise<GqlGetCoinQuery> {\n return requester<GqlGetCoinQuery, GqlGetCoinQueryVariables>(GetCoinDocument, variables, options) as Promise<GqlGetCoinQuery>;\n },\n getCoins(variables: GqlGetCoinsQueryVariables, options?: C): Promise<GqlGetCoinsQuery> {\n return requester<GqlGetCoinsQuery, GqlGetCoinsQueryVariables>(GetCoinsDocument, variables, options) as Promise<GqlGetCoinsQuery>;\n },\n getCoinsToSpend(variables: GqlGetCoinsToSpendQueryVariables, options?: C): Promise<GqlGetCoinsToSpendQuery> {\n return requester<GqlGetCoinsToSpendQuery, GqlGetCoinsToSpendQueryVariables>(GetCoinsToSpendDocument, variables, options) as Promise<GqlGetCoinsToSpendQuery>;\n },\n getContract(variables: GqlGetContractQueryVariables, options?: C): Promise<GqlGetContractQuery> {\n return requester<GqlGetContractQuery, GqlGetContractQueryVariables>(GetContractDocument, variables, options) as Promise<GqlGetContractQuery>;\n },\n getContractBalance(variables: GqlGetContractBalanceQueryVariables, options?: C): Promise<GqlGetContractBalanceQuery> {\n return requester<GqlGetContractBalanceQuery, GqlGetContractBalanceQueryVariables>(GetContractBalanceDocument, variables, options) as Promise<GqlGetContractBalanceQuery>;\n },\n getBalance(variables: GqlGetBalanceQueryVariables, options?: C): Promise<GqlGetBalanceQuery> {\n return requester<GqlGetBalanceQuery, GqlGetBalanceQueryVariables>(GetBalanceDocument, variables, options) as Promise<GqlGetBalanceQuery>;\n },\n getLatestGasPrice(variables?: GqlGetLatestGasPriceQueryVariables, options?: C): Promise<GqlGetLatestGasPriceQuery> {\n return requester<GqlGetLatestGasPriceQuery, GqlGetLatestGasPriceQueryVariables>(GetLatestGasPriceDocument, variables, options) as Promise<GqlGetLatestGasPriceQuery>;\n },\n estimateGasPrice(variables: GqlEstimateGasPriceQueryVariables, options?: C): Promise<GqlEstimateGasPriceQuery> {\n return requester<GqlEstimateGasPriceQuery, GqlEstimateGasPriceQueryVariables>(EstimateGasPriceDocument, variables, options) as Promise<GqlEstimateGasPriceQuery>;\n },\n getBalances(variables: GqlGetBalancesQueryVariables, options?: C): Promise<GqlGetBalancesQuery> {\n return requester<GqlGetBalancesQuery, GqlGetBalancesQueryVariables>(GetBalancesDocument, variables, options) as Promise<GqlGetBalancesQuery>;\n },\n getMessages(variables: GqlGetMessagesQueryVariables, options?: C): Promise<GqlGetMessagesQuery> {\n return requester<GqlGetMessagesQuery, GqlGetMessagesQueryVariables>(GetMessagesDocument, variables, options) as Promise<GqlGetMessagesQuery>;\n },\n getMessageProof(variables: GqlGetMessageProofQueryVariables, options?: C): Promise<GqlGetMessageProofQuery> {\n return requester<GqlGetMessageProofQuery, GqlGetMessageProofQueryVariables>(GetMessageProofDocument, variables, options) as Promise<GqlGetMessageProofQuery>;\n },\n getMessageStatus(variables: GqlGetMessageStatusQueryVariables, options?: C): Promise<GqlGetMessageStatusQuery> {\n return requester<GqlGetMessageStatusQuery, GqlGetMessageStatusQueryVariables>(GetMessageStatusDocument, variables, options) as Promise<GqlGetMessageStatusQuery>;\n },\n dryRun(variables: GqlDryRunMutationVariables, options?: C): Promise<GqlDryRunMutation> {\n return requester<GqlDryRunMutation, GqlDryRunMutationVariables>(DryRunDocument, variables, options) as Promise<GqlDryRunMutation>;\n },\n submit(variables: GqlSubmitMutationVariables, options?: C): Promise<GqlSubmitMutation> {\n return requester<GqlSubmitMutation, GqlSubmitMutationVariables>(SubmitDocument, variables, options) as Promise<GqlSubmitMutation>;\n },\n produceBlocks(variables: GqlProduceBlocksMutationVariables, options?: C): Promise<GqlProduceBlocksMutation> {\n return requester<GqlProduceBlocksMutation, GqlProduceBlocksMutationVariables>(ProduceBlocksDocument, variables, options) as Promise<GqlProduceBlocksMutation>;\n },\n submitAndAwait(variables: GqlSubmitAndAwaitSubscriptionVariables, options?: C): AsyncIterable<GqlSubmitAndAwaitSubscription> {\n return requester<GqlSubmitAndAwaitSubscription, GqlSubmitAndAwaitSubscriptionVariables>(SubmitAndAwaitDocument, variables, options) as AsyncIterable<GqlSubmitAndAwaitSubscription>;\n },\n statusChange(variables: GqlStatusChangeSubscriptionVariables, options?: C): AsyncIterable<GqlStatusChangeSubscription> {\n return requester<GqlStatusChangeSubscription, GqlStatusChangeSubscriptionVariables>(StatusChangeDocument, variables, options) as AsyncIterable<GqlStatusChangeSubscription>;\n }\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { DocumentNode } from 'graphql';\nimport { print } from 'graphql';\n\ntype FuelGraphQLSubscriberOptions = {\n url: string;\n query: DocumentNode;\n variables?: Record<string, unknown>;\n fetchFn: typeof fetch;\n};\n\nexport class FuelGraphqlSubscriber implements AsyncIterator<unknown> {\n private stream!: ReadableStreamDefaultReader<Uint8Array>;\n private static textDecoder = new TextDecoder();\n\n public constructor(private options: FuelGraphQLSubscriberOptions) {}\n\n private async setStream() {\n const { url, query, variables, fetchFn } = this.options;\n\n const response = await fetchFn(`${url}-sub`, {\n method: 'POST',\n body: JSON.stringify({\n query: print(query),\n variables,\n }),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.stream = response.body!.getReader();\n }\n\n private events: Array<{ data: unknown; errors?: { message: string }[] }> = [];\n private parsingLeftover = '';\n\n async next(): Promise<IteratorResult<unknown, unknown>> {\n if (!this.stream) {\n await this.setStream();\n }\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (this.events.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { data, errors } = this.events.shift()!;\n if (Array.isArray(errors)) {\n throw new FuelError(\n FuelError.CODES.INVALID_REQUEST,\n errors.map((err) => err.message).join('\\n\\n')\n );\n }\n return { value: data, done: false };\n }\n const { value, done } = await this.stream.read();\n if (done) {\n return { value, done };\n }\n\n /**\n * We don't care about keep-alive messages.\n * The only responses that I came across from the node are either 200 responses with \"data:.*\" or keep-alive messages.\n * You can find the keep-alive message in the fuel-core codebase (latest permalink as of writing):\n * https://github.com/FuelLabs/fuel-core/blob/e1e631902f762081d2124d9c457ddfe13ac366dc/crates/fuel-core/src/graphql_api/service.rs#L247\n * To get the actual latest info you need to check out the master branch (might change):\n * https://github.com/FuelLabs/fuel-core/blob/master/crates/fuel-core/src/graphql_api/service.rs#L247\n * */\n const decoded = FuelGraphqlSubscriber.textDecoder\n .decode(value)\n .replace(':keep-alive-text\\n\\n', '');\n\n if (decoded === '') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const text = `${this.parsingLeftover}${decoded}`;\n const regex = /data:.*\\n\\n/g;\n\n const matches = [...text.matchAll(regex)].flatMap((match) => match);\n\n matches.forEach((match) => {\n try {\n this.events.push(JSON.parse(match.replace(/^data:/, '')));\n } catch (e) {\n throw new FuelError(\n ErrorCode.STREAM_PARSING_ERROR,\n `Error while parsing stream data response: ${text}`\n );\n }\n });\n\n this.parsingLeftover = text.replace(matches.join(), '');\n }\n }\n\n /**\n * Gets called when `break` is called in a `for-await-of` loop.\n */\n async return(): Promise<IteratorResult<unknown, undefined>> {\n await this.stream.cancel();\n this.stream.releaseLock();\n return { done: true, value: undefined };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown, unknown, undefined> {\n return this;\n }\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { hexlify } from '@fuel-ts/utils';\n\ntype Cache = {\n [key: string]: {\n expires: number;\n value: BytesLike;\n };\n};\nconst cache: Cache = {}; // it's a cache hash ~~> cash?\n\nconst DEFAULT_TTL_IN_MS = 30 * 1000; // 30seconds\n\nexport class MemoryCache {\n ttl: number;\n constructor(ttlInMs: number = DEFAULT_TTL_IN_MS) {\n this.ttl = ttlInMs;\n\n if (typeof ttlInMs !== 'number' || this.ttl <= 0) {\n throw new FuelError(\n ErrorCode.INVALID_TTL,\n `Invalid TTL: ${this.ttl}. Use a value greater than zero.`\n );\n }\n }\n\n get(value: BytesLike, isAutoExpiring = true): BytesLike | undefined {\n const key = hexlify(value);\n if (cache[key]) {\n if (!isAutoExpiring || cache[key].expires > Date.now()) {\n return cache[key].value;\n }\n\n this.del(value);\n }\n\n return undefined;\n }\n\n set(value: BytesLike): number {\n const expiresAt = Date.now() + this.ttl;\n const key = hexlify(value);\n cache[key] = {\n expires: expiresAt,\n value,\n };\n\n return expiresAt;\n }\n\n getAllData(): BytesLike[] {\n return Object.keys(cache).reduce((list, key) => {\n const data = this.get(key, false);\n if (data) {\n list.push(data);\n }\n\n return list;\n }, [] as BytesLike[]);\n }\n\n getActiveData(): BytesLike[] {\n return Object.keys(cache).reduce((list, key) => {\n const data = this.get(key);\n if (data) {\n list.push(data);\n }\n\n return list;\n }, [] as BytesLike[]);\n }\n\n del(value: BytesLike) {\n const key = hexlify(value);\n delete cache[key];\n }\n}\n","import { BYTES_32, UTXO_ID_LEN } from '@fuel-ts/abi-coder';\nimport { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish } from '@fuel-ts/math';\nimport { bn, toNumber } from '@fuel-ts/math';\nimport type { Input } from '@fuel-ts/transactions';\nimport { InputType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nexport type CoinTransactionRequestInput = {\n type: InputType.Coin;\n\n /** UTXO ID */\n id: BytesLike;\n\n /** Owning address or script hash */\n owner: BytesLike;\n\n /** Amount of coins */\n amount: BigNumberish;\n\n /** Asset ID of the coins */\n assetId: BytesLike;\n\n /** Points to the TX whose output is being spent. (TxPointer) */\n txPointer: BytesLike;\n\n /** Index of witness that authorizes spending the coin */\n witnessIndex: number;\n\n /** Gas used by predicate */\n predicateGasUsed?: BigNumberish;\n\n /** Predicate bytecode */\n predicate?: BytesLike;\n\n /** Predicate input data (parameters) */\n predicateData?: BytesLike;\n\n padPredicateData?: (policiesLenght: number) => BytesLike;\n};\n\nexport type MessageTransactionRequestInput = {\n type: InputType.Message;\n\n /** Address of sender */\n sender: BytesLike;\n\n /** Address of recipient */\n recipient: BytesLike;\n\n /** Amount of coins */\n amount: BigNumberish;\n\n /** Index of witness that authorizes the message */\n witnessIndex: number;\n\n /** Unique nonce of message */\n nonce: BytesLike;\n\n /** Gas used by predicate */\n predicateGasUsed?: BigNumberish;\n\n /** Predicate bytecode */\n predicate?: BytesLike;\n\n /** Predicate input data (parameters) */\n predicateData?: BytesLike;\n\n padPredicateData?: (policiesLenght: number) => BytesLike;\n\n /** data of message */\n data?: BytesLike;\n};\n\nexport type ContractTransactionRequestInput = {\n type: InputType.Contract;\n\n /** Points to the TX whose output is being spent. (TxPointer) */\n txPointer: BytesLike;\n\n /** Contract ID */\n contractId: BytesLike;\n};\nexport type TransactionRequestInput =\n | CoinTransactionRequestInput\n | ContractTransactionRequestInput\n | MessageTransactionRequestInput;\n\n/** @hidden */\nexport const inputify = (value: TransactionRequestInput): Input => {\n const { type } = value;\n\n switch (value.type) {\n case InputType.Coin: {\n const predicate = arrayify(value.predicate ?? '0x');\n const predicateData = arrayify(value.predicateData ?? '0x');\n return {\n type: InputType.Coin,\n txID: hexlify(arrayify(value.id).slice(0, BYTES_32)),\n outputIndex: toNumber(arrayify(value.id).slice(BYTES_32, UTXO_ID_LEN)),\n owner: hexlify(value.owner),\n amount: bn(value.amount),\n assetId: hexlify(value.assetId),\n txPointer: {\n blockHeight: toNumber(arrayify(value.txPointer).slice(0, 8)),\n txIndex: toNumber(arrayify(value.txPointer).slice(8, 16)),\n },\n witnessIndex: value.witnessIndex,\n predicateGasUsed: bn(value.predicateGasUsed),\n predicateLength: bn(predicate.length),\n predicateDataLength: bn(predicateData.length),\n predicate: hexlify(predicate),\n predicateData: hexlify(predicateData),\n };\n }\n case InputType.Contract: {\n return {\n type: InputType.Contract,\n txID: ZeroBytes32,\n outputIndex: 0,\n balanceRoot: ZeroBytes32,\n stateRoot: ZeroBytes32,\n txPointer: {\n blockHeight: toNumber(arrayify(value.txPointer).slice(0, 8)),\n txIndex: toNumber(arrayify(value.txPointer).slice(8, 16)),\n },\n contractID: hexlify(value.contractId),\n };\n }\n case InputType.Message: {\n const predicate = arrayify(value.predicate ?? '0x');\n const predicateData = arrayify(value.predicateData ?? '0x');\n const data = arrayify(value.data ?? '0x');\n return {\n type: InputType.Message,\n sender: hexlify(value.sender),\n recipient: hexlify(value.recipient),\n amount: bn(value.amount),\n nonce: hexlify(value.nonce),\n witnessIndex: value.witnessIndex,\n predicateGasUsed: bn(value.predicateGasUsed),\n predicateLength: bn(predicate.length),\n predicateDataLength: bn(predicateData.length),\n predicate: hexlify(predicate),\n predicateData: hexlify(predicateData),\n data: hexlify(data),\n dataLength: data.length,\n };\n }\n default: {\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_INPUT,\n `Invalid transaction input type: ${type}.`\n );\n }\n }\n};\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { Output } from '@fuel-ts/transactions';\nimport { OutputType } from '@fuel-ts/transactions';\nimport { hexlify } from '@fuel-ts/utils';\n\nexport type CoinTransactionRequestOutput = {\n type: OutputType.Coin;\n /** Receiving address or script hash */\n to: BytesLike;\n /** Amount of coins to send */\n amount: BigNumberish;\n /** Asset ID of coins */\n assetId: BytesLike;\n};\nexport type ContractTransactionRequestOutput = {\n type: OutputType.Contract;\n /** Index of input contract */\n inputIndex: number;\n};\nexport type ChangeTransactionRequestOutput = {\n type: OutputType.Change;\n /** Receiving address or script hash */\n to: BytesLike;\n /** Asset ID of coins */\n assetId: BytesLike;\n};\nexport type VariableTransactionRequestOutput = {\n type: OutputType.Variable;\n};\nexport type ContractCreatedTransactionRequestOutput = {\n type: OutputType.ContractCreated;\n /** Contract ID */\n contractId: BytesLike;\n /** State Root */\n stateRoot: BytesLike;\n};\nexport type TransactionRequestOutput =\n | CoinTransactionRequestOutput\n | ContractTransactionRequestOutput\n | ChangeTransactionRequestOutput\n | VariableTransactionRequestOutput\n | ContractCreatedTransactionRequestOutput;\n\n/** @hidden */\nexport const outputify = (value: TransactionRequestOutput): Output => {\n const { type } = value;\n\n switch (type) {\n case OutputType.Coin: {\n return {\n type: OutputType.Coin,\n to: hexlify(value.to),\n amount: bn(value.amount),\n assetId: hexlify(value.assetId),\n };\n }\n case OutputType.Contract: {\n return {\n type: OutputType.Contract,\n inputIndex: value.inputIndex,\n balanceRoot: ZeroBytes32,\n stateRoot: ZeroBytes32,\n };\n }\n case OutputType.Change: {\n return {\n type: OutputType.Change,\n to: hexlify(value.to),\n amount: bn(0),\n assetId: hexlify(value.assetId),\n };\n }\n case OutputType.Variable: {\n return {\n type: OutputType.Variable,\n to: ZeroBytes32,\n amount: bn(0),\n assetId: ZeroBytes32,\n };\n }\n case OutputType.ContractCreated: {\n return {\n type: OutputType.ContractCreated,\n contractId: hexlify(value.contractId),\n stateRoot: hexlify(value.stateRoot),\n };\n }\n default: {\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_INPUT,\n `Invalid transaction output type: ${type}.`\n );\n }\n }\n};\n","import { UTXO_ID_LEN } from '@fuel-ts/abi-coder';\nimport { Address, addressify } from '@fuel-ts/address';\nimport { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { randomBytes } from '@fuel-ts/crypto';\nimport type { AddressLike, AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport type { BN, BigNumberish } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { TransactionScript, Policy, TransactionCreate } from '@fuel-ts/transactions';\nimport {\n PolicyType,\n TransactionCoder,\n InputType,\n OutputType,\n TransactionType,\n} from '@fuel-ts/transactions';\nimport { concat, hexlify } from '@fuel-ts/utils';\n\nimport type { Account } from '../../account';\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport type { Coin } from '../coin';\nimport type { CoinQuantity, CoinQuantityLike } from '../coin-quantity';\nimport { coinQuantityfy } from '../coin-quantity';\nimport type { MessageCoin } from '../message';\nimport type { ChainInfo } from '../provider';\nimport type { Resource } from '../resource';\nimport { isCoin } from '../resource';\nimport { normalizeJSON } from '../utils';\nimport { getMaxGas, getMinGas } from '../utils/gas';\n\nimport { NoWitnessAtIndexError } from './errors';\nimport type {\n TransactionRequestInput,\n CoinTransactionRequestInput,\n MessageTransactionRequestInput,\n} from './input';\nimport { inputify } from './input';\nimport type {\n TransactionRequestOutput,\n ChangeTransactionRequestOutput,\n CoinTransactionRequestOutput,\n} from './output';\nimport { outputify } from './output';\nimport type { TransactionRequestLike } from './types';\nimport type { TransactionRequestWitness } from './witness';\nimport { witnessify } from './witness';\n\nexport {\n /**\n * @hidden\n */\n TransactionType,\n};\n\n/**\n * @hidden\n *\n * Interface defining a like structure for a base transaction request.\n */\nexport interface BaseTransactionRequestLike {\n /** Gas price for transaction */\n tip?: BigNumberish;\n /** Block until which tx cannot be included */\n maturity?: number;\n /** The maximum fee payable by this transaction using BASE_ASSET. */\n maxFee?: BigNumberish;\n /** The maximum amount of witness data allowed for the transaction */\n witnessLimit?: BigNumberish;\n /** List of inputs */\n inputs?: TransactionRequestInput[];\n /** List of outputs */\n outputs?: TransactionRequestOutput[];\n /** List of witnesses */\n witnesses?: TransactionRequestWitness[];\n}\n\ntype ToBaseTransactionResponse = Pick<\n TransactionScript,\n | 'inputs'\n | 'inputsCount'\n | 'outputs'\n | 'outputsCount'\n | 'witnesses'\n | 'witnessesCount'\n | 'policies'\n | 'policyTypes'\n>;\n\n/**\n * Abstract class to define the functionalities of a transaction request transaction request.\n */\nexport abstract class BaseTransactionRequest implements BaseTransactionRequestLike {\n /** Type of the transaction */\n abstract type: TransactionType;\n /** Gas price for transaction */\n tip: BN;\n /** Block until which tx cannot be included */\n maturity: number;\n /** The maximum fee payable by this transaction using BASE_ASSET. */\n maxFee?: BN;\n /** The maximum amount of witness data allowed for the transaction */\n witnessLimit?: BN | undefined;\n /** List of inputs */\n inputs: TransactionRequestInput[] = [];\n /** List of outputs */\n outputs: TransactionRequestOutput[] = [];\n /** List of witnesses */\n witnesses: TransactionRequestWitness[] = [];\n\n /**\n * Constructor for initializing a base transaction request.\n *\n * @param baseTransactionRequest - Optional object containing properties to initialize the transaction request.\n */\n constructor({\n tip,\n maturity,\n maxFee,\n witnessLimit,\n inputs,\n outputs,\n witnesses,\n }: BaseTransactionRequestLike = {}) {\n this.tip = bn(tip);\n this.maturity = maturity ?? 0;\n this.witnessLimit = witnessLimit ? bn(witnessLimit) : undefined;\n this.maxFee = maxFee ? bn(maxFee) : undefined;\n this.inputs = inputs ?? [];\n this.outputs = outputs ?? [];\n this.witnesses = witnesses ?? [];\n }\n\n static getPolicyMeta(req: BaseTransactionRequest) {\n let policyTypes = 0;\n const policies: Policy[] = [];\n\n if (req.tip) {\n policyTypes += PolicyType.Tip;\n policies.push({ data: req.tip, type: PolicyType.Tip });\n }\n if (req.witnessLimit) {\n policyTypes += PolicyType.WitnessLimit;\n policies.push({ data: req.witnessLimit, type: PolicyType.WitnessLimit });\n }\n if (req.maturity > 0) {\n policyTypes += PolicyType.Maturity;\n policies.push({ data: req.maturity, type: PolicyType.Maturity });\n }\n if (req.maxFee) {\n policyTypes += PolicyType.MaxFee;\n policies.push({ data: req.maxFee, type: PolicyType.MaxFee });\n }\n\n return {\n policyTypes,\n policies,\n };\n }\n\n /**\n * Method to obtain the base transaction details.\n *\n * @returns The base transaction details.\n */\n\n protected getBaseTransaction(): ToBaseTransactionResponse {\n const inputs = this.inputs?.map(inputify) ?? [];\n const outputs = this.outputs?.map(outputify) ?? [];\n const witnesses = this.witnesses?.map(witnessify) ?? [];\n\n const { policyTypes, policies } = BaseTransactionRequest.getPolicyMeta(this);\n\n return {\n policyTypes,\n inputs,\n outputs,\n policies,\n witnesses,\n inputsCount: inputs.length,\n outputsCount: outputs.length,\n witnessesCount: witnesses.length,\n };\n }\n\n abstract toTransaction(): TransactionCreate | TransactionScript;\n\n /**\n * Converts the transaction request to a byte array.\n *\n * @returns The transaction bytes.\n */\n toTransactionBytes(): Uint8Array {\n return new TransactionCoder().encode(this.toTransaction());\n }\n\n /**\n * @hidden\n *\n * Pushes an input to the list without any side effects and returns the index\n */\n protected pushInput(input: TransactionRequestInput): number {\n this.inputs.push(input);\n return this.inputs.length - 1;\n }\n\n /**\n * @hidden\n *\n * Pushes an output to the list without any side effects and returns the index\n */\n protected pushOutput(output: TransactionRequestOutput): number {\n this.outputs.push(output);\n return this.outputs.length - 1;\n }\n\n /**\n * @hidden\n *\n * Pushes a witness to the list and returns the index\n *\n * @param signature - The signature to add to the witness.\n * @returns The index of the created witness.\n */\n addWitness(signature: BytesLike) {\n this.witnesses.push(signature);\n return this.witnesses.length - 1;\n }\n\n /**\n * @hidden\n *\n * Creates an empty witness without any side effects and returns the index\n *\n * @returns The index of the created witness.\n */\n addEmptyWitness(): number {\n // Push a dummy witness with same byte size as a real witness signature\n this.addWitness(concat([ZeroBytes32, ZeroBytes32]));\n return this.witnesses.length - 1;\n }\n\n /**\n * Updates the witness for a given owner and signature.\n *\n * @param address - The address to get the coin input witness index for.\n * @param signature - The signature to update the witness with.\n */\n updateWitnessByOwner(address: string | AbstractAddress, signature: BytesLike) {\n const ownerAddress = Address.fromAddressOrString(address);\n const witnessIndex = this.getCoinInputWitnessIndexByOwner(ownerAddress);\n if (typeof witnessIndex === 'number') {\n this.updateWitness(witnessIndex, signature);\n }\n }\n\n /**\n * Updates an existing witness without any side effects.\n *\n * @param index - The index of the witness to update.\n * @param witness - The new witness.\n * @throws If the witness does not exist.\n */\n updateWitness(index: number, witness: TransactionRequestWitness) {\n if (!this.witnesses[index]) {\n throw new NoWitnessAtIndexError(index);\n }\n this.witnesses[index] = witness;\n }\n\n /**\n * Helper function to add an external signature to the transaction.\n *\n * @param account - The account/s to sign to the transaction.\n * @returns The transaction with the signature witness added.\n */\n async addAccountWitnesses(account: Account | Account[]) {\n const accounts = Array.isArray(account) ? account : [account];\n await Promise.all(\n accounts.map(async (acc) => {\n this.addWitness(await acc.signTransaction(<TransactionRequestLike>this));\n })\n );\n\n return this;\n }\n\n /**\n * Gets the coin inputs for a transaction.\n *\n * @returns The coin inputs.\n */\n getCoinInputs(): CoinTransactionRequestInput[] {\n return this.inputs.filter(\n (input): input is CoinTransactionRequestInput => input.type === InputType.Coin\n );\n }\n\n /**\n * Gets the coin outputs for a transaction.\n *\n * @returns The coin outputs.\n */\n getCoinOutputs(): CoinTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is CoinTransactionRequestOutput => output.type === OutputType.Coin\n );\n }\n\n /**\n * Gets the change outputs for a transaction.\n *\n * @returns The change outputs.\n */\n getChangeOutputs(): ChangeTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is ChangeTransactionRequestOutput => output.type === OutputType.Change\n );\n }\n\n /**\n * @hidden\n *\n * Returns the witnessIndex of the found CoinInput.\n */\n getCoinInputWitnessIndexByOwner(owner: AddressLike): number | undefined {\n const ownerAddress = addressify(owner);\n\n const found = this.inputs.find((input) => {\n switch (input.type) {\n case InputType.Coin:\n return hexlify((<CoinTransactionRequestInput>input).owner) === ownerAddress.toB256();\n case InputType.Message:\n return (\n hexlify((<MessageTransactionRequestInput>input).recipient) === ownerAddress.toB256()\n );\n default:\n return false;\n }\n });\n\n return (<CoinTransactionRequestInput>found)?.witnessIndex;\n }\n\n /**\n * Adds a single coin input to the transaction and a change output for the related\n * assetId, if one it was not added yet.\n *\n * @param coin - Coin resource.\n */\n addCoinInput(coin: Coin) {\n const { assetId, owner, amount } = coin;\n\n let witnessIndex;\n\n if (coin.predicate) {\n witnessIndex = 0;\n } else {\n witnessIndex = this.getCoinInputWitnessIndexByOwner(owner);\n\n // Insert a dummy witness if no witness exists\n if (typeof witnessIndex !== 'number') {\n witnessIndex = this.addEmptyWitness();\n }\n }\n\n const input: CoinTransactionRequestInput = {\n ...coin,\n type: InputType.Coin,\n owner: owner.toB256(),\n amount,\n assetId,\n txPointer: '0x00000000000000000000000000000000',\n witnessIndex,\n };\n\n // Insert the Input\n this.pushInput(input);\n\n // Insert a ChangeOutput if it does not exist\n this.addChangeOutput(owner, assetId);\n }\n\n /**\n * Adds a single message input to the transaction and a change output for the\n * asset against the message\n *\n * @param message - Message resource.\n */\n addMessageInput(message: MessageCoin) {\n const { recipient, sender, amount, assetId } = message;\n\n let witnessIndex;\n\n if (message.predicate) {\n witnessIndex = 0;\n } else {\n witnessIndex = this.getCoinInputWitnessIndexByOwner(recipient);\n\n // Insert a dummy witness if no witness exists\n if (typeof witnessIndex !== 'number') {\n witnessIndex = this.addEmptyWitness();\n }\n }\n\n const input: MessageTransactionRequestInput = {\n ...message,\n type: InputType.Message,\n sender: sender.toB256(),\n recipient: recipient.toB256(),\n amount,\n witnessIndex,\n };\n\n // Insert the Input\n this.pushInput(input);\n\n // Insert a ChangeOutput if it does not exist\n this.addChangeOutput(recipient, assetId);\n }\n\n /**\n * Adds a single resource to the transaction by adding a coin/message input and a\n * change output for the related assetId, if one it was not added yet.\n *\n * @param resource - The resource to add.\n * @returns This transaction.\n */\n addResource(resource: Resource) {\n if (isCoin(resource)) {\n this.addCoinInput(resource);\n } else {\n this.addMessageInput(resource);\n }\n\n return this;\n }\n\n /**\n * Adds multiple resources to the transaction by adding coin/message inputs and change\n * outputs from the related assetIds.\n *\n * @param resources - The resources to add.\n * @returns This transaction.\n */\n addResources(resources: ReadonlyArray<Resource>) {\n resources.forEach((resource) => this.addResource(resource));\n\n return this;\n }\n\n /**\n * Adds a coin output to the transaction.\n *\n * @param to - Address of the owner.\n * @param amount - Amount of coin.\n * @param assetId - Asset ID of coin.\n */\n addCoinOutput(to: AddressLike, amount: BigNumberish, assetId: BytesLike) {\n this.pushOutput({\n type: OutputType.Coin,\n to: addressify(to).toB256(),\n amount,\n assetId,\n });\n\n return this;\n }\n\n /**\n * Adds multiple coin outputs to the transaction.\n *\n * @param to - Address of the destination.\n * @param quantities - Quantities of coins.\n */\n addCoinOutputs(to: AddressLike, quantities: CoinQuantityLike[]) {\n quantities.map(coinQuantityfy).forEach((quantity) => {\n this.pushOutput({\n type: OutputType.Coin,\n to: addressify(to).toB256(),\n amount: quantity.amount,\n assetId: quantity.assetId,\n });\n });\n\n return this;\n }\n\n /**\n * Adds a change output to the transaction.\n *\n * @param to - Address of the owner.\n * @param assetId - Asset ID of coin.\n */\n addChangeOutput(to: AddressLike, assetId: BytesLike) {\n // Find the ChangeOutput for the AssetId of the Resource\n const changeOutput = this.getChangeOutputs().find(\n (output) => hexlify(output.assetId) === assetId\n );\n\n // Insert a ChangeOutput if it does not exist\n if (!changeOutput) {\n this.pushOutput({\n type: OutputType.Change,\n to: addressify(to).toB256(),\n assetId,\n });\n }\n }\n\n /**\n * @hidden\n */\n byteSize() {\n return this.toTransactionBytes().length;\n }\n\n /**\n * @hidden\n */\n metadataGas(_gasCosts: GqlGasCosts): BN {\n throw new Error('Not implemented');\n }\n\n /**\n * @hidden\n */\n calculateMinGas(chainInfo: ChainInfo): BN {\n const { gasCosts, consensusParameters } = chainInfo;\n const { gasPerByte } = consensusParameters;\n return getMinGas({\n gasPerByte,\n gasCosts,\n inputs: this.inputs,\n txBytesSize: this.byteSize(),\n metadataGas: this.metadataGas(gasCosts),\n });\n }\n\n calculateMaxGas(chainInfo: ChainInfo, minGas: BN): BN {\n const { consensusParameters } = chainInfo;\n const { gasPerByte, maxGasPerTx } = consensusParameters;\n\n const witnessesLength = this.toTransaction().witnesses.reduce(\n (acc, wit) => acc + wit.dataLength,\n 0\n );\n return getMaxGas({\n gasPerByte,\n minGas,\n witnessesLength,\n witnessLimit: this.witnessLimit,\n maxGasPerTx,\n });\n }\n\n /**\n * Funds the transaction with fake UTXOs for each assetId and amount in the\n * quantities array.\n *\n * @param quantities - CoinQuantity Array.\n * @param baseAssetId - The base asset to fund the transaction.\n */\n fundWithFakeUtxos(\n quantities: CoinQuantity[],\n baseAssetId: string,\n resourcesOwner?: AbstractAddress\n ) {\n const findAssetInput = (assetId: string) =>\n this.inputs.find((input) => {\n if ('assetId' in input) {\n return input.assetId === assetId;\n }\n return false;\n });\n\n const updateAssetInput = (assetId: string, quantity: BN) => {\n const assetInput = findAssetInput(assetId);\n\n let usedQuantity = quantity;\n\n if (assetId === baseAssetId) {\n usedQuantity = bn('1000000000000000000');\n }\n\n if (assetInput && 'assetId' in assetInput) {\n assetInput.id = hexlify(randomBytes(UTXO_ID_LEN));\n assetInput.amount = usedQuantity;\n } else {\n this.addResources([\n {\n id: hexlify(randomBytes(UTXO_ID_LEN)),\n amount: usedQuantity,\n assetId,\n owner: resourcesOwner || Address.fromRandom(),\n blockCreated: bn(1),\n txCreatedIdx: bn(1),\n },\n ]);\n }\n };\n\n updateAssetInput(baseAssetId, bn(100_000_000_000));\n quantities.forEach((q) => updateAssetInput(q.assetId, q.amount));\n }\n\n /**\n * Retrieves an array of CoinQuantity for each coin output present in the transaction.\n * a transaction.\n *\n * @returns CoinQuantity array.\n */\n getCoinOutputsQuantities(): CoinQuantity[] {\n const coinsQuantities = this.getCoinOutputs().map(({ amount, assetId }) => ({\n amount: bn(amount),\n assetId: assetId.toString(),\n }));\n\n return coinsQuantities;\n }\n\n /**\n * Gets the Transaction Request by hashing the transaction.\n *\n * @param chainId - The chain ID.\n *\n * @returns - A hash of the transaction, which is the transaction ID.\n */\n abstract getTransactionId(chainId: number): string;\n\n /**\n * Return the minimum amount in native coins required to create\n * a transaction.\n *\n * @returns The transaction as a JSON object.\n */\n toJSON() {\n return normalizeJSON(this);\n }\n\n updatePredicateGasUsed(inputs: TransactionRequestInput[]) {\n this.inputs.forEach((i) => {\n let correspondingInput: TransactionRequestInput | undefined;\n switch (i.type) {\n case InputType.Coin:\n correspondingInput = inputs.find((x) => x.type === InputType.Coin && x.owner === i.owner);\n break;\n case InputType.Message:\n correspondingInput = inputs.find(\n (x) => x.type === InputType.Message && x.sender === i.sender\n );\n break;\n default:\n return;\n }\n if (\n correspondingInput &&\n 'predicateGasUsed' in correspondingInput &&\n bn(correspondingInput.predicateGasUsed).gt(0)\n ) {\n // eslint-disable-next-line no-param-reassign\n i.predicate = correspondingInput.predicate;\n // eslint-disable-next-line no-param-reassign\n i.predicateData = correspondingInput.predicateData;\n // eslint-disable-next-line no-param-reassign\n i.predicateGasUsed = correspondingInput.predicateGasUsed;\n }\n });\n }\n\n shiftPredicateData() {\n this.inputs.forEach((input) => {\n // TODO: improve logic\n if (\n 'predicateData' in input &&\n 'padPredicateData' in input &&\n typeof input.padPredicateData === 'function'\n ) {\n // eslint-disable-next-line no-param-reassign\n input.predicateData = input.padPredicateData(\n BaseTransactionRequest.getPolicyMeta(this).policies.length\n );\n }\n });\n }\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\n\nimport type { Coin } from './coin';\nimport type { MessageCoin } from './message';\n\nexport type RawCoin = {\n utxoId: string;\n owner: string;\n amount: string;\n assetId: string;\n maturity: string;\n blockCreated: string;\n txCreatedIdx: string;\n};\n\nexport type RawMessage = {\n amount: string;\n sender: string;\n assetId: string;\n recipient: string;\n data: string;\n nonce: string;\n daHeight: string;\n};\n\nexport type RawResource = RawCoin | RawMessage;\nexport type Resource = Coin | MessageCoin;\n\n/** @hidden */\nexport type ExcludeResourcesOption = {\n utxos?: BytesLike[];\n messages?: BytesLike[];\n};\n\n/** @hidden */\nexport const isRawCoin = (resource: RawResource): resource is RawCoin => 'utxoId' in resource;\n/** @hidden */\nexport const isRawMessage = (resource: RawResource): resource is RawMessage =>\n 'recipient' in resource;\n/** @hidden */\nexport const isCoin = (resource: Resource): resource is Coin => 'id' in resource;\n/** @hidden */\nexport const isMessage = (resource: Resource): resource is MessageCoin => 'recipient' in resource;\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport type {\n ReceiptBurn,\n ReceiptCall,\n ReceiptLog,\n ReceiptLogData,\n ReceiptMessageOut,\n ReceiptMint,\n ReceiptPanic,\n ReceiptReturn,\n ReceiptReturnData,\n ReceiptRevert,\n ReceiptScriptResult,\n ReceiptTransfer,\n ReceiptTransferOut,\n} from '@fuel-ts/transactions';\nimport {\n ReceiptBurnCoder,\n ReceiptMessageOutCoder,\n ReceiptMintCoder,\n ReceiptType,\n} from '@fuel-ts/transactions';\nimport { FAILED_TRANSFER_TO_ADDRESS_SIGNAL } from '@fuel-ts/transactions/configs';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlReceiptFragmentFragment } from '../__generated__/operations';\nimport { GqlReceiptType } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\n\n/** @hidden */\nconst doesReceiptHaveMissingOutputVariables = (\n receipt: TransactionResultReceipt\n): receipt is ReceiptRevert =>\n receipt.type === ReceiptType.Revert &&\n receipt.val.toString('hex') === FAILED_TRANSFER_TO_ADDRESS_SIGNAL;\n\n/** @hidden */\nconst doesReceiptHaveMissingContractId = (\n receipt: TransactionResultReceipt\n): receipt is ReceiptPanic =>\n receipt.type === ReceiptType.Panic &&\n receipt.contractId !== '0x0000000000000000000000000000000000000000000000000000000000000000';\n\n/** @hidden */\nexport const getReceiptsWithMissingData = (receipts: Array<TransactionResultReceipt>) =>\n receipts.reduce<{\n missingOutputVariables: Array<ReceiptRevert>;\n missingOutputContractIds: Array<ReceiptPanic>;\n }>(\n (memo, receipt) => {\n if (doesReceiptHaveMissingOutputVariables(receipt)) {\n memo.missingOutputVariables.push(receipt);\n }\n if (doesReceiptHaveMissingContractId(receipt)) {\n memo.missingOutputContractIds.push(receipt);\n }\n return memo;\n },\n {\n missingOutputVariables: [],\n missingOutputContractIds: [],\n }\n );\n\nconst hexOrZero = (hex?: string | null) => hex || ZeroBytes32;\n\nexport function assembleReceiptByType(receipt: GqlReceiptFragmentFragment) {\n const { receiptType } = receipt;\n\n switch (receiptType) {\n case GqlReceiptType.Call: {\n const callReceipt: ReceiptCall = {\n type: ReceiptType.Call,\n from: hexOrZero(receipt.id || receipt.contractId),\n to: hexOrZero(receipt?.to),\n amount: bn(receipt.amount),\n assetId: hexOrZero(receipt.assetId),\n gas: bn(receipt.gas),\n param1: bn(receipt.param1),\n param2: bn(receipt.param2),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return callReceipt;\n }\n\n case GqlReceiptType.Return: {\n const returnReceipt: ReceiptReturn = {\n type: ReceiptType.Return,\n id: hexOrZero(receipt.id || receipt.contractId),\n val: bn(receipt.val),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return returnReceipt;\n }\n\n case GqlReceiptType.ReturnData: {\n const returnDataReceipt: ReceiptReturnData = {\n type: ReceiptType.ReturnData,\n id: hexOrZero(receipt.id || receipt.contractId),\n ptr: bn(receipt.ptr),\n len: bn(receipt.len),\n digest: hexOrZero(receipt.digest),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return returnDataReceipt;\n }\n\n case GqlReceiptType.Panic: {\n const panicReceipt: ReceiptPanic = {\n type: ReceiptType.Panic,\n id: hexOrZero(receipt.id),\n reason: bn(receipt.reason),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n contractId: hexOrZero(receipt.contractId),\n };\n\n return panicReceipt;\n }\n\n case GqlReceiptType.Revert: {\n const revertReceipt: ReceiptRevert = {\n type: ReceiptType.Revert,\n id: hexOrZero(receipt.id || receipt.contractId),\n val: bn(receipt.ra),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n return revertReceipt;\n }\n\n case GqlReceiptType.Log: {\n const logReceipt: ReceiptLog = {\n type: ReceiptType.Log,\n id: hexOrZero(receipt.id || receipt.contractId),\n val0: bn(receipt.ra),\n val1: bn(receipt.rb),\n val2: bn(receipt.rc),\n val3: bn(receipt.rd),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return logReceipt;\n }\n\n case GqlReceiptType.LogData: {\n const logDataReceipt: ReceiptLogData = {\n type: ReceiptType.LogData,\n id: hexOrZero(receipt.id || receipt.contractId),\n val0: bn(receipt.ra),\n val1: bn(receipt.rb),\n ptr: bn(receipt.ptr),\n len: bn(receipt.len),\n digest: hexOrZero(receipt.digest),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n return logDataReceipt;\n }\n\n case GqlReceiptType.Transfer: {\n const transferReceipt: ReceiptTransfer = {\n type: ReceiptType.Transfer,\n from: hexOrZero(receipt.id || receipt.contractId),\n to: hexOrZero(receipt.toAddress || receipt?.to),\n amount: bn(receipt.amount),\n assetId: hexOrZero(receipt.assetId),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return transferReceipt;\n }\n\n case GqlReceiptType.TransferOut: {\n const transferOutReceipt: ReceiptTransferOut = {\n type: ReceiptType.TransferOut,\n from: hexOrZero(receipt.id || receipt.contractId),\n to: hexOrZero(receipt.toAddress || receipt.to),\n amount: bn(receipt.amount),\n assetId: hexOrZero(receipt.assetId),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n return transferOutReceipt;\n }\n\n case GqlReceiptType.ScriptResult: {\n const scriptResultReceipt: ReceiptScriptResult = {\n type: ReceiptType.ScriptResult,\n result: bn(receipt.result),\n gasUsed: bn(receipt.gasUsed),\n };\n\n return scriptResultReceipt;\n }\n\n case GqlReceiptType.MessageOut: {\n const sender = hexOrZero(receipt.sender);\n const recipient = hexOrZero(receipt.recipient);\n const nonce = hexOrZero(receipt.nonce);\n const amount = bn(receipt.amount);\n const data = receipt.data ? arrayify(receipt.data) : Uint8Array.from([]);\n const digest = hexOrZero(receipt.digest);\n\n const messageId = ReceiptMessageOutCoder.getMessageId({\n sender,\n recipient,\n nonce,\n amount,\n data,\n });\n\n const receiptMessageOut: ReceiptMessageOut = {\n type: ReceiptType.MessageOut,\n sender,\n recipient,\n amount,\n nonce,\n data,\n digest,\n messageId,\n };\n\n return receiptMessageOut;\n }\n\n case GqlReceiptType.Mint: {\n const contractId = hexOrZero(receipt.id || receipt.contractId);\n const subId = hexOrZero(receipt.subId);\n const assetId = ReceiptMintCoder.getAssetId(contractId, subId);\n\n const mintReceipt: ReceiptMint = {\n type: ReceiptType.Mint,\n subId,\n contractId,\n assetId,\n val: bn(receipt.val),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return mintReceipt;\n }\n\n case GqlReceiptType.Burn: {\n const contractId = hexOrZero(receipt.id || receipt.contractId);\n const subId = hexOrZero(receipt.subId);\n const assetId = ReceiptBurnCoder.getAssetId(contractId, subId);\n\n const burnReceipt: ReceiptBurn = {\n type: ReceiptType.Burn,\n subId,\n contractId,\n assetId,\n val: bn(receipt.val),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return burnReceipt;\n }\n\n default:\n throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);\n }\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\n\nconst DEFAULT_BLOCK_EXPLORER_URL = 'https://fuellabs.github.io/block-explorer-v2';\n\n/** @hidden */\nconst getPathFromInput = (\n key: BuildBlockExplorerUrlHelperParam,\n value: string | number | undefined\n) => {\n const pathMap = {\n address: `address`,\n txId: `transaction`,\n blockNumber: `block`,\n };\n const path = pathMap[key] || key;\n return `${path}/${value}`;\n};\n\ntype BuildBlockExplorerUrlHelperParam = 'address' | 'txId' | 'blockNumber';\n\n/**\n * @hidden\n *\n * Builds a block explorer url based on and the given path, block explorer URL and provider URL\n */\nexport const buildBlockExplorerUrl = (\n options: {\n blockExplorerUrl?: string;\n path?: string;\n providerUrl?: string;\n address?: string;\n txId?: string;\n blockNumber?: number;\n } = {}\n) => {\n const { blockExplorerUrl, path, providerUrl, address, txId, blockNumber } = options;\n const explorerUrl = blockExplorerUrl || DEFAULT_BLOCK_EXPLORER_URL;\n\n // make sure that only ONE or none of the following is defined: address, txId, blockNumber\n const customInputParams = [\n {\n key: 'address',\n value: address,\n },\n {\n key: 'txId',\n value: txId,\n },\n {\n key: 'blockNumber',\n value: blockNumber,\n },\n ];\n\n const definedValues = customInputParams\n .filter((param) => !!param.value)\n .map(({ key, value }) => ({\n key,\n value,\n }));\n\n const hasAnyDefinedValues = definedValues.length > 0;\n\n if (definedValues.length > 1) {\n throw new FuelError(\n ErrorCode.ERROR_BUILDING_BLOCK_EXPLORER_URL,\n `Only one of the following can be passed in to buildBlockExplorerUrl: ${customInputParams\n .map((param) => param.key)\n .join(', ')}.`\n );\n }\n\n if (path && definedValues.length > 0) {\n const inputKeys = customInputParams.map(({ key }) => key).join(', ');\n throw new FuelError(\n ErrorCode.ERROR_BUILDING_BLOCK_EXPLORER_URL,\n `You cannot pass in a path to 'buildBlockExplorerUrl' along with any of the following: ${inputKeys}.`\n );\n }\n\n const pathGeneratedFromInputParams = hasAnyDefinedValues\n ? getPathFromInput(\n definedValues[0].key as BuildBlockExplorerUrlHelperParam,\n definedValues[0].value\n )\n : '';\n\n // Remove leading and trailing slashes from the path and block explorer url respectively, if present\n const trimSlashes = /^\\/|\\/$/gm;\n const cleanPath = path ? path.replace(trimSlashes, '') : pathGeneratedFromInputParams;\n const cleanBlockExplorerUrl = explorerUrl.replace(trimSlashes, '');\n const cleanProviderUrl = providerUrl?.replace(trimSlashes, '');\n const encodedProviderUrl = cleanProviderUrl ? encodeURIComponent(cleanProviderUrl) : undefined;\n\n // if the block explorer url doesn't have a protocol i.e. http:// or https://, add https://\n const protocol = cleanBlockExplorerUrl.match(/^https?:\\/\\//) ? '' : 'https://';\n const providerUrlProtocol = cleanProviderUrl?.match(/^https?:\\/\\//) ? '' : 'https://';\n\n const url = `${protocol}${cleanBlockExplorerUrl}/${cleanPath}${\n encodedProviderUrl ? `?providerUrl=${providerUrlProtocol}${encodedProviderUrl}` : ''\n }`;\n\n return url;\n};\n","import { bn } from '@fuel-ts/math';\nimport type { BN, BNInput } from '@fuel-ts/math';\nimport { ReceiptType, type Input } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlDependentCost, GqlGasCosts } from '../__generated__/operations';\nimport type { TransactionRequestInput } from '../transaction-request';\nimport type {\n TransactionResultReceipt,\n TransactionResultScriptResultReceipt,\n} from '../transaction-response';\n\n/** @hidden */\nexport const getGasUsedFromReceipts = (receipts: Array<TransactionResultReceipt>): BN => {\n const scriptResult = receipts.filter(\n (receipt) => receipt.type === ReceiptType.ScriptResult\n ) as TransactionResultScriptResultReceipt[];\n\n const gasUsed = scriptResult.reduce((prev, receipt) => prev.add(receipt.gasUsed), bn(0));\n\n return gasUsed;\n};\n\nexport function resolveGasDependentCosts(byteSize: BNInput, gasDependentCost: GqlDependentCost) {\n const base = bn(gasDependentCost.base);\n let dependentValue = bn(0);\n if (gasDependentCost.__typename === 'LightOperation') {\n dependentValue = bn(byteSize).div(bn(gasDependentCost.unitsPerGas));\n }\n if (gasDependentCost.__typename === 'HeavyOperation') {\n dependentValue = bn(byteSize).mul(bn(gasDependentCost.gasPerUnit));\n }\n return base.add(dependentValue);\n}\n\nexport function gasUsedByInputs(\n inputs: Array<TransactionRequestInput | Input>,\n txBytesSize: number,\n gasCosts: GqlGasCosts\n) {\n const witnessCache: Array<number> = [];\n\n const chargeableInputs = inputs.filter((input) => {\n const isCoinOrMessage = 'owner' in input || 'sender' in input;\n if (isCoinOrMessage) {\n if ('predicate' in input && input.predicate && input.predicate !== '0x') {\n return true;\n }\n\n if (!witnessCache.includes(input.witnessIndex)) {\n // should charge only once for each witness\n witnessCache.push(input.witnessIndex);\n return true;\n }\n }\n return false;\n });\n\n const vmInitializationCost = resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization);\n\n const totalGas = chargeableInputs.reduce((total, input) => {\n if ('predicate' in input && input.predicate && input.predicate !== '0x') {\n return total.add(\n vmInitializationCost\n .add(resolveGasDependentCosts(arrayify(input.predicate).length, gasCosts.contractRoot))\n .add(bn(input.predicateGasUsed))\n );\n }\n\n return total.add(gasCosts.ecr1);\n }, bn(0));\n // Never allow gas to exceed MAX_U64\n return totalGas;\n}\n\nexport interface IGetMinGasParams {\n inputs: Array<TransactionRequestInput | Input>;\n gasCosts: GqlGasCosts;\n txBytesSize: number;\n metadataGas: BN;\n gasPerByte: BN;\n}\n\nexport function getMinGas(params: IGetMinGasParams) {\n const { gasCosts, gasPerByte, inputs, metadataGas, txBytesSize } = params;\n\n const vmInitGas = resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization);\n const bytesGas = bn(txBytesSize).mul(gasPerByte);\n const inputsGas = gasUsedByInputs(inputs, txBytesSize, gasCosts);\n\n const minGas = vmInitGas.add(bytesGas).add(inputsGas).add(metadataGas).maxU64();\n\n return minGas;\n}\n\nexport interface IGetMaxGasParams {\n witnessesLength: number;\n witnessLimit?: BN;\n gasPerByte: BN;\n minGas: BN;\n gasLimit?: BN;\n maxGasPerTx: BN;\n}\n\nexport function getMaxGas(params: IGetMaxGasParams) {\n const {\n gasPerByte,\n witnessesLength,\n witnessLimit,\n minGas,\n gasLimit = bn(0),\n maxGasPerTx,\n } = params;\n\n let remainingAllowedWitnessGas = bn(0);\n\n if (witnessLimit?.gt(0) && witnessLimit.gte(witnessesLength)) {\n remainingAllowedWitnessGas = bn(witnessLimit).sub(witnessesLength).mul(gasPerByte);\n }\n\n const maxGas = remainingAllowedWitnessGas.add(minGas).add(gasLimit);\n\n return maxGas.gte(maxGasPerTx) ? maxGasPerTx : maxGas;\n}\n\nexport function calculateMetadataGasForTxCreate({\n gasCosts,\n stateRootSize,\n txBytesSize,\n contractBytesSize,\n}: {\n gasCosts: GqlGasCosts;\n contractBytesSize: BN;\n stateRootSize: number;\n txBytesSize: number;\n}) {\n const contractRootGas = resolveGasDependentCosts(contractBytesSize, gasCosts.contractRoot);\n const stateRootGas = resolveGasDependentCosts(stateRootSize, gasCosts.stateRoot);\n const txIdGas = resolveGasDependentCosts(txBytesSize, gasCosts.s256);\n // See https://github.com/FuelLabs/fuel-specs/blob/master/src/identifiers/contract-id.md\n const contractIdInputSize = bn(4 + 32 + 32 + 32);\n const contractIdGas = resolveGasDependentCosts(contractIdInputSize, gasCosts.s256);\n const metadataGas = contractRootGas.add(stateRootGas).add(txIdGas).add(contractIdGas);\n return metadataGas.maxU64();\n}\n\nexport function calculateMetadataGasForTxScript({\n gasCosts,\n txBytesSize,\n}: {\n gasCosts: GqlGasCosts;\n txBytesSize: number;\n}) {\n return resolveGasDependentCosts(txBytesSize, gasCosts.s256);\n}\n\nexport interface CalculateGasFeeParams {\n tip: BN;\n gas: BN;\n gasPrice: BN;\n priceFactor: BN;\n}\n\nexport const calculateGasFee = (params: CalculateGasFeeParams) => {\n const { gas, gasPrice, priceFactor, tip } = params;\n return gas.mul(gasPrice).div(priceFactor).add(tip);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-param-reassign */\nimport { hexlify } from '@fuel-ts/utils';\nimport { clone } from 'ramda';\n\n// When parsing a Transaction to JSON we need\n// to convert special types into each respective\n// JSON friendly value. This enables a tx to be\n// stringified and parsed back into a Transaction\n/** @hidden */\nfunction normalize(object: any) {\n Object.keys(object).forEach((key) => {\n switch (object[key]?.constructor.name) {\n case 'Uint8Array':\n object[key] = hexlify(object[key]);\n break;\n case 'Array':\n object[key] = normalize(object[key]);\n break;\n case 'BN':\n object[key] = object[key].toHex();\n break;\n case 'Address':\n object[key] = object[key].toB256();\n break;\n case 'Object':\n object[key] = normalize(object[key]);\n break;\n default:\n break;\n }\n });\n return object;\n}\n\n/**\n * Stringify Transaction to a JSON object\n * compatible with the Transaction class constructor.\n */\n/** @hidden */\nexport function normalizeJSON(root: any) {\n // Do a single deep clone before normalizing\n // to avoid mutating the original object\n // and doing extra clones on each iteration\n return normalize(clone(root));\n}\n","/** @hidden */\nexport function sleep(time: number) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true);\n }, time);\n });\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport type { ReceiptRevert } from '@fuel-ts/transactions';\nimport { ReceiptType } from '@fuel-ts/transactions';\nimport {\n FAILED_REQUIRE_SIGNAL,\n FAILED_ASSERT_EQ_SIGNAL,\n FAILED_ASSERT_NE_SIGNAL,\n FAILED_ASSERT_SIGNAL,\n FAILED_TRANSFER_TO_ADDRESS_SIGNAL,\n PANIC_REASONS,\n PANIC_DOC_URL,\n} from '@fuel-ts/transactions/configs';\n\nimport type { GqlTransactionStatusFragmentFragment } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\nimport type { FailureStatus } from '../transaction-summary';\n\n/**\n * Assembles an error message for a panic status.\n * @param status - The transaction failure status.\n * @returns The error message.\n */\nexport const assemblePanicError = (status: FailureStatus) => {\n let errorMessage = `The transaction reverted with reason: \"${status.reason}\".`;\n const reason = status.reason;\n\n if (PANIC_REASONS.includes(status.reason)) {\n errorMessage = `${errorMessage}\\n\\nYou can read more about this error at:\\n\\n${PANIC_DOC_URL}#variant.${status.reason}`;\n }\n\n return { errorMessage, reason };\n};\n\n/** @hidden */\nconst stringify = (obj: unknown) => JSON.stringify(obj, null, 2);\n\n/**\n * Assembles an error message for a revert status.\n * @param receipts - The transaction result processed receipts.\n * @param logs - The transaction decoded logs.\n * @returns The error message.\n */\nexport const assembleRevertError = (\n receipts: Array<TransactionResultReceipt>,\n logs: Array<unknown>\n) => {\n let errorMessage = 'The transaction reverted with an unknown reason.';\n\n const revertReceipt = receipts.find(({ type }) => type === ReceiptType.Revert) as ReceiptRevert;\n let reason = '';\n\n if (revertReceipt) {\n const reasonHex = bn(revertReceipt.val).toHex();\n\n switch (reasonHex) {\n case FAILED_REQUIRE_SIGNAL: {\n reason = 'require';\n errorMessage = `The transaction reverted because a \"require\" statement has thrown ${\n logs.length ? stringify(logs[0]) : 'an error.'\n }.`;\n break;\n }\n\n case FAILED_ASSERT_EQ_SIGNAL: {\n const sufix =\n logs.length >= 2 ? ` comparing ${stringify(logs[1])} and ${stringify(logs[0])}.` : '.';\n\n reason = 'assert_eq';\n errorMessage = `The transaction reverted because of an \"assert_eq\" statement${sufix}`;\n break;\n }\n\n case FAILED_ASSERT_NE_SIGNAL: {\n const sufix =\n logs.length >= 2 ? ` comparing ${stringify(logs[1])} and ${stringify(logs[0])}.` : '.';\n\n reason = 'assert_ne';\n errorMessage = `The transaction reverted because of an \"assert_ne\" statement${sufix}`;\n break;\n }\n\n case FAILED_ASSERT_SIGNAL:\n reason = 'assert';\n errorMessage = `The transaction reverted because an \"assert\" statement failed to evaluate to true.`;\n break;\n\n case FAILED_TRANSFER_TO_ADDRESS_SIGNAL:\n reason = 'MissingOutputChange';\n errorMessage = `The transaction reverted because it's missing an \"OutputChange\".`;\n break;\n\n default:\n reason = 'unknown';\n errorMessage = `The transaction reverted with an unknown reason: ${revertReceipt.val}`;\n }\n }\n\n return { errorMessage, reason };\n};\n\ninterface IExtractTxError {\n receipts: Array<TransactionResultReceipt>;\n status?: GqlTransactionStatusFragmentFragment | null;\n logs: Array<unknown>;\n}\n\n/**\n * Extracts the transaction error and returns a FuelError object.\n * @param IExtractTxError - The parameters for extracting the error.\n * @returns The FuelError object.\n */\nexport const extractTxError = (params: IExtractTxError): FuelError => {\n const { receipts, status, logs } = params;\n\n const isPanic = receipts.some(({ type }) => type === ReceiptType.Panic);\n const isRevert = receipts.some(({ type }) => type === ReceiptType.Revert);\n\n const { errorMessage, reason } =\n status?.type === 'FailureStatus' && isPanic\n ? assemblePanicError(status)\n : assembleRevertError(receipts, logs);\n\n const metadata = {\n logs,\n receipts,\n panic: isPanic,\n revert: isRevert,\n reason,\n };\n\n return new FuelError(ErrorCode.SCRIPT_REVERTED, errorMessage, metadata);\n};\n","/* eslint-disable max-classes-per-file */\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\n\n/**\n * @hidden\n */\nexport class ChangeOutputCollisionError extends Error {\n name = 'ChangeOutputCollisionError';\n message = 'A ChangeOutput with the same \"assetId\" already exists for a different \"to\" address';\n}\n\n/**\n * @hidden\n */\nexport class NoWitnessAtIndexError extends Error {\n name = 'NoWitnessAtIndexError';\n constructor(public readonly index: number) {\n super();\n this.message = `Witness at index \"${index}\" was not found`;\n }\n}\n\n/**\n * @hidden\n */\nexport class NoWitnessByOwnerError extends Error {\n name = 'NoWitnessByOwnerError';\n constructor(public readonly owner: AbstractAddress) {\n super();\n this.message = `A witness for the given owner \"${owner}\" was not found`;\n }\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\nimport type { Witness } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nexport type TransactionRequestWitness = BytesLike;\n\nexport const witnessify = (value: TransactionRequestWitness): Witness => {\n const data = arrayify(value);\n\n return {\n data: hexlify(data),\n dataLength: data.length,\n };\n};\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { bn, type BN } from '@fuel-ts/math';\nimport type { TransactionCreate } from '@fuel-ts/transactions';\nimport { TransactionType, OutputType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport { calculateMetadataGasForTxCreate } from '../utils/gas';\n\nimport { hashTransaction } from './hash-transaction';\nimport type { ContractCreatedTransactionRequestOutput } from './output';\nimport type { TransactionRequestStorageSlot } from './storage-slot';\nimport { storageSlotify } from './storage-slot';\nimport { BaseTransactionRequest } from './transaction-request';\nimport type { BaseTransactionRequestLike } from './transaction-request';\n\n/**\n * @hidden\n */\nexport interface CreateTransactionRequestLike extends BaseTransactionRequestLike {\n /** Witness index of contract bytecode to create */\n bytecodeWitnessIndex?: number;\n /** Salt */\n salt?: BytesLike;\n /** List of storage slots to initialize */\n storageSlots?: TransactionRequestStorageSlot[];\n}\n\n/**\n * `CreateTransactionRequest` provides functionalities for creating a transaction request that creates a contract.\n */\nexport class CreateTransactionRequest extends BaseTransactionRequest {\n static from(obj: CreateTransactionRequestLike) {\n if (obj instanceof this) {\n return obj;\n }\n return new this(obj);\n }\n\n /** Type of the transaction */\n type = TransactionType.Create as const;\n /** Witness index of contract bytecode to create */\n bytecodeWitnessIndex: number;\n /** Salt */\n salt: string;\n /** List of storage slots to initialize */\n storageSlots: TransactionRequestStorageSlot[];\n\n /**\n * Creates an instance `CreateTransactionRequest`.\n *\n * @param createTransactionRequestLike - The initial values for the instance\n */\n constructor({ bytecodeWitnessIndex, salt, storageSlots, ...rest }: CreateTransactionRequestLike) {\n super(rest);\n this.bytecodeWitnessIndex = bytecodeWitnessIndex ?? 0;\n this.salt = hexlify(salt ?? ZeroBytes32);\n this.storageSlots = [...(storageSlots ?? [])];\n }\n\n /**\n * Converts the transaction request to a `TransactionCreate`.\n *\n * @returns The transaction create object.\n */\n toTransaction(): TransactionCreate {\n const baseTransaction = this.getBaseTransaction();\n const bytecodeWitnessIndex = this.bytecodeWitnessIndex;\n const storageSlots = this.storageSlots?.map(storageSlotify) ?? [];\n return {\n type: TransactionType.Create,\n ...baseTransaction,\n bytecodeWitnessIndex,\n storageSlotsCount: bn(storageSlots.length),\n salt: this.salt ? hexlify(this.salt) : ZeroBytes32,\n storageSlots,\n };\n }\n\n /**\n * Get contract created outputs for the transaction.\n *\n * @returns An array of contract created transaction request outputs.\n */\n getContractCreatedOutputs(): ContractCreatedTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is ContractCreatedTransactionRequestOutput =>\n output.type === OutputType.ContractCreated\n );\n }\n\n /**\n * Gets the Transaction Request by hashing the transaction.\n *\n * @param chainId - The chain ID.\n *\n * @returns - A hash of the transaction, which is the transaction ID.\n */\n getTransactionId(chainId: number): string {\n return hashTransaction(this, chainId);\n }\n\n /**\n * Adds a contract created output to the transaction request.\n *\n * @param contractId - The contract ID.\n * @param stateRoot - The state root.\n */\n addContractCreatedOutput(\n /** Contract ID */\n contractId: BytesLike,\n /** State Root */\n stateRoot: BytesLike\n ) {\n this.pushOutput({\n type: OutputType.ContractCreated,\n contractId,\n stateRoot,\n });\n }\n\n metadataGas(gasCosts: GqlGasCosts): BN {\n return calculateMetadataGasForTxCreate({\n contractBytesSize: bn(arrayify(this.witnesses[this.bytecodeWitnessIndex] || '0x').length),\n gasCosts,\n stateRootSize: this.storageSlots.length,\n txBytesSize: this.byteSize(),\n });\n }\n}\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { uint64ToBytesBE, sha256 } from '@fuel-ts/hasher';\nimport { bn } from '@fuel-ts/math';\nimport { TransactionType, InputType, OutputType, TransactionCoder } from '@fuel-ts/transactions';\nimport { concat } from '@fuel-ts/utils';\nimport { clone } from 'ramda';\n\nimport type { TransactionRequest } from './types';\n\n/**\n * Hash transaction request with sha256. [Read more](https://github.com/FuelLabs/fuel-specs/blob/master/specs/protocol/identifiers.md#transaction-id)\n *\n * @param transactionRequest - Transaction request to be hashed\n * @returns sha256 hash of the transaction\n */\nexport function hashTransaction(transactionRequest: TransactionRequest, chainId: number) {\n const transaction = transactionRequest.toTransaction();\n\n if (transaction.type === TransactionType.Script) {\n transaction.receiptsRoot = ZeroBytes32;\n }\n\n // Zero out input fields\n transaction.inputs = transaction.inputs.map((input) => {\n const inputClone = clone(input);\n\n switch (inputClone.type) {\n // Zero out on signing: txPointer, predicateGasUsed\n case InputType.Coin: {\n inputClone.txPointer = {\n blockHeight: 0,\n txIndex: 0,\n };\n inputClone.predicateGasUsed = bn(0);\n return inputClone;\n }\n // Zero out on signing: predicateGasUsed\n case InputType.Message: {\n inputClone.predicateGasUsed = bn(0);\n return inputClone;\n }\n // Zero out on signing: txID, outputIndex, balanceRoot, stateRoot, and txPointer\n case InputType.Contract: {\n inputClone.txPointer = {\n blockHeight: 0,\n txIndex: 0,\n };\n inputClone.txID = ZeroBytes32;\n inputClone.outputIndex = 0;\n inputClone.balanceRoot = ZeroBytes32;\n inputClone.stateRoot = ZeroBytes32;\n return inputClone;\n }\n default:\n return inputClone;\n }\n });\n // Zero out output fields\n transaction.outputs = transaction.outputs.map((output) => {\n const outputClone = clone(output);\n\n switch (outputClone.type) {\n // Zero out on signing: balanceRoot, stateRoot\n case OutputType.Contract: {\n outputClone.balanceRoot = ZeroBytes32;\n outputClone.stateRoot = ZeroBytes32;\n return outputClone;\n }\n // Zero out on signing: amount\n case OutputType.Change: {\n outputClone.amount = bn(0);\n return outputClone;\n }\n // Zero out on signing: amount, to and assetId\n case OutputType.Variable: {\n outputClone.to = ZeroBytes32;\n outputClone.amount = bn(0);\n outputClone.assetId = ZeroBytes32;\n return outputClone;\n }\n default:\n return outputClone;\n }\n });\n transaction.witnessesCount = 0;\n transaction.witnesses = [];\n\n const chainIdBytes = uint64ToBytesBE(chainId);\n const concatenatedData = concat([chainIdBytes, new TransactionCoder().encode(transaction)]);\n return sha256(concatenatedData);\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\nimport type { StorageSlot } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nexport type TransactionRequestStorageSlot =\n | {\n /** Key */\n key: BytesLike;\n /** Value */\n value: BytesLike;\n }\n | [key: BytesLike, value: BytesLike];\n\n// Make sure all values have 32 bytes\nconst getStorageValue = (value: BytesLike): Uint8Array => {\n const v = new Uint8Array(32);\n v.set(arrayify(value));\n return v;\n};\n\nexport const storageSlotify = (storageSlot: TransactionRequestStorageSlot): StorageSlot => {\n let key;\n let value;\n\n if (Array.isArray(storageSlot)) {\n key = storageSlot[0];\n value = storageSlot[1];\n } else {\n key = storageSlot.key;\n value = storageSlot.value;\n }\n\n return {\n key: hexlify(key),\n value: hexlify(getStorageValue(value)),\n };\n};\n","import type { InputValue, JsonAbi } from '@fuel-ts/abi-coder';\nimport { Interface } from '@fuel-ts/abi-coder';\nimport { addressify } from '@fuel-ts/address';\nimport { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport type { AbstractScriptRequest, ContractIdLike, BytesLike } from '@fuel-ts/interfaces';\nimport { bn } from '@fuel-ts/math';\nimport type { BN, BigNumberish } from '@fuel-ts/math';\nimport type { TransactionScript } from '@fuel-ts/transactions';\nimport { InputType, OutputType, TransactionType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport type { ChainInfo } from '../provider';\nimport { calculateMetadataGasForTxScript, getMaxGas } from '../utils/gas';\n\nimport { hashTransaction } from './hash-transaction';\nimport type { ContractTransactionRequestInput } from './input';\nimport type { ContractTransactionRequestOutput, VariableTransactionRequestOutput } from './output';\nimport { returnZeroScript } from './scripts';\nimport type { BaseTransactionRequestLike } from './transaction-request';\nimport { BaseTransactionRequest } from './transaction-request';\nimport type { JsonAbisFromAllCalls } from './types';\n\n/**\n * @hidden\n */\nexport interface ScriptTransactionRequestLike extends BaseTransactionRequestLike {\n /** Gas limit for transaction */\n gasLimit?: BigNumberish;\n /** Script to execute */\n script?: BytesLike;\n /** Script input data (parameters) */\n scriptData?: BytesLike;\n\n abis?: JsonAbisFromAllCalls;\n}\n\n/**\n * `ScriptTransactionRequest` provides functionalities for creating a transaction request that uses a script.\n */\nexport class ScriptTransactionRequest extends BaseTransactionRequest {\n static from(obj: ScriptTransactionRequestLike) {\n if (obj instanceof this) {\n return obj;\n }\n return new this(obj);\n }\n\n /** Type of the transaction */\n type = TransactionType.Script as const;\n /** Gas limit for transaction */\n gasLimit: BN;\n /** Script to execute */\n script: Uint8Array;\n /** Script input data (parameters) */\n scriptData: Uint8Array;\n\n abis?: JsonAbisFromAllCalls;\n\n /**\n * Constructor for `ScriptTransactionRequest`.\n *\n * @param scriptTransactionRequestLike - The initial values for the instance.\n */\n constructor({ script, scriptData, gasLimit, ...rest }: ScriptTransactionRequestLike = {}) {\n super(rest);\n this.gasLimit = bn(gasLimit);\n this.script = arrayify(script ?? returnZeroScript.bytes);\n this.scriptData = arrayify(scriptData ?? returnZeroScript.encodeScriptData());\n this.abis = rest.abis;\n }\n\n /**\n * Converts the transaction request to a `TransactionScript`.\n *\n * @returns The transaction script object.\n */\n toTransaction(): TransactionScript {\n const script = arrayify(this.script ?? '0x');\n const scriptData = arrayify(this.scriptData ?? '0x');\n return {\n type: TransactionType.Script,\n scriptGasLimit: this.gasLimit,\n ...super.getBaseTransaction(),\n scriptLength: bn(script.length),\n scriptDataLength: bn(scriptData.length),\n receiptsRoot: ZeroBytes32,\n script: hexlify(script),\n scriptData: hexlify(scriptData),\n };\n }\n\n /**\n * Get contract inputs for the transaction.\n *\n * @returns An array of contract transaction request inputs.\n */\n getContractInputs(): ContractTransactionRequestInput[] {\n return this.inputs.filter(\n (input): input is ContractTransactionRequestInput => input.type === InputType.Contract\n );\n }\n\n /**\n * Get contract outputs for the transaction.\n *\n * @returns An array of contract transaction request outputs.\n */\n getContractOutputs(): ContractTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is ContractTransactionRequestOutput => output.type === OutputType.Contract\n );\n }\n\n /**\n * Get variable outputs for the transaction.\n *\n * @returns An array of variable transaction request outputs.\n */\n getVariableOutputs(): VariableTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is VariableTransactionRequestOutput => output.type === OutputType.Variable\n );\n }\n\n /**\n * Set the script and its data.\n *\n * @param script - The abstract script request.\n * @param data - The script data.\n */\n setScript<T>(script: AbstractScriptRequest<T>, data: T) {\n this.scriptData = script.encodeScriptData(data);\n this.script = script.bytes;\n }\n\n /**\n * Adds variable outputs to the transaction request.\n *\n * @param numberOfVariables - The number of variables to add.\n * @returns The new length of the outputs array.\n */\n addVariableOutputs(numberOfVariables: number = 1) {\n let outputsNumber = numberOfVariables;\n\n while (outputsNumber) {\n this.pushOutput({\n type: OutputType.Variable,\n });\n outputsNumber -= 1;\n }\n\n return this.outputs.length - 1;\n }\n\n calculateMaxGas(chainInfo: ChainInfo, minGas: BN): BN {\n const { consensusParameters } = chainInfo;\n const { gasPerByte, maxGasPerTx } = consensusParameters;\n\n const witnessesLength = this.toTransaction().witnesses.reduce(\n (acc, wit) => acc + wit.dataLength,\n 0\n );\n\n return getMaxGas({\n gasPerByte,\n minGas,\n witnessesLength,\n witnessLimit: this.witnessLimit,\n gasLimit: this.gasLimit,\n maxGasPerTx,\n });\n }\n\n /**\n * Adds a contract input and output to the transaction request.\n *\n * @param contract - The contract ID.\n * @returns The current instance of the `ScriptTransactionRequest`.\n */\n addContractInputAndOutput(contract: ContractIdLike): ScriptTransactionRequest {\n const contractAddress = addressify(contract);\n\n // Add only one input contract per contractId\n if (this.getContractInputs().find((i) => i.contractId === contractAddress.toB256())) {\n return this;\n }\n\n const inputIndex = super.pushInput({\n type: InputType.Contract,\n contractId: contractAddress.toB256(),\n txPointer: '0x00000000000000000000000000000000',\n });\n\n this.pushOutput({\n type: OutputType.Contract,\n inputIndex,\n });\n\n return this;\n }\n\n /**\n * Gets the Transaction Request by hashing the transaction.\n *\n * @param chainId - The chain ID.\n *\n * @returns - A hash of the transaction, which is the transaction ID.\n */\n getTransactionId(chainId: number): string {\n return hashTransaction(this, chainId);\n }\n\n /**\n * Sets the data for the transaction request.\n *\n * @param abi - Script JSON ABI.\n * @param args - The input arguments.\n * @returns The current instance of the `ScriptTransactionRequest`.\n */\n setData(abi: JsonAbi, args: InputValue[]): ScriptTransactionRequest {\n const abiInterface = new Interface(abi);\n this.scriptData = abiInterface.functions.main.encodeArguments(args);\n return this;\n }\n\n metadataGas(gasCosts: GqlGasCosts): BN {\n return calculateMetadataGasForTxScript({\n gasCosts,\n txBytesSize: this.byteSize(),\n });\n }\n}\n","import type { AbstractScriptRequest } from '@fuel-ts/interfaces';\nimport { arrayify } from '@fuel-ts/utils';\n\n// We can't import this from `@fuel-ts/script` because it causes\n// cyclic dependency errors so we duplicate it here.\n/** @hidden */\nexport const returnZeroScript: AbstractScriptRequest<void> = {\n /*\n Opcode::RET(REG_ZERO)\n Opcode::NOOP\n */\n // TODO: Don't use hardcoded scripts: https://github.com/FuelLabs/fuels-ts/issues/281\n bytes: arrayify('0x24000000'),\n encodeScriptData: () => new Uint8Array(0),\n};\n\n/** @hidden */\nexport const withdrawScript: AbstractScriptRequest<void> = {\n /*\n The following code loads some basic values into registers and calls SMO to create an output message\n 5040C010 \t- ADDI r16 $is i16 [r16 now points to memory 16 bytes from the start of this program (start of receiver data)]\n 5D44C006\t- LW r17 $is i6 [r17 set to the 6th word in this program (6*8=48 bytes from the start of this program)]\n 4C400011\t- SMO r16 r0 r0 r17 [send message out to address starting at memory position r16 with amount in r17]\n 24000000\t- RET [return 0]\n 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [recipient address]\n 00000000 00000000 [amount value]\n */\n // TODO: Don't use hardcoded scripts: https://github.com/FuelLabs/fuels-ts/issues/281\n bytes: arrayify('0x5040C0105D44C0064C40001124000000'),\n encodeScriptData: () => new Uint8Array(0),\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { TransactionType, InputType } from '@fuel-ts/transactions';\n\nimport type { ExcludeResourcesOption } from '../resource';\n\nimport { CreateTransactionRequest } from './create-transaction-request';\nimport type { TransactionRequestInput } from './input';\nimport { ScriptTransactionRequest } from './script-transaction-request';\nimport type { TransactionRequestLike, TransactionRequest } from './types';\n\n/** @hidden */\nexport const transactionRequestify = (obj: TransactionRequestLike): TransactionRequest => {\n if (obj instanceof ScriptTransactionRequest || obj instanceof CreateTransactionRequest) {\n return obj;\n }\n\n const { type } = obj;\n\n switch (obj.type) {\n case TransactionType.Script: {\n return ScriptTransactionRequest.from(obj);\n }\n case TransactionType.Create: {\n return CreateTransactionRequest.from(obj);\n }\n default: {\n throw new FuelError(ErrorCode.INVALID_TRANSACTION_TYPE, `Invalid transaction type: ${type}.`);\n }\n }\n};\n\nexport const cacheTxInputsFromOwner = (\n inputs: TransactionRequestInput[],\n owner: string\n): ExcludeResourcesOption =>\n inputs.reduce(\n (acc, input) => {\n if (input.type === InputType.Coin && input.owner === owner) {\n acc.utxos.push(input.id);\n }\n\n if (input.type === InputType.Message && input.recipient === owner) {\n acc.messages.push(input.nonce);\n }\n\n return acc;\n },\n {\n utxos: [],\n messages: [],\n } as Required<ExcludeResourcesOption>\n );\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type {\n ReceiptCall,\n ReceiptLog,\n ReceiptLogData,\n ReceiptPanic,\n ReceiptReturn,\n ReceiptReturnData,\n ReceiptRevert,\n ReceiptTransfer,\n ReceiptTransferOut,\n ReceiptScriptResult,\n ReceiptMessageOut,\n Transaction,\n ReceiptMint,\n ReceiptBurn,\n} from '@fuel-ts/transactions';\nimport { TransactionCoder } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlReceiptFragmentFragment } from '../__generated__/operations';\nimport type Provider from '../provider';\nimport type { JsonAbisFromAllCalls } from '../transaction-request';\nimport { assembleTransactionSummary } from '../transaction-summary/assemble-transaction-summary';\nimport { processGqlReceipt } from '../transaction-summary/receipt';\nimport type { TransactionSummary, GqlTransaction, AbiMap } from '../transaction-summary/types';\nimport { extractTxError } from '../utils';\n\nimport { getDecodedLogs } from './getDecodedLogs';\n\n/** @hidden */\nexport type TransactionResultCallReceipt = ReceiptCall;\n/** @hidden */\nexport type TransactionResultReturnReceipt = ReceiptReturn;\n/** @hidden */\nexport type TransactionResultReturnDataReceipt = ReceiptReturnData & { data: string };\n/** @hidden */\nexport type TransactionResultPanicReceipt = ReceiptPanic;\n/** @hidden */\nexport type TransactionResultRevertReceipt = ReceiptRevert;\n/** @hidden */\nexport type TransactionResultLogReceipt = ReceiptLog;\n/** @hidden */\nexport type TransactionResultLogDataReceipt = ReceiptLogData & { data: string };\n/** @hidden */\nexport type TransactionResultTransferReceipt = ReceiptTransfer;\n/** @hidden */\nexport type TransactionResultTransferOutReceipt = ReceiptTransferOut;\n/** @hidden */\nexport type TransactionResultScriptResultReceipt = ReceiptScriptResult;\n/** @hidden */\nexport type TransactionResultMessageOutReceipt = ReceiptMessageOut;\nexport type TransactionResultMintReceipt = ReceiptMint;\nexport type TransactionResultBurnReceipt = ReceiptBurn;\n\n/** @hidden */\nexport type TransactionResultReceipt =\n | ReceiptCall\n | ReceiptReturn\n | (ReceiptReturnData & { data: string })\n | ReceiptPanic\n | ReceiptRevert\n | ReceiptLog\n | (ReceiptLogData & { data: string })\n | ReceiptTransfer\n | ReceiptTransferOut\n | ReceiptScriptResult\n | ReceiptMessageOut\n | TransactionResultMintReceipt\n | TransactionResultBurnReceipt;\n\n/** @hidden */\nexport type TransactionResult<TTransactionType = void> = TransactionSummary<TTransactionType> & {\n gqlTransaction: GqlTransaction;\n logs?: Array<unknown>;\n};\n\n/**\n * Represents a response for a transaction.\n */\nexport class TransactionResponse {\n /** Transaction ID */\n id: string;\n /** Current provider */\n provider: Provider;\n /** Gas used on the transaction */\n gasUsed: BN = bn(0);\n /** The graphql Transaction with receipts object. */\n gqlTransaction?: GqlTransaction;\n\n abis?: JsonAbisFromAllCalls;\n\n /**\n * Constructor for `TransactionResponse`.\n *\n * @param id - The transaction ID.\n * @param provider - The provider.\n */\n constructor(id: string, provider: Provider, abis?: JsonAbisFromAllCalls) {\n this.id = id;\n this.provider = provider;\n this.abis = abis;\n }\n\n /**\n * Async constructor for `TransactionResponse`. This method can be used to create\n * an instance of `TransactionResponse` and wait for the transaction to be fetched\n * from the chain, ensuring that the `gqlTransaction` property is set.\n *\n * @param id - The transaction ID.\n * @param provider - The provider.\n */\n static async create(\n id: string,\n provider: Provider,\n abis?: JsonAbisFromAllCalls\n ): Promise<TransactionResponse> {\n const response = new TransactionResponse(id, provider, abis);\n await response.fetch();\n return response;\n }\n\n /**\n * Fetch the transaction with receipts from the provider.\n *\n * @returns Transaction with receipts query result.\n */\n async fetch(): Promise<GqlTransaction> {\n const response = await this.provider.operations.getTransactionWithReceipts({\n transactionId: this.id,\n });\n\n if (!response.transaction) {\n const subscription = this.provider.operations.statusChange({\n transactionId: this.id,\n });\n\n for await (const { statusChange } of subscription) {\n if (statusChange) {\n break;\n }\n }\n\n return this.fetch();\n }\n\n this.gqlTransaction = response.transaction;\n\n return response.transaction;\n }\n\n /**\n * Decode the raw payload of the transaction.\n *\n * @param transactionWithReceipts - The transaction with receipts object.\n * @returns The decoded transaction.\n */\n decodeTransaction<TTransactionType = void>(transactionWithReceipts: GqlTransaction) {\n return new TransactionCoder().decode(\n arrayify(transactionWithReceipts.rawPayload),\n 0\n )?.[0] as Transaction<TTransactionType>;\n }\n\n /**\n * Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will\n * fetch it from the provider\n *\n * @param contractsAbiMap - The contracts ABI map.\n * @returns\n */\n async getTransactionSummary<TTransactionType = void>(\n contractsAbiMap?: AbiMap\n ): Promise<TransactionSummary<TTransactionType>> {\n let transaction = this.gqlTransaction;\n\n if (!transaction) {\n transaction = await this.fetch();\n }\n\n const decodedTransaction = this.decodeTransaction<TTransactionType>(\n transaction\n ) as Transaction<TTransactionType>;\n\n let txReceipts: GqlReceiptFragmentFragment[] = [];\n\n if (transaction?.status && 'receipts' in transaction.status) {\n txReceipts = transaction.status.receipts;\n }\n\n const receipts = txReceipts.map(processGqlReceipt) || [];\n\n const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = this.provider.getGasConfig();\n const gasPrice = await this.provider.getLatestGasPrice();\n const maxInputs = this.provider.getChain().consensusParameters.maxInputs;\n\n const transactionSummary = assembleTransactionSummary<TTransactionType>({\n id: this.id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: arrayify(transaction.rawPayload),\n gqlTransactionStatus: transaction.status,\n gasPerByte,\n gasPriceFactor,\n abiMap: contractsAbiMap,\n maxInputs,\n gasCosts,\n maxGasPerTx,\n gasPrice,\n });\n\n return transactionSummary;\n }\n\n private async waitForStatusChange() {\n const status = this.gqlTransaction?.status?.type;\n if (status && status !== 'SubmittedStatus') {\n return;\n }\n\n const subscription = this.provider.operations.statusChange({\n transactionId: this.id,\n });\n\n for await (const { statusChange } of subscription) {\n if (statusChange.type === 'SqueezedOutStatus') {\n throw new FuelError(\n ErrorCode.TRANSACTION_SQUEEZED_OUT,\n `Transaction Squeezed Out with reason: ${statusChange.reason}`\n );\n }\n if (statusChange.type !== 'SubmittedStatus') {\n break;\n }\n }\n\n await this.fetch();\n }\n\n /**\n * Waits for transaction to complete and returns the result.\n *\n * @returns The completed transaction result\n */\n async waitForResult<TTransactionType = void>(\n contractsAbiMap?: AbiMap\n ): Promise<TransactionResult<TTransactionType>> {\n await this.waitForStatusChange();\n\n const transactionSummary = await this.getTransactionSummary<TTransactionType>(contractsAbiMap);\n\n const transactionResult: TransactionResult<TTransactionType> = {\n gqlTransaction: this.gqlTransaction as GqlTransaction,\n ...transactionSummary,\n };\n\n let logs: Array<unknown> = [];\n\n if (this.abis) {\n logs = getDecodedLogs(\n transactionSummary.receipts,\n this.abis.main,\n this.abis.otherContractsAbis\n );\n\n transactionResult.logs = logs;\n }\n\n if (transactionResult.isStatusFailure) {\n const {\n receipts,\n gqlTransaction: { status },\n } = transactionResult;\n\n throw extractTxError({\n receipts,\n status,\n logs,\n });\n }\n\n return transactionResult;\n }\n\n /**\n * Waits for transaction to complete and returns the result.\n *\n * @param contractsAbiMap - The contracts ABI map.\n */\n async wait<TTransactionType = void>(\n contractsAbiMap?: AbiMap\n ): Promise<TransactionResult<TTransactionType>> {\n return this.waitForResult<TTransactionType>(contractsAbiMap);\n }\n}\n","import { bn, type BN } from '@fuel-ts/math';\nimport { PolicyType, type Transaction } from '@fuel-ts/transactions';\nimport { DateTime, hexlify } from '@fuel-ts/utils';\n\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\nimport { getGasUsedFromReceipts } from '../utils';\n\nimport { calculateTransactionFee } from './calculate-transaction-fee';\nimport {\n getOperations,\n getTransactionTypeName,\n isTypeMint,\n isTypeCreate,\n isTypeScript,\n} from './operations';\nimport { extractBurnedAssetsFromReceipts, extractMintedAssetsFromReceipts } from './receipt';\nimport { processGraphqlStatus } from './status';\nimport type { AbiMap, GraphqlTransactionStatus, TransactionSummary } from './types';\n\nexport interface AssembleTransactionSummaryParams {\n gasPerByte: BN;\n gasPriceFactor: BN;\n transaction: Transaction;\n id?: string;\n transactionBytes: Uint8Array;\n gqlTransactionStatus?: GraphqlTransactionStatus;\n receipts: TransactionResultReceipt[];\n abiMap?: AbiMap;\n maxInputs: BN;\n gasCosts: GqlGasCosts;\n maxGasPerTx: BN;\n gasPrice: BN;\n}\n\n/** @hidden */\nexport function assembleTransactionSummary<TTransactionType = void>(\n params: AssembleTransactionSummaryParams\n) {\n const {\n id,\n receipts,\n gasPerByte,\n gasPriceFactor,\n transaction,\n transactionBytes,\n gqlTransactionStatus,\n abiMap = {},\n maxInputs,\n gasCosts,\n maxGasPerTx,\n gasPrice,\n } = params;\n\n const gasUsed = getGasUsedFromReceipts(receipts);\n\n const rawPayload = hexlify(transactionBytes);\n\n const operations = getOperations({\n transactionType: transaction.type,\n inputs: transaction.inputs || [],\n outputs: transaction.outputs || [],\n receipts,\n rawPayload,\n abiMap,\n maxInputs,\n });\n\n const typeName = getTransactionTypeName(transaction.type);\n\n const tip = bn(transaction.policies?.find((policy) => policy.type === PolicyType.Tip)?.data);\n\n const { fee } = calculateTransactionFee({\n gasPrice,\n rawPayload,\n tip,\n consensusParameters: {\n gasCosts,\n maxGasPerTx,\n feeParams: {\n gasPerByte,\n gasPriceFactor,\n },\n },\n });\n\n const { isStatusFailure, isStatusPending, isStatusSuccess, blockId, status, time } =\n processGraphqlStatus(gqlTransactionStatus);\n\n const mintedAssets = extractMintedAssetsFromReceipts(receipts);\n const burnedAssets = extractBurnedAssetsFromReceipts(receipts);\n\n let date: DateTime | undefined;\n\n if (time) {\n date = DateTime.fromTai64(time);\n }\n\n const transactionSummary: TransactionSummary<TTransactionType> = {\n id,\n fee,\n gasUsed,\n operations,\n type: typeName,\n blockId,\n time,\n status,\n receipts,\n mintedAssets,\n burnedAssets,\n isTypeMint: isTypeMint(transaction.type),\n isTypeCreate: isTypeCreate(transaction.type),\n isTypeScript: isTypeScript(transaction.type),\n isStatusFailure,\n isStatusSuccess,\n isStatusPending,\n date,\n transaction: transaction as Transaction<TTransactionType>,\n };\n\n return transactionSummary;\n}\n","import type { BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { TransactionCreate, TransactionScript } from '@fuel-ts/transactions';\nimport { PolicyType, TransactionCoder, TransactionType } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlConsensusParameters, GqlFeeParameters } from '../__generated__/operations';\nimport {\n calculateGasFee,\n calculateMetadataGasForTxCreate,\n calculateMetadataGasForTxScript,\n getMaxGas,\n getMinGas,\n} from '../utils/gas';\n\ntype FeeParams =\n | Pick<GqlFeeParameters, 'gasPerByte' | 'gasPriceFactor'>\n | {\n gasPerByte: BN | number;\n gasPriceFactor: BN | number;\n };\n\nexport type CalculateTransactionFeeParams = {\n gasPrice: BN;\n rawPayload: string;\n tip: BN;\n consensusParameters: Pick<GqlConsensusParameters, 'gasCosts'> & {\n feeParams: FeeParams;\n maxGasPerTx: BN;\n };\n};\n\nexport const calculateTransactionFee = (params: CalculateTransactionFeeParams) => {\n const {\n gasPrice,\n rawPayload,\n tip,\n consensusParameters: { gasCosts, feeParams, maxGasPerTx },\n } = params;\n\n const gasPerByte = bn(feeParams.gasPerByte);\n const gasPriceFactor = bn(feeParams.gasPriceFactor);\n\n const transactionBytes = arrayify(rawPayload);\n\n const [transaction] = new TransactionCoder().decode(transactionBytes, 0);\n\n if (transaction.type === TransactionType.Mint) {\n return {\n fee: bn(0),\n minFee: bn(0),\n maxFee: bn(0),\n };\n }\n\n const { type, witnesses, inputs, policies } = transaction as\n | TransactionCreate\n | TransactionScript;\n\n let metadataGas = bn(0);\n let gasLimit = bn(0);\n\n if (type === TransactionType.Create) {\n const { bytecodeWitnessIndex, storageSlots } = transaction as TransactionCreate;\n\n const contractBytesSize = bn(arrayify(witnesses[bytecodeWitnessIndex].data).length);\n\n metadataGas = calculateMetadataGasForTxCreate({\n contractBytesSize,\n gasCosts,\n stateRootSize: storageSlots.length || 0,\n txBytesSize: transactionBytes.length,\n });\n } else {\n const { scriptGasLimit } = transaction;\n\n if (scriptGasLimit) {\n gasLimit = scriptGasLimit;\n }\n\n metadataGas = calculateMetadataGasForTxScript({\n gasCosts,\n txBytesSize: transactionBytes.length,\n });\n }\n\n const minGas = getMinGas({\n gasCosts,\n gasPerByte: bn(gasPerByte),\n inputs,\n metadataGas,\n txBytesSize: transactionBytes.length,\n });\n\n const witnessLimit = policies.find((policy) => policy.type === PolicyType.WitnessLimit)?.data as\n | BN\n | undefined;\n\n const witnessesLength = witnesses.reduce((acc, wit) => acc + wit.dataLength, 0);\n\n const maxGas = getMaxGas({\n gasPerByte,\n minGas,\n witnessesLength,\n gasLimit,\n witnessLimit,\n maxGasPerTx,\n });\n\n const minFee = calculateGasFee({\n gasPrice,\n gas: minGas,\n priceFactor: gasPriceFactor,\n tip,\n });\n\n const maxFee = calculateGasFee({\n gasPrice,\n gas: maxGas,\n priceFactor: gasPriceFactor,\n tip,\n });\n\n return {\n minFee,\n maxFee,\n fee: maxFee,\n };\n};\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport { ReceiptType, TransactionType } from '@fuel-ts/transactions';\nimport type { InputContract, Output, OutputChange } from '@fuel-ts/transactions';\n\nimport type {\n TransactionResultReceipt,\n TransactionResultCallReceipt,\n TransactionResultMessageOutReceipt,\n TransactionResultTransferOutReceipt,\n TransactionResultTransferReceipt,\n} from '../transaction-response';\n\nimport { getFunctionCall } from './call';\nimport {\n getInputFromAssetId,\n getInputAccountAddress,\n getInputContractFromIndex,\n getInputsContract,\n getInputsCoinAndMessage,\n} from './input';\nimport {\n getOutputsChange,\n getOutputsCoin,\n getOutputsContract,\n getOutputsContractCreated,\n} from './output';\nimport { AddressType, ChainName, OperationName, TransactionTypeName } from './types';\nimport type {\n InputOutputParam,\n InputParam,\n OperationCoin,\n RawPayloadParam,\n ReceiptParam,\n Operation,\n GetOperationParams,\n GetTransferOperationsParams,\n} from './types';\n\n/** @hidden */\nexport function getReceiptsByType<T = TransactionResultReceipt>(\n receipts: TransactionResultReceipt[],\n type: ReceiptType\n) {\n return (receipts ?? []).filter((r) => r.type === type) as T[];\n}\n\n/** @hidden */\nexport function getTransactionTypeName(transactionType: TransactionType): TransactionTypeName {\n switch (transactionType) {\n case TransactionType.Mint:\n return TransactionTypeName.Mint;\n case TransactionType.Create:\n return TransactionTypeName.Create;\n case TransactionType.Script:\n return TransactionTypeName.Script;\n default:\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_TYPE,\n `Invalid transaction type: ${transactionType}.`\n );\n }\n}\n\n/** @hidden */\nexport function isType(transactionType: TransactionType, type: TransactionTypeName) {\n const txType = getTransactionTypeName(transactionType);\n\n return txType === type;\n}\n\n/** @hidden */\nexport function isTypeMint(transactionType: TransactionType) {\n return isType(transactionType, TransactionTypeName.Mint);\n}\n\n/** @hidden */\nexport function isTypeCreate(transactionType: TransactionType) {\n return isType(transactionType, TransactionTypeName.Create);\n}\n\n/** @hidden */\nexport function isTypeScript(transactionType: TransactionType) {\n return isType(transactionType, TransactionTypeName.Script);\n}\n\n/** @hidden */\nexport function hasSameAssetId(a: OperationCoin) {\n return (b: OperationCoin) => a.assetId === b.assetId;\n}\n\n/** @hidden */\nexport function getReceiptsCall(receipts: TransactionResultReceipt[]) {\n return getReceiptsByType<TransactionResultCallReceipt>(receipts, ReceiptType.Call);\n}\n\n/** @hidden */\nexport function getReceiptsMessageOut(receipts: TransactionResultReceipt[]) {\n return getReceiptsByType<TransactionResultMessageOutReceipt>(receipts, ReceiptType.MessageOut);\n}\n\n/** @hidden */\nconst mergeAssets = (op1: Operation, op2: Operation) => {\n const assets1 = op1.assetsSent || [];\n const assets2 = op2.assetsSent || [];\n\n // Getting assets from op2 that don't exist in op1\n const filteredAssets = assets2.filter(\n (asset2) => !assets1.some((asset1) => asset1.assetId === asset2.assetId)\n );\n\n // Merge assets that already exist in op1\n const mergedAssets = assets1.map((asset1) => {\n // Find matching asset in op2\n const matchingAsset = assets2.find((asset2) => asset2.assetId === asset1.assetId);\n if (!matchingAsset) {\n // No matching asset found, return asset1\n return asset1;\n }\n // Matching asset found, merge amounts\n const mergedAmount = bn(asset1.amount).add(matchingAsset.amount);\n return { ...asset1, amount: mergedAmount };\n });\n\n // Return merged assets from op1 with filtered assets from op2\n return mergedAssets.concat(filteredAssets);\n};\n\n/** @hidden */\nfunction isSameOperation(a: Operation, b: Operation) {\n return (\n a.name === b.name &&\n a.from?.address === b.from?.address &&\n a.to?.address === b.to?.address &&\n a.from?.type === b.from?.type &&\n a.to?.type === b.to?.type\n );\n}\n\n/** @hidden */\nexport function addOperation(operations: Operation[], toAdd: Operation) {\n const allOperations = [...operations];\n\n // Verifying if the operation to add already exists.\n const index = allOperations.findIndex((op) => isSameOperation(op, toAdd));\n\n if (allOperations[index]) {\n // Existent operation, we want to edit it.\n const existentOperation = { ...allOperations[index] };\n\n if (toAdd.assetsSent?.length) {\n /**\n * If the assetSent already exists, we call 'mergeAssets' to merge possible\n * entries of the same 'assetId', otherwise we just add the new 'assetSent'.\n */\n existentOperation.assetsSent = existentOperation.assetsSent?.length\n ? mergeAssets(existentOperation, toAdd)\n : toAdd.assetsSent;\n }\n\n if (toAdd.calls?.length) {\n // We need to stack the new call(s) with the possible existent ones.\n existentOperation.calls = [...(existentOperation.calls || []), ...toAdd.calls];\n }\n\n allOperations[index] = existentOperation;\n } else {\n // New operation, we can simply add it.\n allOperations.push(toAdd);\n }\n\n return allOperations;\n}\n\n/** @hidden */\nexport function getReceiptsTransferOut(receipts: TransactionResultReceipt[]) {\n return getReceiptsByType<TransactionResultTransferOutReceipt>(receipts, ReceiptType.TransferOut);\n}\n\n/** @hidden */\nexport function getWithdrawFromFuelOperations({\n inputs,\n receipts,\n}: InputParam & ReceiptParam): Operation[] {\n const messageOutReceipts = getReceiptsMessageOut(receipts);\n\n const withdrawFromFuelOperations = messageOutReceipts.reduce(\n (prevWithdrawFromFuelOps, receipt) => {\n // TODO: replace this hardcode with receipt.assetId when assetId gets added to MessageOutReceipt\n const assetId = '0x0000000000000000000000000000000000000000000000000000000000000000';\n const input = getInputFromAssetId(inputs, assetId);\n if (input) {\n const inputAddress = getInputAccountAddress(input);\n const newWithdrawFromFuelOps = addOperation(prevWithdrawFromFuelOps, {\n name: OperationName.withdrawFromFuel,\n from: {\n type: AddressType.account,\n address: inputAddress,\n },\n to: {\n type: AddressType.account,\n address: receipt.recipient.toString(),\n chain: ChainName.ethereum,\n },\n assetsSent: [\n {\n amount: receipt.amount,\n assetId,\n },\n ],\n });\n\n return newWithdrawFromFuelOps;\n }\n\n return prevWithdrawFromFuelOps;\n },\n [] as Operation[]\n );\n\n return withdrawFromFuelOperations;\n}\n\n/** @hidden */\nexport function getContractCallOperations({\n inputs,\n outputs,\n receipts,\n abiMap,\n rawPayload,\n maxInputs,\n}: InputOutputParam &\n ReceiptParam &\n Pick<GetOperationParams, 'abiMap' | 'maxInputs'> &\n RawPayloadParam): Operation[] {\n const contractCallReceipts = getReceiptsCall(receipts);\n const contractOutputs = getOutputsContract(outputs);\n\n const contractCallOperations = contractOutputs.reduce((prevOutputCallOps, output) => {\n const contractInput = getInputContractFromIndex(inputs, output.inputIndex);\n\n if (contractInput) {\n const newCallOps = contractCallReceipts.reduce((prevContractCallOps, receipt) => {\n if (receipt.to === contractInput.contractID) {\n const input = getInputFromAssetId(inputs, receipt.assetId);\n if (input) {\n const inputAddress = getInputAccountAddress(input);\n const calls = [];\n\n const abi = abiMap?.[contractInput.contractID];\n if (abi) {\n calls.push(\n getFunctionCall({\n abi,\n receipt,\n rawPayload,\n maxInputs,\n })\n );\n }\n\n const newContractCallOps = addOperation(prevContractCallOps, {\n name: OperationName.contractCall,\n from: {\n type: AddressType.account,\n address: inputAddress,\n },\n to: {\n type: AddressType.contract,\n address: receipt.to,\n },\n // if no amount is forwarded to the contract, skip showing assetsSent\n assetsSent: receipt.amount?.isZero()\n ? undefined\n : [\n {\n amount: receipt.amount,\n assetId: receipt.assetId,\n },\n ],\n calls,\n });\n\n return newContractCallOps;\n }\n }\n return prevContractCallOps;\n }, prevOutputCallOps as Operation[]);\n\n return newCallOps;\n }\n\n return prevOutputCallOps;\n }, [] as Operation[]);\n\n return contractCallOperations;\n}\n\n/** @hidden */\nfunction extractTransferOperationFromReceipt(\n receipt: TransactionResultTransferReceipt | TransactionResultTransferOutReceipt,\n contractInputs: InputContract[],\n changeOutputs: OutputChange[]\n) {\n const { to: toAddress, assetId, amount } = receipt;\n let { from: fromAddress } = receipt;\n\n const toType = contractInputs.some((input) => input.contractID === toAddress)\n ? AddressType.contract\n : AddressType.account;\n\n if (ZeroBytes32 === fromAddress) {\n const change = changeOutputs.find((output) => output.assetId === assetId);\n\n fromAddress = change?.to || fromAddress;\n }\n\n const fromType = contractInputs.some((input) => input.contractID === fromAddress)\n ? AddressType.contract\n : AddressType.account;\n\n return {\n name: OperationName.transfer,\n from: {\n type: fromType,\n address: fromAddress,\n },\n to: {\n type: toType,\n address: toAddress,\n },\n assetsSent: [\n {\n assetId: assetId.toString(),\n amount,\n },\n ],\n };\n}\n\n/** @hidden */\nexport function getTransferOperations({\n inputs,\n outputs,\n receipts,\n}: GetTransferOperationsParams): Operation[] {\n let operations: Operation[] = [];\n\n const coinOutputs = getOutputsCoin(outputs);\n const contractInputs = getInputsContract(inputs);\n const changeOutputs = getOutputsChange(outputs);\n\n /**\n * Extracting transfer operations between wallets, as they do not produce receipts\n */\n coinOutputs.forEach((output) => {\n const { amount, assetId, to } = output;\n\n const changeOutput = changeOutputs.find((change) => change.assetId === assetId);\n\n if (changeOutput) {\n operations = addOperation(operations, {\n name: OperationName.transfer,\n from: {\n type: AddressType.account,\n address: changeOutput.to,\n },\n to: {\n type: AddressType.account,\n address: to,\n },\n assetsSent: [\n {\n assetId,\n amount,\n },\n ],\n });\n }\n });\n\n /**\n * `Transfer` receipts are produced from transfers:\n * - Wallet to Contract\n * - Contract to Contract\n */\n const transferReceipts = getReceiptsByType<TransactionResultTransferReceipt>(\n receipts,\n ReceiptType.Transfer\n );\n\n /**\n * `TransferOut` receipts are produced from transfer:\n * - Contract to Wallet\n */\n const transferOutReceipts = getReceiptsByType<TransactionResultTransferOutReceipt>(\n receipts,\n ReceiptType.TransferOut\n );\n\n [...transferReceipts, ...transferOutReceipts].forEach((receipt) => {\n const operation = extractTransferOperationFromReceipt(receipt, contractInputs, changeOutputs);\n\n operations = addOperation(operations, operation);\n });\n\n return operations;\n}\n\n/** @hidden */\nexport function getPayProducerOperations(outputs: Output[]): Operation[] {\n const coinOutputs = getOutputsCoin(outputs);\n const payProducerOperations = coinOutputs.reduce((prev, output) => {\n const operations = addOperation(prev, {\n name: OperationName.payBlockProducer,\n from: {\n type: AddressType.account,\n address: 'Network',\n },\n to: {\n type: AddressType.account,\n address: output.to.toString(),\n },\n assetsSent: [\n {\n assetId: output.assetId.toString(),\n amount: output.amount,\n },\n ],\n });\n\n return operations;\n }, [] as Operation[]);\n\n return payProducerOperations;\n}\n\n/** @hidden */\nexport function getContractCreatedOperations({ inputs, outputs }: InputOutputParam): Operation[] {\n const contractCreatedOutputs = getOutputsContractCreated(outputs);\n const input = getInputsCoinAndMessage(inputs)[0];\n const fromAddress = getInputAccountAddress(input);\n const contractCreatedOperations = contractCreatedOutputs.reduce((prev, contractCreatedOutput) => {\n const operations = addOperation(prev, {\n name: OperationName.contractCreated,\n from: {\n type: AddressType.account,\n address: fromAddress,\n },\n to: {\n type: AddressType.contract,\n address: contractCreatedOutput?.contractId || '',\n },\n });\n\n return operations;\n }, [] as Operation[]);\n\n return contractCreatedOperations;\n}\n\n/** @hidden */\nexport function getOperations({\n transactionType,\n inputs,\n outputs,\n receipts,\n abiMap,\n rawPayload,\n maxInputs,\n}: GetOperationParams): Operation[] {\n if (isTypeCreate(transactionType)) {\n return [\n ...getContractCreatedOperations({ inputs, outputs }),\n ...getTransferOperations({ inputs, outputs, receipts }),\n ];\n }\n\n if (isTypeScript(transactionType)) {\n return [\n ...getTransferOperations({ inputs, outputs, receipts }),\n ...getContractCallOperations({\n inputs,\n outputs,\n receipts,\n abiMap,\n rawPayload,\n maxInputs,\n }),\n ...getWithdrawFromFuelOperations({ inputs, receipts }),\n ];\n }\n // at this point we are sure it's a mint transaction\n return [...getPayProducerOperations(outputs)];\n}\n","import { Interface, type JsonAbi, calculateVmTxMemory } from '@fuel-ts/abi-coder';\nimport type { BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { ReceiptCall } from '@fuel-ts/transactions';\n\ntype GetFunctionCallProps = {\n abi: JsonAbi;\n receipt: ReceiptCall;\n rawPayload?: string;\n maxInputs: BN;\n};\n\nexport const getFunctionCall = ({ abi, receipt, rawPayload, maxInputs }: GetFunctionCallProps) => {\n const abiInterface = new Interface(abi);\n const callFunctionSelector = receipt.param1.toHex(8);\n const functionFragment = abiInterface.getFunction(callFunctionSelector);\n const inputs = functionFragment.jsonFn.inputs;\n\n let encodedArgs;\n\n // if has more than 1 input or input type is bigger than 8 bytes, then it's a pointer to data\n if (functionFragment.isInputDataPointer) {\n if (rawPayload) {\n // calculate offset to get function params from rawPayload. should also consider vm offset\n const argsOffset = bn(receipt.param2)\n .sub(calculateVmTxMemory({ maxInputs: maxInputs.toNumber() }))\n .toNumber();\n\n // slice(2) to remove first 0x, then slice again to remove offset and get only args\n encodedArgs = `0x${rawPayload.slice(2).slice(argsOffset * 2)}`;\n }\n } else {\n // for small inputs, param2 is directly the value\n encodedArgs = receipt.param2.toHex();\n }\n\n let argumentsProvided;\n if (encodedArgs) {\n // use bytes got from rawPayload to decode function params\n const data = functionFragment.decodeArguments(encodedArgs);\n if (data) {\n // put together decoded data with input names from abi\n argumentsProvided = inputs.reduce((prev, input, index) => {\n const value = data[index];\n const name = input.name;\n\n if (name) {\n return {\n ...prev,\n // reparse to remove bn\n [name]: JSON.parse(JSON.stringify(value)),\n };\n }\n\n return prev;\n }, {});\n }\n }\n\n const call = {\n functionSignature: functionFragment.signature,\n functionName: functionFragment.name,\n argumentsProvided,\n ...(receipt.amount?.isZero() ? {} : { amount: receipt.amount, assetId: receipt.assetId }),\n };\n\n return call;\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { Input, InputCoin, InputContract, InputMessage } from '@fuel-ts/transactions';\nimport { InputType } from '@fuel-ts/transactions';\n\n/** @hidden */\nexport function getInputsByTypes<T = Input>(inputs: Input[], types: Array<InputType>) {\n return inputs.filter((i) => types.includes(i.type)) as T[];\n}\n\n/** @hidden */\nexport function getInputsByType<T = Input>(inputs: Input[], type: InputType) {\n return inputs.filter((i) => i.type === type) as T[];\n}\n\n/** @hidden */\nexport function getInputsCoin(inputs: Input[]) {\n return getInputsByType<InputCoin>(inputs, InputType.Coin);\n}\n\n/** @hidden */\nexport function getInputsMessage(inputs: Input[]) {\n return getInputsByType<InputMessage>(inputs, InputType.Message);\n}\n\n/** @hidden */\nexport function getInputsCoinAndMessage(inputs: Input[]) {\n return getInputsByTypes<InputCoin | InputMessage>(inputs, [InputType.Coin, InputType.Message]);\n}\n\n/** @hidden */\nexport function getInputsContract(inputs: Input[]) {\n return getInputsByType<InputContract>(inputs, InputType.Contract);\n}\n\n/** @hidden */\nexport function getInputFromAssetId(inputs: Input[], assetId: string) {\n const coinInputs = getInputsCoin(inputs);\n const messageInputs = getInputsMessage(inputs);\n const coinInput = coinInputs.find((i) => i.assetId === assetId);\n // TODO: should include assetId in InputMessage as well. for now we're mocking ETH\n const messageInput = messageInputs.find(\n (_) => assetId === '0x0000000000000000000000000000000000000000000000000000000000000000'\n );\n\n return coinInput || messageInput;\n}\n\n/** @hidden */\nexport function getInputContractFromIndex(\n inputs: Input[],\n inputIndex: number\n): InputContract | undefined {\n if (inputIndex == null) {\n return undefined;\n }\n\n const contractInput = inputs?.[inputIndex];\n\n if (!contractInput) {\n return undefined;\n }\n if (contractInput.type !== InputType.Contract) {\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_INPUT,\n `Contract input should be of type 'contract'.`\n );\n }\n\n return contractInput as InputContract;\n}\n\n/** @hidden */\nexport function getInputAccountAddress(input: Input) {\n if (input.type === InputType.Coin) {\n return input.owner.toString();\n }\n\n if (input.type === InputType.Message) {\n return input.recipient.toString();\n }\n\n return '';\n}\n","import type {\n Output,\n OutputChange,\n OutputCoin,\n OutputContract,\n OutputContractCreated,\n OutputVariable,\n} from '@fuel-ts/transactions';\nimport { OutputType } from '@fuel-ts/transactions';\n\n/** @hidden */\nexport function getOutputsByType<T = Output>(outputs: Output[], type: OutputType) {\n return outputs.filter((o) => o.type === type) as T[];\n}\n\n/** @hidden */\nexport function getOutputsContractCreated(outputs: Output[]) {\n return getOutputsByType<OutputContractCreated>(outputs, OutputType.ContractCreated);\n}\n\n/** @hidden */\nexport function getOutputsCoin(outputs: Output[]) {\n return getOutputsByType<OutputCoin>(outputs, OutputType.Coin);\n}\n\n/** @hidden */\nexport function getOutputsChange(outputs: Output[]) {\n return getOutputsByType<OutputChange>(outputs, OutputType.Change);\n}\n\n/** @hidden */\nexport function getOutputsContract(outputs: Output[]) {\n return getOutputsByType<OutputContract>(outputs, OutputType.Contract);\n}\n\n/** @hidden */\nexport function getOutputsVariable(outputs: Output[]) {\n return getOutputsByType<OutputVariable>(outputs, OutputType.Variable);\n}\n","import { ReceiptType } from '@fuel-ts/transactions';\n\nimport type { GqlReceiptFragmentFragment } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\nimport { assembleReceiptByType } from '../utils';\n\nimport type { BurnedAsset, MintedAsset } from './types';\n\nexport const processGqlReceipt = (\n gqlReceipt: GqlReceiptFragmentFragment\n): TransactionResultReceipt => {\n const receipt = assembleReceiptByType(gqlReceipt);\n\n switch (receipt.type) {\n case ReceiptType.ReturnData: {\n return {\n ...receipt,\n data: gqlReceipt.data || '0x',\n };\n }\n case ReceiptType.LogData: {\n return {\n ...receipt,\n data: gqlReceipt.data || '0x',\n };\n }\n default:\n return receipt;\n }\n};\n\nexport const extractMintedAssetsFromReceipts = (\n receipts: Array<TransactionResultReceipt>\n): MintedAsset[] => {\n const mintedAssets: MintedAsset[] = [];\n\n receipts.forEach((receipt) => {\n if (receipt.type === ReceiptType.Mint) {\n mintedAssets.push({\n subId: receipt.subId,\n contractId: receipt.contractId,\n assetId: receipt.assetId,\n amount: receipt.val,\n });\n }\n });\n\n return mintedAssets;\n};\n\nexport const extractBurnedAssetsFromReceipts = (\n receipts: Array<TransactionResultReceipt>\n): BurnedAsset[] => {\n const burnedAssets: BurnedAsset[] = [];\n\n receipts.forEach((receipt) => {\n if (receipt.type === ReceiptType.Burn) {\n burnedAssets.push({\n subId: receipt.subId,\n contractId: receipt.contractId,\n assetId: receipt.assetId,\n amount: receipt.val,\n });\n }\n });\n\n return burnedAssets;\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\n\nimport type {\n BlockId,\n GqlTransactionStatusesNames,\n GraphqlTransactionStatus,\n Time,\n TransactionSummary,\n} from './types';\nimport { TransactionStatus } from './types';\n\n/** @hidden */\nexport const getTransactionStatusName = (gqlStatus: GqlTransactionStatusesNames) => {\n switch (gqlStatus) {\n case 'FailureStatus':\n return TransactionStatus.failure;\n case 'SuccessStatus':\n return TransactionStatus.success;\n case 'SubmittedStatus':\n return TransactionStatus.submitted;\n case 'SqueezedOutStatus':\n return TransactionStatus.squeezedout;\n default:\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_STATUS,\n `Invalid transaction status: ${gqlStatus}.`\n );\n }\n};\n\ntype IProcessGraphqlStatusResponse = Pick<\n TransactionSummary,\n 'time' | 'blockId' | 'isStatusPending' | 'isStatusSuccess' | 'isStatusFailure' | 'status'\n>;\n\n/** @hidden */\nexport const processGraphqlStatus = (gqlTransactionStatus?: GraphqlTransactionStatus) => {\n let time: Time | undefined;\n let blockId: BlockId | undefined;\n let status: TransactionStatus | undefined;\n\n let isStatusFailure = false;\n let isStatusSuccess = false;\n let isStatusPending = false;\n\n if (gqlTransactionStatus?.type) {\n status = getTransactionStatusName(gqlTransactionStatus.type);\n\n switch (gqlTransactionStatus.type) {\n case 'SuccessStatus':\n time = gqlTransactionStatus.time;\n blockId = gqlTransactionStatus.block.id;\n isStatusSuccess = true;\n break;\n\n case 'FailureStatus':\n time = gqlTransactionStatus.time;\n blockId = gqlTransactionStatus.block.id;\n isStatusFailure = true;\n break;\n\n case 'SubmittedStatus':\n time = gqlTransactionStatus.time;\n isStatusPending = true;\n break;\n default:\n }\n }\n\n const processedGraphqlStatus: IProcessGraphqlStatusResponse = {\n time,\n blockId,\n status,\n isStatusFailure,\n isStatusSuccess,\n isStatusPending,\n };\n\n return processedGraphqlStatus;\n};\n","import type { JsonAbi } from '@fuel-ts/abi-coder';\nimport { Interface, BigNumberCoder } from '@fuel-ts/abi-coder';\nimport { ReceiptType } from '@fuel-ts/transactions';\n\nimport type { TransactionResultReceipt } from './transaction-response';\n\n/** @hidden */\nexport function getDecodedLogs<T = unknown>(\n receipts: Array<TransactionResultReceipt>,\n mainAbi: JsonAbi,\n externalAbis: Record<string, JsonAbi> = {}\n): T[] {\n /**\n * This helper decodes logs from transaction receipts.\n * It loops through all receipts and decodes two types of logs:\n * - ReceiptType.LogData\n * - ReceiptType.Log\n *\n * The \"mainAbi\" parameter represents the ABI of the main contract used to create the transaction\n * or the ABI from a script used within a \"BaseInvocationScope\" context.\n * The \"externalAbis\" parameter is a record of contract ABIs that are also part of the transaction.\n * These ABIs were added using `contract.addContracts` or through a multicall with `contract.multiCall`.\n *\n * @param receipts - The array of transaction result receipts.\n * @param mainAbi - The ABI of the script or main contract.\n * @param externalAbis - The record of external contract ABIs.\n * @returns An array of decoded logs from Sway projects.\n */\n return receipts.reduce((logs: T[], receipt) => {\n if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {\n const interfaceToUse = new Interface(externalAbis[receipt.id] || mainAbi);\n\n const data =\n receipt.type === ReceiptType.Log\n ? new BigNumberCoder('u64').encode(receipt.val0)\n : receipt.data;\n\n const [decodedLog] = interfaceToUse.decodeLog(data, receipt.val1.toNumber());\n logs.push(decodedLog);\n }\n\n return logs;\n }, []);\n}\n","import type { ProviderOptions } from '../provider';\n\nimport { sleep } from './sleep';\n\ntype Backoff = 'linear' | 'exponential' | 'fixed';\n\n/**\n * Retry options scheme\n */\nexport type RetryOptions = {\n /**\n * Amount of attempts to retry before failing the call.\n */\n maxRetries: number;\n /**\n * Backoff strategy to use when retrying. Default is exponential.\n */\n backoff?: Backoff;\n /**\n * Starting delay for backoff strategy. Default is 150ms.\n */\n baseDelay?: number;\n};\n\n/**\n * Calculate the delay for the next retry attempt\n * @param options - Retry options configuration\n * @param retryAttemptNum - 1-based, tells which retry attempt is this\n * @returns Next wait delay\n */\nexport function getWaitDelay(options: RetryOptions, retryAttemptNum: number) {\n const duration = options.baseDelay ?? 150;\n\n switch (options.backoff) {\n case 'linear':\n return duration * retryAttemptNum;\n case 'fixed':\n return duration;\n case 'exponential':\n default:\n return 2 ** (retryAttemptNum - 1) * duration;\n }\n}\n\n/**\n * Returns a wrapped fetch function that will auto-execute itself in case of errors, until it succeeds\n * @param fetchFn - Function to be auto-retried\n * @param options - Retry options configuration\n * @param retryAttemptNum - ZERO=first call, ONE=first retry, TWO=second retry, etc.\n * @returns Whatever is the output of the `fetchFn` function\n */\nexport function autoRetryFetch(\n fetchFn: NonNullable<ProviderOptions['fetch']>,\n options?: RetryOptions,\n retryAttemptNum: number = 0\n): NonNullable<ProviderOptions['fetch']> {\n if (options === undefined) {\n return fetchFn;\n }\n\n return async (...args) => {\n try {\n return await fetchFn(...args);\n } catch (_error: unknown) {\n const error = _error as Error & { cause?: { code: string } };\n\n /**\n * So far, we are auto-retrying only for `ECONNREFUSED` error.\n * TODO: Investigate if we should consider more errors.\n */\n if (error.cause?.code !== 'ECONNREFUSED') {\n throw error;\n }\n const retryNum = retryAttemptNum + 1;\n\n if (retryNum > options.maxRetries) {\n throw error;\n }\n\n const delay = getWaitDelay(options, retryNum);\n\n await sleep(delay);\n\n return autoRetryFetch(fetchFn, options, retryNum)(...args);\n }\n };\n}\n","import type { BN } from '@fuel-ts/math';\n\nimport type { CoinQuantity } from '../coin-quantity';\n\nexport const mergeQuantities = (...coinQuantities: CoinQuantity[][]): CoinQuantity[] => {\n const resultMap: { [key: string]: BN } = {};\n\n function addToMap({ amount, assetId }: CoinQuantity) {\n if (resultMap[assetId]) {\n resultMap[assetId] = resultMap[assetId].add(amount);\n } else {\n resultMap[assetId] = amount;\n }\n }\n\n coinQuantities.forEach((arr) => arr.forEach(addToMap));\n\n // Convert the resultMap back to an array\n return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport { TransactionCoder } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type {\n GqlGetTransactionsByOwnerQueryVariables,\n GqlPageInfo,\n GqlReceiptFragmentFragment,\n} from '../__generated__/operations';\nimport type Provider from '../provider';\nimport type { TransactionRequest } from '../transaction-request';\nimport type { TransactionResult } from '../transaction-response';\n\nimport { assembleTransactionSummary } from './assemble-transaction-summary';\nimport { processGqlReceipt } from './receipt';\nimport type { AbiMap, TransactionSummary } from './types';\n\n/** @hidden */\nexport interface GetTransactionSummaryParams {\n id: string;\n provider: Provider;\n abiMap?: AbiMap;\n}\n\nexport async function getTransactionSummary<TTransactionType = void>(\n params: GetTransactionSummaryParams\n): Promise<TransactionResult> {\n const { id, provider, abiMap } = params;\n\n const { transaction: gqlTransaction } = await provider.operations.getTransactionWithReceipts({\n transactionId: id,\n });\n\n if (!gqlTransaction) {\n throw new FuelError(\n ErrorCode.TRANSACTION_NOT_FOUND,\n `Transaction not found for given id: ${id}.`\n );\n }\n\n const [decodedTransaction] = new TransactionCoder().decode(\n arrayify(gqlTransaction.rawPayload),\n 0\n );\n\n let txReceipts: GqlReceiptFragmentFragment[] = [];\n\n if (gqlTransaction?.status && 'receipts' in gqlTransaction.status) {\n txReceipts = gqlTransaction.status.receipts;\n }\n\n const receipts = txReceipts.map(processGqlReceipt);\n\n const {\n consensusParameters: { gasPerByte, gasPriceFactor, maxInputs, gasCosts, maxGasPerTx },\n } = provider.getChain();\n\n const gasPrice = await provider.getLatestGasPrice();\n\n const transactionInfo = assembleTransactionSummary<TTransactionType>({\n id: gqlTransaction.id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: arrayify(gqlTransaction.rawPayload),\n gqlTransactionStatus: gqlTransaction.status,\n gasPerByte: bn(gasPerByte),\n gasPriceFactor: bn(gasPriceFactor),\n abiMap,\n maxInputs,\n gasCosts,\n maxGasPerTx,\n gasPrice,\n });\n\n return {\n gqlTransaction,\n ...transactionInfo,\n };\n}\n\nexport interface GetTransactionSummaryFromRequestParams {\n transactionRequest: TransactionRequest;\n provider: Provider;\n abiMap?: AbiMap;\n}\n\n/** @hidden */\nexport async function getTransactionSummaryFromRequest<TTransactionType = void>(\n params: GetTransactionSummaryFromRequestParams\n): Promise<TransactionSummary<TTransactionType>> {\n const { provider, transactionRequest, abiMap } = params;\n\n const { receipts } = await provider.call(transactionRequest);\n\n const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = provider.getGasConfig();\n const maxInputs = provider.getChain().consensusParameters.maxInputs;\n\n const transaction = transactionRequest.toTransaction();\n const transactionBytes = transactionRequest.toTransactionBytes();\n\n const gasPrice = await provider.getLatestGasPrice();\n\n const transactionSummary = assembleTransactionSummary<TTransactionType>({\n receipts,\n transaction,\n transactionBytes,\n abiMap,\n gasPerByte,\n gasPriceFactor,\n maxInputs,\n gasCosts,\n maxGasPerTx,\n gasPrice,\n });\n\n return transactionSummary;\n}\n\nexport interface GetTransactionsSummariesParams {\n provider: Provider;\n filters: GqlGetTransactionsByOwnerQueryVariables;\n abiMap?: AbiMap;\n}\n\nexport interface GetTransactionsSummariesReturns {\n transactions: TransactionResult[];\n pageInfo: GqlPageInfo;\n}\n\n/** @hidden */\nexport async function getTransactionsSummaries(\n params: GetTransactionsSummariesParams\n): Promise<GetTransactionsSummariesReturns> {\n const { filters, provider, abiMap } = params;\n\n const { transactionsByOwner } = await provider.operations.getTransactionsByOwner(filters);\n\n const { edges, pageInfo } = transactionsByOwner;\n\n const {\n consensusParameters: { gasPerByte, gasPriceFactor, maxInputs, gasCosts, maxGasPerTx },\n } = provider.getChain();\n\n const gasPrice = await provider.getLatestGasPrice();\n\n const transactions = edges.map((edge) => {\n const { node: gqlTransaction } = edge;\n\n const { id, rawPayload, status } = gqlTransaction;\n\n const [decodedTransaction] = new TransactionCoder().decode(arrayify(rawPayload), 0);\n\n let txReceipts: GqlReceiptFragmentFragment[] = [];\n\n if (gqlTransaction?.status && 'receipts' in gqlTransaction.status) {\n txReceipts = gqlTransaction.status.receipts;\n }\n\n const receipts = txReceipts.map(processGqlReceipt);\n\n const transactionSummary = assembleTransactionSummary({\n id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: arrayify(rawPayload),\n gqlTransactionStatus: status,\n abiMap,\n gasPerByte,\n gasPriceFactor,\n maxInputs,\n gasCosts,\n maxGasPerTx,\n gasPrice,\n });\n\n const output: TransactionResult = {\n gqlTransaction,\n ...transactionSummary,\n };\n\n return output;\n });\n\n return {\n transactions,\n pageInfo,\n };\n}\n","export const CHAIN_IDS = {\n eth: {\n sepolia: 11155111,\n foundry: 31337,\n },\n fuel: {\n beta5: 0,\n devnet: 10,\n },\n};\n","import { CHAIN_IDS } from '../chains';\n\nimport type { Assets } from './types';\n\nexport const assets: Assets = [\n {\n name: 'Ethereum',\n symbol: 'ETH',\n icon: 'eth.svg',\n networks: [\n {\n type: 'ethereum',\n chainId: CHAIN_IDS.eth.sepolia,\n decimals: 18,\n },\n {\n type: 'ethereum',\n chainId: CHAIN_IDS.eth.foundry,\n decimals: 18,\n },\n {\n type: 'fuel',\n chainId: CHAIN_IDS.fuel.beta5,\n decimals: 9,\n assetId: '0x0000000000000000000000000000000000000000000000000000000000000000',\n },\n {\n type: 'fuel',\n chainId: CHAIN_IDS.fuel.devnet,\n decimals: 9,\n assetId: '0x0000000000000000000000000000000000000000000000000000000000000000',\n },\n ],\n },\n];\n\nexport * from './utils';\nexport * from './types';\n","import { BigNumberCoder } from '@fuel-ts/abi-coder';\nimport type { B256Address, BytesLike } from '@fuel-ts/interfaces';\nimport { BN, type BigNumberish } from '@fuel-ts/math';\nimport { arrayify } from '@fuel-ts/utils';\nimport * as asm from '@fuels/vm-asm';\n\ninterface IAssembleTransferToContractScriptParams {\n hexlifiedContractId: B256Address;\n amountToTransfer: BigNumberish;\n assetId: BytesLike;\n}\n\nexport const formatTransferToContractScriptData = (\n params: IAssembleTransferToContractScriptParams\n) => {\n const { assetId, amountToTransfer, hexlifiedContractId } = params;\n\n const numberCoder = new BigNumberCoder('u64');\n\n const encoded = numberCoder.encode(new BN(amountToTransfer).toNumber());\n\n const scriptData = Uint8Array.from([\n ...arrayify(hexlifiedContractId),\n ...encoded,\n ...arrayify(assetId),\n ]);\n\n return scriptData;\n};\n\nexport const assembleTransferToContractScript = async (\n params: IAssembleTransferToContractScriptParams\n) => {\n const scriptData = formatTransferToContractScriptData(params);\n\n // implementation extracted from Rust SDK at:\n // https://github.com/FuelLabs/fuels-rs/blob/master/packages/fuels-core/src/types/transaction_builders.rs#L240-L272\n // This script loads:\n // - a pointer to the contract id,\n // - the actual amount\n // - a pointer to the asset id\n // into the registers 0x10, 0x12, 0x13\n // and calls the TR instruction\n\n // TODO: Remove ts-expect-error\n // @ts-expect-error method reference missing in DTS\n await asm.initWasm();\n\n // const gtf = fuelAsm.gtf(0x10, 0x00, 0xc);\n const gtf = asm.gtf(0x10, 0x00, asm.GTFArgs.ScriptData);\n const addi = asm.addi(0x11, 0x10, 0x20);\n const lw = asm.lw(0x12, 0x11, 0x0);\n const addi2 = asm.addi(0x13, 0x11, 0x8);\n const tr = asm.tr(0x10, 0x12, 0x13);\n const ret = asm.ret(0x1);\n\n const script = Uint8Array.from([\n ...gtf.to_bytes(),\n ...addi.to_bytes(),\n ...lw.to_bytes(),\n ...addi2.to_bytes(),\n ...tr.to_bytes(),\n ...ret.to_bytes(),\n ]);\n\n return { script, scriptData };\n};\n","import { Address } from '@fuel-ts/address';\nimport { randomBytes } from '@fuel-ts/crypto';\nimport { hash } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { toBytes } from '@fuel-ts/math';\nimport { hexlify, concat, arrayify } from '@fuel-ts/utils';\nimport { secp256k1 } from '@noble/curves/secp256k1';\n\nexport class Signer {\n readonly address: Address;\n\n readonly publicKey: string;\n\n readonly compressedPublicKey: string;\n\n readonly privateKey: string;\n\n /**\n * Create a Signer instance from a given private key\n *\n * @param privateKey - The private key to use for signing\n * @returns A new Signer instance\n */\n constructor(privateKey: BytesLike) {\n // A lot of common tools do not prefix private keys with a 0x\n if (typeof privateKey === 'string') {\n if (privateKey.match(/^[0-9a-f]*$/i) && privateKey.length === 64) {\n // eslint-disable-next-line no-param-reassign\n privateKey = `0x${privateKey}`;\n }\n }\n // Convert to byte array, normalize private key input allowing it to be BytesLike\n // like remove 0x prefix and accept array of bytes\n const privateKeyBytes = toBytes(privateKey, 32);\n\n this.privateKey = hexlify(privateKeyBytes);\n\n // Slice(1) removes the encoding scheme from the public key\n this.publicKey = hexlify(secp256k1.getPublicKey(privateKeyBytes, false).slice(1));\n this.compressedPublicKey = hexlify(secp256k1.getPublicKey(privateKeyBytes, true));\n this.address = Address.fromPublicKey(this.publicKey);\n }\n\n /**\n * Sign data using the Signer instance\n *\n * Signature is a 64 byte array of the concatenated r and s values with the compressed recoveryParam byte.\n * @ignore\n * [Read more](FuelLabs/fuel-specs/specs/protocol/cryptographic_primitives.md#public-key-cryptography)\n *\n * @param data - The data to be sign\n * @returns hashed signature\n */\n sign(data: BytesLike) {\n const signature = secp256k1.sign(arrayify(data), arrayify(this.privateKey));\n\n const r = toBytes(`0x${signature.r.toString(16)}`, 32);\n const s = toBytes(`0x${signature.s.toString(16)}`, 32);\n\n // add recoveryParam to first s byte\n s[0] |= (signature.recovery || 0) << 7;\n\n return hexlify(concat([r, s]));\n }\n\n /**\n * Add point on the current elliptic curve\n *\n * @param point - Point to add on the curve\n * @returns compressed point on the curve\n */\n addPoint(point: BytesLike) {\n const p0 = secp256k1.ProjectivePoint.fromHex(arrayify(this.compressedPublicKey));\n const p1 = secp256k1.ProjectivePoint.fromHex(arrayify(point));\n const result = p0.add(p1);\n return `0x${result.toHex(true)}`;\n }\n\n /**\n * Recover the public key from a signature performed with [`sign`](#sign).\n *\n * @param data - Data\n * @param signature - hashed signature\n * @returns public key from signature from the\n */\n static recoverPublicKey(data: BytesLike, signature: BytesLike): string {\n const signedMessageBytes = arrayify(signature);\n const r = signedMessageBytes.slice(0, 32);\n const s = signedMessageBytes.slice(32, 64);\n const recoveryParam = (s[0] & 0x80) >> 7;\n\n // remove recoveryParam from s first byte\n s[0] &= 0x7f;\n\n const sig = new secp256k1.Signature(BigInt(hexlify(r)), BigInt(hexlify(s))).addRecoveryBit(\n recoveryParam\n );\n\n const publicKey = sig.recoverPublicKey(arrayify(data)).toRawBytes(false).slice(1);\n return hexlify(publicKey);\n }\n\n /**\n * Recover the address from a signature performed with [`sign`](#sign).\n *\n * @param data - Data\n * @param signature - Signature\n * @returns Address from signature\n */\n static recoverAddress(data: BytesLike, signature: BytesLike): Address {\n return Address.fromPublicKey(Signer.recoverPublicKey(data, signature));\n }\n\n /**\n * Generate a random privateKey\n *\n * @param entropy - Adds extra entropy to generate the privateKey\n * @returns random 32-byte hashed\n */\n static generatePrivateKey(entropy?: BytesLike) {\n return entropy ? hash(concat([randomBytes(32), arrayify(entropy)])) : randomBytes(32);\n }\n\n /**\n * Extended publicKey from a compact publicKey\n *\n * @param publicKey - Compact publicKey\n * @returns extended publicKey\n */\n static extendPublicKey(publicKey: BytesLike) {\n const point = secp256k1.ProjectivePoint.fromHex(arrayify(publicKey));\n return hexlify(point.toRawBytes(false).slice(1));\n }\n}\n","import { Address } from '@fuel-ts/address';\nimport {\n bufferFromString,\n keccak256,\n randomBytes,\n scrypt,\n stringFromBuffer,\n decryptJsonWalletData,\n encryptJsonWalletData,\n} from '@fuel-ts/crypto';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\nimport { hexlify } from '@fuel-ts/utils';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport type KeystoreWallet = {\n id: string;\n version: number;\n address: string;\n crypto: KeystoreCrypto;\n};\n\ntype KeystoreCrypto = {\n cipher: 'aes-128-ctr';\n cipherparams: { iv: string };\n ciphertext: string;\n kdf: 'scrypt';\n mac: string;\n kdfparams: KDFParams;\n};\n\ntype KDFParams = {\n dklen: number;\n n: number;\n p: number;\n r: number;\n salt: string;\n};\n\n// Same values used in the Rust SDK\nexport const DEFAULT_KDF_PARAMS_LOG_N = 13;\nexport const DEFAULT_KDF_PARAMS_R = 8;\nexport const DEFAULT_KDF_PARAMS_P = 1;\nexport const DEFAULT_KEY_SIZE = 32;\nexport const DEFAULT_IV_SIZE = 16;\n\n/**\n * Removes the '0x' prefix from a hexadecimal string.\n * If the prefix does not exist, it returns the original string.\n */\nexport const removeHexPrefix = (hexString: string) => {\n if (/^0x/.test(hexString)) {\n return hexString.slice(2);\n }\n\n return hexString;\n};\n\nexport async function encryptKeystoreWallet(\n privateKey: string,\n address: string | AbstractAddress,\n password: string\n): Promise<string> {\n // Convert the hexlified private key string to a Buffer.\n const privateKeyBuffer = bufferFromString(removeHexPrefix(privateKey), 'hex');\n const ownerAddress = Address.fromAddressOrString(address);\n // Generate a random salt.\n const salt = randomBytes(DEFAULT_KEY_SIZE);\n\n const key = scrypt({\n password: bufferFromString(password),\n salt,\n dklen: DEFAULT_KEY_SIZE,\n n: 2 ** DEFAULT_KDF_PARAMS_LOG_N,\n r: DEFAULT_KDF_PARAMS_R,\n p: DEFAULT_KDF_PARAMS_P,\n });\n\n // Encrypt the private key using AES-128-CTR.\n const iv = randomBytes(DEFAULT_IV_SIZE);\n\n const ciphertext = await encryptJsonWalletData(privateKeyBuffer, key, iv);\n\n const data = Uint8Array.from([...key.subarray(16, 32), ...ciphertext]);\n\n // Calculate the MAC.\n const macHashUint8Array = keccak256(data);\n\n const mac = stringFromBuffer(macHashUint8Array, 'hex');\n\n // Construct keystore.\n const keystore: KeystoreWallet = {\n id: uuidv4(),\n version: 3,\n address: removeHexPrefix(ownerAddress.toHexString()),\n crypto: {\n cipher: 'aes-128-ctr',\n mac,\n cipherparams: { iv: stringFromBuffer(iv, 'hex') },\n ciphertext: stringFromBuffer(ciphertext, 'hex'),\n kdf: 'scrypt',\n kdfparams: {\n dklen: DEFAULT_KEY_SIZE,\n n: 2 ** DEFAULT_KDF_PARAMS_LOG_N,\n p: DEFAULT_KDF_PARAMS_P,\n r: DEFAULT_KDF_PARAMS_R,\n salt: stringFromBuffer(salt, 'hex'),\n },\n },\n };\n\n return JSON.stringify(keystore);\n}\n\nexport async function decryptKeystoreWallet(jsonWallet: string, password: string): Promise<string> {\n const keystoreWallet = JSON.parse(jsonWallet) as KeystoreWallet;\n\n // Extract the parameters needed for decryption.\n const {\n crypto: {\n mac,\n ciphertext,\n cipherparams: { iv },\n kdfparams: { dklen, n, r, p, salt },\n },\n } = keystoreWallet;\n\n const ciphertextBuffer = bufferFromString(ciphertext, 'hex');\n const ivBuffer = bufferFromString(iv, 'hex');\n const saltBuffer = bufferFromString(salt, 'hex');\n\n const passwordBuffer = bufferFromString(password);\n\n const key = scrypt({\n password: passwordBuffer,\n salt: saltBuffer,\n n,\n p,\n r,\n dklen,\n });\n\n // Verify the MAC. It should be the Keccak-256 hash of the concatenation of the second half of the derived key and the ciphertext.\n const data = Uint8Array.from([...key.subarray(16, 32), ...ciphertextBuffer]);\n\n const macHashUint8Array = keccak256(data);\n\n const macHash = stringFromBuffer(macHashUint8Array, 'hex');\n\n if (mac !== macHash) {\n throw new FuelError(\n ErrorCode.INVALID_PASSWORD,\n 'Failed to decrypt the keystore wallet, the provided password is incorrect.'\n );\n }\n\n // Decrypt the private key.\n const buffer = await decryptJsonWalletData(ciphertextBuffer, key, ivBuffer);\n\n const privateKey = hexlify(buffer);\n\n return privateKey;\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { sha256 } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { bn, toBytes, toHex } from '@fuel-ts/math';\nimport { arrayify, hexlify, concat } from '@fuel-ts/utils';\nimport { toBeHex, dataSlice, encodeBase58, decodeBase58, computeHmac, ripemd160 } from 'ethers';\n\nimport { Mnemonic } from '../mnemonic';\nimport { Signer } from '../signer';\n\n// \"Bitcoin seed\"\nconst HARDENED_INDEX = 0x80000000;\n\n// 4 byte: version bytes (mainnet: 0x0488B21E public, 0x0488ADE4 private; testnet: 0x043587CF public, 0x04358394 private)\nconst MainnetPRV = hexlify('0x0488ade4');\nconst MainnetPUB = hexlify('0x0488b21e');\nconst TestnetPRV = hexlify('0x04358394');\nconst TestnetPUB = hexlify('0x043587cf');\n\nfunction base58check(data: Uint8Array): string {\n return encodeBase58(concat([data, dataSlice(sha256(sha256(data)), 0, 4)]));\n}\n\nfunction getExtendedKeyPrefix(isPublic: boolean = false, testnet: boolean = false) {\n if (isPublic) {\n return testnet ? TestnetPUB : MainnetPUB;\n }\n return testnet ? TestnetPRV : MainnetPRV;\n}\n\nfunction isPublicExtendedKey(extendedKey: Uint8Array) {\n return [MainnetPUB, TestnetPUB].includes(hexlify(extendedKey.slice(0, 4)));\n}\n\nfunction isValidExtendedKey(extendedKey: Uint8Array) {\n return [MainnetPRV, TestnetPRV, MainnetPUB, TestnetPUB].includes(\n hexlify(extendedKey.slice(0, 4))\n );\n}\n\nfunction parsePath(path: string, depth: number = 0) {\n const components = path.split('/');\n\n if (components.length === 0 || (components[0] === 'm' && depth !== 0)) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, `invalid path - ${path}`);\n }\n\n if (components[0] === 'm') {\n components.shift();\n }\n\n return components.map((p) =>\n ~p.indexOf(`'`) ? parseInt(p, 10) + HARDENED_INDEX : parseInt(p, 10)\n );\n}\n\ntype HDWalletConfig = {\n privateKey?: BytesLike;\n publicKey?: BytesLike;\n chainCode: BytesLike;\n depth?: number;\n index?: number;\n parentFingerprint?: string;\n};\n\nclass HDWallet {\n depth: number = 0;\n index: number = 0;\n fingerprint: string = hexlify('0x00000000');\n parentFingerprint: string = hexlify('0x00000000');\n privateKey?: string;\n publicKey: string;\n chainCode: BytesLike;\n\n /**\n * HDWallet is a implementation of the BIP-0044 and BIP-0032, Multi-Account Hierarchy for Deterministic Wallets\n *\n * @param config - Wallet configurations\n */\n constructor(config: HDWalletConfig) {\n // TODO: set some asserts here\n\n if (config.privateKey) {\n const signer = new Signer(config.privateKey);\n this.publicKey = hexlify(signer.compressedPublicKey);\n this.privateKey = hexlify(config.privateKey);\n } else {\n if (!config.publicKey) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n 'Both public and private Key cannot be missing. At least one should be provided.'\n );\n }\n this.publicKey = hexlify(config.publicKey);\n }\n\n this.parentFingerprint = config.parentFingerprint || this.parentFingerprint;\n this.fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4);\n this.depth = config.depth || this.depth;\n this.index = config.index || this.index;\n this.chainCode = config.chainCode;\n }\n\n get extendedKey() {\n return this.toExtendedKey();\n }\n\n /**\n * Derive the current HDWallet instance navigating only on the index.\n * `Ex.: m/44'/0 -> Ex.: m/44'/1 -> m/44'/2`. [Learn more](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)\n *\n * @param index - Index of the child HDWallet.\n * @returns A new instance of HDWallet on the derived index\n */\n deriveIndex(index: number) {\n const privateKey = this.privateKey && arrayify(this.privateKey);\n const publicKey = arrayify(this.publicKey);\n const chainCode = arrayify(this.chainCode);\n const data = new Uint8Array(37);\n\n if (index & HARDENED_INDEX) {\n if (!privateKey) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n 'Cannot derive a hardened index without a private Key.'\n );\n }\n\n // 33 bytes: 0x00 || private key\n data.set(privateKey, 1);\n } else {\n data.set(arrayify(this.publicKey));\n }\n\n // child number: ser32(i)\n data.set(toBytes(index, 4), 33);\n\n const bytes = arrayify(computeHmac('sha512', chainCode, data));\n const IL = bytes.slice(0, 32);\n const IR = bytes.slice(32);\n\n if (privateKey) {\n const N = '0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141';\n // Child key ki is parse256(IL) + kpar (mod n).\n const ki = bn(IL).add(privateKey).mod(N).toBytes(32);\n\n return new HDWallet({\n privateKey: ki,\n chainCode: IR,\n index,\n depth: this.depth + 1,\n parentFingerprint: this.fingerprint,\n });\n }\n\n const signer = new Signer(hexlify(IL));\n const Ki = signer.addPoint(publicKey);\n\n return new HDWallet({\n publicKey: Ki,\n chainCode: IR,\n index,\n depth: this.depth + 1,\n parentFingerprint: this.fingerprint,\n });\n }\n\n /**\n * Derive the current HDWallet instance to the path. [Learn more](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)\n *\n * @param path - The string representation of the child HDWallet. `Ex.: m/44'/0'/0'/0/0`\n * @returns A new instance of HDWallet on the derived path\n */\n derivePath(path: string) {\n const paths = parsePath(path, this.depth);\n\n return paths.reduce((hdwallet, index) => hdwallet.deriveIndex(index), <HDWallet>this);\n }\n\n /**\n * Get the extendKey as defined on BIP-32 from the provided seed\n *\n * @param isPublic - enable to export public extendedKey, it not required when HDWallet didn't have the privateKey.\n * @param testnet - Inform if should use testnet or mainnet prefix, default value is true (`mainnet`).\n * @returns BIP-32 extended private key\n */\n toExtendedKey(isPublic: boolean = false, testnet: boolean = false): string {\n if (this.depth >= 256) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n `Exceeded max depth of 255. Current depth: ${this.depth}.`\n );\n }\n const prefix = getExtendedKeyPrefix(this.privateKey == null || isPublic, testnet);\n const depth = hexlify(Uint8Array.from([this.depth]));\n const parentFingerprint = this.parentFingerprint;\n const index = toHex(this.index, 4);\n // last 32 bites from the key\n const chainCode = this.chainCode;\n // first 32 bites from the key\n const key =\n this.privateKey != null && !isPublic ? concat(['0x00', this.privateKey]) : this.publicKey;\n const extendedKey = arrayify(concat([prefix, depth, parentFingerprint, index, chainCode, key]));\n\n return base58check(extendedKey);\n }\n\n /**\n * Create HDWallet instance from seed\n *\n * @param seed - Seed\n * @returns A new instance of HDWallet\n */\n static fromSeed(seed: string) {\n const masterKey = Mnemonic.masterKeysFromSeed(seed);\n\n return new HDWallet({\n chainCode: arrayify(masterKey.slice(32)),\n privateKey: arrayify(masterKey.slice(0, 32)),\n });\n }\n\n static fromExtendedKey(extendedKey: string) {\n const decoded = toBeHex(decodeBase58(extendedKey));\n const bytes = arrayify(decoded);\n const validChecksum = base58check(bytes.slice(0, 78)) === extendedKey;\n\n if (bytes.length !== 82 || !isValidExtendedKey(bytes)) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Provided key is not a valid extended key.');\n }\n if (!validChecksum) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Provided key has an invalid checksum.');\n }\n\n const depth = bytes[4];\n const parentFingerprint = hexlify(bytes.slice(5, 9));\n const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n const chainCode = hexlify(bytes.slice(13, 45));\n const key = bytes.slice(45, 78);\n\n if ((depth === 0 && parentFingerprint !== '0x00000000') || (depth === 0 && index !== 0)) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n 'Inconsistency detected: Depth is zero but fingerprint/index is non-zero.'\n );\n }\n\n if (isPublicExtendedKey(bytes)) {\n if (key[0] !== 3) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Invalid public extended key.');\n }\n\n return new HDWallet({\n publicKey: key,\n chainCode,\n index,\n depth,\n parentFingerprint,\n });\n }\n\n if (key[0] !== 0) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Invalid private extended key.');\n }\n\n return new HDWallet({\n privateKey: key.slice(1),\n chainCode,\n index,\n depth,\n parentFingerprint,\n });\n }\n}\n\nexport default HDWallet;\n","import { randomBytes } from '@fuel-ts/crypto';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { sha256 } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { arrayify, hexlify, concat } from '@fuel-ts/utils';\nimport { dataSlice, pbkdf2, computeHmac, encodeBase58 } from 'ethers';\n\nimport { english } from '../wordlists';\n\nimport type { MnemonicPhrase } from './utils';\nimport {\n entropyToMnemonicIndices,\n getWords,\n getPhrase,\n mnemonicWordsToEntropy,\n toUtf8Bytes,\n} from './utils';\n\n//\n// Constants\n//\n// \"Bitcoin seed\"\nconst MasterSecret = toUtf8Bytes('Bitcoin seed');\n// 4 byte: version bytes (mainnet: 0x0488B21E public, 0x0488ADE4 private; testnet: 0x043587CF public, 0x04358394 private)\nconst MainnetPRV = '0x0488ade4';\nconst TestnetPRV = '0x04358394';\nexport const MNEMONIC_SIZES = [12, 15, 18, 21, 24];\n\nfunction assertWordList(wordlist: Array<string>) {\n if (wordlist.length !== 2048) {\n throw new FuelError(\n ErrorCode.INVALID_WORD_LIST,\n `Expected word list length of 2048, but got ${wordlist.length}.`\n );\n }\n}\n\nfunction assertEntropy(entropy: BytesLike) {\n if (entropy.length % 4 !== 0 || entropy.length < 16 || entropy.length > 32) {\n throw new FuelError(\n ErrorCode.INVALID_ENTROPY,\n `Entropy should be between 16 and 32 bytes and a multiple of 4, but got ${entropy.length} bytes.`\n );\n }\n}\n\nfunction assertMnemonic(words: Array<string>) {\n if (!MNEMONIC_SIZES.includes(words.length)) {\n const errorMsg = `Invalid mnemonic size. Expected one of [${MNEMONIC_SIZES.join(\n ', '\n )}] words, but got ${words.length}.`;\n\n throw new FuelError(ErrorCode.INVALID_MNEMONIC, errorMsg);\n }\n}\n\nclass Mnemonic {\n wordlist: Array<string>;\n\n /**\n *\n * @param wordlist - Provide a wordlist with the list of words used to generate the mnemonic phrase. The default value is the English list.\n * @returns Mnemonic instance\n */\n constructor(wordlist: Array<string> = english) {\n this.wordlist = wordlist;\n\n assertWordList(this.wordlist);\n }\n\n /**\n *\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @returns Entropy hash\n */\n mnemonicToEntropy(phrase: MnemonicPhrase) {\n return Mnemonic.mnemonicToEntropy(phrase, this.wordlist);\n }\n\n /**\n *\n * @param entropy - Entropy source to the mnemonic phrase.\n * @returns Mnemonic phrase\n */\n entropyToMnemonic(entropy: BytesLike) {\n return Mnemonic.entropyToMnemonic(entropy, this.wordlist);\n }\n\n /**\n *\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @param wordlist - Provide a wordlist with the list of words used to generate the mnemonic phrase. The default value is the English list.\n * @returns Mnemonic phrase\n */\n static mnemonicToEntropy(phrase: MnemonicPhrase, wordlist: Array<string> = english): string {\n const words = getWords(phrase);\n\n assertMnemonic(words);\n\n return hexlify(mnemonicWordsToEntropy(words, wordlist));\n }\n\n /**\n * @param entropy - Entropy source to the mnemonic phrase.\n * @param testnet - Inform if should use testnet or mainnet prefix, default value is true (`mainnet`).\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static entropyToMnemonic(entropy: BytesLike, wordlist: Array<string> = english): string {\n const entropyBytes = arrayify(entropy);\n\n assertWordList(wordlist);\n assertEntropy(entropyBytes);\n\n return entropyToMnemonicIndices(entropyBytes)\n .map((i) => wordlist[i])\n .join(' ');\n }\n\n /**\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @param passphrase - Add additional security to protect the generated seed with a memorized passphrase. `Note: if the owner forgot the passphrase, all wallets and accounts derive from the phrase will be lost.`\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static mnemonicToSeed(phrase: MnemonicPhrase, passphrase: BytesLike = '') {\n assertMnemonic(getWords(phrase));\n\n const phraseBytes = toUtf8Bytes(getPhrase(phrase));\n const salt = toUtf8Bytes(`mnemonic${passphrase}`);\n\n return pbkdf2(phraseBytes, salt, 2048, 64, 'sha512');\n }\n\n /**\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @param passphrase - Add additional security to protect the generated seed with a memorized passphrase. `Note: if the owner forgot the passphrase, all wallets and accounts derive from the phrase will be lost.`\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static mnemonicToMasterKeys(phrase: MnemonicPhrase, passphrase: BytesLike = '') {\n const seed = Mnemonic.mnemonicToSeed(phrase, passphrase);\n return Mnemonic.masterKeysFromSeed(seed);\n }\n\n /**\n * Validates if given mnemonic is valid\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @returns true if phrase is a valid mnemonic\n */\n static isMnemonicValid(phrase: string) {\n const words = getWords(phrase);\n\n let i: number = 0;\n\n try {\n assertMnemonic(words);\n } catch {\n return false;\n }\n\n while (i < words.length) {\n if (Mnemonic.binarySearch(words[i]) === false) {\n return false;\n }\n i += 1;\n }\n\n return true;\n }\n\n static binarySearch(target: string): boolean {\n const words = english;\n let left: number = 0;\n let right: number = words.length - 1;\n\n while (left <= right) {\n const mid: number = Math.floor((left + right) / 2);\n\n if (words[mid] === target) {\n return true;\n }\n if (target < words[mid]) {\n right = mid - 1;\n } else {\n left = mid + 1;\n }\n }\n\n return false;\n }\n\n /**\n * @param seed - BIP39 seed\n * @param testnet - Inform if should use testnet or mainnet prefix, the default value is true (`mainnet`).\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static masterKeysFromSeed(seed: string): Uint8Array {\n const seedArray = arrayify(seed);\n\n if (seedArray.length < 16 || seedArray.length > 64) {\n throw new FuelError(\n ErrorCode.INVALID_SEED,\n `Seed length should be between 16 and 64 bytes, but received ${seedArray.length} bytes.`\n );\n }\n\n return arrayify(computeHmac('sha512', MasterSecret, seedArray));\n }\n\n /**\n * Get the extendKey as defined on BIP-32 from the provided seed\n *\n * @param seed - BIP39 seed\n * @param testnet - Inform if should use testnet or mainnet prefix, default value is true (`mainnet`).\n * @returns BIP-32 extended private key\n */\n static seedToExtendedKey(seed: string, testnet: boolean = false): string {\n const masterKey = Mnemonic.masterKeysFromSeed(seed);\n const prefix = arrayify(testnet ? TestnetPRV : MainnetPRV);\n const depth = '0x00';\n const fingerprint = '0x00000000';\n const index = '0x00000000';\n // last 32 bites from the key\n const chainCode = masterKey.slice(32);\n // first 32 bites from the key\n const privateKey = masterKey.slice(0, 32);\n const extendedKey = concat([\n prefix,\n depth,\n fingerprint,\n index,\n chainCode,\n concat(['0x00', privateKey]),\n ]);\n const checksum = dataSlice(sha256(sha256(extendedKey)), 0, 4);\n\n return encodeBase58(concat([extendedKey, checksum]));\n }\n\n /**\n * Create a new mnemonic using a randomly generated number as entropy.\n * As defined in BIP39, the entropy must be a multiple of 32 bits, and its size must be between 128 and 256 bits.\n * Therefore, the possible values for `strength` are 128, 160, 192, 224, and 256.\n * If not provided, the default entropy length will be set to 256 bits.\n * The return is a list of words that encodes the generated entropy.\n *\n *\n * @param size - Number of bytes used as an entropy\n * @param extraEntropy - Optional extra entropy to increase randomness\n * @returns A randomly generated mnemonic\n */\n static generate(size: number = 32, extraEntropy: BytesLike = '') {\n const entropy = extraEntropy\n ? sha256(concat([randomBytes(size), arrayify(extraEntropy)]))\n : randomBytes(size);\n return Mnemonic.entropyToMnemonic(entropy);\n }\n}\n\nexport default Mnemonic;\n","export const english = [\n 'abandon',\n 'ability',\n 'able',\n 'about',\n 'above',\n 'absent',\n 'absorb',\n 'abstract',\n 'absurd',\n 'abuse',\n 'access',\n 'accident',\n 'account',\n 'accuse',\n 'achieve',\n 'acid',\n 'acoustic',\n 'acquire',\n 'across',\n 'act',\n 'action',\n 'actor',\n 'actress',\n 'actual',\n 'adapt',\n 'add',\n 'addict',\n 'address',\n 'adjust',\n 'admit',\n 'adult',\n 'advance',\n 'advice',\n 'aerobic',\n 'affair',\n 'afford',\n 'afraid',\n 'again',\n 'age',\n 'agent',\n 'agree',\n 'ahead',\n 'aim',\n 'air',\n 'airport',\n 'aisle',\n 'alarm',\n 'album',\n 'alcohol',\n 'alert',\n 'alien',\n 'all',\n 'alley',\n 'allow',\n 'almost',\n 'alone',\n 'alpha',\n 'already',\n 'also',\n 'alter',\n 'always',\n 'amateur',\n 'amazing',\n 'among',\n 'amount',\n 'amused',\n 'analyst',\n 'anchor',\n 'ancient',\n 'anger',\n 'angle',\n 'angry',\n 'animal',\n 'ankle',\n 'announce',\n 'annual',\n 'another',\n 'answer',\n 'antenna',\n 'antique',\n 'anxiety',\n 'any',\n 'apart',\n 'apology',\n 'appear',\n 'apple',\n 'approve',\n 'april',\n 'arch',\n 'arctic',\n 'area',\n 'arena',\n 'argue',\n 'arm',\n 'armed',\n 'armor',\n 'army',\n 'around',\n 'arrange',\n 'arrest',\n 'arrive',\n 'arrow',\n 'art',\n 'artefact',\n 'artist',\n 'artwork',\n 'ask',\n 'aspect',\n 'assault',\n 'asset',\n 'assist',\n 'assume',\n 'asthma',\n 'athlete',\n 'atom',\n 'attack',\n 'attend',\n 'attitude',\n 'attract',\n 'auction',\n 'audit',\n 'august',\n 'aunt',\n 'author',\n 'auto',\n 'autumn',\n 'average',\n 'avocado',\n 'avoid',\n 'awake',\n 'aware',\n 'away',\n 'awesome',\n 'awful',\n 'awkward',\n 'axis',\n 'baby',\n 'bachelor',\n 'bacon',\n 'badge',\n 'bag',\n 'balance',\n 'balcony',\n 'ball',\n 'bamboo',\n 'banana',\n 'banner',\n 'bar',\n 'barely',\n 'bargain',\n 'barrel',\n 'base',\n 'basic',\n 'basket',\n 'battle',\n 'beach',\n 'bean',\n 'beauty',\n 'because',\n 'become',\n 'beef',\n 'before',\n 'begin',\n 'behave',\n 'behind',\n 'believe',\n 'below',\n 'belt',\n 'bench',\n 'benefit',\n 'best',\n 'betray',\n 'better',\n 'between',\n 'beyond',\n 'bicycle',\n 'bid',\n 'bike',\n 'bind',\n 'biology',\n 'bird',\n 'birth',\n 'bitter',\n 'black',\n 'blade',\n 'blame',\n 'blanket',\n 'blast',\n 'bleak',\n 'bless',\n 'blind',\n 'blood',\n 'blossom',\n 'blouse',\n 'blue',\n 'blur',\n 'blush',\n 'board',\n 'boat',\n 'body',\n 'boil',\n 'bomb',\n 'bone',\n 'bonus',\n 'book',\n 'boost',\n 'border',\n 'boring',\n 'borrow',\n 'boss',\n 'bottom',\n 'bounce',\n 'box',\n 'boy',\n 'bracket',\n 'brain',\n 'brand',\n 'brass',\n 'brave',\n 'bread',\n 'breeze',\n 'brick',\n 'bridge',\n 'brief',\n 'bright',\n 'bring',\n 'brisk',\n 'broccoli',\n 'broken',\n 'bronze',\n 'broom',\n 'brother',\n 'brown',\n 'brush',\n 'bubble',\n 'buddy',\n 'budget',\n 'buffalo',\n 'build',\n 'bulb',\n 'bulk',\n 'bullet',\n 'bundle',\n 'bunker',\n 'burden',\n 'burger',\n 'burst',\n 'bus',\n 'business',\n 'busy',\n 'butter',\n 'buyer',\n 'buzz',\n 'cabbage',\n 'cabin',\n 'cable',\n 'cactus',\n 'cage',\n 'cake',\n 'call',\n 'calm',\n 'camera',\n 'camp',\n 'can',\n 'canal',\n 'cancel',\n 'candy',\n 'cannon',\n 'canoe',\n 'canvas',\n 'canyon',\n 'capable',\n 'capital',\n 'captain',\n 'car',\n 'carbon',\n 'card',\n 'cargo',\n 'carpet',\n 'carry',\n 'cart',\n 'case',\n 'cash',\n 'casino',\n 'castle',\n 'casual',\n 'cat',\n 'catalog',\n 'catch',\n 'category',\n 'cattle',\n 'caught',\n 'cause',\n 'caution',\n 'cave',\n 'ceiling',\n 'celery',\n 'cement',\n 'census',\n 'century',\n 'cereal',\n 'certain',\n 'chair',\n 'chalk',\n 'champion',\n 'change',\n 'chaos',\n 'chapter',\n 'charge',\n 'chase',\n 'chat',\n 'cheap',\n 'check',\n 'cheese',\n 'chef',\n 'cherry',\n 'chest',\n 'chicken',\n 'chief',\n 'child',\n 'chimney',\n 'choice',\n 'choose',\n 'chronic',\n 'chuckle',\n 'chunk',\n 'churn',\n 'cigar',\n 'cinnamon',\n 'circle',\n 'citizen',\n 'city',\n 'civil',\n 'claim',\n 'clap',\n 'clarify',\n 'claw',\n 'clay',\n 'clean',\n 'clerk',\n 'clever',\n 'click',\n 'client',\n 'cliff',\n 'climb',\n 'clinic',\n 'clip',\n 'clock',\n 'clog',\n 'close',\n 'cloth',\n 'cloud',\n 'clown',\n 'club',\n 'clump',\n 'cluster',\n 'clutch',\n 'coach',\n 'coast',\n 'coconut',\n 'code',\n 'coffee',\n 'coil',\n 'coin',\n 'collect',\n 'color',\n 'column',\n 'combine',\n 'come',\n 'comfort',\n 'comic',\n 'common',\n 'company',\n 'concert',\n 'conduct',\n 'confirm',\n 'congress',\n 'connect',\n 'consider',\n 'control',\n 'convince',\n 'cook',\n 'cool',\n 'copper',\n 'copy',\n 'coral',\n 'core',\n 'corn',\n 'correct',\n 'cost',\n 'cotton',\n 'couch',\n 'country',\n 'couple',\n 'course',\n 'cousin',\n 'cover',\n 'coyote',\n 'crack',\n 'cradle',\n 'craft',\n 'cram',\n 'crane',\n 'crash',\n 'crater',\n 'crawl',\n 'crazy',\n 'cream',\n 'credit',\n 'creek',\n 'crew',\n 'cricket',\n 'crime',\n 'crisp',\n 'critic',\n 'crop',\n 'cross',\n 'crouch',\n 'crowd',\n 'crucial',\n 'cruel',\n 'cruise',\n 'crumble',\n 'crunch',\n 'crush',\n 'cry',\n 'crystal',\n 'cube',\n 'culture',\n 'cup',\n 'cupboard',\n 'curious',\n 'current',\n 'curtain',\n 'curve',\n 'cushion',\n 'custom',\n 'cute',\n 'cycle',\n 'dad',\n 'damage',\n 'damp',\n 'dance',\n 'danger',\n 'daring',\n 'dash',\n 'daughter',\n 'dawn',\n 'day',\n 'deal',\n 'debate',\n 'debris',\n 'decade',\n 'december',\n 'decide',\n 'decline',\n 'decorate',\n 'decrease',\n 'deer',\n 'defense',\n 'define',\n 'defy',\n 'degree',\n 'delay',\n 'deliver',\n 'demand',\n 'demise',\n 'denial',\n 'dentist',\n 'deny',\n 'depart',\n 'depend',\n 'deposit',\n 'depth',\n 'deputy',\n 'derive',\n 'describe',\n 'desert',\n 'design',\n 'desk',\n 'despair',\n 'destroy',\n 'detail',\n 'detect',\n 'develop',\n 'device',\n 'devote',\n 'diagram',\n 'dial',\n 'diamond',\n 'diary',\n 'dice',\n 'diesel',\n 'diet',\n 'differ',\n 'digital',\n 'dignity',\n 'dilemma',\n 'dinner',\n 'dinosaur',\n 'direct',\n 'dirt',\n 'disagree',\n 'discover',\n 'disease',\n 'dish',\n 'dismiss',\n 'disorder',\n 'display',\n 'distance',\n 'divert',\n 'divide',\n 'divorce',\n 'dizzy',\n 'doctor',\n 'document',\n 'dog',\n 'doll',\n 'dolphin',\n 'domain',\n 'donate',\n 'donkey',\n 'donor',\n 'door',\n 'dose',\n 'double',\n 'dove',\n 'draft',\n 'dragon',\n 'drama',\n 'drastic',\n 'draw',\n 'dream',\n 'dress',\n 'drift',\n 'drill',\n 'drink',\n 'drip',\n 'drive',\n 'drop',\n 'drum',\n 'dry',\n 'duck',\n 'dumb',\n 'dune',\n 'during',\n 'dust',\n 'dutch',\n 'duty',\n 'dwarf',\n 'dynamic',\n 'eager',\n 'eagle',\n 'early',\n 'earn',\n 'earth',\n 'easily',\n 'east',\n 'easy',\n 'echo',\n 'ecology',\n 'economy',\n 'edge',\n 'edit',\n 'educate',\n 'effort',\n 'egg',\n 'eight',\n 'either',\n 'elbow',\n 'elder',\n 'electric',\n 'elegant',\n 'element',\n 'elephant',\n 'elevator',\n 'elite',\n 'else',\n 'embark',\n 'embody',\n 'embrace',\n 'emerge',\n 'emotion',\n 'employ',\n 'empower',\n 'empty',\n 'enable',\n 'enact',\n 'end',\n 'endless',\n 'endorse',\n 'enemy',\n 'energy',\n 'enforce',\n 'engage',\n 'engine',\n 'enhance',\n 'enjoy',\n 'enlist',\n 'enough',\n 'enrich',\n 'enroll',\n 'ensure',\n 'enter',\n 'entire',\n 'entry',\n 'envelope',\n 'episode',\n 'equal',\n 'equip',\n 'era',\n 'erase',\n 'erode',\n 'erosion',\n 'error',\n 'erupt',\n 'escape',\n 'essay',\n 'essence',\n 'estate',\n 'eternal',\n 'ethics',\n 'evidence',\n 'evil',\n 'evoke',\n 'evolve',\n 'exact',\n 'example',\n 'excess',\n 'exchange',\n 'excite',\n 'exclude',\n 'excuse',\n 'execute',\n 'exercise',\n 'exhaust',\n 'exhibit',\n 'exile',\n 'exist',\n 'exit',\n 'exotic',\n 'expand',\n 'expect',\n 'expire',\n 'explain',\n 'expose',\n 'express',\n 'extend',\n 'extra',\n 'eye',\n 'eyebrow',\n 'fabric',\n 'face',\n 'faculty',\n 'fade',\n 'faint',\n 'faith',\n 'fall',\n 'false',\n 'fame',\n 'family',\n 'famous',\n 'fan',\n 'fancy',\n 'fantasy',\n 'farm',\n 'fashion',\n 'fat',\n 'fatal',\n 'father',\n 'fatigue',\n 'fault',\n 'favorite',\n 'feature',\n 'february',\n 'federal',\n 'fee',\n 'feed',\n 'feel',\n 'female',\n 'fence',\n 'festival',\n 'fetch',\n 'fever',\n 'few',\n 'fiber',\n 'fiction',\n 'field',\n 'figure',\n 'file',\n 'film',\n 'filter',\n 'final',\n 'find',\n 'fine',\n 'finger',\n 'finish',\n 'fire',\n 'firm',\n 'first',\n 'fiscal',\n 'fish',\n 'fit',\n 'fitness',\n 'fix',\n 'flag',\n 'flame',\n 'flash',\n 'flat',\n 'flavor',\n 'flee',\n 'flight',\n 'flip',\n 'float',\n 'flock',\n 'floor',\n 'flower',\n 'fluid',\n 'flush',\n 'fly',\n 'foam',\n 'focus',\n 'fog',\n 'foil',\n 'fold',\n 'follow',\n 'food',\n 'foot',\n 'force',\n 'forest',\n 'forget',\n 'fork',\n 'fortune',\n 'forum',\n 'forward',\n 'fossil',\n 'foster',\n 'found',\n 'fox',\n 'fragile',\n 'frame',\n 'frequent',\n 'fresh',\n 'friend',\n 'fringe',\n 'frog',\n 'front',\n 'frost',\n 'frown',\n 'frozen',\n 'fruit',\n 'fuel',\n 'fun',\n 'funny',\n 'furnace',\n 'fury',\n 'future',\n 'gadget',\n 'gain',\n 'galaxy',\n 'gallery',\n 'game',\n 'gap',\n 'garage',\n 'garbage',\n 'garden',\n 'garlic',\n 'garment',\n 'gas',\n 'gasp',\n 'gate',\n 'gather',\n 'gauge',\n 'gaze',\n 'general',\n 'genius',\n 'genre',\n 'gentle',\n 'genuine',\n 'gesture',\n 'ghost',\n 'giant',\n 'gift',\n 'giggle',\n 'ginger',\n 'giraffe',\n 'girl',\n 'give',\n 'glad',\n 'glance',\n 'glare',\n 'glass',\n 'glide',\n 'glimpse',\n 'globe',\n 'gloom',\n 'glory',\n 'glove',\n 'glow',\n 'glue',\n 'goat',\n 'goddess',\n 'gold',\n 'good',\n 'goose',\n 'gorilla',\n 'gospel',\n 'gossip',\n 'govern',\n 'gown',\n 'grab',\n 'grace',\n 'grain',\n 'grant',\n 'grape',\n 'grass',\n 'gravity',\n 'great',\n 'green',\n 'grid',\n 'grief',\n 'grit',\n 'grocery',\n 'group',\n 'grow',\n 'grunt',\n 'guard',\n 'guess',\n 'guide',\n 'guilt',\n 'guitar',\n 'gun',\n 'gym',\n 'habit',\n 'hair',\n 'half',\n 'hammer',\n 'hamster',\n 'hand',\n 'happy',\n 'harbor',\n 'hard',\n 'harsh',\n 'harvest',\n 'hat',\n 'have',\n 'hawk',\n 'hazard',\n 'head',\n 'health',\n 'heart',\n 'heavy',\n 'hedgehog',\n 'height',\n 'hello',\n 'helmet',\n 'help',\n 'hen',\n 'hero',\n 'hidden',\n 'high',\n 'hill',\n 'hint',\n 'hip',\n 'hire',\n 'history',\n 'hobby',\n 'hockey',\n 'hold',\n 'hole',\n 'holiday',\n 'hollow',\n 'home',\n 'honey',\n 'hood',\n 'hope',\n 'horn',\n 'horror',\n 'horse',\n 'hospital',\n 'host',\n 'hotel',\n 'hour',\n 'hover',\n 'hub',\n 'huge',\n 'human',\n 'humble',\n 'humor',\n 'hundred',\n 'hungry',\n 'hunt',\n 'hurdle',\n 'hurry',\n 'hurt',\n 'husband',\n 'hybrid',\n 'ice',\n 'icon',\n 'idea',\n 'identify',\n 'idle',\n 'ignore',\n 'ill',\n 'illegal',\n 'illness',\n 'image',\n 'imitate',\n 'immense',\n 'immune',\n 'impact',\n 'impose',\n 'improve',\n 'impulse',\n 'inch',\n 'include',\n 'income',\n 'increase',\n 'index',\n 'indicate',\n 'indoor',\n 'industry',\n 'infant',\n 'inflict',\n 'inform',\n 'inhale',\n 'inherit',\n 'initial',\n 'inject',\n 'injury',\n 'inmate',\n 'inner',\n 'innocent',\n 'input',\n 'inquiry',\n 'insane',\n 'insect',\n 'inside',\n 'inspire',\n 'install',\n 'intact',\n 'interest',\n 'into',\n 'invest',\n 'invite',\n 'involve',\n 'iron',\n 'island',\n 'isolate',\n 'issue',\n 'item',\n 'ivory',\n 'jacket',\n 'jaguar',\n 'jar',\n 'jazz',\n 'jealous',\n 'jeans',\n 'jelly',\n 'jewel',\n 'job',\n 'join',\n 'joke',\n 'journey',\n 'joy',\n 'judge',\n 'juice',\n 'jump',\n 'jungle',\n 'junior',\n 'junk',\n 'just',\n 'kangaroo',\n 'keen',\n 'keep',\n 'ketchup',\n 'key',\n 'kick',\n 'kid',\n 'kidney',\n 'kind',\n 'kingdom',\n 'kiss',\n 'kit',\n 'kitchen',\n 'kite',\n 'kitten',\n 'kiwi',\n 'knee',\n 'knife',\n 'knock',\n 'know',\n 'lab',\n 'label',\n 'labor',\n 'ladder',\n 'lady',\n 'lake',\n 'lamp',\n 'language',\n 'laptop',\n 'large',\n 'later',\n 'latin',\n 'laugh',\n 'laundry',\n 'lava',\n 'law',\n 'lawn',\n 'lawsuit',\n 'layer',\n 'lazy',\n 'leader',\n 'leaf',\n 'learn',\n 'leave',\n 'lecture',\n 'left',\n 'leg',\n 'legal',\n 'legend',\n 'leisure',\n 'lemon',\n 'lend',\n 'length',\n 'lens',\n 'leopard',\n 'lesson',\n 'letter',\n 'level',\n 'liar',\n 'liberty',\n 'library',\n 'license',\n 'life',\n 'lift',\n 'light',\n 'like',\n 'limb',\n 'limit',\n 'link',\n 'lion',\n 'liquid',\n 'list',\n 'little',\n 'live',\n 'lizard',\n 'load',\n 'loan',\n 'lobster',\n 'local',\n 'lock',\n 'logic',\n 'lonely',\n 'long',\n 'loop',\n 'lottery',\n 'loud',\n 'lounge',\n 'love',\n 'loyal',\n 'lucky',\n 'luggage',\n 'lumber',\n 'lunar',\n 'lunch',\n 'luxury',\n 'lyrics',\n 'machine',\n 'mad',\n 'magic',\n 'magnet',\n 'maid',\n 'mail',\n 'main',\n 'major',\n 'make',\n 'mammal',\n 'man',\n 'manage',\n 'mandate',\n 'mango',\n 'mansion',\n 'manual',\n 'maple',\n 'marble',\n 'march',\n 'margin',\n 'marine',\n 'market',\n 'marriage',\n 'mask',\n 'mass',\n 'master',\n 'match',\n 'material',\n 'math',\n 'matrix',\n 'matter',\n 'maximum',\n 'maze',\n 'meadow',\n 'mean',\n 'measure',\n 'meat',\n 'mechanic',\n 'medal',\n 'media',\n 'melody',\n 'melt',\n 'member',\n 'memory',\n 'mention',\n 'menu',\n 'mercy',\n 'merge',\n 'merit',\n 'merry',\n 'mesh',\n 'message',\n 'metal',\n 'method',\n 'middle',\n 'midnight',\n 'milk',\n 'million',\n 'mimic',\n 'mind',\n 'minimum',\n 'minor',\n 'minute',\n 'miracle',\n 'mirror',\n 'misery',\n 'miss',\n 'mistake',\n 'mix',\n 'mixed',\n 'mixture',\n 'mobile',\n 'model',\n 'modify',\n 'mom',\n 'moment',\n 'monitor',\n 'monkey',\n 'monster',\n 'month',\n 'moon',\n 'moral',\n 'more',\n 'morning',\n 'mosquito',\n 'mother',\n 'motion',\n 'motor',\n 'mountain',\n 'mouse',\n 'move',\n 'movie',\n 'much',\n 'muffin',\n 'mule',\n 'multiply',\n 'muscle',\n 'museum',\n 'mushroom',\n 'music',\n 'must',\n 'mutual',\n 'myself',\n 'mystery',\n 'myth',\n 'naive',\n 'name',\n 'napkin',\n 'narrow',\n 'nasty',\n 'nation',\n 'nature',\n 'near',\n 'neck',\n 'need',\n 'negative',\n 'neglect',\n 'neither',\n 'nephew',\n 'nerve',\n 'nest',\n 'net',\n 'network',\n 'neutral',\n 'never',\n 'news',\n 'next',\n 'nice',\n 'night',\n 'noble',\n 'noise',\n 'nominee',\n 'noodle',\n 'normal',\n 'north',\n 'nose',\n 'notable',\n 'note',\n 'nothing',\n 'notice',\n 'novel',\n 'now',\n 'nuclear',\n 'number',\n 'nurse',\n 'nut',\n 'oak',\n 'obey',\n 'object',\n 'oblige',\n 'obscure',\n 'observe',\n 'obtain',\n 'obvious',\n 'occur',\n 'ocean',\n 'october',\n 'odor',\n 'off',\n 'offer',\n 'office',\n 'often',\n 'oil',\n 'okay',\n 'old',\n 'olive',\n 'olympic',\n 'omit',\n 'once',\n 'one',\n 'onion',\n 'online',\n 'only',\n 'open',\n 'opera',\n 'opinion',\n 'oppose',\n 'option',\n 'orange',\n 'orbit',\n 'orchard',\n 'order',\n 'ordinary',\n 'organ',\n 'orient',\n 'original',\n 'orphan',\n 'ostrich',\n 'other',\n 'outdoor',\n 'outer',\n 'output',\n 'outside',\n 'oval',\n 'oven',\n 'over',\n 'own',\n 'owner',\n 'oxygen',\n 'oyster',\n 'ozone',\n 'pact',\n 'paddle',\n 'page',\n 'pair',\n 'palace',\n 'palm',\n 'panda',\n 'panel',\n 'panic',\n 'panther',\n 'paper',\n 'parade',\n 'parent',\n 'park',\n 'parrot',\n 'party',\n 'pass',\n 'patch',\n 'path',\n 'patient',\n 'patrol',\n 'pattern',\n 'pause',\n 'pave',\n 'payment',\n 'peace',\n 'peanut',\n 'pear',\n 'peasant',\n 'pelican',\n 'pen',\n 'penalty',\n 'pencil',\n 'people',\n 'pepper',\n 'perfect',\n 'permit',\n 'person',\n 'pet',\n 'phone',\n 'photo',\n 'phrase',\n 'physical',\n 'piano',\n 'picnic',\n 'picture',\n 'piece',\n 'pig',\n 'pigeon',\n 'pill',\n 'pilot',\n 'pink',\n 'pioneer',\n 'pipe',\n 'pistol',\n 'pitch',\n 'pizza',\n 'place',\n 'planet',\n 'plastic',\n 'plate',\n 'play',\n 'please',\n 'pledge',\n 'pluck',\n 'plug',\n 'plunge',\n 'poem',\n 'poet',\n 'point',\n 'polar',\n 'pole',\n 'police',\n 'pond',\n 'pony',\n 'pool',\n 'popular',\n 'portion',\n 'position',\n 'possible',\n 'post',\n 'potato',\n 'pottery',\n 'poverty',\n 'powder',\n 'power',\n 'practice',\n 'praise',\n 'predict',\n 'prefer',\n 'prepare',\n 'present',\n 'pretty',\n 'prevent',\n 'price',\n 'pride',\n 'primary',\n 'print',\n 'priority',\n 'prison',\n 'private',\n 'prize',\n 'problem',\n 'process',\n 'produce',\n 'profit',\n 'program',\n 'project',\n 'promote',\n 'proof',\n 'property',\n 'prosper',\n 'protect',\n 'proud',\n 'provide',\n 'public',\n 'pudding',\n 'pull',\n 'pulp',\n 'pulse',\n 'pumpkin',\n 'punch',\n 'pupil',\n 'puppy',\n 'purchase',\n 'purity',\n 'purpose',\n 'purse',\n 'push',\n 'put',\n 'puzzle',\n 'pyramid',\n 'quality',\n 'quantum',\n 'quarter',\n 'question',\n 'quick',\n 'quit',\n 'quiz',\n 'quote',\n 'rabbit',\n 'raccoon',\n 'race',\n 'rack',\n 'radar',\n 'radio',\n 'rail',\n 'rain',\n 'raise',\n 'rally',\n 'ramp',\n 'ranch',\n 'random',\n 'range',\n 'rapid',\n 'rare',\n 'rate',\n 'rather',\n 'raven',\n 'raw',\n 'razor',\n 'ready',\n 'real',\n 'reason',\n 'rebel',\n 'rebuild',\n 'recall',\n 'receive',\n 'recipe',\n 'record',\n 'recycle',\n 'reduce',\n 'reflect',\n 'reform',\n 'refuse',\n 'region',\n 'regret',\n 'regular',\n 'reject',\n 'relax',\n 'release',\n 'relief',\n 'rely',\n 'remain',\n 'remember',\n 'remind',\n 'remove',\n 'render',\n 'renew',\n 'rent',\n 'reopen',\n 'repair',\n 'repeat',\n 'replace',\n 'report',\n 'require',\n 'rescue',\n 'resemble',\n 'resist',\n 'resource',\n 'response',\n 'result',\n 'retire',\n 'retreat',\n 'return',\n 'reunion',\n 'reveal',\n 'review',\n 'reward',\n 'rhythm',\n 'rib',\n 'ribbon',\n 'rice',\n 'rich',\n 'ride',\n 'ridge',\n 'rifle',\n 'right',\n 'rigid',\n 'ring',\n 'riot',\n 'ripple',\n 'risk',\n 'ritual',\n 'rival',\n 'river',\n 'road',\n 'roast',\n 'robot',\n 'robust',\n 'rocket',\n 'romance',\n 'roof',\n 'rookie',\n 'room',\n 'rose',\n 'rotate',\n 'rough',\n 'round',\n 'route',\n 'royal',\n 'rubber',\n 'rude',\n 'rug',\n 'rule',\n 'run',\n 'runway',\n 'rural',\n 'sad',\n 'saddle',\n 'sadness',\n 'safe',\n 'sail',\n 'salad',\n 'salmon',\n 'salon',\n 'salt',\n 'salute',\n 'same',\n 'sample',\n 'sand',\n 'satisfy',\n 'satoshi',\n 'sauce',\n 'sausage',\n 'save',\n 'say',\n 'scale',\n 'scan',\n 'scare',\n 'scatter',\n 'scene',\n 'scheme',\n 'school',\n 'science',\n 'scissors',\n 'scorpion',\n 'scout',\n 'scrap',\n 'screen',\n 'script',\n 'scrub',\n 'sea',\n 'search',\n 'season',\n 'seat',\n 'second',\n 'secret',\n 'section',\n 'security',\n 'seed',\n 'seek',\n 'segment',\n 'select',\n 'sell',\n 'seminar',\n 'senior',\n 'sense',\n 'sentence',\n 'series',\n 'service',\n 'session',\n 'settle',\n 'setup',\n 'seven',\n 'shadow',\n 'shaft',\n 'shallow',\n 'share',\n 'shed',\n 'shell',\n 'sheriff',\n 'shield',\n 'shift',\n 'shine',\n 'ship',\n 'shiver',\n 'shock',\n 'shoe',\n 'shoot',\n 'shop',\n 'short',\n 'shoulder',\n 'shove',\n 'shrimp',\n 'shrug',\n 'shuffle',\n 'shy',\n 'sibling',\n 'sick',\n 'side',\n 'siege',\n 'sight',\n 'sign',\n 'silent',\n 'silk',\n 'silly',\n 'silver',\n 'similar',\n 'simple',\n 'since',\n 'sing',\n 'siren',\n 'sister',\n 'situate',\n 'six',\n 'size',\n 'skate',\n 'sketch',\n 'ski',\n 'skill',\n 'skin',\n 'skirt',\n 'skull',\n 'slab',\n 'slam',\n 'sleep',\n 'slender',\n 'slice',\n 'slide',\n 'slight',\n 'slim',\n 'slogan',\n 'slot',\n 'slow',\n 'slush',\n 'small',\n 'smart',\n 'smile',\n 'smoke',\n 'smooth',\n 'snack',\n 'snake',\n 'snap',\n 'sniff',\n 'snow',\n 'soap',\n 'soccer',\n 'social',\n 'sock',\n 'soda',\n 'soft',\n 'solar',\n 'soldier',\n 'solid',\n 'solution',\n 'solve',\n 'someone',\n 'song',\n 'soon',\n 'sorry',\n 'sort',\n 'soul',\n 'sound',\n 'soup',\n 'source',\n 'south',\n 'space',\n 'spare',\n 'spatial',\n 'spawn',\n 'speak',\n 'special',\n 'speed',\n 'spell',\n 'spend',\n 'sphere',\n 'spice',\n 'spider',\n 'spike',\n 'spin',\n 'spirit',\n 'split',\n 'spoil',\n 'sponsor',\n 'spoon',\n 'sport',\n 'spot',\n 'spray',\n 'spread',\n 'spring',\n 'spy',\n 'square',\n 'squeeze',\n 'squirrel',\n 'stable',\n 'stadium',\n 'staff',\n 'stage',\n 'stairs',\n 'stamp',\n 'stand',\n 'start',\n 'state',\n 'stay',\n 'steak',\n 'steel',\n 'stem',\n 'step',\n 'stereo',\n 'stick',\n 'still',\n 'sting',\n 'stock',\n 'stomach',\n 'stone',\n 'stool',\n 'story',\n 'stove',\n 'strategy',\n 'street',\n 'strike',\n 'strong',\n 'struggle',\n 'student',\n 'stuff',\n 'stumble',\n 'style',\n 'subject',\n 'submit',\n 'subway',\n 'success',\n 'such',\n 'sudden',\n 'suffer',\n 'sugar',\n 'suggest',\n 'suit',\n 'summer',\n 'sun',\n 'sunny',\n 'sunset',\n 'super',\n 'supply',\n 'supreme',\n 'sure',\n 'surface',\n 'surge',\n 'surprise',\n 'surround',\n 'survey',\n 'suspect',\n 'sustain',\n 'swallow',\n 'swamp',\n 'swap',\n 'swarm',\n 'swear',\n 'sweet',\n 'swift',\n 'swim',\n 'swing',\n 'switch',\n 'sword',\n 'symbol',\n 'symptom',\n 'syrup',\n 'system',\n 'table',\n 'tackle',\n 'tag',\n 'tail',\n 'talent',\n 'talk',\n 'tank',\n 'tape',\n 'target',\n 'task',\n 'taste',\n 'tattoo',\n 'taxi',\n 'teach',\n 'team',\n 'tell',\n 'ten',\n 'tenant',\n 'tennis',\n 'tent',\n 'term',\n 'test',\n 'text',\n 'thank',\n 'that',\n 'theme',\n 'then',\n 'theory',\n 'there',\n 'they',\n 'thing',\n 'this',\n 'thought',\n 'three',\n 'thrive',\n 'throw',\n 'thumb',\n 'thunder',\n 'ticket',\n 'tide',\n 'tiger',\n 'tilt',\n 'timber',\n 'time',\n 'tiny',\n 'tip',\n 'tired',\n 'tissue',\n 'title',\n 'toast',\n 'tobacco',\n 'today',\n 'toddler',\n 'toe',\n 'together',\n 'toilet',\n 'token',\n 'tomato',\n 'tomorrow',\n 'tone',\n 'tongue',\n 'tonight',\n 'tool',\n 'tooth',\n 'top',\n 'topic',\n 'topple',\n 'torch',\n 'tornado',\n 'tortoise',\n 'toss',\n 'total',\n 'tourist',\n 'toward',\n 'tower',\n 'town',\n 'toy',\n 'track',\n 'trade',\n 'traffic',\n 'tragic',\n 'train',\n 'transfer',\n 'trap',\n 'trash',\n 'travel',\n 'tray',\n 'treat',\n 'tree',\n 'trend',\n 'trial',\n 'tribe',\n 'trick',\n 'trigger',\n 'trim',\n 'trip',\n 'trophy',\n 'trouble',\n 'truck',\n 'true',\n 'truly',\n 'trumpet',\n 'trust',\n 'truth',\n 'try',\n 'tube',\n 'tuition',\n 'tumble',\n 'tuna',\n 'tunnel',\n 'turkey',\n 'turn',\n 'turtle',\n 'twelve',\n 'twenty',\n 'twice',\n 'twin',\n 'twist',\n 'two',\n 'type',\n 'typical',\n 'ugly',\n 'umbrella',\n 'unable',\n 'unaware',\n 'uncle',\n 'uncover',\n 'under',\n 'undo',\n 'unfair',\n 'unfold',\n 'unhappy',\n 'uniform',\n 'unique',\n 'unit',\n 'universe',\n 'unknown',\n 'unlock',\n 'until',\n 'unusual',\n 'unveil',\n 'update',\n 'upgrade',\n 'uphold',\n 'upon',\n 'upper',\n 'upset',\n 'urban',\n 'urge',\n 'usage',\n 'use',\n 'used',\n 'useful',\n 'useless',\n 'usual',\n 'utility',\n 'vacant',\n 'vacuum',\n 'vague',\n 'valid',\n 'valley',\n 'valve',\n 'van',\n 'vanish',\n 'vapor',\n 'various',\n 'vast',\n 'vault',\n 'vehicle',\n 'velvet',\n 'vendor',\n 'venture',\n 'venue',\n 'verb',\n 'verify',\n 'version',\n 'very',\n 'vessel',\n 'veteran',\n 'viable',\n 'vibrant',\n 'vicious',\n 'victory',\n 'video',\n 'view',\n 'village',\n 'vintage',\n 'violin',\n 'virtual',\n 'virus',\n 'visa',\n 'visit',\n 'visual',\n 'vital',\n 'vivid',\n 'vocal',\n 'voice',\n 'void',\n 'volcano',\n 'volume',\n 'vote',\n 'voyage',\n 'wage',\n 'wagon',\n 'wait',\n 'walk',\n 'wall',\n 'walnut',\n 'want',\n 'warfare',\n 'warm',\n 'warrior',\n 'wash',\n 'wasp',\n 'waste',\n 'water',\n 'wave',\n 'way',\n 'wealth',\n 'weapon',\n 'wear',\n 'weasel',\n 'weather',\n 'web',\n 'wedding',\n 'weekend',\n 'weird',\n 'welcome',\n 'west',\n 'wet',\n 'whale',\n 'what',\n 'wheat',\n 'wheel',\n 'when',\n 'where',\n 'whip',\n 'whisper',\n 'wide',\n 'width',\n 'wife',\n 'wild',\n 'will',\n 'win',\n 'window',\n 'wine',\n 'wing',\n 'wink',\n 'winner',\n 'winter',\n 'wire',\n 'wisdom',\n 'wise',\n 'wish',\n 'witness',\n 'wolf',\n 'woman',\n 'wonder',\n 'wood',\n 'wool',\n 'word',\n 'work',\n 'world',\n 'worry',\n 'worth',\n 'wrap',\n 'wreck',\n 'wrestle',\n 'wrist',\n 'write',\n 'wrong',\n 'yard',\n 'year',\n 'yellow',\n 'you',\n 'young',\n 'youth',\n 'zebra',\n 'zero',\n 'zone',\n 'zoo',\n];\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { sha256 } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { arrayify } from '@fuel-ts/utils';\n\n/* Mnemonic phrase composed by words from the provided wordlist it can be a text or a array of words */\nexport type MnemonicPhrase = string | Array<string>;\n\nexport function toUtf8Bytes(stri: string): Uint8Array {\n const str = stri.normalize('NFKD');\n\n const result = [];\n for (let i = 0; i < str.length; i += 1) {\n const c = str.charCodeAt(i);\n\n if (c < 0x80) {\n result.push(c);\n } else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n } else if ((c & 0xfc00) === 0xd800) {\n i += 1;\n const c2 = str.charCodeAt(i);\n\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new FuelError(\n ErrorCode.INVALID_INPUT_PARAMETERS,\n 'Invalid UTF-8 in the input string.'\n );\n }\n\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n } else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n\n return Uint8Array.from(result);\n}\n\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits: number): number {\n return (1 << bits) - 1;\n}\n\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits: number): number {\n return ((1 << bits) - 1) << (8 - bits);\n}\n\nexport function getWords(mnemonic: MnemonicPhrase): Array<string> {\n if (!Array.isArray(mnemonic)) {\n return mnemonic.split(/\\s+/);\n }\n return mnemonic;\n}\n\nexport function getPhrase(mnemonic: MnemonicPhrase): string {\n if (Array.isArray(mnemonic)) {\n return mnemonic.join(' ');\n }\n return mnemonic;\n}\n\nexport function entropyToMnemonicIndices(entropy: Uint8Array): Array<number> {\n const indices: Array<number> = [0];\n\n let remainingBits = 11;\n for (let i = 0; i < entropy.length; i += 1) {\n if (remainingBits > 8) {\n indices[indices.length - 1] <<= 8;\n indices[indices.length - 1] |= entropy[i];\n\n remainingBits -= 8;\n // This byte will complete an 11-bit index\n } else {\n indices[indices.length - 1] <<= remainingBits;\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n\n // Start the next word\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n\n remainingBits += 3;\n }\n }\n\n // Compute the checksum bits\n const checksumBits = entropy.length / 4;\n const checksum = arrayify(sha256(entropy))[0] & getUpperMask(checksumBits);\n\n // Shift the checksum into the word indices\n indices[indices.length - 1] <<= checksumBits;\n indices[indices.length - 1] |= checksum >> (8 - checksumBits);\n\n return indices;\n}\n\nexport function mnemonicWordsToEntropy(words: Array<string>, wordlist: Array<string>): BytesLike {\n const size = Math.ceil((11 * words.length) / 8);\n const entropy = arrayify(new Uint8Array(size));\n\n let offset = 0;\n for (let i = 0; i < words.length; i += 1) {\n const index = wordlist.indexOf(words[i].normalize('NFKD'));\n if (index === -1) {\n throw new FuelError(\n ErrorCode.INVALID_MNEMONIC,\n `Invalid mnemonic: the word '${words[i]}' is not found in the provided wordlist.`\n );\n }\n\n for (let bit = 0; bit < 11; bit += 1) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= 1 << (7 - (offset % 8));\n }\n offset += 1;\n }\n }\n const entropyBits = (32 * words.length) / 3;\n const checksumBits = words.length / 3;\n const checksumMask = getUpperMask(checksumBits);\n const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n throw new FuelError(\n ErrorCode.INVALID_CHECKSUM,\n 'Checksum validation failed for the provided mnemonic.'\n );\n }\n\n return entropy.slice(0, entropyBits / 8);\n}\n","//\n// Because WalletLocked and WalletUnlocked has a cycle dependency\n// it's not possible to split the two classes in different files\n//\n/* eslint-disable max-classes-per-file */\nimport type { BytesLike } from '@fuel-ts/interfaces';\n\nimport { Account } from '../account';\nimport { HDWallet } from '../hdwallet';\nimport { Mnemonic } from '../mnemonic';\nimport type { Provider } from '../providers';\nimport { Signer } from '../signer';\n\nimport { BaseWalletUnlocked } from './base-wallet-unlocked';\nimport { decryptKeystoreWallet } from './keystore-wallet';\n\nexport interface GenerateOptions {\n /** Additional entropy for the random bytes */\n entropy?: BytesLike;\n provider?: Provider;\n}\n\n/**\n * `WalletLocked` provides the functionalities for a locked wallet.\n */\nexport class WalletLocked extends Account {\n /**\n * Unlocks the wallet using the provided private key and returns an instance of WalletUnlocked.\n *\n * @param privateKey - The private key used to unlock the wallet.\n * @returns An instance of WalletUnlocked.\n */\n unlock(privateKey: BytesLike): WalletUnlocked {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return new WalletUnlocked(privateKey, this._provider);\n }\n}\n\n/**\n * `WalletUnlocked` provides the functionalities for an unlocked wallet.\n */\nexport class WalletUnlocked extends BaseWalletUnlocked {\n /**\n * Locks the wallet and returns an instance of WalletLocked.\n *\n * @returns An instance of WalletLocked.\n */\n lock(): WalletLocked {\n this.signer = () => new Signer('0x00');\n return new WalletLocked(this.address, this._provider);\n }\n\n /**\n * Generate a new Wallet Unlocked with a random key pair.\n *\n * @param generateOptions - Options to customize the generation process (optional).\n * @returns An instance of WalletUnlocked.\n */\n static generate(generateOptions?: GenerateOptions): WalletUnlocked {\n const privateKey = Signer.generatePrivateKey(generateOptions?.entropy);\n\n return new WalletUnlocked(privateKey, generateOptions?.provider);\n }\n\n /**\n * Create a Wallet Unlocked from a seed.\n *\n * @param seed - The seed phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @returns An instance of WalletUnlocked.\n */\n static fromSeed(seed: string, path?: string, provider?: Provider): WalletUnlocked {\n const hdWallet = HDWallet.fromSeed(seed);\n const childWallet = hdWallet.derivePath(path || WalletUnlocked.defaultPath);\n\n return new WalletUnlocked(<string>childWallet.privateKey, provider);\n }\n\n /**\n * Create a Wallet Unlocked from a mnemonic phrase.\n *\n * @param mnemonic - The mnemonic phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @param passphrase - The passphrase for the mnemonic (optional).\n * @returns An instance of WalletUnlocked.\n */\n static fromMnemonic(\n mnemonic: string,\n path?: string,\n passphrase?: BytesLike,\n provider?: Provider\n ): WalletUnlocked {\n const seed = Mnemonic.mnemonicToSeed(mnemonic, passphrase);\n const hdWallet = HDWallet.fromSeed(seed);\n const childWallet = hdWallet.derivePath(path || WalletUnlocked.defaultPath);\n\n return new WalletUnlocked(<string>childWallet.privateKey, provider);\n }\n\n /**\n * Create a Wallet Unlocked from an extended key.\n *\n * @param extendedKey - The extended key.\n * @param provider - A Provider instance (optional).\n * @returns An instance of WalletUnlocked.\n */\n static fromExtendedKey(extendedKey: string, provider?: Provider): WalletUnlocked {\n const hdWallet = HDWallet.fromExtendedKey(extendedKey);\n\n return new WalletUnlocked(<string>hdWallet.privateKey, provider);\n }\n\n /**\n * Create a Wallet Unlocked from an encrypted JSON.\n *\n * @param jsonWallet - The encrypted JSON keystore.\n * @param password - The password to decrypt the JSON.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static async fromEncryptedJson(\n jsonWallet: string,\n password: string,\n provider?: Provider\n ): Promise<WalletUnlocked> {\n const privateKey = await decryptKeystoreWallet(jsonWallet, password);\n\n return new WalletUnlocked(privateKey, provider);\n }\n}\n","import type { AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\n\nimport type { Provider } from '../providers';\n\nimport { WalletLocked, WalletUnlocked } from './wallets';\n\n/**\n * `Wallet` provides methods to create locked and unlocked wallet instances.\n */\nexport class Wallet {\n /**\n * Creates a locked wallet instance from an address and a provider.\n *\n * @param address - The address of the wallet.\n * @param provider - A Provider instance (optional).\n * @returns A locked wallet instance.\n */\n static fromAddress(address: string | AbstractAddress, provider?: Provider): WalletLocked {\n return new WalletLocked(address, provider);\n }\n\n /**\n * Creates an unlocked wallet instance from a private key and a provider.\n *\n * @param privateKey - The private key of the wallet.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static fromPrivateKey(privateKey: BytesLike, provider?: Provider) {\n return new WalletUnlocked(privateKey, provider);\n }\n\n /**\n * Generate a new Wallet Unlocked with a random key pair.\n *\n * @param generateOptions - Options to customize the generation process (optional).\n * @returns An unlocked wallet instance.\n */\n static generate = WalletUnlocked.generate;\n\n /**\n * Create a Wallet Unlocked from a seed.\n *\n * @param seed - The seed phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @returns An unlocked wallet instance.\n */\n static fromSeed = WalletUnlocked.fromSeed;\n\n /**\n * Create a Wallet Unlocked from a mnemonic phrase.\n *\n * @param mnemonic - The mnemonic phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @param passphrase - The passphrase for the mnemonic (optional).\n * @returns An unlocked wallet instance.\n */\n static fromMnemonic = WalletUnlocked.fromMnemonic;\n\n /**\n * Create a Wallet Unlocked from an extended key.\n *\n * @param extendedKey - The extended key.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static fromExtendedKey = WalletUnlocked.fromExtendedKey;\n\n /**\n * Create a Wallet Unlocked from an encrypted JSON.\n *\n * @param jsonWallet - The encrypted JSON keystore.\n * @param password - The password to decrypt the JSON.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static fromEncryptedJson = WalletUnlocked.fromEncryptedJson;\n}\n","import { randomBytes } from '@fuel-ts/crypto';\n\nimport type { Account } from '../account';\nimport { coinQuantityfy, ScriptTransactionRequest } from '../providers';\nimport type { CoinQuantityLike } from '../providers';\nimport { WalletUnlocked } from '../wallet';\n\nexport const seedTestWallet = async (wallet: Account, quantities: CoinQuantityLike[]) => {\n const genesisWallet = new WalletUnlocked(\n process.env.GENESIS_SECRET || randomBytes(32),\n wallet.provider\n );\n\n // Create transaction\n const request = new ScriptTransactionRequest();\n\n // Connect to the same Provider as wallet\n quantities.forEach((quantity) => {\n const { amount, assetId } = coinQuantityfy(quantity);\n request.addCoinOutput(wallet.address, amount, assetId);\n });\n\n const txCost = await genesisWallet.provider.getTransactionCost(request);\n\n request.gasLimit = txCost.gasUsed;\n request.maxFee = txCost.maxFee;\n\n await genesisWallet.fund(request, txCost);\n\n await genesisWallet.sendTransaction(request, { awaitExecution: true });\n};\n","import type { Provider, CoinQuantityLike } from '../providers';\nimport type { WalletUnlocked } from '../wallet';\nimport { Wallet } from '../wallet';\n\nimport { seedTestWallet } from './seedTestWallet';\n\nexport const generateTestWallet = async (\n provider: Provider,\n quantities?: CoinQuantityLike[]\n): Promise<WalletUnlocked> => {\n const wallet = Wallet.generate({ provider });\n if (quantities) {\n await seedTestWallet(wallet, quantities);\n }\n return wallet;\n};\n","import { UTXO_ID_LEN } from '@fuel-ts/abi-coder';\nimport { randomBytes } from '@fuel-ts/crypto';\nimport { defaultSnapshotConfigs, defaultConsensusKey, hexlify } from '@fuel-ts/utils';\nimport { findBinPath } from '@fuel-ts/utils/cli-utils';\nimport type { ChildProcessWithoutNullStreams } from 'child_process';\nimport { spawn } from 'child_process';\nimport { randomUUID } from 'crypto';\nimport { existsSync, mkdirSync, rmSync, writeFileSync } from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport { getPortPromise } from 'portfinder';\nimport treeKill from 'tree-kill';\n\nimport { Provider } from '../providers';\nimport { Signer } from '../signer';\nimport type { WalletUnlocked } from '../wallet';\n\nimport { generateTestWallet } from './generateTestWallet';\n\nconst getFlagValueFromArgs = (args: string[], flag: string) => {\n const flagIndex = args.indexOf(flag);\n if (flagIndex === -1) {\n return undefined;\n }\n return args[flagIndex + 1];\n};\n\nconst extractRemainingArgs = (args: string[], flagsToRemove: string[]) => {\n const newArgs = [...args];\n flagsToRemove.forEach((flag) => {\n const flagIndex = newArgs.indexOf(flag);\n if (flagIndex !== -1) {\n newArgs.splice(flagIndex, 2);\n }\n });\n return newArgs;\n};\n\nexport type LaunchNodeOptions = {\n ip?: string;\n port?: string;\n args?: string[];\n useSystemFuelCore?: boolean;\n loggingEnabled?: boolean;\n debugEnabled?: boolean;\n basePath?: string;\n};\n\nexport type LaunchNodeResult = Promise<{\n cleanup: () => void;\n ip: string;\n port: string;\n snapshotDir: string;\n}>;\n\nexport type KillNodeParams = {\n child: ChildProcessWithoutNullStreams;\n configPath: string;\n killFn: (pid: number) => void;\n state: {\n isDead: boolean;\n };\n};\n\nexport const killNode = (params: KillNodeParams) => {\n const { child, configPath, state, killFn } = params;\n if (!state.isDead) {\n if (child.pid) {\n state.isDead = true;\n killFn(Number(child.pid));\n }\n\n // Remove all the listeners we've added.\n child.stdout.removeAllListeners();\n child.stderr.removeAllListeners();\n\n // Remove the temporary folder and all its contents.\n if (existsSync(configPath)) {\n rmSync(configPath, { recursive: true });\n }\n }\n};\n\n// #region launchNode-launchNodeOptions\n/**\n * Launches a fuel-core node.\n * @param ip - the ip to bind to. (optional, defaults to 0.0.0.0)\n * @param port - the port to bind to. (optional, defaults to 4000 or the next available port)\n * @param args - additional arguments to pass to fuel-core.\n * @param useSystemFuelCore - whether to use the system fuel-core binary or the one provided by the \\@fuel-ts/fuel-core package.\n * @param loggingEnabled - whether the node should output logs. (optional, defaults to true)\n * @param debugEnabled - whether the node should log debug messages. (optional, defaults to false)\n * @param basePath - the base path to use for the temporary folder. (optional, defaults to os.tmpdir())\n * */\n// #endregion launchNode-launchNodeOptions\nexport const launchNode = async ({\n ip,\n port,\n args = [],\n useSystemFuelCore = false,\n loggingEnabled = true,\n debugEnabled = false,\n basePath,\n}: LaunchNodeOptions): LaunchNodeResult =>\n // eslint-disable-next-line no-async-promise-executor\n new Promise(async (resolve, reject) => {\n // filter out the flags chain, consensus-key, db-type, and poa-instant. we don't want to pass them twice to fuel-core. see line 214.\n const remainingArgs = extractRemainingArgs(args, [\n '--snapshot',\n '--consensus-key',\n '--db-type',\n '--poa-instant',\n ]);\n\n const snapshotDir = getFlagValueFromArgs(args, '--snapshot');\n const consensusKey = getFlagValueFromArgs(args, '--consensus-key') || defaultConsensusKey;\n\n const dbTypeFlagValue = getFlagValueFromArgs(args, '--db-type');\n const useInMemoryDb = dbTypeFlagValue === 'in-memory' || dbTypeFlagValue === undefined;\n\n const poaInstantFlagValue = getFlagValueFromArgs(args, '--poa-instant');\n const poaInstant = poaInstantFlagValue === 'true' || poaInstantFlagValue === undefined;\n\n // This string is logged by the client when the node has successfully started. We use it to know when to resolve.\n const graphQLStartSubstring = 'Binding GraphQL provider to';\n\n const binPath = findBinPath('fuels-core', __dirname);\n\n const command = useSystemFuelCore ? 'fuel-core' : binPath;\n\n const ipToUse = ip || '0.0.0.0';\n\n const portToUse =\n port ||\n (\n await getPortPromise({\n port: 4000, // tries 4000 first, then 4001, then 4002, etc.\n stopPort: 5000, // don't try ports above 5000\n })\n ).toString();\n\n let snapshotDirToUse: string;\n\n const prefix = basePath || os.tmpdir();\n const suffix = basePath ? '' : randomUUID();\n const tempDirPath = path.join(prefix, '.fuels', suffix, 'snapshotDir');\n\n if (snapshotDir) {\n snapshotDirToUse = snapshotDir;\n } else {\n if (!existsSync(tempDirPath)) {\n mkdirSync(tempDirPath, { recursive: true });\n }\n\n let { stateConfigJson } = defaultSnapshotConfigs;\n const { chainConfigJson, metadataJson } = defaultSnapshotConfigs;\n\n stateConfigJson = {\n ...stateConfigJson,\n coins: [\n ...stateConfigJson.coins.map((coin) => ({\n ...coin,\n amount: '18446744073709551615',\n })),\n ],\n messages: stateConfigJson.messages.map((message) => ({\n ...message,\n amount: '18446744073709551615',\n })),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n\n // If there's no genesis key, generate one and some coins to the genesis block.\n if (!process.env.GENESIS_SECRET) {\n const pk = Signer.generatePrivateKey();\n const signer = new Signer(pk);\n process.env.GENESIS_SECRET = hexlify(pk);\n\n stateConfigJson.coins.push({\n tx_id: hexlify(randomBytes(UTXO_ID_LEN)),\n owner: signer.address.toHexString(),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n amount: '18446744073709551615' as any,\n asset_id: chainConfigJson.consensus_parameters.V1.base_asset_id,\n output_index: 0,\n tx_pointer_block_height: 0,\n tx_pointer_tx_idx: 0,\n });\n }\n\n let fixedStateConfigJSON = JSON.stringify(stateConfigJson);\n\n const regexMakeNumber = /(\"amount\":)\"(\\d+)\"/gm;\n\n fixedStateConfigJSON = fixedStateConfigJSON.replace(regexMakeNumber, '$1$2');\n\n // Write a temporary chain configuration files.\n const chainConfigWritePath = path.join(tempDirPath, 'chainConfig.json');\n const stateConfigWritePath = path.join(tempDirPath, 'stateConfig.json');\n const metadataWritePath = path.join(tempDirPath, 'metadata.json');\n\n writeFileSync(chainConfigWritePath, JSON.stringify(chainConfigJson), 'utf8');\n writeFileSync(stateConfigWritePath, fixedStateConfigJSON, 'utf8');\n writeFileSync(metadataWritePath, JSON.stringify(metadataJson), 'utf8');\n\n snapshotDirToUse = tempDirPath;\n }\n\n const child = spawn(\n command,\n [\n 'run',\n ['--ip', ipToUse],\n ['--port', portToUse],\n useInMemoryDb ? ['--db-type', 'in-memory'] : ['--db-path', tempDirPath],\n ['--min-gas-price', '1'],\n poaInstant ? ['--poa-instant', 'true'] : [],\n ['--consensus-key', consensusKey],\n ['--snapshot', snapshotDirToUse as string],\n '--vm-backtrace',\n '--utxo-validation',\n '--debug',\n ...remainingArgs,\n ].flat(),\n {\n stdio: 'pipe',\n }\n );\n\n if (loggingEnabled) {\n child.stderr.pipe(process.stderr);\n }\n\n if (debugEnabled) {\n child.stdout.pipe(process.stdout);\n }\n\n const cleanupConfig: KillNodeParams = {\n child,\n configPath: tempDirPath,\n killFn: treeKill,\n state: {\n isDead: false,\n },\n };\n\n // Look for a specific graphql start point in the output.\n child.stderr.on('data', (chunk: string) => {\n // Look for the graphql service start.\n if (chunk.indexOf(graphQLStartSubstring) !== -1) {\n // Resolve with the cleanup method.\n resolve({\n cleanup: () => killNode(cleanupConfig),\n ip: ipToUse,\n port: portToUse,\n snapshotDir: snapshotDirToUse as string,\n });\n }\n if (/error/i.test(chunk)) {\n reject(chunk.toString());\n }\n });\n\n // Process exit.\n process.on('exit', () => killNode(cleanupConfig));\n\n // Catches ctrl+c event.\n process.on('SIGINT', () => killNode(cleanupConfig));\n\n // Catches \"kill pid\" (for example: nodemon restart).\n process.on('SIGUSR1', () => killNode(cleanupConfig));\n process.on('SIGUSR2', () => killNode(cleanupConfig));\n\n // Catches uncaught exceptions.\n process.on('beforeExit', () => killNode(cleanupConfig));\n process.on('uncaughtException', () => killNode(cleanupConfig));\n\n child.on('error', reject);\n });\n\nconst generateWallets = async (count: number, provider: Provider) => {\n const baseAssetId = provider.getBaseAssetId();\n const wallets: WalletUnlocked[] = [];\n for (let i = 0; i < count; i += 1) {\n const wallet = await generateTestWallet(provider, [[100_000, baseAssetId]]);\n wallets.push(wallet);\n }\n return wallets;\n};\n\nexport type LaunchNodeAndGetWalletsResult = Promise<{\n wallets: WalletUnlocked[];\n stop: () => void;\n provider: Provider;\n}>;\n\n/**\n * Launches a fuel-core node and returns a provider, 10 wallets, and a cleanup function to stop the node.\n * @param launchNodeOptions - options to launch the fuel-core node with.\n * @param walletCount - the number of wallets to generate. (optional, defaults to 10)\n * */\nexport const launchNodeAndGetWallets = async ({\n launchNodeOptions,\n walletCount = 10,\n}: {\n launchNodeOptions?: Partial<LaunchNodeOptions>;\n walletCount?: number;\n} = {}): LaunchNodeAndGetWalletsResult => {\n const { cleanup: closeNode, ip, port } = await launchNode(launchNodeOptions || {});\n\n const provider = await Provider.create(`http://${ip}:${port}/v1/graphql`);\n const wallets = await generateWallets(walletCount, provider);\n\n const cleanup = () => {\n closeNode();\n };\n\n return { wallets, stop: cleanup, provider };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,iBAA4B;AAE5B,IAAAC,iBAAwB;;;ACFxB,IAAAC,kBAAwB;AACxB,IAAAC,kBAAqC;AACrC,wBAAgC;AAGhC,IAAAC,gBAAmB;AACnB,IAAAC,iBAAoC;AACpC,IAAAC,gBAAsB;;;ACLtB,kBAAmB;AACnB,mBAAwB;AAQjB,IAAM,iBAAiB,CAAC,qBAAqD;AAClF,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI,MAAM,QAAQ,gBAAgB,GAAG;AACnC,aAAS,iBAAiB,CAAC;AAC3B,cAAU,iBAAiB,CAAC;AAC5B,UAAM,iBAAiB,CAAC,KAAK;AAAA,EAC/B,OAAO;AACL,aAAS,iBAAiB;AAC1B,cAAU,iBAAiB;AAC3B,UAAM,iBAAiB,OAAO;AAAA,EAChC;AAEA,QAAM,eAAW,gBAAG,MAAM;AAC1B,SAAO;AAAA,IACL,aAAS,sBAAQ,OAAO;AAAA,IACxB,QAAQ,SAAS,GAAG,CAAC,QAAI,gBAAG,CAAC,IAAI;AAAA,IACjC,KAAK,UAAM,gBAAG,GAAG,IAAI;AAAA,EACvB;AACF;AAQO,IAAM,4BAA4B,CAAC,WAAoD;AAC5F,QAAM,EAAE,QAAQ,QAAQ,IAAI;AAE5B,QAAM,iBAAiB,CAAC,GAAG,OAAO,cAAc;AAEhD,QAAM,WAAW,eAAe,UAAU,CAAC,iBAAiB,aAAa,YAAY,OAAO;AAE5F,MAAI,aAAa,IAAI;AACnB,mBAAe,QAAQ,EAAE,SAAS,eAAe,QAAQ,EAAE,OAAO,IAAI,MAAM;AAAA,EAC9E,OAAO;AACL,mBAAe,KAAK,EAAE,SAAS,OAAO,CAAC;AAAA,EACzC;AAEA,SAAO;AACT;;;ACrDA,IAAAC,kBAAwB;AACxB,IAAAC,kBAAqC;AAErC,IAAAC,gBAAuB;AAEvB,IAAAC,wBAKO;AACP,IAAAC,iBAA4C;AAC5C,sBAAkD;AAClD,IAAAA,iBAA2B;AAC3B,oBAAwB;AAExB,6BAA8B;AAC9B,IAAAC,gBAAsB;;;AChBtB,yBAAgB;AA08CT,IAAM,mDAAmD,mBAAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQzD,IAAM,6BAA6B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCnC,IAAM,uCAAuC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoC9C;AACC,IAAM,iCAAiC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQxC;AACC,IAAM,6CAA6C,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUnD,IAAM,mDAAmD,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM1D;AACC,IAAM,yCAAyC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS/C,IAAM,yCAAyC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ/C,IAAM,6CAA6C,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASpD;AAAA,EACJ;AACK,IAAM,sDAAsD,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAU7D;AAAA,EACJ;AACK,IAAM,0BAA0B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWhC,IAAM,iCAAiC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWvC,IAAM,6BAA6B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUnC,IAAM,kCAAkC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+CxC,IAAM,6BAA6B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOnC,IAAM,2BAA2B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYjC,IAAM,kCAAkC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUxC,IAAM,yCAAyC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS/C,IAAM,sCAAsC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO5C,IAAM,wCAAwC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO9C,IAAM,mCAAmC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzC,IAAM,mCAAmC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAazC,IAAM,8BAA8B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA4JrC;AACC,IAAM,yCAAyC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAwBhD;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACK,IAAM,+BAA+B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWtC;AAAA,EACJ;AACK,IAAM,qCAAqC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO3C,IAAM,8BAA8B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQpC,IAAM,8BAA8B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASpC,IAAM,qBAAqB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO3B,IAAM,sBAAsB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM7B;AACC,IAAM,mBAAmB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM1B;AACC,IAAM,yBAAyB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhC;AACC,IAAM,qCAAqC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM5C;AACC,IAAM,0BAA0B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUjC;AACC,IAAM,iCAAiC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBxC;AAAA,EACJ;AACK,IAAM,6BAA6B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMpC;AACC,IAAM,mBAAmB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM1B;AACC,IAAM,mCAAmC,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAS1C;AAAA,EACJ;AACK,IAAM,oBAAoB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAU3B;AACC,IAAM,kBAAkB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMzB;AACC,IAAM,mBAAmB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgB1B;AACC,IAAM,0BAA0B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWjC;AAAA,EACJ;AACK,IAAM,sBAAsB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ5B,IAAM,6BAA6B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMpC;AACC,IAAM,qBAAqB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM5B;AACC,IAAM,4BAA4B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOlC,IAAM,2BAA2B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOjC,IAAM,sBAAsB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgB7B;AACC,IAAM,sBAAsB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgB7B;AACC,IAAM,0BAA0B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWjC;AACC,IAAM,2BAA2B,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOjC,IAAM,iBAAiB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMxB;AACC,IAAM,iBAAiB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOvB,IAAM,wBAAwB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ9B,IAAM,yBAAyB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhC;AACC,IAAM,uBAAuB,mBAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM9B;AAEC,SAAS,OAAa,WAA4B;AACvD,SAAO;AAAA,IACL,WAAW,WAAyC,SAA0C;AAC5F,aAAO,UAA2D,oBAAoB,WAAW,OAAO;AAAA,IAC1G;AAAA,IACA,YAAY,WAA0C,SAA2C;AAC/F,aAAO,UAA6D,qBAAqB,WAAW,OAAO;AAAA,IAC7G;AAAA,IACA,SAAS,WAAuC,SAAwC;AACtF,aAAO,UAAuD,kBAAkB,WAAW,OAAO;AAAA,IACpG;AAAA,IACA,eAAe,WAA4C,SAA8C;AACvG,aAAO,UAAmE,wBAAwB,WAAW,OAAO;AAAA,IACtH;AAAA,IACA,2BAA2B,WAAwD,SAA0D;AAC3I,aAAO,UAA2F,oCAAoC,WAAW,OAAO;AAAA,IAC1J;AAAA,IACA,gBAAgB,WAA8C,SAA+C;AAC3G,aAAO,UAAqE,yBAAyB,WAAW,OAAO;AAAA,IACzH;AAAA,IACA,uBAAuB,WAAoD,SAAsD;AAC/H,aAAO,UAAmF,gCAAgC,WAAW,OAAO;AAAA,IAC9I;AAAA,IACA,mBAAmB,WAAgD,SAAkD;AACnH,aAAO,UAA2E,4BAA4B,WAAW,OAAO;AAAA,IAClI;AAAA,IACA,SAAS,WAAuC,SAAwC;AACtF,aAAO,UAAuD,kBAAkB,WAAW,OAAO;AAAA,IACpG;AAAA,IACA,yBAAyB,WAAuD,SAAwD;AACtI,aAAO,UAAuF,kCAAkC,WAAW,OAAO;AAAA,IACpJ;AAAA,IACA,UAAU,WAAwC,SAAyC;AACzF,aAAO,UAAyD,mBAAmB,WAAW,OAAO;AAAA,IACvG;AAAA,IACA,QAAQ,WAAqC,SAAuC;AAClF,aAAO,UAAqD,iBAAiB,WAAW,OAAO;AAAA,IACjG;AAAA,IACA,SAAS,WAAsC,SAAwC;AACrF,aAAO,UAAuD,kBAAkB,WAAW,OAAO;AAAA,IACpG;AAAA,IACA,gBAAgB,WAA6C,SAA+C;AAC1G,aAAO,UAAqE,yBAAyB,WAAW,OAAO;AAAA,IACzH;AAAA,IACA,YAAY,WAAyC,SAA2C;AAC9F,aAAO,UAA6D,qBAAqB,WAAW,OAAO;AAAA,IAC7G;AAAA,IACA,mBAAmB,WAAgD,SAAkD;AACnH,aAAO,UAA2E,4BAA4B,WAAW,OAAO;AAAA,IAClI;AAAA,IACA,WAAW,WAAwC,SAA0C;AAC3F,aAAO,UAA2D,oBAAoB,WAAW,OAAO;AAAA,IAC1G;AAAA,IACA,kBAAkB,WAAgD,SAAiD;AACjH,aAAO,UAAyE,2BAA2B,WAAW,OAAO;AAAA,IAC/H;AAAA,IACA,iBAAiB,WAA8C,SAAgD;AAC7G,aAAO,UAAuE,0BAA0B,WAAW,OAAO;AAAA,IAC5H;AAAA,IACA,YAAY,WAAyC,SAA2C;AAC9F,aAAO,UAA6D,qBAAqB,WAAW,OAAO;AAAA,IAC7G;AAAA,IACA,YAAY,WAAyC,SAA2C;AAC9F,aAAO,UAA6D,qBAAqB,WAAW,OAAO;AAAA,IAC7G;AAAA,IACA,gBAAgB,WAA6C,SAA+C;AAC1G,aAAO,UAAqE,yBAAyB,WAAW,OAAO;AAAA,IACzH;AAAA,IACA,iBAAiB,WAA8C,SAAgD;AAC7G,aAAO,UAAuE,0BAA0B,WAAW,OAAO;AAAA,IAC5H;AAAA,IACA,OAAO,WAAuC,SAAyC;AACrF,aAAO,UAAyD,gBAAgB,WAAW,OAAO;AAAA,IACpG;AAAA,IACA,OAAO,WAAuC,SAAyC;AACrF,aAAO,UAAyD,gBAAgB,WAAW,OAAO;AAAA,IACpG;AAAA,IACA,cAAc,WAA8C,SAAgD;AAC1G,aAAO,UAAuE,uBAAuB,WAAW,OAAO;AAAA,IACzH;AAAA,IACA,eAAe,WAAmD,SAA2D;AAC3H,aAAO,UAAiF,wBAAwB,WAAW,OAAO;AAAA,IACpI;AAAA,IACA,aAAa,WAAiD,SAAyD;AACrH,aAAO,UAA6E,sBAAsB,WAAW,OAAO;AAAA,IAC9H;AAAA,EACF;AACF;;;AClzEA,oBAAqC;AAErC,qBAAsB;AASf,IAAM,yBAAN,MAA8D;AAAA,EAI5D,YAAoB,SAAuC;AAAvC;AAAA,EAAwC;AAAA,EAH3D;AAAA,EAKR,MAAc,YAAY;AACxB,UAAM,EAAE,KAAK,OAAO,WAAW,QAAQ,IAAI,KAAK;AAEhD,UAAM,WAAW,MAAM,QAAQ,GAAG,WAAW;AAAA,MAC3C,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACnB,WAAO,sBAAM,KAAK;AAAA,QAClB;AAAA,MACF,CAAC;AAAA,MACD,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAGD,SAAK,SAAS,SAAS,KAAM,UAAU;AAAA,EACzC;AAAA,EAEQ,SAAmE,CAAC;AAAA,EACpE,kBAAkB;AAAA,EAE1B,MAAM,OAAkD;AACtD,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,KAAK,UAAU;AAAA,IACvB;AAGA,WAAO,MAAM;AACX,UAAI,KAAK,OAAO,SAAS,GAAG;AAE1B,cAAM,EAAE,MAAM,OAAO,IAAI,KAAK,OAAO,MAAM;AAC3C,YAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,gBAAM,IAAI;AAAA,YACR,wBAAU,MAAM;AAAA,YAChB,OAAO,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,KAAK,MAAM;AAAA,UAC9C;AAAA,QACF;AACA,eAAO,EAAE,OAAO,MAAM,MAAM,MAAM;AAAA,MACpC;AACA,YAAM,EAAE,OAAO,KAAK,IAAI,MAAM,KAAK,OAAO,KAAK;AAC/C,UAAI,MAAM;AACR,eAAO,EAAE,OAAO,KAAK;AAAA,MACvB;AAUA,YAAM,UAAU,uBAAsB,YACnC,OAAO,KAAK,EACZ,QAAQ,wBAAwB,EAAE;AAErC,UAAI,YAAY,IAAI;AAElB;AAAA,MACF;AAEA,YAAM,OAAO,GAAG,KAAK,kBAAkB;AACvC,YAAM,QAAQ;AAEd,YAAM,UAAU,CAAC,GAAG,KAAK,SAAS,KAAK,CAAC,EAAE,QAAQ,CAAC,UAAU,KAAK;AAElE,cAAQ,QAAQ,CAAC,UAAU;AACzB,YAAI;AACF,eAAK,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,UAAU,EAAE,CAAC,CAAC;AAAA,QAC1D,SAAS,GAAP;AACA,gBAAM,IAAI;AAAA,YACR,wBAAU;AAAA,YACV,6CAA6C;AAAA,UAC/C;AAAA,QACF;AAAA,MACF,CAAC;AAED,WAAK,kBAAkB,KAAK,QAAQ,QAAQ,KAAK,GAAG,EAAE;AAAA,IACxD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAsD;AAC1D,UAAM,KAAK,OAAO,OAAO;AACzB,SAAK,OAAO,YAAY;AACxB,WAAO,EAAE,MAAM,MAAM,OAAO,OAAU;AAAA,EACxC;AAAA,EAEA,CAAC,OAAO,aAAa,IAAgD;AACnE,WAAO;AAAA,EACT;AACF;AApGO,IAAM,wBAAN;AAEL,cAFW,uBAEI,eAAc,IAAI,YAAY;;;ACb/C,IAAAC,iBAAqC;AAErC,IAAAC,gBAAwB;AAQxB,IAAM,QAAe,CAAC;AAEtB,IAAM,oBAAoB,KAAK;AAExB,IAAM,cAAN,MAAkB;AAAA,EACvB;AAAA,EACA,YAAY,UAAkB,mBAAmB;AAC/C,SAAK,MAAM;AAEX,QAAI,OAAO,YAAY,YAAY,KAAK,OAAO,GAAG;AAChD,YAAM,IAAI;AAAA,QACR,yBAAU;AAAA,QACV,gBAAgB,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,OAAkB,iBAAiB,MAA6B;AAClE,UAAM,UAAM,uBAAQ,KAAK;AACzB,QAAI,MAAM,GAAG,GAAG;AACd,UAAI,CAAC,kBAAkB,MAAM,GAAG,EAAE,UAAU,KAAK,IAAI,GAAG;AACtD,eAAO,MAAM,GAAG,EAAE;AAAA,MACpB;AAEA,WAAK,IAAI,KAAK;AAAA,IAChB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAA0B;AAC5B,UAAM,YAAY,KAAK,IAAI,IAAI,KAAK;AACpC,UAAM,UAAM,uBAAQ,KAAK;AACzB,UAAM,GAAG,IAAI;AAAA,MACX,SAAS;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,aAA0B;AACxB,WAAO,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,MAAM,QAAQ;AAC9C,YAAM,OAAO,KAAK,IAAI,KAAK,KAAK;AAChC,UAAI,MAAM;AACR,aAAK,KAAK,IAAI;AAAA,MAChB;AAEA,aAAO;AAAA,IACT,GAAG,CAAC,CAAgB;AAAA,EACtB;AAAA,EAEA,gBAA6B;AAC3B,WAAO,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,MAAM,QAAQ;AAC9C,YAAM,OAAO,KAAK,IAAI,GAAG;AACzB,UAAI,MAAM;AACR,aAAK,KAAK,IAAI;AAAA,MAChB;AAEA,aAAO;AAAA,IACT,GAAG,CAAC,CAAgB;AAAA,EACtB;AAAA,EAEA,IAAI,OAAkB;AACpB,UAAM,UAAM,uBAAQ,KAAK;AACzB,WAAO,MAAM,GAAG;AAAA,EAClB;AACF;;;AC7EA,uBAAsC;AACtC,qBAA4B;AAC5B,IAAAC,iBAAqC;AAGrC,IAAAC,eAA6B;AAE7B,0BAA0B;AAC1B,IAAAC,gBAAkC;AAmF3B,IAAM,WAAW,CAAC,UAA0C;AACjE,QAAM,EAAE,KAAK,IAAI;AAEjB,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK,8BAAU,MAAM;AACnB,YAAM,gBAAY,wBAAS,MAAM,aAAa,IAAI;AAClD,YAAM,oBAAgB,wBAAS,MAAM,iBAAiB,IAAI;AAC1D,aAAO;AAAA,QACL,MAAM,8BAAU;AAAA,QAChB,UAAM,2BAAQ,wBAAS,MAAM,EAAE,EAAE,MAAM,GAAG,yBAAQ,CAAC;AAAA,QACnD,iBAAa,2BAAS,wBAAS,MAAM,EAAE,EAAE,MAAM,2BAAU,4BAAW,CAAC;AAAA,QACrE,WAAO,uBAAQ,MAAM,KAAK;AAAA,QAC1B,YAAQ,iBAAG,MAAM,MAAM;AAAA,QACvB,aAAS,uBAAQ,MAAM,OAAO;AAAA,QAC9B,WAAW;AAAA,UACT,iBAAa,2BAAS,wBAAS,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,UAC3D,aAAS,2BAAS,wBAAS,MAAM,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,QAC1D;AAAA,QACA,cAAc,MAAM;AAAA,QACpB,sBAAkB,iBAAG,MAAM,gBAAgB;AAAA,QAC3C,qBAAiB,iBAAG,UAAU,MAAM;AAAA,QACpC,yBAAqB,iBAAG,cAAc,MAAM;AAAA,QAC5C,eAAW,uBAAQ,SAAS;AAAA,QAC5B,mBAAe,uBAAQ,aAAa;AAAA,MACtC;AAAA,IACF;AAAA,IACA,KAAK,8BAAU,UAAU;AACvB,aAAO;AAAA,QACL,MAAM,8BAAU;AAAA,QAChB,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,QACb,WAAW;AAAA,QACX,WAAW;AAAA,UACT,iBAAa,2BAAS,wBAAS,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,UAC3D,aAAS,2BAAS,wBAAS,MAAM,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,QAC1D;AAAA,QACA,gBAAY,uBAAQ,MAAM,UAAU;AAAA,MACtC;AAAA,IACF;AAAA,IACA,KAAK,8BAAU,SAAS;AACtB,YAAM,gBAAY,wBAAS,MAAM,aAAa,IAAI;AAClD,YAAM,oBAAgB,wBAAS,MAAM,iBAAiB,IAAI;AAC1D,YAAM,WAAO,wBAAS,MAAM,QAAQ,IAAI;AACxC,aAAO;AAAA,QACL,MAAM,8BAAU;AAAA,QAChB,YAAQ,uBAAQ,MAAM,MAAM;AAAA,QAC5B,eAAW,uBAAQ,MAAM,SAAS;AAAA,QAClC,YAAQ,iBAAG,MAAM,MAAM;AAAA,QACvB,WAAO,uBAAQ,MAAM,KAAK;AAAA,QAC1B,cAAc,MAAM;AAAA,QACpB,sBAAkB,iBAAG,MAAM,gBAAgB;AAAA,QAC3C,qBAAiB,iBAAG,UAAU,MAAM;AAAA,QACpC,yBAAqB,iBAAG,cAAc,MAAM;AAAA,QAC5C,eAAW,uBAAQ,SAAS;AAAA,QAC5B,mBAAe,uBAAQ,aAAa;AAAA,QACpC,UAAM,uBAAQ,IAAI;AAAA,QAClB,YAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,IACA,SAAS;AACP,YAAM,IAAI;AAAA,QACR,yBAAU;AAAA,QACV,mCAAmC;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AACF;;;AC9JA,IAAAC,kBAA4B;AAC5B,IAAAC,iBAAqC;AAGrC,IAAAC,eAAmB;AAEnB,IAAAC,uBAA2B;AAC3B,IAAAC,gBAAwB;AAyCjB,IAAM,YAAY,CAAC,UAA4C;AACpE,QAAM,EAAE,KAAK,IAAI;AAEjB,UAAQ,MAAM;AAAA,IACZ,KAAK,gCAAW,MAAM;AACpB,aAAO;AAAA,QACL,MAAM,gCAAW;AAAA,QACjB,QAAI,uBAAQ,MAAM,EAAE;AAAA,QACpB,YAAQ,iBAAG,MAAM,MAAM;AAAA,QACvB,aAAS,uBAAQ,MAAM,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,IACA,KAAK,gCAAW,UAAU;AACxB,aAAO;AAAA,QACL,MAAM,gCAAW;AAAA,QACjB,YAAY,MAAM;AAAA,QAClB,aAAa;AAAA,QACb,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,KAAK,gCAAW,QAAQ;AACtB,aAAO;AAAA,QACL,MAAM,gCAAW;AAAA,QACjB,QAAI,uBAAQ,MAAM,EAAE;AAAA,QACpB,YAAQ,iBAAG,CAAC;AAAA,QACZ,aAAS,uBAAQ,MAAM,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,IACA,KAAK,gCAAW,UAAU;AACxB,aAAO;AAAA,QACL,MAAM,gCAAW;AAAA,QACjB,IAAI;AAAA,QACJ,YAAQ,iBAAG,CAAC;AAAA,QACZ,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,KAAK,gCAAW,iBAAiB;AAC/B,aAAO;AAAA,QACL,MAAM,gCAAW;AAAA,QACjB,gBAAY,uBAAQ,MAAM,UAAU;AAAA,QACpC,eAAW,uBAAQ,MAAM,SAAS;AAAA,MACpC;AAAA,IACF;AAAA,IACA,SAAS;AACP,YAAM,IAAI;AAAA,QACR,yBAAU;AAAA,QACV,oCAAoC;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF;;;AClGA,IAAAC,oBAA4B;AAC5B,qBAAoC;AACpC,IAAAC,kBAA4B;AAC5B,oBAA4B;AAG5B,IAAAC,eAAmB;AAEnB,IAAAC,uBAMO;AACP,IAAAC,gBAAgC;;;ACyBzB,IAAM,SAAS,CAAC,aAAyC,QAAQ;;;ACxCxE,IAAAC,kBAA4B;AAC5B,IAAAC,iBAAqC;AACrC,IAAAC,eAAmB;AAgBnB,IAAAC,uBAKO;AACP,IAAAH,kBAAkD;AAClD,IAAAI,gBAAyB;AAOzB,IAAM,wCAAwC,CAC5C,YAEA,QAAQ,SAAS,iCAAY,UAC7B,QAAQ,IAAI,SAAS,KAAK,MAAM;AAGlC,IAAM,mCAAmC,CACvC,YAEA,QAAQ,SAAS,iCAAY,SAC7B,QAAQ,eAAe;AAGlB,IAAM,6BAA6B,CAAC,aACzC,SAAS;AAAA,EAIP,CAAC,MAAM,YAAY;AACjB,QAAI,sCAAsC,OAAO,GAAG;AAClD,WAAK,uBAAuB,KAAK,OAAO;AAAA,IAC1C;AACA,QAAI,iCAAiC,OAAO,GAAG;AAC7C,WAAK,yBAAyB,KAAK,OAAO;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,wBAAwB,CAAC;AAAA,IACzB,0BAA0B,CAAC;AAAA,EAC7B;AACF;AAEF,IAAM,YAAY,CAAC,QAAwB,OAAO;AAE3C,SAAS,sBAAsB,SAAqC;AACzE,QAAM,EAAE,YAAY,IAAI;AAExB,UAAQ,aAAa;AAAA,IACnB,wBAA0B;AACxB,YAAM,cAA2B;AAAA,QAC/B,MAAM,iCAAY;AAAA,QAClB,MAAM,UAAU,QAAQ,MAAM,QAAQ,UAAU;AAAA,QAChD,IAAI,UAAU,SAAS,EAAE;AAAA,QACzB,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,SAAS,UAAU,QAAQ,OAAO;AAAA,QAClC,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,4BAA4B;AAC1B,YAAM,gBAA+B;AAAA,QACnC,MAAM,iCAAY;AAAA,QAClB,IAAI,UAAU,QAAQ,MAAM,QAAQ,UAAU;AAAA,QAC9C,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,qCAAgC;AAC9B,YAAM,oBAAuC;AAAA,QAC3C,MAAM,iCAAY;AAAA,QAClB,IAAI,UAAU,QAAQ,MAAM,QAAQ,UAAU;AAAA,QAC9C,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,QAAQ,UAAU,QAAQ,MAAM;AAAA,QAChC,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,0BAA2B;AACzB,YAAM,eAA6B;AAAA,QACjC,MAAM,iCAAY;AAAA,QAClB,IAAI,UAAU,QAAQ,EAAE;AAAA,QACxB,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,YAAY,UAAU,QAAQ,UAAU;AAAA,MAC1C;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,4BAA4B;AAC1B,YAAM,gBAA+B;AAAA,QACnC,MAAM,iCAAY;AAAA,QAClB,IAAI,UAAU,QAAQ,MAAM,QAAQ,UAAU;AAAA,QAC9C,SAAK,iBAAG,QAAQ,EAAE;AAAA,QAClB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,sBAAyB;AACvB,YAAM,aAAyB;AAAA,QAC7B,MAAM,iCAAY;AAAA,QAClB,IAAI,UAAU,QAAQ,MAAM,QAAQ,UAAU;AAAA,QAC9C,UAAM,iBAAG,QAAQ,EAAE;AAAA,QACnB,UAAM,iBAAG,QAAQ,EAAE;AAAA,QACnB,UAAM,iBAAG,QAAQ,EAAE;AAAA,QACnB,UAAM,iBAAG,QAAQ,EAAE;AAAA,QACnB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,+BAA6B;AAC3B,YAAM,iBAAiC;AAAA,QACrC,MAAM,iCAAY;AAAA,QAClB,IAAI,UAAU,QAAQ,MAAM,QAAQ,UAAU;AAAA,QAC9C,UAAM,iBAAG,QAAQ,EAAE;AAAA,QACnB,UAAM,iBAAG,QAAQ,EAAE;AAAA,QACnB,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,QAAQ,UAAU,QAAQ,MAAM;AAAA,QAChC,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,gCAA8B;AAC5B,YAAM,kBAAmC;AAAA,QACvC,MAAM,iCAAY;AAAA,QAClB,MAAM,UAAU,QAAQ,MAAM,QAAQ,UAAU;AAAA,QAChD,IAAI,UAAU,QAAQ,aAAa,SAAS,EAAE;AAAA,QAC9C,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,SAAS,UAAU,QAAQ,OAAO;AAAA,QAClC,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,uCAAiC;AAC/B,YAAM,qBAAyC;AAAA,QAC7C,MAAM,iCAAY;AAAA,QAClB,MAAM,UAAU,QAAQ,MAAM,QAAQ,UAAU;AAAA,QAChD,IAAI,UAAU,QAAQ,aAAa,QAAQ,EAAE;AAAA,QAC7C,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,SAAS,UAAU,QAAQ,OAAO;AAAA,QAClC,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,yCAAkC;AAChC,YAAM,sBAA2C;AAAA,QAC/C,MAAM,iCAAY;AAAA,QAClB,YAAQ,iBAAG,QAAQ,MAAM;AAAA,QACzB,aAAS,iBAAG,QAAQ,OAAO;AAAA,MAC7B;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,qCAAgC;AAC9B,YAAM,SAAS,UAAU,QAAQ,MAAM;AACvC,YAAM,YAAY,UAAU,QAAQ,SAAS;AAC7C,YAAM,QAAQ,UAAU,QAAQ,KAAK;AACrC,YAAM,aAAS,iBAAG,QAAQ,MAAM;AAChC,YAAM,OAAO,QAAQ,WAAO,wBAAS,QAAQ,IAAI,IAAI,WAAW,KAAK,CAAC,CAAC;AACvE,YAAM,SAAS,UAAU,QAAQ,MAAM;AAEvC,YAAM,YAAY,4CAAuB,aAAa;AAAA,QACpD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,oBAAuC;AAAA,QAC3C,MAAM,iCAAY;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,wBAA0B;AACxB,YAAM,aAAa,UAAU,QAAQ,MAAM,QAAQ,UAAU;AAC7D,YAAM,QAAQ,UAAU,QAAQ,KAAK;AACrC,YAAM,UAAU,sCAAiB,WAAW,YAAY,KAAK;AAE7D,YAAM,cAA2B;AAAA,QAC/B,MAAM,iCAAY;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,wBAA0B;AACxB,YAAM,aAAa,UAAU,QAAQ,MAAM,QAAQ,UAAU;AAC7D,YAAM,QAAQ,UAAU,QAAQ,KAAK;AACrC,YAAM,UAAU,sCAAiB,WAAW,YAAY,KAAK;AAE7D,YAAM,cAA2B;AAAA,QAC/B,MAAM,iCAAY;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAK,iBAAG,QAAQ,GAAG;AAAA,QACnB,QAAI,iBAAG,QAAQ,EAAE;AAAA,QACjB,QAAI,iBAAG,QAAQ,EAAE;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA;AACE,YAAM,IAAI,yBAAU,yBAAU,sBAAsB,yBAAyB,cAAc;AAAA,EAC/F;AACF;;;ACnRA,IAAAC,iBAAqC;;;ACArC,IAAAC,eAAmB;AAEnB,IAAAC,uBAAwC;AACxC,IAAAC,gBAAyB;AAUlB,IAAM,yBAAyB,CAAC,aAAkD;AACvF,QAAM,eAAe,SAAS;AAAA,IAC5B,CAAC,YAAY,QAAQ,SAAS,iCAAY;AAAA,EAC5C;AAEA,QAAM,UAAU,aAAa,OAAO,CAAC,MAAM,YAAY,KAAK,IAAI,QAAQ,OAAO,OAAG,iBAAG,CAAC,CAAC;AAEvF,SAAO;AACT;AAEO,SAAS,yBAAyB,UAAmB,kBAAoC;AAC9F,QAAM,WAAO,iBAAG,iBAAiB,IAAI;AACrC,MAAI,qBAAiB,iBAAG,CAAC;AACzB,MAAI,iBAAiB,eAAe,kBAAkB;AACpD,yBAAiB,iBAAG,QAAQ,EAAE,QAAI,iBAAG,iBAAiB,WAAW,CAAC;AAAA,EACpE;AACA,MAAI,iBAAiB,eAAe,kBAAkB;AACpD,yBAAiB,iBAAG,QAAQ,EAAE,QAAI,iBAAG,iBAAiB,UAAU,CAAC;AAAA,EACnE;AACA,SAAO,KAAK,IAAI,cAAc;AAChC;AAEO,SAAS,gBACd,QACA,aACA,UACA;AACA,QAAM,eAA8B,CAAC;AAErC,QAAM,mBAAmB,OAAO,OAAO,CAAC,UAAU;AAChD,UAAM,kBAAkB,WAAW,SAAS,YAAY;AACxD,QAAI,iBAAiB;AACnB,UAAI,eAAe,SAAS,MAAM,aAAa,MAAM,cAAc,MAAM;AACvE,eAAO;AAAA,MACT;AAEA,UAAI,CAAC,aAAa,SAAS,MAAM,YAAY,GAAG;AAE9C,qBAAa,KAAK,MAAM,YAAY;AACpC,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AAED,QAAM,uBAAuB,yBAAyB,aAAa,SAAS,gBAAgB;AAE5F,QAAM,WAAW,iBAAiB,OAAO,CAAC,OAAO,UAAU;AACzD,QAAI,eAAe,SAAS,MAAM,aAAa,MAAM,cAAc,MAAM;AACvE,aAAO,MAAM;AAAA,QACX,qBACG,IAAI,6BAAyB,wBAAS,MAAM,SAAS,EAAE,QAAQ,SAAS,YAAY,CAAC,EACrF,QAAI,iBAAG,MAAM,gBAAgB,CAAC;AAAA,MACnC;AAAA,IACF;AAEA,WAAO,MAAM,IAAI,SAAS,IAAI;AAAA,EAChC,OAAG,iBAAG,CAAC,CAAC;AAER,SAAO;AACT;AAUO,SAAS,UAAU,QAA0B;AAClD,QAAM,EAAE,UAAU,YAAY,QAAQ,aAAa,YAAY,IAAI;AAEnE,QAAM,YAAY,yBAAyB,aAAa,SAAS,gBAAgB;AACjF,QAAM,eAAW,iBAAG,WAAW,EAAE,IAAI,UAAU;AAC/C,QAAM,YAAY,gBAAgB,QAAQ,aAAa,QAAQ;AAE/D,QAAM,SAAS,UAAU,IAAI,QAAQ,EAAE,IAAI,SAAS,EAAE,IAAI,WAAW,EAAE,OAAO;AAE9E,SAAO;AACT;AAWO,SAAS,UAAU,QAA0B;AAClD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAW,iBAAG,CAAC;AAAA,IACf;AAAA,EACF,IAAI;AAEJ,MAAI,iCAA6B,iBAAG,CAAC;AAErC,MAAI,cAAc,GAAG,CAAC,KAAK,aAAa,IAAI,eAAe,GAAG;AAC5D,qCAA6B,iBAAG,YAAY,EAAE,IAAI,eAAe,EAAE,IAAI,UAAU;AAAA,EACnF;AAEA,QAAM,SAAS,2BAA2B,IAAI,MAAM,EAAE,IAAI,QAAQ;AAElE,SAAO,OAAO,IAAI,WAAW,IAAI,cAAc;AACjD;AAEO,SAAS,gCAAgC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,kBAAkB,yBAAyB,mBAAmB,SAAS,YAAY;AACzF,QAAM,eAAe,yBAAyB,eAAe,SAAS,SAAS;AAC/E,QAAM,UAAU,yBAAyB,aAAa,SAAS,IAAI;AAEnE,QAAM,0BAAsB,iBAAG,IAAI,KAAK,KAAK,EAAE;AAC/C,QAAM,gBAAgB,yBAAyB,qBAAqB,SAAS,IAAI;AACjF,QAAM,cAAc,gBAAgB,IAAI,YAAY,EAAE,IAAI,OAAO,EAAE,IAAI,aAAa;AACpF,SAAO,YAAY,OAAO;AAC5B;AAEO,SAAS,gCAAgC;AAAA,EAC9C;AAAA,EACA;AACF,GAGG;AACD,SAAO,yBAAyB,aAAa,SAAS,IAAI;AAC5D;AASO,IAAM,kBAAkB,CAAC,WAAkC;AAChE,QAAM,EAAE,KAAK,UAAU,aAAa,IAAI,IAAI;AAC5C,SAAO,IAAI,IAAI,QAAQ,EAAE,IAAI,WAAW,EAAE,IAAI,GAAG;AACnD;;;ACpKA,IAAAC,gBAAwB;AACxB,mBAAsB;AAOtB,SAAS,UAAU,QAAa;AAC9B,SAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,QAAQ;AACnC,YAAQ,OAAO,GAAG,GAAG,YAAY,MAAM;AAAA,MACrC,KAAK;AACH,eAAO,GAAG,QAAI,uBAAQ,OAAO,GAAG,CAAC;AACjC;AAAA,MACF,KAAK;AACH,eAAO,GAAG,IAAI,UAAU,OAAO,GAAG,CAAC;AACnC;AAAA,MACF,KAAK;AACH,eAAO,GAAG,IAAI,OAAO,GAAG,EAAE,MAAM;AAChC;AAAA,MACF,KAAK;AACH,eAAO,GAAG,IAAI,OAAO,GAAG,EAAE,OAAO;AACjC;AAAA,MACF,KAAK;AACH,eAAO,GAAG,IAAI,UAAU,OAAO,GAAG,CAAC;AACnC;AAAA,MACF;AACE;AAAA,IACJ;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAOO,SAAS,cAAc,MAAW;AAIvC,SAAO,cAAU,oBAAM,IAAI,CAAC;AAC9B;;;AC5CO,SAAS,MAAM,MAAc;AAClC,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,eAAW,MAAM;AACf,cAAQ,IAAI;AAAA,IACd,GAAG,IAAI;AAAA,EACT,CAAC;AACH;;;ACPA,IAAAC,iBAAqC;AACrC,IAAAC,eAAmB;AAEnB,IAAAC,uBAA4B;AAC5B,IAAAC,kBAQO;AAWA,IAAM,qBAAqB,CAAC,WAA0B;AAC3D,MAAI,eAAe,0CAA0C,OAAO;AACpE,QAAM,SAAS,OAAO;AAEtB,MAAI,8BAAc,SAAS,OAAO,MAAM,GAAG;AACzC,mBAAe,GAAG;AAAA;AAAA;AAAA;AAAA,EAA6D,yCAAyB,OAAO;AAAA,EACjH;AAEA,SAAO,EAAE,cAAc,OAAO;AAChC;AAGA,IAAM,YAAY,CAAC,QAAiB,KAAK,UAAU,KAAK,MAAM,CAAC;AAQxD,IAAM,sBAAsB,CACjC,UACA,SACG;AACH,MAAI,eAAe;AAEnB,QAAM,gBAAgB,SAAS,KAAK,CAAC,EAAE,KAAK,MAAM,SAAS,iCAAY,MAAM;AAC7E,MAAI,SAAS;AAEb,MAAI,eAAe;AACjB,UAAM,gBAAY,iBAAG,cAAc,GAAG,EAAE,MAAM;AAE9C,YAAQ,WAAW;AAAA,MACjB,KAAK,uCAAuB;AAC1B,iBAAS;AACT,uBAAe,qEACb,KAAK,SAAS,UAAU,KAAK,CAAC,CAAC,IAAI;AAErC;AAAA,MACF;AAAA,MAEA,KAAK,yCAAyB;AAC5B,cAAM,QACJ,KAAK,UAAU,IAAI,cAAc,UAAU,KAAK,CAAC,CAAC,SAAS,UAAU,KAAK,CAAC,CAAC,OAAO;AAErF,iBAAS;AACT,uBAAe,+DAA+D;AAC9E;AAAA,MACF;AAAA,MAEA,KAAK,yCAAyB;AAC5B,cAAM,QACJ,KAAK,UAAU,IAAI,cAAc,UAAU,KAAK,CAAC,CAAC,SAAS,UAAU,KAAK,CAAC,CAAC,OAAO;AAErF,iBAAS;AACT,uBAAe,+DAA+D;AAC9E;AAAA,MACF;AAAA,MAEA,KAAK;AACH,iBAAS;AACT,uBAAe;AACf;AAAA,MAEF,KAAK;AACH,iBAAS;AACT,uBAAe;AACf;AAAA,MAEF;AACE,iBAAS;AACT,uBAAe,oDAAoD,cAAc;AAAA,IACrF;AAAA,EACF;AAEA,SAAO,EAAE,cAAc,OAAO;AAChC;AAaO,IAAM,iBAAiB,CAAC,WAAuC;AACpE,QAAM,EAAE,UAAU,QAAQ,KAAK,IAAI;AAEnC,QAAM,UAAU,SAAS,KAAK,CAAC,EAAE,KAAK,MAAM,SAAS,iCAAY,KAAK;AACtE,QAAM,WAAW,SAAS,KAAK,CAAC,EAAE,KAAK,MAAM,SAAS,iCAAY,MAAM;AAExE,QAAM,EAAE,cAAc,OAAO,IAC3B,QAAQ,SAAS,mBAAmB,UAChC,mBAAmB,MAAM,IACzB,oBAAoB,UAAU,IAAI;AAExC,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,EACF;AAEA,SAAO,IAAI,yBAAU,yBAAU,iBAAiB,cAAc,QAAQ;AACxE;;;ACtHO,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAE/C,YAA4B,OAAe;AACzC,UAAM;AADoB;AAE1B,SAAK,UAAU,qBAAqB;AAAA,EACtC;AAAA,EAJA,OAAO;AAKT;;;AClBA,IAAAC,gBAAkC;AAI3B,IAAM,aAAa,CAAC,UAA8C;AACvE,QAAM,WAAO,wBAAS,KAAK;AAE3B,SAAO;AAAA,IACL,UAAM,uBAAQ,IAAI;AAAA,IAClB,YAAY,KAAK;AAAA,EACnB;AACF;;;AT6EO,IAAe,yBAAf,MAA4E;AAAA;AAAA,EAIjF;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA,SAAoC,CAAC;AAAA;AAAA,EAErC,UAAsC,CAAC;AAAA;AAAA,EAEvC,YAAyC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1C,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAgC,CAAC,GAAG;AAClC,SAAK,UAAM,iBAAG,GAAG;AACjB,SAAK,WAAW,YAAY;AAC5B,SAAK,eAAe,mBAAe,iBAAG,YAAY,IAAI;AACtD,SAAK,SAAS,aAAS,iBAAG,MAAM,IAAI;AACpC,SAAK,SAAS,UAAU,CAAC;AACzB,SAAK,UAAU,WAAW,CAAC;AAC3B,SAAK,YAAY,aAAa,CAAC;AAAA,EACjC;AAAA,EAEA,OAAO,cAAc,KAA6B;AAChD,QAAI,cAAc;AAClB,UAAM,WAAqB,CAAC;AAE5B,QAAI,IAAI,KAAK;AACX,qBAAe,gCAAW;AAC1B,eAAS,KAAK,EAAE,MAAM,IAAI,KAAK,MAAM,gCAAW,IAAI,CAAC;AAAA,IACvD;AACA,QAAI,IAAI,cAAc;AACpB,qBAAe,gCAAW;AAC1B,eAAS,KAAK,EAAE,MAAM,IAAI,cAAc,MAAM,gCAAW,aAAa,CAAC;AAAA,IACzE;AACA,QAAI,IAAI,WAAW,GAAG;AACpB,qBAAe,gCAAW;AAC1B,eAAS,KAAK,EAAE,MAAM,IAAI,UAAU,MAAM,gCAAW,SAAS,CAAC;AAAA,IACjE;AACA,QAAI,IAAI,QAAQ;AACd,qBAAe,gCAAW;AAC1B,eAAS,KAAK,EAAE,MAAM,IAAI,QAAQ,MAAM,gCAAW,OAAO,CAAC;AAAA,IAC7D;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQU,qBAAgD;AACxD,UAAM,SAAS,KAAK,QAAQ,IAAI,QAAQ,KAAK,CAAC;AAC9C,UAAM,UAAU,KAAK,SAAS,IAAI,SAAS,KAAK,CAAC;AACjD,UAAM,YAAY,KAAK,WAAW,IAAI,UAAU,KAAK,CAAC;AAEtD,UAAM,EAAE,aAAa,SAAS,IAAI,uBAAuB,cAAc,IAAI;AAE3E,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,OAAO;AAAA,MACpB,cAAc,QAAQ;AAAA,MACtB,gBAAgB,UAAU;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,qBAAiC;AAC/B,WAAO,IAAI,sCAAiB,EAAE,OAAO,KAAK,cAAc,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,UAAU,OAAwC;AAC1D,SAAK,OAAO,KAAK,KAAK;AACtB,WAAO,KAAK,OAAO,SAAS;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,WAAW,QAA0C;AAC7D,SAAK,QAAQ,KAAK,MAAM;AACxB,WAAO,KAAK,QAAQ,SAAS;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,WAAW,WAAsB;AAC/B,SAAK,UAAU,KAAK,SAAS;AAC7B,WAAO,KAAK,UAAU,SAAS;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAA0B;AAExB,SAAK,eAAW,sBAAO,CAAC,6BAAa,2BAAW,CAAC,CAAC;AAClD,WAAO,KAAK,UAAU,SAAS;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,qBAAqB,SAAmC,WAAsB;AAC5E,UAAM,eAAe,uBAAQ,oBAAoB,OAAO;AACxD,UAAM,eAAe,KAAK,gCAAgC,YAAY;AACtE,QAAI,OAAO,iBAAiB,UAAU;AACpC,WAAK,cAAc,cAAc,SAAS;AAAA,IAC5C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,OAAe,SAAoC;AAC/D,QAAI,CAAC,KAAK,UAAU,KAAK,GAAG;AAC1B,YAAM,IAAI,sBAAsB,KAAK;AAAA,IACvC;AACA,SAAK,UAAU,KAAK,IAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,oBAAoB,SAA8B;AACtD,UAAM,WAAW,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAC5D,UAAM,QAAQ;AAAA,MACZ,SAAS,IAAI,OAAO,QAAQ;AAC1B,aAAK,WAAW,MAAM,IAAI,gBAAwC,IAAI,CAAC;AAAA,MACzE,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAA+C;AAC7C,WAAO,KAAK,OAAO;AAAA,MACjB,CAAC,UAAgD,MAAM,SAAS,+BAAU;AAAA,IAC5E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiD;AAC/C,WAAO,KAAK,QAAQ;AAAA,MAClB,CAAC,WAAmD,OAAO,SAAS,gCAAW;AAAA,IACjF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAqD;AACnD,WAAO,KAAK,QAAQ;AAAA,MAClB,CAAC,WAAqD,OAAO,SAAS,gCAAW;AAAA,IACnF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gCAAgC,OAAwC;AACtE,UAAM,mBAAe,2BAAW,KAAK;AAErC,UAAM,QAAQ,KAAK,OAAO,KAAK,CAAC,UAAU;AACxC,cAAQ,MAAM,MAAM;AAAA,QAClB,KAAK,+BAAU;AACb,qBAAO,uBAAsC,MAAO,KAAK,MAAM,aAAa,OAAO;AAAA,QACrF,KAAK,+BAAU;AACb,qBACE,uBAAyC,MAAO,SAAS,MAAM,aAAa,OAAO;AAAA,QAEvF;AACE,iBAAO;AAAA,MACX;AAAA,IACF,CAAC;AAED,WAAqC,OAAQ;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,MAAY;AACvB,UAAM,EAAE,SAAS,OAAO,OAAO,IAAI;AAEnC,QAAI;AAEJ,QAAI,KAAK,WAAW;AAClB,qBAAe;AAAA,IACjB,OAAO;AACL,qBAAe,KAAK,gCAAgC,KAAK;AAGzD,UAAI,OAAO,iBAAiB,UAAU;AACpC,uBAAe,KAAK,gBAAgB;AAAA,MACtC;AAAA,IACF;AAEA,UAAM,QAAqC;AAAA,MACzC,GAAG;AAAA,MACH,MAAM,+BAAU;AAAA,MAChB,OAAO,MAAM,OAAO;AAAA,MACpB;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX;AAAA,IACF;AAGA,SAAK,UAAU,KAAK;AAGpB,SAAK,gBAAgB,OAAO,OAAO;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,SAAsB;AACpC,UAAM,EAAE,WAAW,QAAQ,QAAQ,QAAQ,IAAI;AAE/C,QAAI;AAEJ,QAAI,QAAQ,WAAW;AACrB,qBAAe;AAAA,IACjB,OAAO;AACL,qBAAe,KAAK,gCAAgC,SAAS;AAG7D,UAAI,OAAO,iBAAiB,UAAU;AACpC,uBAAe,KAAK,gBAAgB;AAAA,MACtC;AAAA,IACF;AAEA,UAAM,QAAwC;AAAA,MAC5C,GAAG;AAAA,MACH,MAAM,+BAAU;AAAA,MAChB,QAAQ,OAAO,OAAO;AAAA,MACtB,WAAW,UAAU,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AAGA,SAAK,UAAU,KAAK;AAGpB,SAAK,gBAAgB,WAAW,OAAO;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,UAAoB;AAC9B,QAAI,OAAO,QAAQ,GAAG;AACpB,WAAK,aAAa,QAAQ;AAAA,IAC5B,OAAO;AACL,WAAK,gBAAgB,QAAQ;AAAA,IAC/B;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,WAAoC;AAC/C,cAAU,QAAQ,CAAC,aAAa,KAAK,YAAY,QAAQ,CAAC;AAE1D,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,IAAiB,QAAsB,SAAoB;AACvE,SAAK,WAAW;AAAA,MACd,MAAM,gCAAW;AAAA,MACjB,QAAI,2BAAW,EAAE,EAAE,OAAO;AAAA,MAC1B;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe,IAAiB,YAAgC;AAC9D,eAAW,IAAI,cAAc,EAAE,QAAQ,CAAC,aAAa;AACnD,WAAK,WAAW;AAAA,QACd,MAAM,gCAAW;AAAA,QACjB,QAAI,2BAAW,EAAE,EAAE,OAAO;AAAA,QAC1B,QAAQ,SAAS;AAAA,QACjB,SAAS,SAAS;AAAA,MACpB,CAAC;AAAA,IACH,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,IAAiB,SAAoB;AAEnD,UAAM,eAAe,KAAK,iBAAiB,EAAE;AAAA,MAC3C,CAAC,eAAW,uBAAQ,OAAO,OAAO,MAAM;AAAA,IAC1C;AAGA,QAAI,CAAC,cAAc;AACjB,WAAK,WAAW;AAAA,QACd,MAAM,gCAAW;AAAA,QACjB,QAAI,2BAAW,EAAE,EAAE,OAAO;AAAA,QAC1B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AACT,WAAO,KAAK,mBAAmB,EAAE;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,WAA4B;AACtC,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,WAA0B;AACxC,UAAM,EAAE,UAAU,oBAAoB,IAAI;AAC1C,UAAM,EAAE,WAAW,IAAI;AACvB,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA,QAAQ,KAAK;AAAA,MACb,aAAa,KAAK,SAAS;AAAA,MAC3B,aAAa,KAAK,YAAY,QAAQ;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,gBAAgB,WAAsB,QAAgB;AACpD,UAAM,EAAE,oBAAoB,IAAI;AAChC,UAAM,EAAE,YAAY,YAAY,IAAI;AAEpC,UAAM,kBAAkB,KAAK,cAAc,EAAE,UAAU;AAAA,MACrD,CAAC,KAAK,QAAQ,MAAM,IAAI;AAAA,MACxB;AAAA,IACF;AACA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,KAAK;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBACE,YACA,aACA,gBACA;AACA,UAAM,iBAAiB,CAAC,YACtB,KAAK,OAAO,KAAK,CAAC,UAAU;AAC1B,UAAI,aAAa,OAAO;AACtB,eAAO,MAAM,YAAY;AAAA,MAC3B;AACA,aAAO;AAAA,IACT,CAAC;AAEH,UAAM,mBAAmB,CAAC,SAAiB,aAAiB;AAC1D,YAAM,aAAa,eAAe,OAAO;AAEzC,UAAI,eAAe;AAEnB,UAAI,YAAY,aAAa;AAC3B,2BAAe,iBAAG,qBAAqB;AAAA,MACzC;AAEA,UAAI,cAAc,aAAa,YAAY;AACzC,mBAAW,SAAK,2BAAQ,2BAAY,6BAAW,CAAC;AAChD,mBAAW,SAAS;AAAA,MACtB,OAAO;AACL,aAAK,aAAa;AAAA,UAChB;AAAA,YACE,QAAI,2BAAQ,2BAAY,6BAAW,CAAC;AAAA,YACpC,QAAQ;AAAA,YACR;AAAA,YACA,OAAO,kBAAkB,uBAAQ,WAAW;AAAA,YAC5C,kBAAc,iBAAG,CAAC;AAAA,YAClB,kBAAc,iBAAG,CAAC;AAAA,UACpB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,qBAAiB,iBAAa,iBAAG,IAAe,CAAC;AACjD,eAAW,QAAQ,CAAC,MAAM,iBAAiB,EAAE,SAAS,EAAE,MAAM,CAAC;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,2BAA2C;AACzC,UAAM,kBAAkB,KAAK,eAAe,EAAE,IAAI,CAAC,EAAE,QAAQ,QAAQ,OAAO;AAAA,MAC1E,YAAQ,iBAAG,MAAM;AAAA,MACjB,SAAS,QAAQ,SAAS;AAAA,IAC5B,EAAE;AAEF,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,SAAS;AACP,WAAO,cAAc,IAAI;AAAA,EAC3B;AAAA,EAEA,uBAAuB,QAAmC;AACxD,SAAK,OAAO,QAAQ,CAAC,MAAM;AACzB,UAAI;AACJ,cAAQ,EAAE,MAAM;AAAA,QACd,KAAK,+BAAU;AACb,+BAAqB,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,+BAAU,QAAQ,EAAE,UAAU,EAAE,KAAK;AACxF;AAAA,QACF,KAAK,+BAAU;AACb,+BAAqB,OAAO;AAAA,YAC1B,CAAC,MAAM,EAAE,SAAS,+BAAU,WAAW,EAAE,WAAW,EAAE;AAAA,UACxD;AACA;AAAA,QACF;AACE;AAAA,MACJ;AACA,UACE,sBACA,sBAAsB,0BACtB,iBAAG,mBAAmB,gBAAgB,EAAE,GAAG,CAAC,GAC5C;AAEA,UAAE,YAAY,mBAAmB;AAEjC,UAAE,gBAAgB,mBAAmB;AAErC,UAAE,mBAAmB,mBAAmB;AAAA,MAC1C;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,qBAAqB;AACnB,SAAK,OAAO,QAAQ,CAAC,UAAU;AAE7B,UACE,mBAAmB,SACnB,sBAAsB,SACtB,OAAO,MAAM,qBAAqB,YAClC;AAEA,cAAM,gBAAgB,MAAM;AAAA,UAC1B,uBAAuB,cAAc,IAAI,EAAE,SAAS;AAAA,QACtD;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AU3qBA,IAAAC,kBAA4B;AAE5B,IAAAC,eAA4B;AAE5B,IAAAC,uBAA4C;AAC5C,IAAAC,iBAAkC;;;ACLlC,IAAAC,kBAA4B;AAC5B,oBAAwC;AACxC,IAAAC,eAAmB;AACnB,IAAAC,uBAAyE;AACzE,IAAAC,iBAAuB;AACvB,IAAAC,gBAAsB;AAUf,SAAS,gBAAgB,oBAAwC,SAAiB;AACvF,QAAM,cAAc,mBAAmB,cAAc;AAErD,MAAI,YAAY,SAAS,qCAAgB,QAAQ;AAC/C,gBAAY,eAAe;AAAA,EAC7B;AAGA,cAAY,SAAS,YAAY,OAAO,IAAI,CAAC,UAAU;AACrD,UAAM,iBAAa,qBAAM,KAAK;AAE9B,YAAQ,WAAW,MAAM;AAAA,MAEvB,KAAK,+BAAU,MAAM;AACnB,mBAAW,YAAY;AAAA,UACrB,aAAa;AAAA,UACb,SAAS;AAAA,QACX;AACA,mBAAW,uBAAmB,iBAAG,CAAC;AAClC,eAAO;AAAA,MACT;AAAA,MAEA,KAAK,+BAAU,SAAS;AACtB,mBAAW,uBAAmB,iBAAG,CAAC;AAClC,eAAO;AAAA,MACT;AAAA,MAEA,KAAK,+BAAU,UAAU;AACvB,mBAAW,YAAY;AAAA,UACrB,aAAa;AAAA,UACb,SAAS;AAAA,QACX;AACA,mBAAW,OAAO;AAClB,mBAAW,cAAc;AACzB,mBAAW,cAAc;AACzB,mBAAW,YAAY;AACvB,eAAO;AAAA,MACT;AAAA,MACA;AACE,eAAO;AAAA,IACX;AAAA,EACF,CAAC;AAED,cAAY,UAAU,YAAY,QAAQ,IAAI,CAAC,WAAW;AACxD,UAAM,kBAAc,qBAAM,MAAM;AAEhC,YAAQ,YAAY,MAAM;AAAA,MAExB,KAAK,gCAAW,UAAU;AACxB,oBAAY,cAAc;AAC1B,oBAAY,YAAY;AACxB,eAAO;AAAA,MACT;AAAA,MAEA,KAAK,gCAAW,QAAQ;AACtB,oBAAY,aAAS,iBAAG,CAAC;AACzB,eAAO;AAAA,MACT;AAAA,MAEA,KAAK,gCAAW,UAAU;AACxB,oBAAY,KAAK;AACjB,oBAAY,aAAS,iBAAG,CAAC;AACzB,oBAAY,UAAU;AACtB,eAAO;AAAA,MACT;AAAA,MACA;AACE,eAAO;AAAA,IACX;AAAA,EACF,CAAC;AACD,cAAY,iBAAiB;AAC7B,cAAY,YAAY,CAAC;AAEzB,QAAM,mBAAe,+BAAgB,OAAO;AAC5C,QAAM,uBAAmB,uBAAO,CAAC,cAAc,IAAI,sCAAiB,EAAE,OAAO,WAAW,CAAC,CAAC;AAC1F,aAAO,sBAAO,gBAAgB;AAChC;;;ACxFA,IAAAC,iBAAkC;AAYlC,IAAM,kBAAkB,CAAC,UAAiC;AACxD,QAAM,IAAI,IAAI,WAAW,EAAE;AAC3B,IAAE,QAAI,yBAAS,KAAK,CAAC;AACrB,SAAO;AACT;AAEO,IAAM,iBAAiB,CAAC,gBAA4D;AACzF,MAAI;AACJ,MAAI;AAEJ,MAAI,MAAM,QAAQ,WAAW,GAAG;AAC9B,UAAM,YAAY,CAAC;AACnB,YAAQ,YAAY,CAAC;AAAA,EACvB,OAAO;AACL,UAAM,YAAY;AAClB,YAAQ,YAAY;AAAA,EACtB;AAEA,SAAO;AAAA,IACL,SAAK,wBAAQ,GAAG;AAAA,IAChB,WAAO,wBAAQ,gBAAgB,KAAK,CAAC;AAAA,EACvC;AACF;;;AFJO,IAAM,2BAAN,cAAuC,uBAAuB;AAAA,EACnE,OAAO,KAAK,KAAmC;AAC7C,QAAI,eAAe,MAAM;AACvB,aAAO;AAAA,IACT;AACA,WAAO,IAAI,KAAK,GAAG;AAAA,EACrB;AAAA;AAAA,EAGA,OAAO,qCAAgB;AAAA;AAAA,EAEvB;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,EAAE,sBAAsB,MAAM,cAAc,GAAG,KAAK,GAAiC;AAC/F,UAAM,IAAI;AACV,SAAK,uBAAuB,wBAAwB;AACpD,SAAK,WAAO,wBAAQ,QAAQ,2BAAW;AACvC,SAAK,eAAe,CAAC,GAAI,gBAAgB,CAAC,CAAE;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAmC;AACjC,UAAM,kBAAkB,KAAK,mBAAmB;AAChD,UAAM,uBAAuB,KAAK;AAClC,UAAM,eAAe,KAAK,cAAc,IAAI,cAAc,KAAK,CAAC;AAChE,WAAO;AAAA,MACL,MAAM,qCAAgB;AAAA,MACtB,GAAG;AAAA,MACH;AAAA,MACA,uBAAmB,iBAAG,aAAa,MAAM;AAAA,MACzC,MAAM,KAAK,WAAO,wBAAQ,KAAK,IAAI,IAAI;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,4BAAuE;AACrE,WAAO,KAAK,QAAQ;AAAA,MAClB,CAAC,WACC,OAAO,SAAS,gCAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,SAAyB;AACxC,WAAO,gBAAgB,MAAM,OAAO;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,yBAEE,YAEA,WACA;AACA,SAAK,WAAW;AAAA,MACd,MAAM,gCAAW;AAAA,MACjB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,YAAY,UAA2B;AACrC,WAAO,gCAAgC;AAAA,MACrC,uBAAmB,qBAAG,yBAAS,KAAK,UAAU,KAAK,oBAAoB,KAAK,IAAI,EAAE,MAAM;AAAA,MACxF;AAAA,MACA,eAAe,KAAK,aAAa;AAAA,MACjC,aAAa,KAAK,SAAS;AAAA,IAC7B,CAAC;AAAA,EACH;AACF;;;AGjIA,IAAAC,oBAA0B;AAC1B,IAAAC,kBAA2B;AAC3B,IAAAC,kBAA4B;AAE5B,IAAAC,gBAAmB;AAGnB,IAAAC,uBAAuD;AACvD,IAAAC,iBAAkC;;;ACRlC,IAAAC,iBAAyB;AAKlB,IAAM,mBAAgD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM3D,WAAO,yBAAS,YAAY;AAAA,EAC5B,kBAAkB,MAAM,IAAI,WAAW,CAAC;AAC1C;AAGO,IAAM,iBAA8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWzD,WAAO,yBAAS,oCAAoC;AAAA,EACpD,kBAAkB,MAAM,IAAI,WAAW,CAAC;AAC1C;;;ADUO,IAAM,2BAAN,cAAuC,uBAAuB;AAAA,EACnE,OAAO,KAAK,KAAmC;AAC7C,QAAI,eAAe,MAAM;AACvB,aAAO;AAAA,IACT;AACA,WAAO,IAAI,KAAK,GAAG;AAAA,EACrB;AAAA;AAAA,EAGA,OAAO,qCAAgB;AAAA;AAAA,EAEvB;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,EAAE,QAAQ,YAAY,UAAU,GAAG,KAAK,IAAkC,CAAC,GAAG;AACxF,UAAM,IAAI;AACV,SAAK,eAAW,kBAAG,QAAQ;AAC3B,SAAK,aAAS,yBAAS,UAAU,iBAAiB,KAAK;AACvD,SAAK,iBAAa,yBAAS,cAAc,iBAAiB,iBAAiB,CAAC;AAC5E,SAAK,OAAO,KAAK;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAmC;AACjC,UAAM,aAAS,yBAAS,KAAK,UAAU,IAAI;AAC3C,UAAM,iBAAa,yBAAS,KAAK,cAAc,IAAI;AACnD,WAAO;AAAA,MACL,MAAM,qCAAgB;AAAA,MACtB,gBAAgB,KAAK;AAAA,MACrB,GAAG,MAAM,mBAAmB;AAAA,MAC5B,kBAAc,kBAAG,OAAO,MAAM;AAAA,MAC9B,sBAAkB,kBAAG,WAAW,MAAM;AAAA,MACtC,cAAc;AAAA,MACd,YAAQ,wBAAQ,MAAM;AAAA,MACtB,gBAAY,wBAAQ,UAAU;AAAA,IAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAuD;AACrD,WAAO,KAAK,OAAO;AAAA,MACjB,CAAC,UAAoD,MAAM,SAAS,+BAAU;AAAA,IAChF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAAyD;AACvD,WAAO,KAAK,QAAQ;AAAA,MAClB,CAAC,WAAuD,OAAO,SAAS,gCAAW;AAAA,IACrF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAAyD;AACvD,WAAO,KAAK,QAAQ;AAAA,MAClB,CAAC,WAAuD,OAAO,SAAS,gCAAW;AAAA,IACrF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAa,QAAkC,MAAS;AACtD,SAAK,aAAa,OAAO,iBAAiB,IAAI;AAC9C,SAAK,SAAS,OAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,oBAA4B,GAAG;AAChD,QAAI,gBAAgB;AAEpB,WAAO,eAAe;AACpB,WAAK,WAAW;AAAA,QACd,MAAM,gCAAW;AAAA,MACnB,CAAC;AACD,uBAAiB;AAAA,IACnB;AAEA,WAAO,KAAK,QAAQ,SAAS;AAAA,EAC/B;AAAA,EAEA,gBAAgB,WAAsB,QAAgB;AACpD,UAAM,EAAE,oBAAoB,IAAI;AAChC,UAAM,EAAE,YAAY,YAAY,IAAI;AAEpC,UAAM,kBAAkB,KAAK,cAAc,EAAE,UAAU;AAAA,MACrD,CAAC,KAAK,QAAQ,MAAM,IAAI;AAAA,MACxB;AAAA,IACF;AAEA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,KAAK;AAAA,MACnB,UAAU,KAAK;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,0BAA0B,UAAoD;AAC5E,UAAM,sBAAkB,4BAAW,QAAQ;AAG3C,QAAI,KAAK,kBAAkB,EAAE,KAAK,CAAC,MAAM,EAAE,eAAe,gBAAgB,OAAO,CAAC,GAAG;AACnF,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,MAAM,UAAU;AAAA,MACjC,MAAM,+BAAU;AAAA,MAChB,YAAY,gBAAgB,OAAO;AAAA,MACnC,WAAW;AAAA,IACb,CAAC;AAED,SAAK,WAAW;AAAA,MACd,MAAM,gCAAW;AAAA,MACjB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,SAAyB;AACxC,WAAO,gBAAgB,MAAM,OAAO;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,KAAc,MAA8C;AAClE,UAAM,eAAe,IAAI,4BAAU,GAAG;AACtC,SAAK,aAAa,aAAa,UAAU,KAAK,gBAAgB,IAAI;AAClE,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,UAA2B;AACrC,WAAO,gCAAgC;AAAA,MACrC;AAAA,MACA,aAAa,KAAK,SAAS;AAAA,IAC7B,CAAC;AAAA,EACH;AACF;;;AExOA,IAAAC,iBAAqC;AACrC,IAAAC,wBAA2C;AAUpC,IAAM,wBAAwB,CAAC,QAAoD;AACxF,MAAI,eAAe,4BAA4B,eAAe,0BAA0B;AACtF,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,KAAK,IAAI;AAEjB,UAAQ,IAAI,MAAM;AAAA,IAChB,KAAK,sCAAgB,QAAQ;AAC3B,aAAO,yBAAyB,KAAK,GAAG;AAAA,IAC1C;AAAA,IACA,KAAK,sCAAgB,QAAQ;AAC3B,aAAO,yBAAyB,KAAK,GAAG;AAAA,IAC1C;AAAA,IACA,SAAS;AACP,YAAM,IAAI,yBAAU,yBAAU,0BAA0B,6BAA6B,OAAO;AAAA,IAC9F;AAAA,EACF;AACF;AAEO,IAAM,yBAAyB,CACpC,QACA,UAEA,OAAO;AAAA,EACL,CAAC,KAAK,UAAU;AACd,QAAI,MAAM,SAAS,gCAAU,QAAQ,MAAM,UAAU,OAAO;AAC1D,UAAI,MAAM,KAAK,MAAM,EAAE;AAAA,IACzB;AAEA,QAAI,MAAM,SAAS,gCAAU,WAAW,MAAM,cAAc,OAAO;AACjE,UAAI,SAAS,KAAK,MAAM,KAAK;AAAA,IAC/B;AAEA,WAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO,CAAC;AAAA,IACR,UAAU,CAAC;AAAA,EACb;AACF;;;ACnDF,IAAAC,kBAAqC;AAErC,IAAAC,gBAAmB;AAiBnB,IAAAC,wBAAiC;AACjC,IAAAC,iBAAyB;;;ACpBzB,IAAAC,gBAA4B;AAC5B,IAAAC,wBAA6C;AAC7C,IAAAC,iBAAkC;;;ACDlC,IAAAC,gBAAmB;AAEnB,IAAAC,wBAA8D;AAC9D,IAAAC,iBAAyB;AA4BlB,IAAM,0BAA0B,CAAC,WAA0C;AAChF,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,qBAAqB,EAAE,UAAU,WAAW,YAAY;AAAA,EAC1D,IAAI;AAEJ,QAAM,iBAAa,kBAAG,UAAU,UAAU;AAC1C,QAAM,qBAAiB,kBAAG,UAAU,cAAc;AAElD,QAAM,uBAAmB,yBAAS,UAAU;AAE5C,QAAM,CAAC,WAAW,IAAI,IAAI,uCAAiB,EAAE,OAAO,kBAAkB,CAAC;AAEvE,MAAI,YAAY,SAAS,sCAAgB,MAAM;AAC7C,WAAO;AAAA,MACL,SAAK,kBAAG,CAAC;AAAA,MACT,YAAQ,kBAAG,CAAC;AAAA,MACZ,YAAQ,kBAAG,CAAC;AAAA,IACd;AAAA,EACF;AAEA,QAAM,EAAE,MAAM,WAAW,QAAQ,SAAS,IAAI;AAI9C,MAAI,kBAAc,kBAAG,CAAC;AACtB,MAAI,eAAW,kBAAG,CAAC;AAEnB,MAAI,SAAS,sCAAgB,QAAQ;AACnC,UAAM,EAAE,sBAAsB,aAAa,IAAI;AAE/C,UAAM,wBAAoB,sBAAG,yBAAS,UAAU,oBAAoB,EAAE,IAAI,EAAE,MAAM;AAElF,kBAAc,gCAAgC;AAAA,MAC5C;AAAA,MACA;AAAA,MACA,eAAe,aAAa,UAAU;AAAA,MACtC,aAAa,iBAAiB;AAAA,IAChC,CAAC;AAAA,EACH,OAAO;AACL,UAAM,EAAE,eAAe,IAAI;AAE3B,QAAI,gBAAgB;AAClB,iBAAW;AAAA,IACb;AAEA,kBAAc,gCAAgC;AAAA,MAC5C;AAAA,MACA,aAAa,iBAAiB;AAAA,IAChC,CAAC;AAAA,EACH;AAEA,QAAM,SAAS,UAAU;AAAA,IACvB;AAAA,IACA,gBAAY,kBAAG,UAAU;AAAA,IACzB;AAAA,IACA;AAAA,IACA,aAAa,iBAAiB;AAAA,EAChC,CAAC;AAED,QAAM,eAAe,SAAS,KAAK,CAAC,WAAW,OAAO,SAAS,iCAAW,YAAY,GAAG;AAIzF,QAAM,kBAAkB,UAAU,OAAO,CAAC,KAAK,QAAQ,MAAM,IAAI,YAAY,CAAC;AAE9E,QAAM,SAAS,UAAU;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,SAAS,gBAAgB;AAAA,IAC7B;AAAA,IACA,KAAK;AAAA,IACL,aAAa;AAAA,IACb;AAAA,EACF,CAAC;AAED,QAAM,SAAS,gBAAgB;AAAA,IAC7B;AAAA,IACA,KAAK;AAAA,IACL,aAAa;AAAA,IACb;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,KAAK;AAAA,EACP;AACF;;;AChIA,IAAAC,mBAA4B;AAC5B,IAAAC,kBAAqC;AACrC,IAAAC,gBAAmB;AACnB,IAAAC,wBAA6C;;;ACH7C,IAAAC,oBAA6D;AAE7D,IAAAC,gBAAmB;AAUZ,IAAM,kBAAkB,CAAC,EAAE,KAAK,SAAS,YAAY,UAAU,MAA4B;AAChG,QAAM,eAAe,IAAI,4BAAU,GAAG;AACtC,QAAM,uBAAuB,QAAQ,OAAO,MAAM,CAAC;AACnD,QAAM,mBAAmB,aAAa,YAAY,oBAAoB;AACtE,QAAM,SAAS,iBAAiB,OAAO;AAEvC,MAAI;AAGJ,MAAI,iBAAiB,oBAAoB;AACvC,QAAI,YAAY;AAEd,YAAM,iBAAa,kBAAG,QAAQ,MAAM,EACjC,QAAI,uCAAoB,EAAE,WAAW,UAAU,SAAS,EAAE,CAAC,CAAC,EAC5D,SAAS;AAGZ,oBAAc,KAAK,WAAW,MAAM,CAAC,EAAE,MAAM,aAAa,CAAC;AAAA,IAC7D;AAAA,EACF,OAAO;AAEL,kBAAc,QAAQ,OAAO,MAAM;AAAA,EACrC;AAEA,MAAI;AACJ,MAAI,aAAa;AAEf,UAAM,OAAO,iBAAiB,gBAAgB,WAAW;AACzD,QAAI,MAAM;AAER,0BAAoB,OAAO,OAAO,CAAC,MAAM,OAAO,UAAU;AACxD,cAAM,QAAQ,KAAK,KAAK;AACxB,cAAM,OAAO,MAAM;AAEnB,YAAI,MAAM;AACR,iBAAO;AAAA,YACL,GAAG;AAAA;AAAA,YAEH,CAAC,IAAI,GAAG,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AAAA,UAC1C;AAAA,QACF;AAEA,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAAA,IACP;AAAA,EACF;AAEA,QAAM,OAAO;AAAA,IACX,mBAAmB,iBAAiB;AAAA,IACpC,cAAc,iBAAiB;AAAA,IAC/B;AAAA,IACA,GAAI,QAAQ,QAAQ,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,QAAQ;AAAA,EACzF;AAEA,SAAO;AACT;;;ACnEA,IAAAC,kBAAqC;AAErC,IAAAC,wBAA0B;AAGnB,SAAS,iBAA4B,QAAiB,OAAyB;AACpF,SAAO,OAAO,OAAO,CAAC,MAAM,MAAM,SAAS,EAAE,IAAI,CAAC;AACpD;AAGO,SAAS,gBAA2B,QAAiB,MAAiB;AAC3E,SAAO,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI;AAC7C;AAGO,SAAS,cAAc,QAAiB;AAC7C,SAAO,gBAA2B,QAAQ,gCAAU,IAAI;AAC1D;AAGO,SAAS,iBAAiB,QAAiB;AAChD,SAAO,gBAA8B,QAAQ,gCAAU,OAAO;AAChE;AAGO,SAAS,wBAAwB,QAAiB;AACvD,SAAO,iBAA2C,QAAQ,CAAC,gCAAU,MAAM,gCAAU,OAAO,CAAC;AAC/F;AAGO,SAAS,kBAAkB,QAAiB;AACjD,SAAO,gBAA+B,QAAQ,gCAAU,QAAQ;AAClE;AAGO,SAAS,oBAAoB,QAAiB,SAAiB;AACpE,QAAM,aAAa,cAAc,MAAM;AACvC,QAAM,gBAAgB,iBAAiB,MAAM;AAC7C,QAAM,YAAY,WAAW,KAAK,CAAC,MAAM,EAAE,YAAY,OAAO;AAE9D,QAAM,eAAe,cAAc;AAAA,IACjC,CAAC,MAAM,YAAY;AAAA,EACrB;AAEA,SAAO,aAAa;AACtB;AAGO,SAAS,0BACd,QACA,YAC2B;AAC3B,MAAI,cAAc,MAAM;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,SAAS,UAAU;AAEzC,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA,EACT;AACA,MAAI,cAAc,SAAS,gCAAU,UAAU;AAC7C,UAAM,IAAI;AAAA,MACR,0BAAU;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAGO,SAAS,uBAAuB,OAAc;AACnD,MAAI,MAAM,SAAS,gCAAU,MAAM;AACjC,WAAO,MAAM,MAAM,SAAS;AAAA,EAC9B;AAEA,MAAI,MAAM,SAAS,gCAAU,SAAS;AACpC,WAAO,MAAM,UAAU,SAAS;AAAA,EAClC;AAEA,SAAO;AACT;;;AC1EA,IAAAC,wBAA2B;AAGpB,SAAS,iBAA6B,SAAmB,MAAkB;AAChF,SAAO,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI;AAC9C;AAGO,SAAS,0BAA0B,SAAmB;AAC3D,SAAO,iBAAwC,SAAS,iCAAW,eAAe;AACpF;AAGO,SAAS,eAAe,SAAmB;AAChD,SAAO,iBAA6B,SAAS,iCAAW,IAAI;AAC9D;AAGO,SAAS,iBAAiB,SAAmB;AAClD,SAAO,iBAA+B,SAAS,iCAAW,MAAM;AAClE;AAGO,SAAS,mBAAmB,SAAmB;AACpD,SAAO,iBAAiC,SAAS,iCAAW,QAAQ;AACtE;;;AHQO,SAAS,kBACd,UACA,MACA;AACA,UAAQ,YAAY,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI;AACvD;AAGO,SAAS,uBAAuB,iBAAuD;AAC5F,UAAQ,iBAAiB;AAAA,IACvB,KAAK,sCAAgB;AACnB;AAAA,IACF,KAAK,sCAAgB;AACnB;AAAA,IACF,KAAK,sCAAgB;AACnB;AAAA,IACF;AACE,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,6BAA6B;AAAA,MAC/B;AAAA,EACJ;AACF;AAGO,SAAS,OAAO,iBAAkC,MAA2B;AAClF,QAAM,SAAS,uBAAuB,eAAe;AAErD,SAAO,WAAW;AACpB;AAGO,SAAS,WAAW,iBAAkC;AAC3D,SAAO,OAAO,kCAAyC;AACzD;AAGO,SAAS,aAAa,iBAAkC;AAC7D,SAAO,OAAO,sCAA2C;AAC3D;AAGO,SAAS,aAAa,iBAAkC;AAC7D,SAAO,OAAO,sCAA2C;AAC3D;AAQO,SAAS,gBAAgB,UAAsC;AACpE,SAAO,kBAAgD,UAAU,kCAAY,IAAI;AACnF;AAGO,SAAS,sBAAsB,UAAsC;AAC1E,SAAO,kBAAsD,UAAU,kCAAY,UAAU;AAC/F;AAGA,IAAM,cAAc,CAAC,KAAgB,QAAmB;AACtD,QAAM,UAAU,IAAI,cAAc,CAAC;AACnC,QAAM,UAAU,IAAI,cAAc,CAAC;AAGnC,QAAM,iBAAiB,QAAQ;AAAA,IAC7B,CAAC,WAAW,CAAC,QAAQ,KAAK,CAAC,WAAW,OAAO,YAAY,OAAO,OAAO;AAAA,EACzE;AAGA,QAAM,eAAe,QAAQ,IAAI,CAAC,WAAW;AAE3C,UAAM,gBAAgB,QAAQ,KAAK,CAAC,WAAW,OAAO,YAAY,OAAO,OAAO;AAChF,QAAI,CAAC,eAAe;AAElB,aAAO;AAAA,IACT;AAEA,UAAM,mBAAe,kBAAG,OAAO,MAAM,EAAE,IAAI,cAAc,MAAM;AAC/D,WAAO,EAAE,GAAG,QAAQ,QAAQ,aAAa;AAAA,EAC3C,CAAC;AAGD,SAAO,aAAa,OAAO,cAAc;AAC3C;AAGA,SAAS,gBAAgB,GAAc,GAAc;AACnD,SACE,EAAE,SAAS,EAAE,QACb,EAAE,MAAM,YAAY,EAAE,MAAM,WAC5B,EAAE,IAAI,YAAY,EAAE,IAAI,WACxB,EAAE,MAAM,SAAS,EAAE,MAAM,QACzB,EAAE,IAAI,SAAS,EAAE,IAAI;AAEzB;AAGO,SAAS,aAAa,YAAyB,OAAkB;AACtE,QAAM,gBAAgB,CAAC,GAAG,UAAU;AAGpC,QAAM,QAAQ,cAAc,UAAU,CAAC,OAAO,gBAAgB,IAAI,KAAK,CAAC;AAExE,MAAI,cAAc,KAAK,GAAG;AAExB,UAAM,oBAAoB,EAAE,GAAG,cAAc,KAAK,EAAE;AAEpD,QAAI,MAAM,YAAY,QAAQ;AAK5B,wBAAkB,aAAa,kBAAkB,YAAY,SACzD,YAAY,mBAAmB,KAAK,IACpC,MAAM;AAAA,IACZ;AAEA,QAAI,MAAM,OAAO,QAAQ;AAEvB,wBAAkB,QAAQ,CAAC,GAAI,kBAAkB,SAAS,CAAC,GAAI,GAAG,MAAM,KAAK;AAAA,IAC/E;AAEA,kBAAc,KAAK,IAAI;AAAA,EACzB,OAAO;AAEL,kBAAc,KAAK,KAAK;AAAA,EAC1B;AAEA,SAAO;AACT;AAQO,SAAS,8BAA8B;AAAA,EAC5C;AAAA,EACA;AACF,GAA2C;AACzC,QAAM,qBAAqB,sBAAsB,QAAQ;AAEzD,QAAM,6BAA6B,mBAAmB;AAAA,IACpD,CAAC,yBAAyB,YAAY;AAEpC,YAAM,UAAU;AAChB,YAAM,QAAQ,oBAAoB,QAAQ,OAAO;AACjD,UAAI,OAAO;AACT,cAAM,eAAe,uBAAuB,KAAK;AACjD,cAAM,yBAAyB,aAAa,yBAAyB;AAAA,UACnE;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA,SAAS;AAAA,UACX;AAAA,UACA,IAAI;AAAA,YACF;AAAA,YACA,SAAS,QAAQ,UAAU,SAAS;AAAA,YACpC;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV;AAAA,cACE,QAAQ,QAAQ;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAED,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAGO,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGgC;AAC9B,QAAM,uBAAuB,gBAAgB,QAAQ;AACrD,QAAM,kBAAkB,mBAAmB,OAAO;AAElD,QAAM,yBAAyB,gBAAgB,OAAO,CAAC,mBAAmB,WAAW;AACnF,UAAM,gBAAgB,0BAA0B,QAAQ,OAAO,UAAU;AAEzE,QAAI,eAAe;AACjB,YAAM,aAAa,qBAAqB,OAAO,CAAC,qBAAqB,YAAY;AAC/E,YAAI,QAAQ,OAAO,cAAc,YAAY;AAC3C,gBAAM,QAAQ,oBAAoB,QAAQ,QAAQ,OAAO;AACzD,cAAI,OAAO;AACT,kBAAM,eAAe,uBAAuB,KAAK;AACjD,kBAAM,QAAQ,CAAC;AAEf,kBAAM,MAAM,SAAS,cAAc,UAAU;AAC7C,gBAAI,KAAK;AACP,oBAAM;AAAA,gBACJ,gBAAgB;AAAA,kBACd;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF;AAEA,kBAAM,qBAAqB,aAAa,qBAAqB;AAAA,cAC3D;AAAA,cACA,MAAM;AAAA,gBACJ;AAAA,gBACA,SAAS;AAAA,cACX;AAAA,cACA,IAAI;AAAA,gBACF;AAAA,gBACA,SAAS,QAAQ;AAAA,cACnB;AAAA;AAAA,cAEA,YAAY,QAAQ,QAAQ,OAAO,IAC/B,SACA;AAAA,gBACE;AAAA,kBACE,QAAQ,QAAQ;AAAA,kBAChB,SAAS,QAAQ;AAAA,gBACnB;AAAA,cACF;AAAA,cACJ;AAAA,YACF,CAAC;AAED,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO;AAAA,MACT,GAAG,iBAAgC;AAEnC,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,CAAgB;AAEpB,SAAO;AACT;AAGA,SAAS,oCACP,SACA,gBACA,eACA;AACA,QAAM,EAAE,IAAI,WAAW,SAAS,OAAO,IAAI;AAC3C,MAAI,EAAE,MAAM,YAAY,IAAI;AAE5B,QAAM,SAAS,eAAe,KAAK,CAAC,UAAU,MAAM,eAAe,SAAS;AAI5E,MAAI,iCAAgB,aAAa;AAC/B,UAAM,SAAS,cAAc,KAAK,CAAC,WAAW,OAAO,YAAY,OAAO;AAExE,kBAAc,QAAQ,MAAM;AAAA,EAC9B;AAEA,QAAM,WAAW,eAAe,KAAK,CAAC,UAAU,MAAM,eAAe,WAAW;AAIhF,SAAO;AAAA,IACL;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,IAAI;AAAA,MACF,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,YAAY;AAAA,MACV;AAAA,QACE,SAAS,QAAQ,SAAS;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,GAA6C;AAC3C,MAAI,aAA0B,CAAC;AAE/B,QAAM,cAAc,eAAe,OAAO;AAC1C,QAAM,iBAAiB,kBAAkB,MAAM;AAC/C,QAAM,gBAAgB,iBAAiB,OAAO;AAK9C,cAAY,QAAQ,CAAC,WAAW;AAC9B,UAAM,EAAE,QAAQ,SAAS,GAAG,IAAI;AAEhC,UAAM,eAAe,cAAc,KAAK,CAAC,WAAW,OAAO,YAAY,OAAO;AAE9E,QAAI,cAAc;AAChB,mBAAa,aAAa,YAAY;AAAA,QACpC;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA,SAAS,aAAa;AAAA,QACxB;AAAA,QACA,IAAI;AAAA,UACF;AAAA,UACA,SAAS;AAAA,QACX;AAAA,QACA,YAAY;AAAA,UACV;AAAA,YACE;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAOD,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA,kCAAY;AAAA,EACd;AAMA,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA,kCAAY;AAAA,EACd;AAEA,GAAC,GAAG,kBAAkB,GAAG,mBAAmB,EAAE,QAAQ,CAAC,YAAY;AACjE,UAAM,YAAY,oCAAoC,SAAS,gBAAgB,aAAa;AAE5F,iBAAa,aAAa,YAAY,SAAS;AAAA,EACjD,CAAC;AAED,SAAO;AACT;AAGO,SAAS,yBAAyB,SAAgC;AACvE,QAAM,cAAc,eAAe,OAAO;AAC1C,QAAM,wBAAwB,YAAY,OAAO,CAAC,MAAM,WAAW;AACjE,UAAM,aAAa,aAAa,MAAM;AAAA,MACpC;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,SAAS;AAAA,MACX;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,SAAS,OAAO,GAAG,SAAS;AAAA,MAC9B;AAAA,MACA,YAAY;AAAA,QACV;AAAA,UACE,SAAS,OAAO,QAAQ,SAAS;AAAA,UACjC,QAAQ,OAAO;AAAA,QACjB;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,CAAgB;AAEpB,SAAO;AACT;AAGO,SAAS,6BAA6B,EAAE,QAAQ,QAAQ,GAAkC;AAC/F,QAAM,yBAAyB,0BAA0B,OAAO;AAChE,QAAM,QAAQ,wBAAwB,MAAM,EAAE,CAAC;AAC/C,QAAM,cAAc,uBAAuB,KAAK;AAChD,QAAM,4BAA4B,uBAAuB,OAAO,CAAC,MAAM,0BAA0B;AAC/F,UAAM,aAAa,aAAa,MAAM;AAAA,MACpC;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,SAAS;AAAA,MACX;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,SAAS,uBAAuB,cAAc;AAAA,MAChD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,CAAgB;AAEpB,SAAO;AACT;AAGO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,MAAI,aAAa,eAAe,GAAG;AACjC,WAAO;AAAA,MACL,GAAG,6BAA6B,EAAE,QAAQ,QAAQ,CAAC;AAAA,MACnD,GAAG,sBAAsB,EAAE,QAAQ,SAAS,SAAS,CAAC;AAAA,IACxD;AAAA,EACF;AAEA,MAAI,aAAa,eAAe,GAAG;AACjC,WAAO;AAAA,MACL,GAAG,sBAAsB,EAAE,QAAQ,SAAS,SAAS,CAAC;AAAA,MACtD,GAAG,0BAA0B;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACD,GAAG,8BAA8B,EAAE,QAAQ,SAAS,CAAC;AAAA,IACvD;AAAA,EACF;AAEA,SAAO,CAAC,GAAG,yBAAyB,OAAO,CAAC;AAC9C;;;AI/eA,IAAAC,wBAA4B;AAQrB,IAAM,oBAAoB,CAC/B,eAC6B;AAC7B,QAAM,UAAU,sBAAsB,UAAU;AAEhD,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK,kCAAY,YAAY;AAC3B,aAAO;AAAA,QACL,GAAG;AAAA,QACH,MAAM,WAAW,QAAQ;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,KAAK,kCAAY,SAAS;AACxB,aAAO;AAAA,QACL,GAAG;AAAA,QACH,MAAM,WAAW,QAAQ;AAAA,MAC3B;AAAA,IACF;AAAA,IACA;AACE,aAAO;AAAA,EACX;AACF;AAEO,IAAM,kCAAkC,CAC7C,aACkB;AAClB,QAAM,eAA8B,CAAC;AAErC,WAAS,QAAQ,CAAC,YAAY;AAC5B,QAAI,QAAQ,SAAS,kCAAY,MAAM;AACrC,mBAAa,KAAK;AAAA,QAChB,OAAO,QAAQ;AAAA,QACf,YAAY,QAAQ;AAAA,QACpB,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEO,IAAM,kCAAkC,CAC7C,aACkB;AAClB,QAAM,eAA8B,CAAC;AAErC,WAAS,QAAQ,CAAC,YAAY;AAC5B,QAAI,QAAQ,SAAS,kCAAY,MAAM;AACrC,mBAAa,KAAK;AAAA,QAChB,OAAO,QAAQ;AAAA,QACf,YAAY,QAAQ;AAAA,QACpB,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;ACnEA,IAAAC,kBAAqC;AAY9B,IAAM,2BAA2B,CAAC,cAA2C;AAClF,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH;AAAA,IACF,KAAK;AACH;AAAA,IACF,KAAK;AACH;AAAA,IACF,KAAK;AACH;AAAA,IACF;AACE,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,+BAA+B;AAAA,MACjC;AAAA,EACJ;AACF;AAQO,IAAM,uBAAuB,CAAC,yBAAoD;AACvF,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,MAAI,kBAAkB;AACtB,MAAI,kBAAkB;AACtB,MAAI,kBAAkB;AAEtB,MAAI,sBAAsB,MAAM;AAC9B,aAAS,yBAAyB,qBAAqB,IAAI;AAE3D,YAAQ,qBAAqB,MAAM;AAAA,MACjC,KAAK;AACH,eAAO,qBAAqB;AAC5B,kBAAU,qBAAqB,MAAM;AACrC,0BAAkB;AAClB;AAAA,MAEF,KAAK;AACH,eAAO,qBAAqB;AAC5B,kBAAU,qBAAqB,MAAM;AACrC,0BAAkB;AAClB;AAAA,MAEF,KAAK;AACH,eAAO,qBAAqB;AAC5B,0BAAkB;AAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,yBAAwD;AAAA,IAC5D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AACT;;;AP3CO,SAAS,2BACd,QACA;AACA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,CAAC;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,UAAU,uBAAuB,QAAQ;AAE/C,QAAM,iBAAa,wBAAQ,gBAAgB;AAE3C,QAAM,aAAa,cAAc;AAAA,IAC/B,iBAAiB,YAAY;AAAA,IAC7B,QAAQ,YAAY,UAAU,CAAC;AAAA,IAC/B,SAAS,YAAY,WAAW,CAAC;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,WAAW,uBAAuB,YAAY,IAAI;AAExD,QAAM,UAAM,kBAAG,YAAY,UAAU,KAAK,CAAC,WAAW,OAAO,SAAS,iCAAW,GAAG,GAAG,IAAI;AAE3F,QAAM,EAAE,IAAI,IAAI,wBAAwB;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA,qBAAqB;AAAA,MACnB;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,EAAE,iBAAiB,iBAAiB,iBAAiB,SAAS,QAAQ,KAAK,IAC/E,qBAAqB,oBAAoB;AAE3C,QAAM,eAAe,gCAAgC,QAAQ;AAC7D,QAAM,eAAe,gCAAgC,QAAQ;AAE7D,MAAI;AAEJ,MAAI,MAAM;AACR,WAAO,wBAAS,UAAU,IAAI;AAAA,EAChC;AAEA,QAAM,qBAA2D;AAAA,IAC/D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,WAAW,YAAY,IAAI;AAAA,IACvC,cAAc,aAAa,YAAY,IAAI;AAAA,IAC3C,cAAc,aAAa,YAAY,IAAI;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AACT;;;AQxHA,IAAAC,oBAA0C;AAC1C,IAAAC,wBAA4B;AAKrB,SAAS,eACd,UACA,SACA,eAAwC,CAAC,GACpC;AAiBL,SAAO,SAAS,OAAO,CAAC,MAAW,YAAY;AAC7C,QAAI,QAAQ,SAAS,kCAAY,WAAW,QAAQ,SAAS,kCAAY,KAAK;AAC5E,YAAM,iBAAiB,IAAI,4BAAU,aAAa,QAAQ,EAAE,KAAK,OAAO;AAExE,YAAM,OACJ,QAAQ,SAAS,kCAAY,MACzB,IAAI,iCAAe,KAAK,EAAE,OAAO,QAAQ,IAAI,IAC7C,QAAQ;AAEd,YAAM,CAAC,UAAU,IAAI,eAAe,UAAU,MAAM,QAAQ,KAAK,SAAS,CAAC;AAC3E,WAAK,KAAK,UAAU;AAAA,IACtB;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;ATuCO,IAAM,sBAAN,MAA0B;AAAA;AAAA,EAE/B;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA,cAAc,kBAAG,CAAC;AAAA;AAAA,EAElB;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,IAAY,UAAoB,MAA6B;AACvE,SAAK,KAAK;AACV,SAAK,WAAW;AAChB,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,aAAa,OACX,IACA,UACA,MAC8B;AAC9B,UAAM,WAAW,IAAI,oBAAoB,IAAI,UAAU,IAAI;AAC3D,UAAM,SAAS,MAAM;AACrB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAiC;AACrC,UAAM,WAAW,MAAM,KAAK,SAAS,WAAW,2BAA2B;AAAA,MACzE,eAAe,KAAK;AAAA,IACtB,CAAC;AAED,QAAI,CAAC,SAAS,aAAa;AACzB,YAAM,eAAe,KAAK,SAAS,WAAW,aAAa;AAAA,QACzD,eAAe,KAAK;AAAA,MACtB,CAAC;AAED,uBAAiB,EAAE,aAAa,KAAK,cAAc;AACjD,YAAI,cAAc;AAChB;AAAA,QACF;AAAA,MACF;AAEA,aAAO,KAAK,MAAM;AAAA,IACpB;AAEA,SAAK,iBAAiB,SAAS;AAE/B,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,kBAA2C,yBAAyC;AAClF,WAAO,IAAI,uCAAiB,EAAE;AAAA,UAC5B,yBAAS,wBAAwB,UAAU;AAAA,MAC3C;AAAA,IACF,IAAI,CAAC;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,sBACJ,iBAC+C;AAC/C,QAAI,cAAc,KAAK;AAEvB,QAAI,CAAC,aAAa;AAChB,oBAAc,MAAM,KAAK,MAAM;AAAA,IACjC;AAEA,UAAM,qBAAqB,KAAK;AAAA,MAC9B;AAAA,IACF;AAEA,QAAI,aAA2C,CAAC;AAEhD,QAAI,aAAa,UAAU,cAAc,YAAY,QAAQ;AAC3D,mBAAa,YAAY,OAAO;AAAA,IAClC;AAEA,UAAM,WAAW,WAAW,IAAI,iBAAiB,KAAK,CAAC;AAEvD,UAAM,EAAE,YAAY,gBAAgB,UAAU,YAAY,IAAI,KAAK,SAAS,aAAa;AACzF,UAAM,WAAW,MAAM,KAAK,SAAS,kBAAkB;AACvD,UAAM,YAAY,KAAK,SAAS,SAAS,EAAE,oBAAoB;AAE/D,UAAM,qBAAqB,2BAA6C;AAAA,MACtE,IAAI,KAAK;AAAA,MACT;AAAA,MACA,aAAa;AAAA,MACb,sBAAkB,yBAAS,YAAY,UAAU;AAAA,MACjD,sBAAsB,YAAY;AAAA,MAClC;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,sBAAsB;AAClC,UAAM,SAAS,KAAK,gBAAgB,QAAQ;AAC5C,QAAI,UAAU,WAAW,mBAAmB;AAC1C;AAAA,IACF;AAEA,UAAM,eAAe,KAAK,SAAS,WAAW,aAAa;AAAA,MACzD,eAAe,KAAK;AAAA,IACtB,CAAC;AAED,qBAAiB,EAAE,aAAa,KAAK,cAAc;AACjD,UAAI,aAAa,SAAS,qBAAqB;AAC7C,cAAM,IAAI;AAAA,UACR,0BAAU;AAAA,UACV,yCAAyC,aAAa;AAAA,QACxD;AAAA,MACF;AACA,UAAI,aAAa,SAAS,mBAAmB;AAC3C;AAAA,MACF;AAAA,IACF;AAEA,UAAM,KAAK,MAAM;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cACJ,iBAC8C;AAC9C,UAAM,KAAK,oBAAoB;AAE/B,UAAM,qBAAqB,MAAM,KAAK,sBAAwC,eAAe;AAE7F,UAAM,oBAAyD;AAAA,MAC7D,gBAAgB,KAAK;AAAA,MACrB,GAAG;AAAA,IACL;AAEA,QAAI,OAAuB,CAAC;AAE5B,QAAI,KAAK,MAAM;AACb,aAAO;AAAA,QACL,mBAAmB;AAAA,QACnB,KAAK,KAAK;AAAA,QACV,KAAK,KAAK;AAAA,MACZ;AAEA,wBAAkB,OAAO;AAAA,IAC3B;AAEA,QAAI,kBAAkB,iBAAiB;AACrC,YAAM;AAAA,QACJ;AAAA,QACA,gBAAgB,EAAE,OAAO;AAAA,MAC3B,IAAI;AAEJ,YAAM,eAAe;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KACJ,iBAC8C;AAC9C,WAAO,KAAK,cAAgC,eAAe;AAAA,EAC7D;AACF;;;AU1QO,SAAS,aAAa,SAAuB,iBAAyB;AAC3E,QAAM,WAAW,QAAQ,aAAa;AAEtC,UAAQ,QAAQ,SAAS;AAAA,IACvB,KAAK;AACH,aAAO,WAAW;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL;AACE,aAAO,MAAM,kBAAkB,KAAK;AAAA,EACxC;AACF;AASO,SAAS,eACd,SACA,SACA,kBAA0B,GACa;AACvC,MAAI,YAAY,QAAW;AACzB,WAAO;AAAA,EACT;AAEA,SAAO,UAAU,SAAS;AACxB,QAAI;AACF,aAAO,MAAM,QAAQ,GAAG,IAAI;AAAA,IAC9B,SAAS,QAAP;AACA,YAAM,QAAQ;AAMd,UAAI,MAAM,OAAO,SAAS,gBAAgB;AACxC,cAAM;AAAA,MACR;AACA,YAAM,WAAW,kBAAkB;AAEnC,UAAI,WAAW,QAAQ,YAAY;AACjC,cAAM;AAAA,MACR;AAEA,YAAM,QAAQ,aAAa,SAAS,QAAQ;AAE5C,YAAM,MAAM,KAAK;AAEjB,aAAO,eAAe,SAAS,SAAS,QAAQ,EAAE,GAAG,IAAI;AAAA,IAC3D;AAAA,EACF;AACF;;;AClFO,IAAM,kBAAkB,IAAI,mBAAqD;AACtF,QAAM,YAAmC,CAAC;AAE1C,WAAS,SAAS,EAAE,QAAQ,QAAQ,GAAiB;AACnD,QAAI,UAAU,OAAO,GAAG;AACtB,gBAAU,OAAO,IAAI,UAAU,OAAO,EAAE,IAAI,MAAM;AAAA,IACpD,OAAO;AACL,gBAAU,OAAO,IAAI;AAAA,IACvB;AAAA,EACF;AAEA,iBAAe,QAAQ,CAAC,QAAQ,IAAI,QAAQ,QAAQ,CAAC;AAGrD,SAAO,OAAO,QAAQ,SAAS,EAAE,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,SAAS,OAAO,EAAE;AACnF;;;AjCkCA,IAAM,cAAc;AAyGpB,IAAM,kBAAkB,CAAC,UAAmD;AAC1E,QAAM,EAAE,MAAM,UAAU,qBAAqB,YAAY,IAAI;AAE7D,QAAM,EAAE,gBAAgB,WAAW,iBAAiB,cAAc,UAAU,SAAS,IACnF;AAEF,SAAO;AAAA,IACL;AAAA,IACA,qBAAiB,kBAAG,QAAQ;AAAA,IAC5B,qBAAqB;AAAA,MACnB,qBAAiB,kBAAG,eAAe,eAAe;AAAA,MAClD,eAAW,kBAAG,SAAS,SAAS;AAAA,MAChC,gBAAY,kBAAG,SAAS,UAAU;AAAA,MAClC,kBAAc,kBAAG,SAAS,YAAY;AAAA,MACtC,iBAAa,kBAAG,SAAS,WAAW;AAAA,MACpC,qBAAiB,kBAAG,aAAa,eAAe;AAAA,MAChD,yBAAqB,kBAAG,aAAa,mBAAmB;AAAA,MACxD,qBAAiB,kBAAG,eAAe,eAAe;AAAA,MAClD,wBAAoB,kBAAG,gBAAgB,kBAAkB;AAAA,MACzD,4BAAwB,kBAAG,gBAAgB,sBAAsB;AAAA,MACjE,wBAAoB,kBAAG,gBAAgB,kBAAkB;AAAA,MACzD,oBAAgB,kBAAG,UAAU,cAAc;AAAA,MAC3C,gBAAY,kBAAG,UAAU,UAAU;AAAA,MACnC,0BAAsB,kBAAG,gBAAgB,oBAAoB;AAAA,MAC7D,aAAS,kBAAG,oBAAoB,OAAO;AAAA,MACvC,aAAa,oBAAoB;AAAA,MACjC;AAAA,IACF;AAAA,IACA;AAAA,IACA,aAAa;AAAA,MACX,IAAI,YAAY;AAAA,MAChB,YAAQ,kBAAG,YAAY,MAAM;AAAA,MAC7B,MAAM,YAAY,OAAO;AAAA,MACzB,cAAc,YAAY,aAAa,IAAI,CAAC,OAAO;AAAA,QACjD,IAAI,EAAE;AAAA,MACR,EAAE;AAAA,IACJ;AAAA,EACF;AACF;AApMA;AA2SA,IAAqB,YAArB,MAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6ClB,YAED,KACP,UAA2B,CAAC,GAC5B;AAFO;AA2OT;AAAA;AAAA;AAAA;AAzRA;AACA;AAUA,mCAA2B;AAAA,MACzB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,MACP,cAAc;AAAA,IAChB;AAiCE,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,GAAG,QAAQ;AAC7C,SAAK,MAAM;AAEX,SAAK,aAAa,KAAK,iBAAiB;AACxC,SAAK,QAAQ,QAAQ,YAAY,IAAI,YAAY,QAAQ,SAAS,IAAI;AAAA,EACxE;AAAA,EAnDA,OAAO,0BAA0B;AAC/B,cAAS,gBAAgB,CAAC;AAC1B,cAAS,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EAYA,OAAe,WAAW,SAAiE;AACzF,UAAM,EAAE,cAAc,QAAQ,IAAI;AAElC,WAAO,eAAe,UAAU,SAAS;AACvC,YAAM,MAAM,KAAK,CAAC;AAClB,YAAM,UAAU,KAAK,CAAC;AACtB,YAAM,SAAS,UAAU,YAAY,QAAQ,OAAO,IAAI;AAExD,UAAI,cAA2B,EAAE,GAAG,SAAS,OAAO;AAEpD,UAAI,QAAQ,mBAAmB;AAC7B,sBAAc,MAAM,QAAQ,kBAAkB,WAAW;AAAA,MAC3D;AAEA,aAAO,QAAQ,QAAQ,QAAQ,MAAM,KAAK,aAAa,OAAO,IAAI,MAAM,KAAK,WAAW;AAAA,IAC1F,GAAG,YAAY;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA,aAAa,OAAO,KAAa,UAA2B,CAAC,GAAG;AAC9D,UAAM,WAAW,IAAI,UAAS,KAAK,OAAO;AAC1C,UAAM,SAAS,sBAAsB;AACrC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AACT,UAAM,QAAQ,UAAS,eAAe,KAAK,GAAG;AAC9C,QAAI,CAAC,OAAO;AACV,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,UAAM,OAAO,UAAS,cAAc,KAAK,GAAG;AAC5C,QAAI,CAAC,MAAM;AACT,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe;AACb,UAAM,EAAE,aAAa,oBAAoB,gBAAgB,YAAY,SAAS,IAC5E,KAAK,SAAS,EAAE;AAClB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,KAAa,SAA2B;AACpD,SAAK,MAAM;AACX,SAAK,UAAU,WAAW,KAAK;AAC/B,SAAK,aAAa,KAAK,iBAAiB;AACxC,UAAM,KAAK,sBAAsB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,wBAAwB;AAC5B,UAAM,QAAQ,MAAM,KAAK,WAAW;AACpC,UAAM,WAAW,MAAM,KAAK,UAAU;AAEtC,cAAS,+BAA+B,QAAQ;AAEhD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAe,+BAA+B,UAAoB;AAChE,UAAM,EAAE,kBAAkB,kBAAkB,iBAAiB,QAC3D,mDAAkC,SAAS,WAAW;AAExD,QAAI,CAAC,oBAAoB,CAAC,kBAAkB;AAC1C,YAAM,IAAI;AAAA,QACR,0BAAU,MAAM;AAAA,QAChB,wBAAwB,SAAS,mCAAmC;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,mBAAmB;AACzB,UAAM,UAAU,UAAS,WAAW,KAAK,OAAO;AAChD,UAAM,YAAY,IAAI,qCAAc,KAAK,KAAK;AAAA,MAC5C,OAAO,CAAC,KAAa,gBAA6B,QAAQ,KAAK,aAAa,KAAK,OAAO;AAAA,IAC1F,CAAC;AAED,UAAM,eAAe,CAAC,OAAqB,SAAkC;AAC3E,YAAM,eAAe,MAAM,YAAY,KAAK,CAAC,MAAM,EAAE,SAAS,qBAAqB;AAGnF,YAAM,iBAAiB,cAAc,cAAc;AAEnD,UAAI,gBAAgB;AAClB,eAAO,IAAI,sBAAsB;AAAA,UAC/B,KAAK,KAAK;AAAA,UACV;AAAA,UACA,SAAS,CAAC,KAAK,gBAAgB,QAAQ,KAAe,aAAa,KAAK,OAAO;AAAA,UAC/E,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AACA,aAAO,UAAU,QAAQ,OAAO,IAAI;AAAA,IACtC;AAGA,WAAO,OAAiB,YAAY;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAA8B;AAClC,UAAM;AAAA,MACJ,UAAU,EAAE,YAAY;AAAA,IAC1B,IAAI,MAAM,KAAK,WAAW,WAAW;AACrC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,aAA+B;AACnC,UAAM;AAAA,MACJ;AAAA,MACA,qBAAqB,EAAE,QAAQ;AAAA,IACjC,IAAI,MAAM,KAAK,SAAS;AACxB,UAAM,UAAU,IAAI,sBAAQ,MAAM,QAAQ,SAAS,CAAC;AACpD,WAAO,QAAQ,QAAQ,OAAO;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,iBAA8B;AAClC,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,WAAW,SAAS;AACjD,eAAO,kBAAG,MAAM,YAAY,QAAQ,EAAE;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAA+B;AACnC,UAAM,EAAE,SAAS,IAAI,MAAM,KAAK,WAAW,YAAY;AAEvD,UAAM,oBAA8B;AAAA,MAClC,cAAU,kBAAG,SAAS,QAAQ;AAAA,MAC9B,WAAO,kBAAG,SAAS,KAAK;AAAA,MACxB,aAAa,SAAS;AAAA,MACtB,gBAAgB,SAAS;AAAA,MACzB,aAAa,SAAS;AAAA,IACxB;AAEA,cAAS,cAAc,KAAK,GAAG,IAAI;AAEnC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAiC;AACrC,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,WAAW,SAAS;AAEjD,UAAM,iBAAiB,gBAAgB,KAAK;AAE5C,cAAS,eAAe,KAAK,GAAG,IAAI;AAEpC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa;AACX,UAAM;AAAA,MACJ,qBAAqB,EAAE,QAAQ;AAAA,IACjC,IAAI,KAAK,SAAS;AAClB,WAAO,QAAQ,SAAS;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB;AACf,UAAM;AAAA,MACJ,qBAAqB,EAAE,YAAY;AAAA,IACrC,IAAI,KAAK,SAAS;AAClB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA,MAAM,gBACJ,wBACA,EAAE,yBAAyB,MAAM,iBAAiB,MAAM,IAA0B,CAAC,GACrD;AAC9B,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,0BAAK,8BAAL,WAAkB,mBAAmB;AACrC,QAAI,wBAAwB;AAC1B,YAAM,KAAK,uBAAuB,kBAAkB;AAAA,IACtD;AAGA,UAAM,yBAAqB,wBAAQ,mBAAmB,mBAAmB,CAAC;AAE1E,QAAI;AAEJ,QAAI,mBAAmB,SAAS,sCAAgB,QAAQ;AACtD,aAAO,mBAAmB;AAAA,IAC5B;AAEA,QAAI,gBAAgB;AAClB,YAAM,eAAe,KAAK,WAAW,eAAe,EAAE,mBAAmB,CAAC;AAC1E,uBAAiB,EAAE,eAAe,KAAK,cAAc;AACnD,YAAI,eAAe,SAAS,qBAAqB;AAC/C,gBAAM,IAAI;AAAA,YACR,0BAAU;AAAA,YACV,yCAAyC,eAAe;AAAA,UAC1D;AAAA,QACF;AAEA,YAAI,eAAe,SAAS,mBAAmB;AAC7C;AAAA,QACF;AAAA,MACF;AAEA,YAAMC,iBAAgB,mBAAmB,iBAAiB,KAAK,WAAW,CAAC;AAC3E,YAAM,WAAW,IAAI,oBAAoBA,gBAAe,MAAM,IAAI;AAClE,YAAM,SAAS,MAAM;AACrB,aAAO;AAAA,IACT;AAEA,UAAM;AAAA,MACJ,QAAQ,EAAE,IAAI,cAAc;AAAA,IAC9B,IAAI,MAAM,KAAK,WAAW,OAAO,EAAE,mBAAmB,CAAC;AAEvD,WAAO,IAAI,oBAAoB,eAAe,MAAM,IAAI;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,KACJ,wBACA,EAAE,gBAAgB,yBAAyB,KAAK,IAAwB,CAAC,GACpD;AACrB,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,QAAI,wBAAwB;AAC1B,aAAO,KAAK,uBAAuB,kBAAkB;AAAA,IACvD;AACA,UAAM,yBAAqB,wBAAQ,mBAAmB,mBAAmB,CAAC;AAC1E,UAAM,EAAE,QAAQ,eAAe,IAAI,MAAM,KAAK,WAAW,OAAO;AAAA,MAC9D,qBAAqB;AAAA,MACrB,gBAAgB,kBAAkB;AAAA,IACpC,CAAC;AACD,UAAM,CAAC,EAAE,UAAU,aAAa,OAAO,CAAC,IAAI;AAC5C,UAAM,WAAW,YAAY,IAAI,iBAAiB;AAElD,WAAO,EAAE,UAAU,cAAc,OAAO;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,mBAAmB,oBAAqE;AAC5F,UAAM,2BAA2B;AAAA,MAC/B,mBAAmB,OAAO;AAAA,QACxB,CAAC,UACC,eAAe,SACf,MAAM,aACN,KAAC,+BAAW,yBAAS,MAAM,SAAS,OAAG,yBAAS,IAAI,CAAC,KACrD,IAAI,iBAAG,MAAM,gBAAgB,EAAE,OAAO;AAAA,MAC1C;AAAA,IACF;AACA,QAAI,CAAC,0BAA0B;AAC7B,aAAO;AAAA,IACT;AACA,UAAM,yBAAqB,wBAAQ,mBAAmB,mBAAmB,CAAC;AAC1E,UAAM,WAAW,MAAM,KAAK,WAAW,mBAAmB;AAAA,MACxD;AAAA,IACF,CAAC;AAED,UAAM;AAAA,MACJ,oBAAoB,EAAE,OAAO;AAAA,IAC/B,IAAI;AAEJ,QAAI,QAAQ;AACV,aAAO,QAAQ,CAAC,OAAO,UAAU;AAC/B,YAAI,sBAAsB,aAAS,kBAAG,MAAM,gBAAgB,EAAE,GAAG,CAAC,GAAG;AAEnE,UAA8B,mBAAmB,OAAO,KAAK,EAAG,mBAC9D,MAAM;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,uBACJ,oBACwC;AACxC,QAAI,mBAAmB,SAAS,sCAAgB,QAAQ;AACtD,aAAO;AAAA,QACL,UAAU,CAAC;AAAA,QACX,iBAAiB;AAAA,QACjB,oBAAoB,CAAC;AAAA,MACvB;AAAA,IACF;AAEA,QAAI,WAAuC,CAAC;AAC5C,UAAM,qBAA+B,CAAC;AACtC,QAAI,kBAAkB;AACtB,QAAI;AAEJ,aAAS,UAAU,GAAG,UAAU,aAAa,WAAW;AACtD,YAAM;AAAA,QACJ,QAAQ,CAAC,EAAE,UAAU,aAAa,OAAO,CAAC;AAAA,MAC5C,IAAI,MAAM,KAAK,WAAW,OAAO;AAAA,QAC/B,qBAAqB,KAAC,wBAAQ,mBAAmB,mBAAmB,CAAC,CAAC;AAAA,QACtE,gBAAgB;AAAA,MAClB,CAAC;AAED,iBAAW,YAAY,IAAI,iBAAiB;AAC5C,qBAAe;AAEf,YAAM,EAAE,wBAAwB,yBAAyB,IACvD,2BAA2B,QAAQ;AAErC,YAAM,oBACJ,uBAAuB,WAAW,KAAK,yBAAyB,WAAW;AAE7E,UAAI,mBAAmB;AACrB,2BAAmB,uBAAuB;AAC1C,2BAAmB,mBAAmB,uBAAuB,MAAM;AACnE,iCAAyB,QAAQ,CAAC,EAAE,WAAW,MAAM;AACnD,6BAAmB,0BAA0B,wBAAQ,WAAW,UAAU,CAAC;AAC3E,6BAAmB,KAAK,UAAU;AAAA,QACpC,CAAC;AAED,cAAM,EAAE,OAAO,IAAI,MAAM,KAAK,oBAAoB;AAAA,UAChD;AAAA,QACF,CAAC;AAGD,2BAAmB,SAAS;AAAA,MAC9B,OAAO;AACL;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,+BACJ,qBAC0C;AAC1C,UAAM,UAA2C,oBAAoB,IAAI,OAAO;AAAA,MAC9E,UAAU,CAAC;AAAA,MACX,iBAAiB;AAAA,MACjB,oBAAoB,CAAC;AAAA,MACrB,cAAc;AAAA,IAChB,EAAE;AAEF,UAAM,kBAAc,qBAAM,mBAAmB;AAG7C,UAAM,4BAA4B,oBAAI,IAAI;AAG1C,gBAAY,QAAQ,CAAC,KAAK,UAAU;AAClC,UAAI,IAAI,SAAS,sCAAgB,QAAQ;AACvC,kCAA0B,IAAI,WAAO,wBAAQ,IAAI,mBAAmB,CAAC,CAAC;AAAA,MACxE;AAAA,IACF,CAAC;AAGD,QAAI,wBAAwB,MAAM,KAAK,0BAA0B,KAAK,CAAC;AACvE,QAAI,UAAU;AAEd,WAAO,sBAAsB,SAAS,KAAK,UAAU,aAAa;AAChE,YAAM,sBAAsB,sBAAsB;AAAA,QAAI,CAAC,UACrD,0BAA0B,IAAI,KAAK;AAAA,MACrC;AACA,YAAM,gBAAgB,MAAM,KAAK,WAAW,OAAO;AAAA,QACjD;AAAA,QACA,gBAAgB;AAAA,MAClB,CAAC;AAED,YAAM,wBAAwB,CAAC;AAE/B,eAAS,IAAI,GAAG,IAAI,cAAc,OAAO,QAAQ,KAAK;AACpD,cAAM,aAAa,sBAAsB,CAAC;AAC1C,cAAM,EAAE,UAAU,aAAa,OAAO,IAAI,cAAc,OAAO,CAAC;AAChE,cAAM,SAAS,QAAQ,UAAU;AACjC,eAAO,WAAW,YAAY,IAAI,iBAAiB;AACnD,eAAO,eAAe;AACtB,cAAM,EAAE,wBAAwB,yBAAyB,IAAI;AAAA,UAC3D,OAAO;AAAA,QACT;AACA,cAAM,oBACJ,uBAAuB,SAAS,KAAK,yBAAyB,SAAS;AACzE,cAAM,UAAU,YAAY,UAAU;AACtC,YAAI,qBAAqB,SAAS,SAAS,sCAAgB,QAAQ;AACjE,iBAAO,mBAAmB,uBAAuB;AACjD,kBAAQ,mBAAmB,uBAAuB,MAAM;AACxD,mCAAyB,QAAQ,CAAC,EAAE,WAAW,MAAM;AACnD,oBAAQ,0BAA0B,wBAAQ,WAAW,UAAU,CAAC;AAChE,mBAAO,mBAAmB,KAAK,UAAU;AAAA,UAC3C,CAAC;AACD,gBAAM,EAAE,OAAO,IAAI,MAAM,KAAK,oBAAoB;AAAA,YAChD,oBAAoB;AAAA,UACtB,CAAC;AACD,kBAAQ,SAAS;AAEjB,oCAA0B,IAAI,gBAAY,wBAAQ,QAAQ,mBAAmB,CAAC,CAAC;AAC/E,gCAAsB,KAAK,UAAU;AAAA,QACvC;AAAA,MACF;AAEA,8BAAwB;AACxB,iBAAW;AAAA,IACb;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,2BACJ,qBACA,EAAE,gBAAgB,yBAAyB,KAAK,IAAwB,CAAC,GAClD;AACvB,QAAI,wBAAwB;AAC1B,aAAO,KAAK,+BAA+B,mBAAmB;AAAA,IAChE;AACA,UAAM,sBAAsB,oBAAoB,IAAI,CAAC,WAAO,wBAAQ,GAAG,mBAAmB,CAAC,CAAC;AAC5F,UAAM,EAAE,QAAQ,eAAe,IAAI,MAAM,KAAK,WAAW,OAAO;AAAA,MAC9D;AAAA,MACA,gBAAgB,kBAAkB;AAAA,IACpC,CAAC;AAED,UAAM,UAAU,eAAe,IAAI,CAAC,EAAE,UAAU,aAAa,OAAO,MAAM;AACxE,YAAM,WAAW,YAAY,IAAI,iBAAiB;AAClD,aAAO,EAAE,UAAU,cAAc,OAAO;AAAA,IAC1C,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,oBAAoB,QAAmE;AAC3F,UAAM,EAAE,mBAAmB,IAAI;AAC/B,QAAI,EAAE,SAAS,IAAI;AAEnB,UAAM,YAAY,KAAK,SAAS;AAChC,UAAM,EAAE,gBAAgB,YAAY,IAAI,KAAK,aAAa;AAE1D,UAAM,SAAS,mBAAmB,gBAAgB,SAAS;AAC3D,QAAI,CAAC,UAAU;AACb,iBAAW,MAAM,KAAK,iBAAiB,EAAE;AAAA,IAC3C;AAEA,UAAM,SAAS,gBAAgB;AAAA,MAC7B,cAAU,kBAAG,QAAQ;AAAA,MACrB,KAAK;AAAA,MACL,aAAa;AAAA,MACb,KAAK,mBAAmB;AAAA,IAC1B,CAAC,EAAE,IAAI,CAAC;AAER,QAAI,eAAW,kBAAG,CAAC;AAGnB,QAAI,mBAAmB,SAAS,sCAAgB,QAAQ;AAEtD,iBAAW,mBAAmB;AAC9B,UAAI,mBAAmB,SAAS,GAAG,CAAC,GAAG;AACrC,2BAAmB,WAAW;AAc9B,2BAAmB,WAAW,YAAY;AAAA,UACxC,mBAAmB,gBAAgB,WAAW,MAAM;AAAA,QACtD;AAEA,mBAAW,mBAAmB;AAAA,MAChC;AAAA,IACF;AACA,UAAM,SAAS,mBAAmB,gBAAgB,WAAW,MAAM;AACnE,UAAM,SAAS,gBAAgB;AAAA,MAC7B,cAAU,kBAAG,QAAQ;AAAA,MACrB,KAAK;AAAA,MACL,aAAa;AAAA,MACb,KAAK,mBAAmB;AAAA,IAC1B,CAAC,EAAE,IAAI,CAAC;AAER,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,SACJ,wBACA,EAAE,yBAAyB,KAAK,IAA+B,CAAC,GAC3C;AACrB,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,QAAI,wBAAwB;AAC1B,aAAO,KAAK,uBAAuB,kBAAkB;AAAA,IACvD;AACA,UAAM,sBAAsB,KAAC,wBAAQ,mBAAmB,mBAAmB,CAAC,CAAC;AAE7E,UAAM,EAAE,QAAQ,eAAe,IAAI,MAAM,KAAK,WAAW,OAAO;AAAA,MAC9D;AAAA,MACA,gBAAgB;AAAA,IAClB,CAAC;AAED,UAAM,aAAa,eAAe,IAAI,CAAC,iBAAiB;AACtD,YAAM,EAAE,IAAI,UAAU,OAAO,IAAI;AAEjC,YAAM,oBAAoB,SAAS,IAAI,iBAAiB;AAExD,aAAO,EAAE,IAAI,UAAU,mBAAmB,OAAO;AAAA,IACnD,CAAC;AAED,WAAO,EAAE,UAAU,WAAW,CAAC,EAAE,SAAS;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAM,mBACJ,wBACA,EAAE,gBAAgB,mBAAmB,uBAAuB,CAAC,EAAE,IAA2B,CAAC,GACjE;AAC1B,UAAM,qBAAiB,qBAAM,sBAAsB,sBAAsB,CAAC;AAC1E,UAAM,sBAAsB,eAAe,SAAS,sCAAgB;AACpE,UAAM,cAAc,KAAK,eAAe;AAIxC,UAAM,wBAAwB,eAAe,yBAAyB;AAEtE,UAAM,gBAAgB,gBAAgB,uBAAuB,oBAAoB;AAEjF,mBAAe,kBAAkB,eAAe,aAAa,gBAAgB,OAAO;AAMpF,mBAAe,aAAS,kBAAG,CAAC;AAC5B,QAAI,qBAAqB;AACvB,qBAAe,eAAW,kBAAG,CAAC;AAAA,IAChC;AAQA,QAAI,kBAAkB,sCAAsC,gBAAgB;AAC1E,MAAC,eAAiC,iCAAiC,cAAc;AAAA,IACnF;AAEA,UAAM,oBAAgB,qBAAM,cAAc;AAE1C,QAAI,kBAAkB;AACtB,QAAI,qBAAqB,qBAAqB;AAC5C,YAAM,eAAe,cAAc,UAAU;AAC7C,YAAM,kBAAkB,aAAa;AACrC,wBAAkB,cAAc,UAAU,SAAS;AAAA,IACrD;AAEA,UAAM,KAAK,mBAAmB,aAAa;AAM3C,QAAI,EAAE,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,SAAS,IAAI,MAAM,KAAK,oBAAoB;AAAA,MAC1F,oBAAoB;AAAA,IACtB,CAAC;AAED,QAAI,WAAuC,CAAC;AAC5C,QAAI,qBAA+B,CAAC;AACpC,QAAI,kBAAkB;AACtB,QAAI,cAAU,kBAAG,CAAC;AAElB,mBAAe,uBAAuB,cAAc,MAAM;AAE1D,mBAAe,SAAS;AACxB,QAAI,qBAAqB;AACvB,qBAAe,WAAW;AAC1B,UAAI,mBAAmB;AACrB,cAAM,kBAAkB,cAAc;AAAA,MACxC;AAEA,YAAM,SAAS,MAAM,KAAK,uBAAuB,cAAc;AAC/D,iBAAW,OAAO;AAClB,wBAAkB,OAAO;AACzB,2BAAqB,OAAO;AAC5B,gBAAU,sBAAsB,uBAAuB,QAAQ,IAAI;AAEnE,qBAAe,WAAW;AAE1B,OAAC,EAAE,QAAQ,QAAQ,QAAQ,QAAQ,SAAS,IAAI,MAAM,KAAK,oBAAoB;AAAA,QAC7E,oBAAoB;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,oBAAoB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,qBAAqB,eAAe;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,2BACJ,OACA,wBACA,uBAAuC,CAAC,GACxC;AACA,UAAM,eAAe,wBAAQ,oBAAoB,KAAK;AACtD,UAAM,qBAAqB,0BAAsB,qBAAM,sBAAsB,CAAC;AAC9E,UAAM,kBAAkB,MAAM,KAAK,mBAAmB,oBAAoB;AAAA,MACxE;AAAA,IACF,CAAC;AAGD,uBAAmB;AAAA,MACjB,MAAM,KAAK,oBAAoB,cAAc,gBAAgB,kBAAkB;AAAA,IACjF;AAOA,UAAM,EAAE,oBAAoB,GAAG,OAAO,IAAI,MAAM,KAAK,mBAAmB,oBAAoB;AAAA,MAC1F;AAAA,IACF,CAAC;AACD,UAAM,YAAY,MAAM,KAAK,oBAAoB,cAAc,kBAAkB;AAEjF,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAEJ,OAEA,SAEA,gBACiB;AACjB,UAAM,eAAe,wBAAQ,oBAAoB,KAAK;AACtD,UAAM,SAAS,MAAM,KAAK,WAAW,SAAS;AAAA,MAC5C,OAAO;AAAA,MACP,GAAG;AAAA,MACH,QAAQ,EAAE,OAAO,aAAa,OAAO,GAAG,SAAS,eAAW,wBAAQ,OAAO,EAAE;AAAA,IAC/E,CAAC;AAED,UAAM,QAAQ,OAAO,MAAM,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAExD,WAAO,MAAM,IAAI,CAAC,UAAU;AAAA,MAC1B,IAAI,KAAK;AAAA,MACT,SAAS,KAAK;AAAA,MACd,YAAQ,kBAAG,KAAK,MAAM;AAAA,MACtB,OAAO,wBAAQ,oBAAoB,KAAK,KAAK;AAAA,MAC7C,kBAAc,kBAAG,KAAK,YAAY;AAAA,MAClC,kBAAc,kBAAG,KAAK,YAAY;AAAA,IACpC,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBAEJ,OAEA,YAEA,aACqB;AACrB,UAAM,eAAe,wBAAQ,oBAAoB,KAAK;AACtD,UAAM,eAAe;AAAA,MACnB,UAAU,aAAa,UAAU,IAAI,CAAC,cAAU,wBAAQ,KAAK,CAAC,KAAK,CAAC;AAAA,MACpE,OAAO,aAAa,OAAO,IAAI,CAAC,WAAO,wBAAQ,EAAE,CAAC,KAAK,CAAC;AAAA,IAC1D;AAEA,QAAI,KAAK,OAAO;AACd,YAAM,cAAc,IAAI;AAAA,QACtB,aAAa,MAAM,OAAO,KAAK,OAAO,cAAc,EAAE,IAAI,CAAC,WAAO,wBAAQ,EAAE,CAAC,CAAC;AAAA,MAChF;AACA,mBAAa,QAAQ,MAAM,KAAK,WAAW;AAAA,IAC7C;AACA,UAAM,aAAa;AAAA,MACjB,OAAO,aAAa,OAAO;AAAA,MAC3B,eAAe,WACZ,IAAI,cAAc,EAClB,IAAI,CAAC,EAAE,SAAS,QAAQ,KAAK,YAAY,OAAO;AAAA,QAC/C,aAAS,wBAAQ,OAAO;AAAA,QACxB,QAAQ,OAAO,SAAS,EAAE;AAAA,QAC1B,KAAK,cAAc,YAAY,SAAS,EAAE,IAAI;AAAA,MAChD,EAAE;AAAA,MACJ,aAAa;AAAA,IACf;AAEA,UAAM,SAAS,MAAM,KAAK,WAAW,gBAAgB,UAAU;AAE/D,UAAM,QAAQ,OAAO,aAClB,KAAK,EACL,IAAI,CAAC,SAAS;AACb,cAAQ,KAAK,YAAY;AAAA,QACvB,KAAK;AACH,iBAAO;AAAA,YACL,YAAQ,kBAAG,KAAK,MAAM;AAAA,YACtB,SAAS,KAAK;AAAA,YACd,cAAU,kBAAG,KAAK,QAAQ;AAAA,YAC1B,QAAQ,wBAAQ,oBAAoB,KAAK,MAAM;AAAA,YAC/C,WAAW,wBAAQ,oBAAoB,KAAK,SAAS;AAAA,YACrD,OAAO,KAAK;AAAA,UACd;AAAA,QACF,KAAK;AACH,iBAAO;AAAA,YACL,IAAI,KAAK;AAAA,YACT,YAAQ,kBAAG,KAAK,MAAM;AAAA,YACtB,SAAS,KAAK;AAAA,YACd,OAAO,wBAAQ,oBAAoB,KAAK,KAAK;AAAA,YAC7C,kBAAc,kBAAG,KAAK,YAAY;AAAA,YAClC,kBAAc,kBAAG,KAAK,YAAY;AAAA,UACpC;AAAA,QACF;AACE,iBAAO;AAAA,MACX;AAAA,IACF,CAAC,EACA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SAEJ,YACuB;AACvB,QAAI;AACJ,QAAI,OAAO,eAAe,UAAU;AAClC,kBAAY,EAAE,YAAQ,kBAAG,UAAU,EAAE,SAAS,EAAE,EAAE;AAAA,IACpD,WAAW,eAAe,UAAU;AAClC,kBAAY,EAAE,SAAS,MAAM,KAAK,eAAe,GAAG,SAAS,EAAE,EAAE;AAAA,IACnE,WAAW,WAAW,WAAW,IAAI;AACnC,kBAAY,EAAE,SAAS,WAAW;AAAA,IACpC,OAAO;AACL,kBAAY,EAAE,aAAS,kBAAG,UAAU,EAAE,SAAS,EAAE,EAAE;AAAA,IACrD;AAEA,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,WAAW,SAAS,SAAS;AAE1D,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,MACL,IAAI,MAAM;AAAA,MACV,YAAQ,kBAAG,MAAM,MAAM;AAAA,MACvB,MAAM,MAAM,OAAO;AAAA,MACnB,gBAAgB,MAAM,aAAa,IAAI,CAAC,OAAO,GAAG,EAAE;AAAA,IACtD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,UAAU,QAAsD;AACpE,UAAM,EAAE,QAAQ,YAAY,IAAI,MAAM,KAAK,WAAW,UAAU,MAAM;AAEtE,UAAM,SAAkB,YAAY,MAAM,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO;AAAA,MAClE,IAAI,MAAM;AAAA,MACV,YAAQ,kBAAG,MAAM,MAAM;AAAA,MACvB,MAAM,MAAM,OAAO;AAAA,MACnB,gBAAgB,MAAM,aAAa,IAAI,CAAC,OAAO,GAAG,EAAE;AAAA,IACtD,EAAE;AAEF,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,yBAEJ,YAC2D;AAC3D,QAAI;AACJ,QAAI,OAAO,eAAe,UAAU;AAClC,kBAAY,EAAE,iBAAa,kBAAG,UAAU,EAAE,SAAS,EAAE,EAAE;AAAA,IACzD,WAAW,eAAe,UAAU;AAClC,kBAAY,EAAE,cAAc,MAAM,KAAK,eAAe,GAAG,SAAS,EAAE;AAAA,IACtE,OAAO;AACL,kBAAY,EAAE,SAAS,WAAW;AAAA,IACpC;AAEA,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,WAAW,yBAAyB,SAAS;AAE1E,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,MACL,IAAI,MAAM;AAAA,MACV,YAAQ,kBAAG,MAAM,QAAQ,EAAE;AAAA,MAC3B,MAAM,MAAM,OAAO;AAAA,MACnB,gBAAgB,MAAM,aAAa,IAAI,CAAC,OAAO,GAAG,EAAE;AAAA,MACpD,cAAc,MAAM,aAAa;AAAA,QAC/B,CAAC,OAAO,IAAI,uCAAiB,EAAE,WAAO,yBAAS,GAAG,UAAU,GAAG,CAAC,IAAI,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eACJ,eAC+C;AAC/C,UAAM,EAAE,YAAY,IAAI,MAAM,KAAK,WAAW,eAAe,EAAE,cAAc,CAAC;AAC9E,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACT;AACA,WAAO,IAAI,uCAAiB,EAAE;AAAA,UAC5B,yBAAS,YAAY,UAAU;AAAA,MAC/B;AAAA,IACF,IAAI,CAAC;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAY,YAAoD;AACpE,UAAM,EAAE,SAAS,IAAI,MAAM,KAAK,WAAW,YAAY,EAAE,WAAW,CAAC;AACrE,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,mBAEJ,YAEA,SACa;AACb,UAAM,EAAE,gBAAgB,IAAI,MAAM,KAAK,WAAW,mBAAmB;AAAA,MACnE,UAAU,wBAAQ,oBAAoB,UAAU,EAAE,OAAO;AAAA,MACzD,WAAO,wBAAQ,OAAO;AAAA,IACxB,CAAC;AACD,eAAO,kBAAG,gBAAgB,QAAQ,EAAE;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,WAEJ,OAEA,SACa;AACb,UAAM,EAAE,QAAQ,IAAI,MAAM,KAAK,WAAW,WAAW;AAAA,MACnD,OAAO,wBAAQ,oBAAoB,KAAK,EAAE,OAAO;AAAA,MACjD,aAAS,wBAAQ,OAAO;AAAA,IAC1B,CAAC;AACD,eAAO,kBAAG,QAAQ,QAAQ,EAAE;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,YAEJ,OAEA,gBACyB;AACzB,UAAM,SAAS,MAAM,KAAK,WAAW,YAAY;AAAA,MAC/C,OAAO;AAAA,MACP,GAAG;AAAA,MACH,QAAQ,EAAE,OAAO,wBAAQ,oBAAoB,KAAK,EAAE,OAAO,EAAE;AAAA,IAC/D,CAAC;AAED,UAAM,WAAW,OAAO,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAE9D,WAAO,SAAS,IAAI,CAAC,aAAa;AAAA,MAChC,SAAS,QAAQ;AAAA,MACjB,YAAQ,kBAAG,QAAQ,MAAM;AAAA,IAC3B,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,YAEJ,SAEA,gBACoB;AACpB,UAAM,SAAS,MAAM,KAAK,WAAW,YAAY;AAAA,MAC/C,OAAO;AAAA,MACP,GAAG;AAAA,MACH,OAAO,wBAAQ,oBAAoB,OAAO,EAAE,OAAO;AAAA,IACrD,CAAC;AAED,UAAM,WAAW,OAAO,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAE9D,WAAO,SAAS,IAAI,CAAC,aAAa;AAAA,MAChC,WAAW,wCAAkB,aAAa;AAAA,QACxC,QAAQ,QAAQ;AAAA,QAChB,WAAW,QAAQ;AAAA,QACnB,OAAO,QAAQ;AAAA,QACf,YAAQ,kBAAG,QAAQ,MAAM;AAAA,QACzB,MAAM,QAAQ;AAAA,MAChB,CAAC;AAAA,MACD,QAAQ,wBAAQ,oBAAoB,QAAQ,MAAM;AAAA,MAClD,WAAW,wBAAQ,oBAAoB,QAAQ,SAAS;AAAA,MACxD,OAAO,QAAQ;AAAA,MACf,YAAQ,kBAAG,QAAQ,MAAM;AAAA,MACzB,MAAM,wCAAkB,WAAW,QAAQ,IAAI;AAAA,MAC/C,cAAU,kBAAG,QAAQ,QAAQ;AAAA,IAC/B,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,gBAEJ,eACA,OACA,eACA,mBAC8B;AAC9B,QAAI,cAOA;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAEA,QAAI,iBAAiB,mBAAmB;AACtC,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAEA,QAAI,eAAe;AACjB,oBAAc;AAAA,QACZ,GAAG;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,QAAI,mBAAmB;AACrB,oBAAc;AAAA,QACZ,GAAG;AAAA;AAAA;AAAA,QAGH,mBAAmB,kBAAkB,SAAS,EAAE,SAAS;AAAA,MAC3D;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,KAAK,WAAW,gBAAgB,WAAW;AAEhE,QAAI,CAAC,OAAO,cAAc;AACxB,aAAO;AAAA,IACT;AAEA,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,OAAO;AAEX,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,gBAAY,kBAAG,aAAa,UAAU;AAAA,QACtC,UAAU,aAAa;AAAA,MACzB;AAAA,MACA,YAAY;AAAA,QACV,gBAAY,kBAAG,WAAW,UAAU;AAAA,QACpC,UAAU,WAAW;AAAA,MACvB;AAAA,MACA,oBAAoB;AAAA,QAClB,IAAI,mBAAmB;AAAA,QACvB,cAAU,kBAAG,mBAAmB,QAAQ;AAAA,QACxC,uBAAmB,kBAAG,mBAAmB,iBAAiB;AAAA,QAC1D,kBAAkB,mBAAmB;AAAA,QACrC,YAAQ,kBAAG,mBAAmB,MAAM;AAAA,QACpC,UAAU,mBAAmB;AAAA,QAC7B,MAAM,mBAAmB;AAAA,QACzB,iBAAiB,mBAAmB;AAAA,QACpC,yBAAqB,kBAAG,mBAAmB,mBAAmB;AAAA,QAC9D,mBAAmB,mBAAmB;AAAA,QACtC,4BAA4B,mBAAmB;AAAA,QAC/C,gBAAgB,mBAAmB;AAAA,QACnC,gCAAgC,mBAAmB;AAAA,MACrD;AAAA,MACA,mBAAmB;AAAA,QACjB,IAAI,kBAAkB;AAAA,QACtB,cAAU,kBAAG,kBAAkB,QAAQ;AAAA,QACvC,uBAAmB,kBAAG,kBAAkB,iBAAiB;AAAA,QACzD,kBAAkB,kBAAkB;AAAA,QACpC,YAAQ,kBAAG,kBAAkB,MAAM;AAAA,QACnC,UAAU,kBAAkB;AAAA,QAC5B,MAAM,kBAAkB;AAAA,QACxB,iBAAiB,kBAAkB;AAAA,QACnC,yBAAqB,kBAAG,kBAAkB,mBAAmB;AAAA,QAC7D,mBAAmB,kBAAkB;AAAA,QACrC,4BAA4B,kBAAkB;AAAA,QAC9C,gBAAgB,kBAAkB;AAAA,QAClC,gCAAgC,kBAAkB;AAAA,MACpD;AAAA,MACA,QAAQ,wBAAQ,oBAAoB,MAAM;AAAA,MAC1C,WAAW,wBAAQ,oBAAoB,SAAS;AAAA,MAChD;AAAA,MACA,YAAQ,kBAAG,MAAM;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,oBAAiC;AACrC,UAAM,EAAE,eAAe,IAAI,MAAM,KAAK,WAAW,kBAAkB;AACnE,eAAO,kBAAG,eAAe,QAAQ;AAAA,EACnC;AAAA,EAEA,MAAM,iBAAiB,cAAmC;AACxD,UAAM,EAAE,iBAAiB,IAAI,MAAM,KAAK,WAAW,iBAAiB;AAAA,MAClE,cAAc,OAAO,YAAY;AAAA,IACnC,CAAC;AACD,eAAO,kBAAG,iBAAiB,QAAQ;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAEJ,OACwB;AACxB,UAAM,SAAS,MAAM,KAAK,WAAW,iBAAiB,EAAE,MAAM,CAAC;AAC/D,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,cAAc,QAAgB,WAAoB;AACtD,UAAM,EAAE,eAAe,kBAAkB,IAAI,MAAM,KAAK,WAAW,cAAc;AAAA,MAC/E,qBAAiB,kBAAG,MAAM,EAAE,SAAS,EAAE;AAAA,MACvC,gBAAgB,YAAY,wBAAS,qBAAqB,SAAS,EAAE,QAAQ,IAAI;AAAA,IACnF,CAAC;AACD,eAAO,kBAAG,iBAAiB;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAM,uBAAuB,eAAqD;AAChF,WAAO,IAAI,oBAAoB,eAAe,IAAI;AAAA,EACpD;AACF;AA1zCA,IAAqB,WAArB;AA0RE;AAAA,iBAAY,SAAC,QAAyC;AACpD,MAAI,CAAC,KAAK,OAAO;AACf;AAAA,EACF;AAEA,SAAO,QAAQ,CAAC,UAAU;AACxB,QAAI,MAAM,SAAS,gCAAU,MAAM;AACjC,WAAK,OAAO,IAAI,MAAM,EAAE;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;AA3RA,cATmB,UASJ,kBAAiC,CAAC;AACjD,cAVmB,UAUJ,iBAA+B,CAAC;;;AkCrTjD,IAAAC,kBAAqC;AACrC,IAAAC,gBAAmB;AACnB,IAAAC,wBAAiC;AACjC,IAAAC,iBAAyB;;;ACHlB,IAAM,YAAY;AAAA,EACvB,KAAK;AAAA,IACH,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACF;;;ACLO,IAAM,SAAiB;AAAA,EAC5B;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS,UAAU,IAAI;AAAA,QACvB,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS,UAAU,IAAI;AAAA,QACvB,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS,UAAU,KAAK;AAAA,QACxB,UAAU;AAAA,QACV,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS,UAAU,KAAK;AAAA,QACxB,UAAU;AAAA,QACV,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;AClCA,IAAAC,oBAA+B;AAE/B,IAAAC,gBAAsC;AACtC,IAAAC,iBAAyB;AACzB,UAAqB;AAQd,IAAM,qCAAqC,CAChD,WACG;AACH,QAAM,EAAE,SAAS,kBAAkB,oBAAoB,IAAI;AAE3D,QAAM,cAAc,IAAI,iCAAe,KAAK;AAE5C,QAAM,UAAU,YAAY,OAAO,IAAI,iBAAG,gBAAgB,EAAE,SAAS,CAAC;AAEtE,QAAM,aAAa,WAAW,KAAK;AAAA,IACjC,OAAG,yBAAS,mBAAmB;AAAA,IAC/B,GAAG;AAAA,IACH,OAAG,yBAAS,OAAO;AAAA,EACrB,CAAC;AAED,SAAO;AACT;AAEO,IAAM,mCAAmC,OAC9C,WACG;AACH,QAAM,aAAa,mCAAmC,MAAM;AAa5D,QAAU,aAAS;AAGnB,QAAMC,OAAU,QAAI,IAAM,GAAU,YAAQ,UAAU;AACtD,QAAMC,QAAW,SAAK,IAAM,IAAM,EAAI;AACtC,QAAMC,MAAS,OAAG,IAAM,IAAM,CAAG;AACjC,QAAMC,SAAY,SAAK,IAAM,IAAM,CAAG;AACtC,QAAMC,MAAS,OAAG,IAAM,IAAM,EAAI;AAClC,QAAMC,OAAU,QAAI,CAAG;AAEvB,QAAM,SAAS,WAAW,KAAK;AAAA,IAC7B,GAAGL,KAAI,SAAS;AAAA,IAChB,GAAGC,MAAK,SAAS;AAAA,IACjB,GAAGC,IAAG,SAAS;AAAA,IACf,GAAGC,OAAM,SAAS;AAAA,IAClB,GAAGC,IAAG,SAAS;AAAA,IACf,GAAGC,KAAI,SAAS;AAAA,EAClB,CAAC;AAED,SAAO,EAAE,QAAQ,WAAW;AAC9B;;;AvCjBO,IAAM,UAAN,cAAsB,kCAAgB;AAAA;AAAA;AAAA;AAAA,EAIlC;AAAA;AAAA;AAAA;AAAA,EAKC;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQV,YAAY,SAAmC,UAAqB,WAA2B;AAC7F,UAAM;AACN,SAAK,YAAY;AACjB,SAAK,aAAa;AAClB,SAAK,UAAU,wBAAQ,iBAAiB,OAAO;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,WAAqB;AACvB,QAAI,CAAC,KAAK,WAAW;AACnB,YAAM,IAAI,0BAAU,0BAAU,kBAAkB,kBAAkB;AAAA,IACpE;AAEA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,SAAS,UAAoB;AAC/B,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,UAA8B;AACpC,SAAK,YAAY;AACjB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,oBACJ,YACA,aACqB;AACrB,WAAO,KAAK,SAAS,oBAAoB,KAAK,SAAS,YAAY,WAAW;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SAAS,SAAsC;AACnD,UAAM,QAAQ,CAAC;AAEf,UAAM,WAAW;AACjB,QAAI;AAEJ,eAAS;AACP,YAAM,YAAY,MAAM,KAAK,SAAS,SAAS,KAAK,SAAS,SAAS;AAAA,QACpE,OAAO;AAAA,QACP,OAAO;AAAA,MACT,CAAC;AAED,YAAM,KAAK,GAAG,SAAS;AAEvB,YAAM,cAAc,UAAU,UAAU;AACxC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAGA,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,gCAAgC;AAAA,MAClC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAkC;AACtC,UAAM,WAAW,CAAC;AAElB,UAAM,WAAW;AACjB,QAAI;AAEJ,eAAS;AACP,YAAM,eAAe,MAAM,KAAK,SAAS,YAAY,KAAK,SAAS;AAAA,QACjE,OAAO;AAAA,QACP,OAAO;AAAA,MACT,CAAC;AAED,eAAS,KAAK,GAAG,YAAY;AAE7B,YAAM,cAAc,aAAa,UAAU;AAC3C,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAGA,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,gCAAgC;AAAA,MAClC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,WAAW,SAAkC;AACjD,UAAM,iBAAiB,WAAW,KAAK,SAAS,eAAe;AAC/D,UAAM,SAAS,MAAM,KAAK,SAAS,WAAW,KAAK,SAAS,cAAc;AAC1E,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAuC;AAC3C,UAAM,WAAW,CAAC;AAElB,UAAM,WAAW;AACjB,QAAI;AAEJ,eAAS;AACP,YAAM,eAAe,MAAM,KAAK,SAAS,YAAY,KAAK,SAAS;AAAA,QACjE,OAAO;AAAA,QACP,OAAO;AAAA,MACT,CAAC;AAED,eAAS,KAAK,GAAG,YAAY;AAE7B,YAAM,cAAc,aAAa,UAAU;AAC3C,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAGA,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,gCAAgC;AAAA,MAClC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,KAAmC,SAAY,QAAuC;AAC1F,UAAM,EAAE,iBAAiB,qBAAqB,QAAQ,KAAK,mBAAmB,IAAI;AAClF,UAAM,cAAc,KAAK,SAAS,eAAe;AAEjD,UAAM,YAAY;AAClB,UAAM,4BAA4B,0BAA0B;AAAA,MAC1D,YAAQ,kBAAG,GAAG;AAAA,MACd,SAAS;AAAA,MACT,gBAAgB;AAAA,IAClB,CAAC;AAED,UAAM,iBAA8D,CAAC;AAErE,8BAA0B,QAAQ,CAAC,EAAE,QAAQ,QAAQ,MAAM;AACzD,qBAAe,OAAO,IAAI;AAAA,QACxB,UAAU;AAAA,QACV,WAAO,kBAAG,CAAC;AAAA,MACb;AAAA,IACF,CAAC;AAED,cAAU,OAAO,QAAQ,CAAC,UAAU;AAClC,YAAM,aAAa,YAAY;AAC/B,UAAI,CAAC,YAAY;AACf;AAAA,MACF;AACA,YAAMC,UAAS,WAAW;AAC1B,YAAM,UAAUA,UAAS,OAAO,MAAM,OAAO,IAAI;AACjD,UAAI,eAAe,OAAO,GAAG;AAC3B,uBAAe,OAAO,EAAE,QAAQ,eAAe,OAAO,EAAE,MAAM,IAAI,MAAM,MAAM;AAAA,MAChF;AAAA,IACF,CAAC;AAED,UAAM,oBAAoC,CAAC;AAC3C,WAAO,QAAQ,cAAc,EAAE,QAAQ,CAAC,CAAC,SAAS,EAAE,OAAO,SAAS,CAAC,MAAM;AACzE,UAAI,MAAM,GAAG,QAAQ,GAAG;AACtB,0BAAkB,KAAK;AAAA,UACrB;AAAA,UACA,QAAQ,SAAS,IAAI,KAAK;AAAA,QAC5B,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,UAAM,kBAAkB,kBAAkB;AAE1C,QAAI,iBAAiB;AACnB,YAAM,cAAc,uBAAuB,UAAU,QAAQ,KAAK,QAAQ,OAAO,CAAC;AAElF,YAAM,YAAY,MAAM,KAAK,oBAAoB,mBAAmB,WAAW;AAE/E,gBAAU,aAAa,SAAS;AAAA,IAClC;AAEA,cAAU,mBAAmB;AAC7B,cAAU,uBAAuB,mBAAmB;AAEpD,UAAM,0BAAsB,qBAAM,SAAS;AAC3C,QAAI,iBAAiB;AACnB,YAAM,KAAK,EAAE,QAAQ,gBAAgB,CAAC,EAAE,QAAQ,MAAM,oBAAoB,gBAAgB,CAAC;AAAA,IAC7F;AACA,UAAM,EAAE,OAAO,IAAI,MAAM,KAAK,SAAS,oBAAoB;AAAA,MACzD,oBAAoB;AAAA,IACtB,CAAC;AAED,cAAU,SAAS;AAEnB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,eAEJ,aAEA,QAEA,SAEA,WAAyB,CAAC,GACG;AAC7B,UAAM,UAAU,IAAI,yBAAyB,QAAQ;AACrD,UAAM,oBAAoB,WAAW,KAAK,SAAS,eAAe;AAClE,YAAQ,cAAc,wBAAQ,oBAAoB,WAAW,GAAG,QAAQ,iBAAiB;AACzF,UAAM,SAAS,MAAM,KAAK,SAAS,mBAAmB,SAAS;AAAA,MAC7D,wBAAwB;AAAA,MACxB,gBAAgB;AAAA,IAClB,CAAC;AAED,SAAK,0BAA0B;AAAA,MAC7B,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf;AAAA,IACF,CAAC;AAED,YAAQ,WAAW,OAAO;AAC1B,YAAQ,SAAS,OAAO;AAExB,UAAM,KAAK,KAAK,SAAS,MAAM;AAE/B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,SAEJ,aAEA,QAEA,SAEA,WAAyB,CAAC,GACI;AAC9B,YAAI,kBAAG,MAAM,EAAE,IAAI,CAAC,GAAG;AACrB,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AACA,UAAM,oBAAoB,WAAW,KAAK,SAAS,eAAe;AAClE,UAAM,UAAU,MAAM,KAAK,eAAe,aAAa,QAAQ,mBAAmB,QAAQ;AAC1F,WAAO,KAAK,gBAAgB,SAAS,EAAE,wBAAwB,MAAM,CAAC;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,mBAEJ,YAEA,QAEA,SAEA,WAAyB,CAAC,GACI;AAC9B,YAAI,kBAAG,MAAM,EAAE,IAAI,CAAC,GAAG;AACrB,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAEA,UAAM,kBAAkB,wBAAQ,oBAAoB,UAAU;AAC9D,UAAM,oBAAoB,WAAW,KAAK,SAAS,eAAe;AAClE,UAAM,EAAE,QAAQ,WAAW,IAAI,MAAM,iCAAiC;AAAA,MACpE,qBAAqB,gBAAgB,OAAO;AAAA,MAC5C,sBAAkB,kBAAG,MAAM;AAAA,MAC3B,SAAS;AAAA,IACX,CAAC;AAED,UAAM,UAAU,IAAI,yBAAyB;AAAA,MAC3C,GAAG;AAAA,MACH;AAAA,MACA;AAAA,IACF,CAAC;AAED,YAAQ,0BAA0B,eAAe;AAEjD,UAAM,SAAS,MAAM,KAAK,SAAS,mBAAmB,SAAS;AAAA,MAC7D,gBAAgB;AAAA,MAChB,sBAAsB,CAAC,EAAE,YAAQ,kBAAG,MAAM,GAAG,SAAS,OAAO,iBAAiB,EAAE,CAAC;AAAA,IACnF,CAAC;AAED,SAAK,0BAA0B;AAAA,MAC7B,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf;AAAA,IACF,CAAC;AAED,YAAQ,WAAW,OAAO;AAC1B,YAAQ,SAAS,OAAO;AAExB,UAAM,KAAK,KAAK,SAAS,MAAM;AAE/B,WAAO,KAAK,gBAAgB,OAAO;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBAEJ,WAEA,QAEA,WAAyB,CAAC,GACI;AAC9B,UAAM,mBAAmB,wBAAQ,oBAAoB,SAAS;AAE9D,UAAM,yBAAqB;AAAA,MACzB,KAAK,OAAO,iBAAiB,YAAY,EAAE,UAAU,CAAC,EAAE,SAAS,IAAI,GAAG,CAAC;AAAA,IAC3E;AACA,UAAM,sBAAkB;AAAA,MACtB,KAAK,WAAO,kBAAG,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,IAAI,GAAG,CAAC;AAAA,IAC/D;AACA,UAAM,SAAS,IAAI,WAAW;AAAA,MAC5B,OAAG,yBAAS,eAAe,KAAK;AAAA,MAChC,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAED,UAAM,SAAuC,EAAE,QAAQ,GAAG,SAAS;AAEnE,UAAM,cAAc,KAAK,SAAS,eAAe;AACjD,UAAM,UAAU,IAAI,yBAAyB,MAAM;AACnD,UAAM,uBAAuB,CAAC,EAAE,YAAQ,kBAAG,MAAM,GAAG,SAAS,YAAY,CAAC;AAE1E,UAAM,SAAS,MAAM,KAAK,SAAS,mBAAmB,SAAS,EAAE,qBAAqB,CAAC;AAEvF,SAAK,0BAA0B;AAAA,MAC7B,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf;AAAA,IACF,CAAC;AAED,YAAQ,SAAS,OAAO;AACxB,YAAQ,WAAW,OAAO;AAE1B,UAAM,KAAK,KAAK,SAAS,MAAM;AAE/B,WAAO,KAAK,gBAAgB,OAAO;AAAA,EACrC;AAAA,EAEA,MAAM,YAAY,SAAkC;AAClD,QAAI,CAAC,KAAK,YAAY;AACpB,YAAM,IAAI,0BAAU,0BAAU,mBAAmB,2CAA2C;AAAA,IAC9F;AACA,WAAO,KAAK,WAAW,YAAY,KAAK,QAAQ,SAAS,GAAG,OAAO;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBAAgB,wBAAiE;AACrF,QAAI,CAAC,KAAK,YAAY;AACpB,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,WAAW,gBAAgB,KAAK,QAAQ,SAAS,GAAG,sBAAsB;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBACJ,wBACA,EAAE,yBAAyB,MAAM,eAAe,IAA0B,CAAC,GAC7C;AAC9B,QAAI,KAAK,YAAY;AACnB,aAAO,KAAK,SAAS;AAAA,QACnB,MAAM,KAAK,WAAW,gBAAgB,KAAK,QAAQ,SAAS,GAAG,sBAAsB;AAAA,MACvF;AAAA,IACF;AACA,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,QAAI,wBAAwB;AAC1B,YAAM,KAAK,SAAS,uBAAuB,kBAAkB;AAAA,IAC/D;AACA,WAAO,KAAK,SAAS,gBAAgB,oBAAoB;AAAA,MACvD;AAAA,MACA,wBAAwB;AAAA,IAC1B,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,oBACJ,wBACA,EAAE,yBAAyB,KAAK,IAA+B,CAAC,GAC3C;AACrB,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,QAAI,wBAAwB;AAC1B,YAAM,KAAK,SAAS,uBAAuB,kBAAkB;AAAA,IAC/D;AACA,WAAO,KAAK,SAAS,SAAS,oBAAoB,EAAE,wBAAwB,MAAM,CAAC;AAAA,EACrF;AAAA,EAEQ,0BAA0B;AAAA,IAChC,UAAU,EAAE,UAAU,aAAa,QAAQ,UAAU;AAAA,IACrD;AAAA,IACA;AAAA,EACF,GAIG;AACD,YAAI,0BAAU,WAAW,KAAK,QAAQ,GAAG,WAAW,GAAG;AACrD,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,cAAc,6CAA6C;AAAA,MAC7D;AAAA,IACF;AAEA,YAAI,0BAAU,SAAS,KAAK,OAAO,GAAG,SAAS,GAAG;AAChD,YAAM,IAAI;AAAA,QACR,0BAAU;AAAA,QACV,YAAY,2CAA2C;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AACF;;;AwC3kBA,IAAAC,kBAAwB;AACxB,IAAAC,iBAA4B;AAC5B,IAAAC,iBAAqB;AAErB,IAAAC,gBAAwB;AACxB,IAAAC,iBAA0C;AAC1C,uBAA0B;AAEnB,IAAM,SAAN,MAAa;AAAA,EACT;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQT,YAAY,YAAuB;AAEjC,QAAI,OAAO,eAAe,UAAU;AAClC,UAAI,WAAW,MAAM,cAAc,KAAK,WAAW,WAAW,IAAI;AAEhE,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAGA,UAAM,sBAAkB,uBAAQ,YAAY,EAAE;AAE9C,SAAK,iBAAa,wBAAQ,eAAe;AAGzC,SAAK,gBAAY,wBAAQ,2BAAU,aAAa,iBAAiB,KAAK,EAAE,MAAM,CAAC,CAAC;AAChF,SAAK,0BAAsB,wBAAQ,2BAAU,aAAa,iBAAiB,IAAI,CAAC;AAChF,SAAK,UAAU,wBAAQ,cAAc,KAAK,SAAS;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,KAAK,MAAiB;AACpB,UAAM,YAAY,2BAAU,SAAK,yBAAS,IAAI,OAAG,yBAAS,KAAK,UAAU,CAAC;AAE1E,UAAM,QAAI,uBAAQ,KAAK,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE;AACrD,UAAM,QAAI,uBAAQ,KAAK,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE;AAGrD,MAAE,CAAC,MAAM,UAAU,YAAY,MAAM;AAErC,eAAO,4BAAQ,uBAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,OAAkB;AACzB,UAAM,KAAK,2BAAU,gBAAgB,YAAQ,yBAAS,KAAK,mBAAmB,CAAC;AAC/E,UAAM,KAAK,2BAAU,gBAAgB,YAAQ,yBAAS,KAAK,CAAC;AAC5D,UAAM,SAAS,GAAG,IAAI,EAAE;AACxB,WAAO,KAAK,OAAO,MAAM,IAAI;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,iBAAiB,MAAiB,WAA8B;AACrE,UAAM,yBAAqB,yBAAS,SAAS;AAC7C,UAAM,IAAI,mBAAmB,MAAM,GAAG,EAAE;AACxC,UAAM,IAAI,mBAAmB,MAAM,IAAI,EAAE;AACzC,UAAM,iBAAiB,EAAE,CAAC,IAAI,QAAS;AAGvC,MAAE,CAAC,KAAK;AAER,UAAM,MAAM,IAAI,2BAAU,UAAU,WAAO,wBAAQ,CAAC,CAAC,GAAG,WAAO,wBAAQ,CAAC,CAAC,CAAC,EAAE;AAAA,MAC1E;AAAA,IACF;AAEA,UAAM,YAAY,IAAI,qBAAiB,yBAAS,IAAI,CAAC,EAAE,WAAW,KAAK,EAAE,MAAM,CAAC;AAChF,eAAO,wBAAQ,SAAS;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,eAAe,MAAiB,WAA+B;AACpE,WAAO,wBAAQ,cAAc,OAAO,iBAAiB,MAAM,SAAS,CAAC;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,mBAAmB,SAAqB;AAC7C,WAAO,cAAU,yBAAK,uBAAO,KAAC,4BAAY,EAAE,OAAG,yBAAS,OAAO,CAAC,CAAC,CAAC,QAAI,4BAAY,EAAE;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,gBAAgB,WAAsB;AAC3C,UAAM,QAAQ,2BAAU,gBAAgB,YAAQ,yBAAS,SAAS,CAAC;AACnE,eAAO,wBAAQ,MAAM,WAAW,KAAK,EAAE,MAAM,CAAC,CAAC;AAAA,EACjD;AACF;;;ACrIA,IAAAC,kBAAwB;AACxB,IAAAC,iBAQO;AACP,IAAAC,kBAAqC;AAErC,IAAAC,iBAAwB;AACxB,kBAA6B;AA2BtB,IAAM,2BAA2B;AACjC,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAC7B,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AAMxB,IAAM,kBAAkB,CAAC,cAAsB;AACpD,MAAI,MAAM,KAAK,SAAS,GAAG;AACzB,WAAO,UAAU,MAAM,CAAC;AAAA,EAC1B;AAEA,SAAO;AACT;AAEA,eAAsB,sBACpB,YACA,SACA,UACiB;AAEjB,QAAM,uBAAmB,iCAAiB,gBAAgB,UAAU,GAAG,KAAK;AAC5E,QAAM,eAAe,wBAAQ,oBAAoB,OAAO;AAExD,QAAM,WAAO,4BAAY,gBAAgB;AAEzC,QAAM,UAAM,uBAAO;AAAA,IACjB,cAAU,iCAAiB,QAAQ;AAAA,IACnC;AAAA,IACA,OAAO;AAAA,IACP,GAAG,KAAK;AAAA,IACR,GAAG;AAAA,IACH,GAAG;AAAA,EACL,CAAC;AAGD,QAAM,SAAK,4BAAY,eAAe;AAEtC,QAAM,aAAa,UAAM,sCAAsB,kBAAkB,KAAK,EAAE;AAExE,QAAM,OAAO,WAAW,KAAK,CAAC,GAAG,IAAI,SAAS,IAAI,EAAE,GAAG,GAAG,UAAU,CAAC;AAGrE,QAAM,wBAAoB,0BAAU,IAAI;AAExC,QAAM,UAAM,iCAAiB,mBAAmB,KAAK;AAGrD,QAAM,WAA2B;AAAA,IAC/B,QAAI,YAAAC,IAAO;AAAA,IACX,SAAS;AAAA,IACT,SAAS,gBAAgB,aAAa,YAAY,CAAC;AAAA,IACnD,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR;AAAA,MACA,cAAc,EAAE,QAAI,iCAAiB,IAAI,KAAK,EAAE;AAAA,MAChD,gBAAY,iCAAiB,YAAY,KAAK;AAAA,MAC9C,KAAK;AAAA,MACL,WAAW;AAAA,QACT,OAAO;AAAA,QACP,GAAG,KAAK;AAAA,QACR,GAAG;AAAA,QACH,GAAG;AAAA,QACH,UAAM,iCAAiB,MAAM,KAAK;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,SAAO,KAAK,UAAU,QAAQ;AAChC;AAEA,eAAsB,sBAAsB,YAAoB,UAAmC;AACjG,QAAM,iBAAiB,KAAK,MAAM,UAAU;AAG5C,QAAM;AAAA,IACJ,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA,cAAc,EAAE,GAAG;AAAA,MACnB,WAAW,EAAE,OAAO,GAAG,GAAG,GAAG,KAAK;AAAA,IACpC;AAAA,EACF,IAAI;AAEJ,QAAM,uBAAmB,iCAAiB,YAAY,KAAK;AAC3D,QAAM,eAAW,iCAAiB,IAAI,KAAK;AAC3C,QAAM,iBAAa,iCAAiB,MAAM,KAAK;AAE/C,QAAM,qBAAiB,iCAAiB,QAAQ;AAEhD,QAAM,UAAM,uBAAO;AAAA,IACjB,UAAU;AAAA,IACV,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAGD,QAAM,OAAO,WAAW,KAAK,CAAC,GAAG,IAAI,SAAS,IAAI,EAAE,GAAG,GAAG,gBAAgB,CAAC;AAE3E,QAAM,wBAAoB,0BAAU,IAAI;AAExC,QAAM,cAAU,iCAAiB,mBAAmB,KAAK;AAEzD,MAAI,QAAQ,SAAS;AACnB,UAAM,IAAI;AAAA,MACR,0BAAU;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAGA,QAAM,SAAS,UAAM,sCAAsB,kBAAkB,KAAK,QAAQ;AAE1E,QAAM,iBAAa,wBAAQ,MAAM;AAEjC,SAAO;AACT;;;A1C7IO,IAAM,qBAAN,cAAiC,QAAQ;AAAA;AAAA;AAAA;AAAA,EAS9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,YAAuB,UAAqB;AACtD,UAAM,SAAS,IAAI,OAAO,UAAU;AACpC,UAAM,OAAO,SAAS,QAAQ;AAC9B,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,aAAqB;AACvB,WAAO,KAAK,OAAO,EAAE;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,YAAoB;AACtB,WAAO,KAAK,OAAO,EAAE;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAY,SAAkC;AAClD,UAAM,gBAAgB,MAAM,KAAK,OAAO,EAAE,SAAK,4BAAY,OAAO,CAAC;AACnE,eAAO,wBAAQ,aAAa;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBAAgB,wBAAiE;AACrF,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,UAAM,UAAU,KAAK,SAAS,WAAW;AACzC,UAAM,oBAAoB,mBAAmB,iBAAiB,OAAO;AACrE,UAAM,YAAY,MAAM,KAAK,OAAO,EAAE,KAAK,iBAAiB;AAC5D,eAAO,wBAAQ,SAAS;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,sCAAsC,wBAAgD;AAC1F,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,UAAM,oBAAoB,MAAM,KAAK,gBAAgB,kBAAkB;AAEvE,uBAAmB,qBAAqB,KAAK,SAAS,iBAAiB;AAEvE,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBACJ,wBACA,EAAE,yBAAyB,OAAO,eAAe,IAA0B,CAAC,GAC9C;AAC9B,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,QAAI,wBAAwB;AAC1B,YAAM,KAAK,SAAS,uBAAuB,kBAAkB;AAAA,IAC/D;AACA,WAAO,KAAK,SAAS;AAAA,MACnB,MAAM,KAAK,sCAAsC,kBAAkB;AAAA,MACnE,EAAE,gBAAgB,wBAAwB,MAAM;AAAA,IAClD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,oBACJ,wBACA,EAAE,yBAAyB,KAAK,IAA+B,CAAC,GAC3C;AACrB,UAAM,qBAAqB,sBAAsB,sBAAsB;AACvE,QAAI,wBAAwB;AAC1B,YAAM,KAAK,SAAS,uBAAuB,kBAAkB;AAAA,IAC/D;AACA,WAAO,KAAK,SAAS;AAAA,MACnB,MAAM,KAAK,sCAAsC,kBAAkB;AAAA,MACnE;AAAA,QACE,gBAAgB;AAAA,QAChB,wBAAwB;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,UAAmC;AAC/C,WAAO,sBAAsB,KAAK,YAAY,KAAK,SAAS,QAAQ;AAAA,EACtE;AACF;AAAA;AAAA;AAAA;AA3HE,cAJW,oBAIJ,eAAc;;;A2CzBvB,IAAAC,kBAAqC;AACrC,IAAAC,iBAAuB;AAEvB,IAAAC,gBAAmC;AACnC,IAAAC,iBAA0C;AAC1C,IAAAC,iBAAuF;;;ACLvF,IAAAC,iBAA4B;AAC5B,IAAAC,kBAAqC;AACrC,IAAAC,iBAAuB;AAEvB,IAAAC,iBAA0C;AAC1C,IAAAC,iBAA6D;;;ACLtD,IAAM,UAAU;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAC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","names":["import_hasher","import_utils","import_address","import_errors","import_math","import_utils","import_ramda","import_address","import_errors","import_math","import_transactions","import_utils","import_ramda","gql","import_errors","import_utils","import_errors","import_math","import_utils","import_configs","import_errors","import_math","import_transactions","import_utils","import_abi_coder","import_configs","import_math","import_transactions","import_utils","import_configs","import_errors","import_math","import_transactions","import_utils","import_errors","import_math","import_transactions","import_utils","import_utils","import_errors","import_math","import_transactions","import_configs","import_utils","import_configs","import_math","import_transactions","import_utils","import_configs","import_math","import_transactions","import_utils","import_ramda","import_utils","import_abi_coder","import_address","import_configs","import_math","import_transactions","import_utils","import_utils","import_errors","import_transactions","import_errors","import_math","import_transactions","import_utils","import_math","import_transactions","import_utils","import_math","import_transactions","import_utils","import_configs","import_errors","import_math","import_transactions","import_abi_coder","import_math","import_errors","import_transactions","import_transactions","import_transactions","import_errors","import_abi_coder","import_transactions","transactionId","import_errors","import_math","import_transactions","import_utils","import_abi_coder","import_math","import_utils","gtf","addi","lw","addi2","tr","ret","isCoin","import_address","import_crypto","import_hasher","import_math","import_utils","import_address","import_crypto","import_errors","import_utils","uuidv4","import_errors","import_hasher","import_math","import_utils","import_ethers","import_crypto","import_errors","import_hasher","import_utils","import_ethers","import_errors","import_hasher","import_utils","MainnetPRV","TestnetPRV","path","path","import_crypto","import_abi_coder","import_crypto","import_utils","os","path","treeKill"]}