starknet 4.19.2 → 4.19.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/index.d.ts +171 -135
- package/dist/index.global.js +60 -2
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +60 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +60 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/contract/default.ts","../src/utils/fetchPonyfill.ts","../src/utils/hash.ts","../src/constants.ts","../src/utils/number.ts","../src/utils/encode.ts","../src/utils/ellipticCurve.ts","../src/utils/json.ts","../src/utils/stark.ts","../src/utils/provider.ts","../src/utils/responseParser/rpc.ts","../src/provider/errors.ts","../src/provider/utils.ts","../src/provider/rpc.ts","../src/provider/sequencer.ts","../src/utils/responseParser/index.ts","../src/utils/responseParser/sequencer.ts","../src/utils/url.ts","../src/provider/default.ts","../src/provider/interface.ts","../src/provider/index.ts","../src/utils/calldata.ts","../src/contract/interface.ts","../src/contract/contractFactory.ts","../src/account/default.ts","../src/signer/interface.ts","../src/utils/transaction.ts","../src/utils/typedData/index.ts","../src/utils/merkle.ts","../src/utils/shortString.ts","../src/utils/typedData/utils.ts","../src/signer/default.ts","../src/utils/events.ts","../src/utils/starknetId.ts","../src/account/interface.ts","../src/utils/uint256.ts","../src/utils/address.ts"],"sourcesContent":["/**\n * Main\n */\nexport * from './contract';\nexport * from './types';\nexport * from './provider';\nexport * from './account';\nexport * from './signer';\n\n/**\n * Utils\n */\nexport * as constants from './constants';\nexport * as encode from './utils/encode';\nexport * as hash from './utils/hash';\nexport * as json from './utils/json';\nexport * as number from './utils/number';\nexport * as transaction from './utils/transaction';\nexport * as stark from './utils/stark';\nexport * as merkle from './utils/merkle';\nexport * as ec from './utils/ellipticCurve';\nexport * as uint256 from './utils/uint256';\nexport * as shortString from './utils/shortString';\nexport * as typedData from './utils/typedData';\nexport * from './utils/address';\nexport * from './utils/url';\n","import BN from 'bn.js';\nimport assert from 'minimalistic-assert';\n\nimport { AccountInterface } from '../account';\nimport { ProviderInterface, defaultProvider } from '../provider';\nimport {\n Abi,\n AbiEntry,\n Args,\n AsyncContractFunction,\n BlockTag,\n Call,\n ContractFunction,\n FunctionAbi,\n InvokeFunctionResponse,\n Overrides,\n ParsedStruct,\n Result,\n StructAbi,\n} from '../types';\nimport { CheckCallData } from '../utils/calldata';\nimport { BigNumberish, toBN } from '../utils/number';\nimport { CallOptions, ContractInterface } from './interface';\n\nfunction parseFelt(candidate: string): BN {\n try {\n return toBN(candidate);\n } catch (e) {\n throw Error('Could not parse felt');\n }\n}\n\n/**\n * Adds call methods to the contract\n *\n */\nfunction buildCall(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n let blockIdentifier: BlockTag | null = null;\n\n args.forEach((arg) => {\n if (arg.blockIdentifier) {\n blockIdentifier = arg.blockIdentifier;\n }\n });\n\n return contract.call(functionAbi.name, args, { blockIdentifier });\n };\n}\n\n/**\n * Adds invoke methods to the contract\n *\n */\nfunction buildInvoke(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n const { inputs } = functionAbi;\n const inputsLength = inputs.reduce((acc, input) => {\n if (!/_len$/.test(input.name)) {\n return acc + 1;\n }\n return acc;\n }, 0);\n const options = {};\n if (inputsLength + 1 === args.length && typeof args[args.length - 1] === 'object') {\n Object.assign(options, args.pop());\n }\n return contract.invoke(functionAbi.name, args, options);\n };\n}\n\n/**\n * Adds call/invoke methods to the contract\n *\n */\nfunction buildDefault(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n if (functionAbi.stateMutability === 'view') {\n return buildCall(contract, functionAbi);\n }\n return buildInvoke(contract, functionAbi);\n}\n\n/**\n * Adds populate for methods to the contract\n *\n */\nfunction buildPopulate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.populate(functionAbi.name, args);\n };\n}\n\n/**\n * Adds estimateFee for methods to the contract\n *\n */\nfunction buildEstimate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.estimate(functionAbi.name, args);\n };\n}\n\nexport class Contract implements ContractInterface {\n abi: Abi;\n\n address: string;\n\n providerOrAccount: ProviderInterface | AccountInterface;\n\n deployTransactionHash?: string;\n\n protected readonly structs: { [name: string]: StructAbi };\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n private checkCalldata: CheckCallData;\n\n /**\n * Contract class to handle contract methods\n *\n * @param abi - Abi of the contract object\n * @param address (optional) - address to connect to\n * @param providerOrAccount (optional) - Provider or Account to attach to\n */\n constructor(\n abi: Abi,\n address: string,\n providerOrAccount: ProviderInterface | AccountInterface = defaultProvider\n ) {\n this.address = address && address.toLowerCase();\n this.providerOrAccount = providerOrAccount;\n this.abi = abi;\n this.structs = abi\n .filter((abiEntry) => abiEntry.type === 'struct')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n this.checkCalldata = new CheckCallData(abi);\n\n Object.defineProperty(this, 'functions', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'callStatic', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'populateTransaction', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'estimateFee', {\n enumerable: true,\n value: {},\n writable: false,\n });\n this.abi.forEach((abiElement) => {\n if (abiElement.type !== 'function') {\n return;\n }\n const signature = abiElement.name;\n if (!this[signature]) {\n Object.defineProperty(this, signature, {\n enumerable: true,\n value: buildDefault(this, abiElement),\n writable: false,\n });\n }\n if (!this.functions[signature]) {\n Object.defineProperty(this.functions, signature, {\n enumerable: true,\n value: buildDefault(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.callStatic[signature]) {\n Object.defineProperty(this.callStatic, signature, {\n enumerable: true,\n value: buildCall(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.populateTransaction[signature]) {\n Object.defineProperty(this.populateTransaction, signature, {\n enumerable: true,\n value: buildPopulate(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.estimateFee[signature]) {\n Object.defineProperty(this.estimateFee, signature, {\n enumerable: true,\n value: buildEstimate(this, abiElement),\n writable: false,\n });\n }\n });\n }\n\n public attach(address: string): void {\n this.address = address;\n }\n\n public connect(providerOrAccount: ProviderInterface | AccountInterface) {\n this.providerOrAccount = providerOrAccount;\n }\n\n public async deployed(): Promise<Contract> {\n if (this.deployTransactionHash) {\n await this.providerOrAccount.waitForTransaction(this.deployTransactionHash);\n this.deployTransactionHash = undefined;\n }\n return this;\n }\n\n public async call(\n method: string,\n args: Array<any> = [],\n options: CallOptions = {}\n ): Promise<Result> {\n // default value also for null\n const blockIdentifier = options?.blockIdentifier || undefined;\n\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n\n // validate method and args\n this.checkCalldata.validateMethodAndArgs('CALL', method, args);\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n\n // compile calldata\n const calldata = this.checkCalldata.compileCalldata(args, inputs);\n return this.providerOrAccount\n .callContract(\n {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n },\n blockIdentifier\n )\n .then((x) => this.parseResponse(method, x.result));\n }\n\n public invoke(\n method: string,\n args: Array<any> = [],\n options: Overrides = {}\n ): Promise<InvokeFunctionResponse> {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n // validate method and args\n this.checkCalldata.validateMethodAndArgs('INVOKE', method, args);\n\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const inputsLength = inputs.reduce((acc, input) => {\n if (!/_len$/.test(input.name)) {\n return acc + 1;\n }\n return acc;\n }, 0);\n\n if (args.length !== inputsLength) {\n throw Error(\n `Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`\n );\n }\n // compile calldata\n const calldata = this.checkCalldata.compileCalldata(args, inputs);\n\n const invocation = {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n };\n if ('execute' in this.providerOrAccount) {\n return this.providerOrAccount.execute(invocation, undefined, {\n maxFee: options.maxFee,\n nonce: options.nonce,\n });\n }\n\n if (!options.nonce) {\n throw new Error(`Nonce is required when invoking a function without an account`);\n }\n\n // eslint-disable-next-line no-console\n console.warn(`Invoking ${method} without an account. This will not work on a public node.`);\n\n return this.providerOrAccount.invokeFunction(\n {\n ...invocation,\n signature: options.signature || [],\n },\n {\n nonce: options.nonce,\n }\n );\n }\n\n public async estimate(method: string, args: Array<any> = []) {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n\n // validate method and args\n this.checkCalldata.validateMethodAndArgs('INVOKE', method, args);\n const invocation = this.populateTransaction[method](...args);\n if ('estimateInvokeFee' in this.providerOrAccount) {\n return this.providerOrAccount.estimateInvokeFee(invocation);\n }\n throw Error('Contract must be connected to the account contract to estimate');\n }\n\n public populate(method: string, args: Array<any> = []): Call {\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n return {\n contractAddress: this.address,\n entrypoint: method,\n calldata: this.checkCalldata.compileCalldata(args, inputs),\n };\n }\n\n /**\n * Parse of the response elements that are converted to Object (Struct) by using the abi\n *\n * @param responseIterator - iterator of the response\n * @param type - type of the struct\n * @return {BigNumberish | ParsedStruct} - parsed arguments in format that contract is expecting\n */\n protected parseResponseStruct(\n responseIterator: Iterator<string>,\n type: string\n ): BigNumberish | ParsedStruct {\n // check the type of current element\n if (type in this.structs && this.structs[type]) {\n return this.structs[type].members.reduce((acc, el) => {\n // parse each member of the struct (member can felt or nested struct)\n acc[el.name] = this.parseResponseStruct(responseIterator, el.type);\n return acc;\n }, {} as any);\n }\n return parseFelt(responseIterator.next().value);\n }\n\n /**\n * Parse elements of the response and structuring them into one field by using output property from the abi for that method\n *\n * @param responseIterator - iterator of the response\n * @param output - output(field) information from the abi that will be used to parse the data\n * @return - parsed response corresponding to the abi structure of the field\n */\n protected parseResponseField(\n responseIterator: Iterator<string>,\n output: AbiEntry,\n parsedResult?: Args\n ): any {\n const { name, type } = output;\n const parsedDataArr: (BigNumberish | ParsedStruct)[] = [];\n switch (true) {\n case /_len$/.test(name):\n return parseFelt(responseIterator.next().value).toNumber();\n case /\\(felt/.test(type):\n return type.split(',').reduce((acc) => {\n acc.push(parseFelt(responseIterator.next().value));\n return acc;\n }, [] as BigNumberish[]);\n case /\\*/.test(type):\n if (parsedResult && parsedResult[`${name}_len`]) {\n const arrLen = parsedResult[`${name}_len`] as number;\n while (parsedDataArr.length < arrLen) {\n parsedDataArr.push(\n this.parseResponseStruct(responseIterator, output.type.replace('*', ''))\n );\n }\n }\n return parsedDataArr;\n case type in this.structs:\n return this.parseResponseStruct(responseIterator, type);\n default:\n return parseFelt(responseIterator.next().value);\n }\n }\n\n /**\n * Parse elements of the response array and structuring them into response object\n *\n * @param method - method name\n * @param response - response from the method\n * @return - parsed response corresponding to the abi\n */\n protected parseResponse(method: string, response: string[]): Result {\n const { outputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const responseIterator = response.flat()[Symbol.iterator]();\n const resultObject = outputs.flat().reduce((acc, output) => {\n acc[output.name] = this.parseResponseField(responseIterator, output, acc);\n if (acc[output.name] && acc[`${output.name}_len`]) {\n delete acc[`${output.name}_len`];\n }\n return acc;\n }, {} as Args);\n return Object.entries(resultObject).reduce((acc, [key, value]) => {\n acc.push(value);\n acc[key] = value;\n return acc;\n }, [] as Result);\n }\n}\n","import isomorphicFetch from 'isomorphic-fetch';\n\nexport default (typeof window !== 'undefined' && window.fetch) || // use buildin fetch in browser if available\n (typeof global !== 'undefined' && global.fetch) || // use buildin fetch in node, react-native and service worker if available\n isomorphicFetch; // ponyfill fetch in node and browsers that don't have it\n","/* eslint-disable import/extensions */\nimport BN from 'bn.js';\nimport { keccak256 } from 'ethereum-cryptography/keccak.js';\nimport { hexToBytes } from 'ethereum-cryptography/utils.js';\nimport assert from 'minimalistic-assert';\n\nimport {\n CONSTANT_POINTS,\n FIELD_PRIME,\n MASK_250,\n ONE,\n StarknetChainId,\n TransactionHashPrefix,\n ZERO,\n} from '../constants';\nimport { RawCalldata } from '../types';\nimport { ec } from './ellipticCurve';\nimport { addHexPrefix, buf2hex, removeHexPrefix, utf8ToArray } from './encode';\nimport {\n BigNumberish,\n isHex,\n isStringWholeNumber,\n toBN,\n toFelt,\n toHex,\n toHexString,\n} from './number';\n\nexport const transactionVersion = 1;\nexport const feeTransactionVersion = toBN(2).pow(toBN(128)).add(toBN(transactionVersion));\n\nexport function keccakBn(value: BigNumberish): string {\n const hexWithoutPrefix = removeHexPrefix(toHex(toBN(value)));\n const evenHex = hexWithoutPrefix.length % 2 === 0 ? hexWithoutPrefix : `0${hexWithoutPrefix}`;\n return addHexPrefix(buf2hex(keccak256(hexToBytes(evenHex))));\n}\n\nfunction keccakHex(value: string): string {\n return addHexPrefix(buf2hex(keccak256(utf8ToArray(value))));\n}\n\n/**\n * Function to get the starknet keccak hash from a string\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L17-L22)\n * @param value - string you want to get the starknetKeccak hash from\n * @returns starknet keccak hash as BigNumber\n */\nexport function starknetKeccak(value: string): BN {\n return toBN(keccakHex(value)).and(MASK_250);\n}\n\n/**\n * Function to get the hex selector from a given function name\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L25-L26)\n * @param funcName - selectors abi function name\n * @returns hex selector of given abi function name\n */\nexport function getSelectorFromName(funcName: string) {\n // sometimes BigInteger pads the hex string with zeros, which is not allowed in the starknet api\n return toHex(starknetKeccak(funcName));\n}\n\n/**\n * Function to get hex selector from function name, decimal string or hex string\n * @param value hex string | decimal string | string\n * @returns Hex selector\n */\nexport function getSelector(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n return getSelectorFromName(value);\n}\n\nconst constantPoints = CONSTANT_POINTS.map((coords: string[]) =>\n ec.curve.point(coords[0], coords[1])\n);\n\nexport function pedersen(input: [BigNumberish, BigNumberish]) {\n let point = constantPoints[0];\n for (let i = 0; i < input.length; i += 1) {\n let x = toBN(input[i]);\n assert(x.gte(ZERO) && x.lt(toBN(addHexPrefix(FIELD_PRIME))), `Invalid input: ${input[i]}`);\n if (!x.isZero()) {\n for (let j = 0; j < 252; j += 1) {\n const pt = constantPoints[2 + i * 252 + j];\n assert(!point.getX().eq(pt.getX()));\n if (x.and(ONE).toNumber() !== 0) {\n point = point.add(pt);\n }\n x = x.shrn(1);\n }\n }\n }\n return addHexPrefix(point.getX().toString(16));\n}\n\nexport function computeHashOnElements(data: BigNumberish[]) {\n return [...data, data.length].reduce((x, y) => pedersen([x, y]), 0).toString();\n}\n\n// following implementation is based on this python implementation:\n// https://github.com/starkware-libs/cairo-lang/blob/b614d1867c64f3fb2cf4a4879348cfcf87c3a5a7/src/starkware/starknet/core/os/transaction_hash/transaction_hash.py\n\nexport function calculateTransactionHashCommon(\n txHashPrefix: TransactionHashPrefix,\n version: BigNumberish,\n contractAddress: BigNumberish,\n entryPointSelector: BigNumberish,\n calldata: BigNumberish[],\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n additionalData: BigNumberish[] = []\n): string {\n const calldataHash = computeHashOnElements(calldata);\n const dataToHash = [\n txHashPrefix,\n version,\n contractAddress,\n entryPointSelector,\n calldataHash,\n maxFee,\n chainId,\n ...additionalData,\n ];\n return computeHashOnElements(dataToHash);\n}\n\nexport function calculateDeployTransactionHash(\n contractAddress: BigNumberish,\n constructorCalldata: BigNumberish[],\n version: BigNumberish,\n chainId: StarknetChainId\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY,\n version,\n contractAddress,\n getSelectorFromName('constructor'),\n constructorCalldata,\n ZERO,\n chainId\n );\n}\n\nexport function calculateDeclareTransactionHash(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n classHash: BigNumberish,\n senderAddress: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DECLARE,\n version,\n senderAddress,\n 0,\n [classHash],\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateDeployAccountTransactionHash(\n contractAddress: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: BigNumberish[],\n salt: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n) {\n const calldata = [classHash, salt, ...constructorCalldata];\n\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY_ACCOUNT,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateTransactionHash(\n contractAddress: BigNumberish,\n version: BigNumberish,\n calldata: BigNumberish[],\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.INVOKE,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateContractAddressFromHash(\n salt: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: RawCalldata,\n deployerAddress: BigNumberish\n) {\n const constructorCalldataHash = computeHashOnElements(constructorCalldata);\n\n const CONTRACT_ADDRESS_PREFIX = toFelt('0x535441524b4e45545f434f4e54524143545f41444452455353'); // Equivalent to 'STARKNET_CONTRACT_ADDRESS'\n\n const dataToHash = [\n CONTRACT_ADDRESS_PREFIX,\n deployerAddress,\n salt,\n classHash,\n constructorCalldataHash,\n ];\n\n return computeHashOnElements(dataToHash);\n}\n","import { toBN } from './utils/number';\n\nexport { IS_BROWSER } from './utils/encode';\n\nexport const ZERO = toBN(0);\nexport const ONE = toBN(1);\nexport const TWO = toBN(2);\nexport const MASK_250 = TWO.pow(toBN(250)).sub(ONE); // 2 ** 250 - 1\nexport const MASK_251 = TWO.pow(toBN(251));\n\nexport enum StarknetChainId {\n MAINNET = '0x534e5f4d41494e', // encodeShortString('SN_MAIN'),\n TESTNET = '0x534e5f474f45524c49', // encodeShortString('SN_GOERLI'),\n TESTNET2 = '0x534e5f474f45524c4932',\n}\nexport enum TransactionHashPrefix {\n DECLARE = '0x6465636c617265', // encodeShortString('declare'),\n DEPLOY = '0x6465706c6f79', // encodeShortString('deploy'),\n DEPLOY_ACCOUNT = '0x6465706c6f795f6163636f756e74', // encodeShortString('deploy_account'),\n INVOKE = '0x696e766f6b65', // encodeShortString('invoke'),\n L1_HANDLER = '0x6c315f68616e646c6572', // encodeShortString('l1_handler'),\n}\n\nexport const UDC = {\n ADDRESS: '0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf',\n ENTRYPOINT: 'deployContract',\n};\n\n/**\n * The following is taken from https://github.com/starkware-libs/starkex-resources/blob/master/crypto/starkware/crypto/signature/pedersen_params.json but converted to hex, because JS is very bad handling big integers by default\n * Please do not edit until the JSON changes.\n */\nexport const FIELD_PRIME = '800000000000011000000000000000000000000000000000000000000000001';\nexport const FIELD_GEN = '3';\nexport const FIELD_SIZE = 251;\nexport const EC_ORDER = '800000000000010FFFFFFFFFFFFFFFFB781126DCAE7B2321E66A241ADC64D2F';\nexport const ALPHA = '1';\nexport const BETA = '6F21413EFBE40DE150E596D72F7A8C5609AD26C15C915C1F4CDFCB99CEE9E89';\nexport const MAX_ECDSA_VAL = '800000000000000000000000000000000000000000000000000000000000000';\nexport const CONSTANT_POINTS = [\n [\n '49ee3eba8c1600700ee1b87eb599f16716b0b1022947733551fde4050ca6804',\n '3ca0cfe4b3bc6ddf346d49d06ea0ed34e621062c0e056c1d0405d266e10268a',\n ],\n [\n '1ef15c18599971b7beced415a40f0c7deacfd9b0d1819e03d723d8bc943cfca',\n '5668060aa49730b7be4801df46ec62de53ecd11abe43a32873000c36e8dc1f',\n ],\n [\n '234287dcbaffe7f969c748655fca9e58fa8120b6d56eb0c1080d17957ebe47b',\n '3b056f100f96fb21e889527d41f4e39940135dd7a6c94cc6ed0268ee89e5615',\n ],\n [\n '3909690e1123c80678a7ba0fde0e8447f6f02b3f6b960034d1e93524f8b476',\n '7122e9063d239d89d4e336753845b76f2b33ca0d7f0c1acd4b9fe974994cc19',\n ],\n [\n '40fd002e38ea01a01b2702eb7c643e9decc2894cbf31765922e281939ab542c',\n '109f720a79e2a41471f054ca885efd90c8cfbbec37991d1b6343991e0a3e740',\n ],\n [\n '2f52066635c139fc2f64eb0bd5e3fd7a705f576854ec4f00aa60361fddb981b',\n '6d78a24d8a5f97fc600318ce16b3c840315979c3273078ec1a285f217ee6a26',\n ],\n [\n '6a0767a1fd60d5b9027a35af1b68e57a1c366ebcde2006cdd07af27043ef674',\n '606b72c0ca0498b8c1817ed7922d550894c324f5efdfc85a19a1ae382411ca2',\n ],\n [\n '7fa463ee2a2d6a585d5c3358918270f6c28c66df1f86803374d1edf3819cc62',\n 'a996edf01598832e644e1cae9a37288865ad80e2787f9bf958aceccc99afae',\n ],\n [\n '3d4da70d1540da597dbae1651d28487604a4e66a4a1823b97e8e9639393dbec',\n '45cdef70c35d3b6f0a2273a9886ccb6306d813e8204bdfd30b4efee63c8a3f9',\n ],\n [\n '1e448fdbcd9896c6fbf5f36cb7e7fcb77a751ff2d942593cae023363cc7750e',\n '30c81da0f3a8cb64468eaa491c7ae7b4842b62cb4148820da211afc4caffb3a',\n ],\n [\n '6531acf1a7cb90a4eb27de0b7f915e387a3b0fd063ba6e1289b91f48411be26',\n '31330f5daa091889981a3ea782ae997f5f171336ed0487a03f051551a2cafa2',\n ],\n [\n '54be016394d5662d67d7e82f5e889ed2f97ccf95d911f57dd2362c4040ed4f4',\n 'c6cb184053f054d6a59c1bf0986d17090d25089b3fdcdaf185edc87ef113e5',\n ],\n [\n '35b9ecd0499ca1d5d42dcbb0c6b4042b3733c64b607ca711e706e786ef2afc6',\n '5624b476a5b21c3a544f0712d4817b06ad380a5a6529d323bf64da8ef862d8d',\n ],\n [\n '4ce0378e3ee8f77ed58f2ddbd8bb7676c8a38bfb1d3694c275254bd8ca38e23',\n '5a16fcbff0769c9cf2b02c31621878ec819fff4b8231bff82c6183db2746820',\n ],\n [\n '648d5c6f98680a1b926bfeb01c00224c56fdcf751b251c4449c8a94f425cfcf',\n '72c05ac793cd1620a833fbe2214d36900ebe446e095c62fcb740937f98cca8c',\n ],\n [\n 'bd09be3e4e1af8a14189977e334f097c18e4a8bf42577ef5aafa0f807bd89b',\n '6e0e72ed7eb65c86cee29c411fb4761122558ee81013344ba8509c49de9f9b6',\n ],\n [\n '35ea4e339b44ae7724419bdfbe07022253137a4afb7cbaffad341ea61249357',\n '3665d676a026a174f367bb4417780e53a7803cb02d0db32eb4545c267c42f14',\n ],\n [\n '36457bc744f42e697b825c2d1afd8f4029d696a4514710f81da52d88e178643',\n '7c93715896735492a68c7969a024b3a8fd538bffc1521538107de1a5f13ce9c',\n ],\n [\n '5b3a08ebcf9c109cc9082f70d9df2b9c11b5428ee23917b4e790c4c10f6e661',\n '9d7b42ab0c20f5510df7ea5e196eec99342739077e9a168198c89da859753',\n ],\n [\n '21883ef8580fc06e59481955d52ece3aca6e82c8c9fc58e216dcf46f96990c6',\n '51a6423543e6e8a43e71da34cd90f5b520b8d33b67c4bf857573ab9e301aa4c',\n ],\n [\n '19e86b77f9b581e81092b305c852faf53940a8f15f0a6990c414f04c0fa7ef9',\n '515630e35d4398c9c79fc4ee08e1023fa47d8e03c6e7819c6d2ccef45398fa',\n ],\n [\n '888ab8eb4c31bb2ac5b54aa320dbe1a69c96b864e8a5f54d89c1d1a6b86c24',\n '730e148467f6a55ce22c5296f5380df88f38de76ef0b2de844cd3094aaaf3ea',\n ],\n [\n '75e79ff13a894e7120dac17b7429c0c32ce7828f726c9973728c0977a5f5977',\n '4960526e59c1c736561a201bc56f7d762641b39f609d273cc996f5d9197cfb8',\n ],\n [\n '640fe009249115d7254f72ecafb3006139e4bed7e9041af51458c737282d1d5',\n '3cc6c978a575246e2ce4f7ef1fcc7f63085db9ff98a1b1f3fe374087c0332c',\n ],\n [\n '6d6fd09ccab7c26de9b3906191235deb5c34685580c488275356a05e209ca96',\n '7157f81a34213dd8f91dea4f6df1bcfabc4ee091a3049eeeb3b7923d39b8645',\n ],\n [\n '5531ca1d00f151d71da820918f74caf2985b24dca20e124721fff507b5a5876',\n '518529643d3f25e47f72c322223ba60a63d6bfe78cf3f612215d9c19bf29200',\n ],\n [\n '6192d454e4f8fe212bdfccd5b15dd5056d7622ffe456c6c67e5a7265aea49c4',\n '2377a45dc630017ae863cb968ddb38333a70c7946d8684e6d7a6213f634b7bc',\n ],\n [\n '542fb44b4ef3640a64fdb22a2560fb26668065c069cf31d1df424819a39ff18',\n '5dbae9b0948e0361aea443503840341c322aa1a1366ce5390e71bf161f78f8c',\n ],\n [\n '299ff3e3412a7eb4cb4a3051b07b1be2e7b1c4b789f39ffb52cba3d048b71de',\n '1951d3175c02761b291d86b6c0a08387ad5e2a2130ccc33c852530572cb3958',\n ],\n [\n '628ce3f5367dadc1411133e55eb25e2e3c2880d6e28754a5cb1c5d109627e73',\n 'ae3e9b7d50964e28bd15380400b7659b87affdef5d2586cbefcd9be7d67c0d',\n ],\n [\n '6ea54aff064895eccf9db2283225d62044ae67621192b3346338948382f5933',\n '6431507e51aadacfaf39f102a8ff387756e9b5e1bc8323d44acae55130d93db',\n ],\n [\n '28097d50d175a6235320fe8cfe138dd9e46895d189582e472c38ad7a67d923a',\n '7f9eab4133d7d09a7ff63368d6135c26262b62336eca1b5ca33f2096ce388ba',\n ],\n [\n '619fd09cdd6ff4323973f256c2cbdcb224f7f25b8aef623af2d4a0105e62e02',\n '2c95f0ae11d47eeae1bc7f1350f75f9185c5bc840382ceb38a797cae9c40308',\n ],\n [\n '641c18982ced304512a3f2395942a38add0d6a7156229c2a7c8b8dfbe9beb96',\n '6f6288c9c659b6af5ac975f4180deffe53d516399b2cc62f31732e9d4ba9837',\n ],\n [\n '58ab546e51fe49fc5a382e4064a2bd6cfc268904412f86c26de14f28a71d0f2',\n '124b7217943e7e328408e8afdfa7da00dcbc94a2bb85fd8e01fb162d2c2c0a9',\n ],\n [\n 'a82c2fdedbb26c3c762a12f7e86b0e01e65320e0a25a8399d665f6e266bf74',\n '1a1de28e253f3e10f44d0111e8074f882d7f42e5900780ccbdc31da372d3fd8',\n ],\n [\n '744c725a7455a992e3cf5bd007bc234dd4668dba285f553f38350ad94c1615b',\n '7f721a87f48798bdc4a9c0eb88559e2ad7a74112fd901e70ea159e67a9c33f',\n ],\n [\n '434df142ddaa60f7881b6348d91687de40457de7ccfb07f0304b9e820705d0c',\n '7fae425e3b53f97dd1f5b20e49ed9fe24ff1efc341ba5e017ac89cf8df0cc39',\n ],\n [\n '7a1e2b809dff46277021cbc376f79c37e1b683bbd6bca5317014f0dc0e1ae73',\n '56790278a231912c334eff05281e08af1558e85516b4411ef64647c13bea431',\n ],\n [\n '4931b7990348d41cf8907be79f45bb7991fd18f8a57868351c92fa7a34cbcd7',\n 'ca35091815cdf0837d396e25aad6052ad32d497a33b123256cffdc008bc50e',\n ],\n [\n '250b815d352fd89f8210b624b147ea7d0a4f47bcac49f3ac9b777840da93ebe',\n '1173f10e9691948b7da7632f328520455aadcba46e017f891e0a1d7da2bef04',\n ],\n [\n '2223b85032fa67292f6e1f822628e6756e5c3cc08fc252ab88d63d624e4dfb2',\n '55619ba96a7dcec77832fcb22cd5c21c7dcebc0280d730cba0002b67e0a8c63',\n ],\n [\n '249b131e04de73af9820d3e22492d9ec51bdc0c4c4f34d95352fa44dd61f245',\n '7576d3b5d136368ff01170a77d8286d0d1c7c40688862fb40813b4af3c6065e',\n ],\n [\n '6777915d9b4769027eb7e04733f8a2d669c84fe06080f55e8a55674dfbf9efb',\n '640d0ff384c9635e1af364760f104e058e3c86209fa9d2320aeac887b2e02d8',\n ],\n [\n '2abe3f237681052f002414399111cf07f8421535af41251edc427a36b5b19c9',\n '636ce4deaf468a503ab20ccb2f7e5bdc98551656ebf53e9c7786b11dd9090be',\n ],\n [\n '4d5cc5414758ea1be55be779bd7da296c7e11f1564d9e8797ceea347c16f8ea',\n '1a680c4c410cf5ddc74e95ff2897c193edaaecce5b2cde4e96bbae5c0054eff',\n ],\n [\n '46c375c684b30adf4d51de81e92afee52b1a3847e177403372c82109373edca',\n '1eaadc5783c90a0261306423d52009e991126b3f620e9cb6cffca41ca096f4f',\n ],\n [\n '2ddfb71f51205888118cbabba8fd07d460a810289bfdeeb7118707e310cb152',\n '1fd905d07b3933be886f2518246bdafa6f33259a174668808223cd7c28183c7',\n ],\n [\n '386f3879960713d41fdb3b1e41bbebf26b1c0e27a9a75bb1adcc1a0d3e8547b',\n '2b21498c0f34ec6f17c720334dc0f36021c2f87afbbbc8847d0bd536eb265e5',\n ],\n [\n '407eae62c6c4de3b942195afec3f45efec71ddb5e6edee3d427631bcdbf9b90',\n '436e7f2d78268ef62c4172d2ff1469028bad1f1d0f97ab007064418e61caa8f',\n ],\n [\n '1b881175e21201d17e095e9b3966b354f47de8c1acee5177f5909e0fd72328f',\n '69954b1a9b8bfccf8ec384d32924518a935758f3d3662ef754bcc88f1f6f3ec',\n ],\n [\n '7d545a82bff003b8115be32a0c437f7c0a98f776bcf7fddb0392822844f3c5e',\n '34b6e53a9565a7daa010711f5bf72254a4e61da3e6a562210a9abc9e8b66d69',\n ],\n [\n '299b9fcd4fadfc4b6141457a3036aaa68501c23df579de26df69d4def89b913',\n 'b95bf2c2bb303c38bb396382edc798ca6a4847e573ce19b7b08533d1912675',\n ],\n [\n '551f5a4dae4a341a3e20336a7d2f365ddd45849351ec6dd4fcbedfe4806d5d5',\n '5865c977a0ecf13ce85ae14c5c316872080bd36f0f614f56b6dfc7ece83792e',\n ],\n [\n '7a1d69c08e68c80ad8b310736e6247a53bcba0183b9b8798833bc696a0fb6e2',\n '3ce803a20ebb3b120d5eaf0ad64bed0522fad1a0f2ce39a5c5cbae98c4438f6',\n ],\n [\n '28acacc0bc41d84e83663f02b36981a2c8272ecd72d3901164be2affb09c504',\n '7a5aee0b160eaff5b5968ab1a0304ce58c3d5ae0148d9191c39e87668229e5b',\n ],\n [\n '1f78cfdbcc767b68e69a224a077468cdfcb0afd6952b85bccbdb96d1fb8500b',\n '4772ba173c6b583284eb001cfc2a124104833f464ff9df096443e10ef3e9dd4',\n ],\n [\n '2774108962ca9897e7f22c064d2ccedac4fef5fc9569331c27cdc336c95774b',\n '9e13d79b68e8dc8091c019618f5b07283a710ddf1733dc674a99fc32c12911',\n ],\n [\n '770d116415cd2c4ace0d8b721dd77e4a2ef766591f9ec9fa0b61304548994ed',\n '42165d93c82f687635aa2b68492b3adffd516beb4baa94520efa11467a209fd',\n ],\n [\n '5e6e4ece6621e2275415e1fda1e7c4f496de498b77c0b913073c6a6099394b9',\n '3d92ce044fc77fa227adc31f6fc17ef8b4ec1c5aafc44630c0d9195075bf56d',\n ],\n [\n '6e69c717b5d98807ff1e404a5187a9ceaf0110b83aa15a84f930928b1171825',\n '1ee7cfc3a9744d7fa380ba28604af9df33ac077724374c04588bd71fa16b177',\n ],\n [\n '404318f2d2ceb44f549c80f9d7de9879d8f7da4b81e7350c00e974ebf2daef1',\n '3934831b5af70d17a3f1da9d2931bd757e6acf2893236264fc7e0d92ff1a1cb',\n ],\n [\n '20dcb6f394fea6d549b2e75748f61b7ec03b6e52319cb14163373a9c22bb9dc',\n '106a8c96cfb95a331618b7416d1498554730499e194a58fbf63019890480fc7',\n ],\n [\n '119000f277ccee013e6bb121194ec1ab5460fb6a96eb702a14079865f4170aa',\n '1737a32f5415e8720a5606ec1dd4756f02e7c6817e3723b453d091f2d192773',\n ],\n [\n '45d0fb5cd95db76d05dec3faa12e467a308eabaad363a062353db3cd2d9b749',\n 'ae08691b5b0cdd19ec499132421638f470f493320e4003d123ab1da761b965',\n ],\n [\n '1257b3e65cdfb6367c6d0942327e799bc66eb221e70c6573a9862889eb51c38',\n '593309fd45755dd2cc4afd2b9316bc4638b0c5ddb3009694fcb7b250d0c8a2f',\n ],\n [\n '186dcf9950f72e868014a8accf14aa36e82a7a2a29f86ba37f6632da4189db3',\n '55684c9f7a043fc523ed78f756f834b4db823d5e4161bd79602c17d55a5cd8c',\n ],\n [\n '58791d5569f282f5c3b01ecdc9388df7ba3ca223a2dc1eed5edaf2a1d302fb9',\n '6298d7dd51561a045bb4089deda9f40b2865589ed433e56d54554f8b45e79f0',\n ],\n [\n '13fd87144aa5aa4b24d5a7bf907d8280d15937fed262d41084898cb688fc28b',\n '3fa54367770cc4479a857411ddcabe86627b405ce1cd14ad3b2863bde13abe4',\n ],\n [\n '48118139445415f0c1879224e2dee744ed35280ff00537260402a1741ec3676',\n '4dfa39dadaabecfc54ecb7a25319444f8e952782d863790e42a9887064fc0c1',\n ],\n [\n '4ad031bb9eda84f2fe5d354c7948d41558ca657a04508654721810ee72ef158',\n '620ebd5d0086b92c6009a42777b946a351c2c7ba852b57d3c9905fc337459ef',\n ],\n [\n '4a34abb016ad8cb4575ea5bd28385d2348e5bcc0cbba90059f90f9c71f86e8b',\n '4f781829ad83f9ed1e1b6de0e5f4ac60dfdfe7f23cb4411e815817e705e52c8',\n ],\n [\n '7fc632d7512aab5356b7915dca854c8b12b369ab54f524fbce352f00eb9b9f9',\n '2ce80b944fc9158005f630b34385d50c3ad84450a9e1e529925b3211dd2a1de',\n ],\n [\n '65ed10347503cbc0216ca03f7536cca16b6abd18d332a9258685907f2e5c23f',\n '3be1a18c6bfa6f2f4898ebefad5a8e844c74626d5baa04a820d407fe28bbca6',\n ],\n [\n '1a8abba1be2e276cdd1f28c912280833a5ede1ec121738fcca47dc070dcc71d',\n '21b724378bc029a5199799df005922590d4e59cae52976f8e437bf6693eec4a',\n ],\n [\n '3a99c22dafcfe9004ebb674805736a26aeed7ed5d465ae37226dcbe270a972b',\n '5bf67552af08e1e6e2a24bf562c23225e89869cab9bef8becb3669175a3c94f',\n ],\n [\n '4a6a5e4b3501f2b7bbdd8da73ea81ffca347170bdfb6776a037cdd74c560fb4',\n '5af167ebb259c2da88740ec559ee04052bb66480b836cadd0e2590c32d7111b',\n ],\n [\n '6890d95308525f0bac9dc25cc1189eb92d29d4b3fe61bc8aee1c716ac17b1e8',\n 'e6f23f78e882026b53ea4fac6950e56e3da461e52339eb43d2fdb2dade7ca9',\n ],\n [\n '748f4cf4f027efdeaed7c7f91ef3730ff2f2bb0bfc2db8f27aadde947f7d4d5',\n '3a1cbc550699411052c76293b8c41a3a8a1ecf12cbbc029a1b2b6ea986fca93',\n ],\n [\n '7321f3f581690922cd0dec40c9c352aae412ec2ccdf718f137f7786ab452cd3',\n '5be5130c9277cdb76d7409452438ec15d246b211dd1e276ee58e82a81c98fd4',\n ],\n [\n '6c4d6cb7e7ae70955224b8a912ff57ca218635a2436b36cee25dce8a5cdf51f',\n '32f8c03c6db3246946e432e4148e69f5628b200c6d7d72449df6eeac0998039',\n ],\n [\n '1dad5f2e795ea6fa5177f110989516eacf8fb37bd6a091c7c93f1d73a2fe309',\n '56b2298c538180e99dea3e171dbb5c6fba0bd0a9ed40537277c0c2373a8e2c4',\n ],\n [\n '1610605baacc9bc62c4cc923dc943347cfece7ae241e746fbe6c2c878221dbd',\n '431a82d657e0d109d00dea88cf3fa9b999845221b7b5590a20c40fc71368c1c',\n ],\n [\n '6a4f5c787fb09a5be2b04d2eafa1e6f3d3c863ee22960eb0b64f6eaf6659162',\n '14dbc3eaea6146ee7eaace5a91ed9430dad3a47e9ca2f68b455171f8fe6a7b3',\n ],\n [\n '738415b73e55412b0e582e45ff0d7bf4b1bf2922db581783fdcc75559f40e',\n '33825aeb3fd8459999eb418d15102ba5864b069c6ea517f0c6e9eab8d9aca47',\n ],\n [\n '2603e72ce53985c70782774057a17944f7b4ce224a809be4e2b5af3606aa1d8',\n '92822921809c42318f42dac4d773325f41c43069e990adac7818a45e2554dc',\n ],\n [\n '181cd967ab4615357cc96c82eae9152ce7598c1a1dfdd91a458bddb016ae9fe',\n '5d562fdaeb0e12647e230e50eaf216bed52fa73c6b7378821a3bfc4cd66d4ff',\n ],\n [\n '1121726069b9ef5954ba6490100b226e0be53fef3e071b7c58a1286174b789a',\n '4b25594cf4e9eb2d14b3f52f2661a9992234fc222c0a0d44517cb77deb9c16f',\n ],\n [\n 'e543663969b915337f105f80995a77b356f1a51d8b4a4fb12d44364130e873',\n '34b2e3c009fdab4cb7349a580df2e64c0098a123280078e5da6623a9ec6b44f',\n ],\n [\n '4e2f8909bb62de5ef65600e61bbf969293815296b6e23702875e049b3ce5c45',\n '3cb81f2c21f22a7add26fa38a9ce5d9cce1bb251bd2698f90c34ff0a84f7af',\n ],\n [\n '37b546e403a1ba970c17b67c2f1361ab9c803f8d2b5cd93803014faa08861ed',\n '37079184ea46272f5809b523d060686633f7995167897a153be1772fd6566f6',\n ],\n [\n '27bddca77f7bd7f66b3693567a4238f2e6751d95b0bcb409f6b24d08f84798c',\n '6417a85cbfd6fc02df560d3963a241a986baacdfa423f65d7227ce49a96c57d',\n ],\n [\n '2de71a39aa043057d1bc66e45f804542acddf18f7a6d88c0d7fb0ca240debdf',\n '306c1ce39ab46300f7cca0f3a2fbfa77296a27e24bc66b0b8044968ec0ee413',\n ],\n [\n '307c877154364c0c03534e7327d5a88e1380ceef6481567ade37a14ee7c1a72',\n '3404bc7dbfb33b95d922d0693aaf9358f77888d7d95e773c38d83dbe2e5f995',\n ],\n [\n '79f09ff7c60850e5f5ea020722659a1ed27db4c95dca131f99552f785c8afbc',\n '40429528c099349b426ddbf129497176951a64a53db5f9d8bd2be0252cb22b2',\n ],\n [\n '4027dc6b56d446e5972f35464eeac85c5254ef377c902d9fe37aea841bb5292',\n '7c3ea37689ef679fa2f5c7e031a78e23d484a8317990fd34d44d95cc1db3717',\n ],\n [\n '645dbf78a3c228c4b7151450b5e65edb58e71f37e1e4bc5f471e0f1abd6d9c2',\n '15cfe7850f327b256e23b00627451560c5c6ab60db78d45b7ab286afb6f13ab',\n ],\n [\n '1503ca373757677ad1d911a2b599d01c46eb879d1ce21ae171c7e439846a85f',\n '583eb269b7030da6a0c324026919de3f9489d2ff6ae0e6320c36f05469ad66c',\n ],\n [\n '66e1819ba3ec4ad4ae9f7d7588d23baa004e29d3aad2393d52af204a81626ca',\n '505249980cbe6273b82ad5038fe04a981896f4117345ac1abcc67e2525c0ee4',\n ],\n [\n '5ec20dbb290254545f9292c0a8e4fbbfb80ad9aab0a0e0e9e9923f784d70ed1',\n 'bdb1ca3a859227cf5d00eaae1f22584e826ed83b7ccdb65483ed5213dc4323',\n ],\n [\n 'a5c1a5011f4b81c5c01ef0b07c0fbf0a166de77280f0ae241f2db6cba15194',\n '4444521fb9b33d7dfeb1247d0ee1a2b854ad166cb663d9dd2e686909362a689',\n ],\n [\n '1f35335de40e00c62642dac2fda8b30f071986ce4f11db849df11bc45ad4e0c',\n '7801a2c761b90fd4477ba0be9a775003d5dfcd959b1ed198b4681f15e7acbf',\n ],\n [\n '48db4798cf6821c1ffb8178b1d3bb6020e04186c96aaf4670972d367f4ed5f',\n '781019494df95b888f1578f1b4a3f8e125ea60eca47ef9207a10630671217a3',\n ],\n [\n '17f653d904210148a8e74d8e719a3061683c164aa6d79c902a19f185ab437bd',\n '6780e97985932c3860d810af1e065d454b1cb4be0e7ffe2d8cea7d52526e223',\n ],\n [\n '5c4d0c7432f9b0070436240f9855adae1467cdc9826952ae01b68cd52a3ad89',\n '1c5747f968ed91261b7ae9bf1023c999da9816e37de602d6a1a50d397752bff',\n ],\n [\n '6fedd7639fdaa2f7bad4ca0b391710f6f8a7e890250ae8ae4252bb8b39a1e58',\n '436a215f655a3fd3778b2335ffdc9aca6b98474e43d764c1f8362830b084f0e',\n ],\n [\n '7fbd45a889c5e9d127bb4f8474d6be7cb9796bbfff923b75e42a1ad4cae37d6',\n '484bd12622a6ba81cd53049c550d9ed682a8e765b656b1cbff9bbea637bd1f4',\n ],\n [\n '17d984d47937263f7966a3e7b1eea04071e678494bd749c9e02b48b3234f06d',\n '7b341ff08722c4e161005d0037204a7a2001fdda7af2cc1a0b04a027f115a0f',\n ],\n [\n '7f1822045db45ea07e1519c3ee1f7705915f35fe4dd8db1e8921b5d1c740edf',\n '33d41e06b93320ad1b3d9580380ec797a05dac3f1cc8008899110ebefde2f78',\n ],\n [\n '7b19453ecb74b7d0e2a66b9890ff73bfbbcd61a266abd6d82dbe665bf32f34d',\n '6dba2355420dac582b1f349609ea1c89b89bba2d1a68a0642f1dd12d86e73cb',\n ],\n [\n '273e82a15f395ddf2489a95685bec8bac62c4b459d1b28987d3cb27e4bc9128',\n '653375b48a4cf5d5b101c9ef533039bedce5dbeef3f59e8f168bdc99b06ca5f',\n ],\n [\n '3006c9e7fc6a553d8eb4e8a47ce9f10d1a39576ac255ae9e0a4ce3869e76212',\n '65fe9e2ef2aae608be309332d464f57e28f1df5de1a6a519751b056971f932e',\n ],\n [\n '5e8f384c8a4607fbe9789fcc52d54249d304d698562597d114c1d81452d3dee',\n '3c8bc78066b5d947dc1e405e326ee55ea606c7988f666748d259850fa259a22',\n ],\n [\n '7841b2102e9aa103fb53a642b3e167b21113ea44751ab38e0b5ef8312654db9',\n '71bf5c8308fcf9c4a7847494cd9bdd946fddf7d3a37e8bb0b201ff2343deb8e',\n ],\n [\n '40f68027420c11e3ade9aae041978dc18081c4f94943463aac92d887f922a62',\n '499c6062594a6c7e21a3cb91ea451813393bff365a27a08f1a515439b83cf42',\n ],\n [\n '6ce77a50d038b222634e87948df0590b79d66087b01e42b9b6d8fa30ebb1465',\n '35f5c46bb1be8555a93f155a174d54ec048c2ac8676e7c743054ddc52709d37',\n ],\n [\n '604f8b9f2dacb13d569262864063c2d4bb2b2cd716db6eeb2b1eeabc57746f6',\n '68c6799e24f3b44eec3049973445174727a66970f1614a782efa2b91ab1e457',\n ],\n [\n '73d620f3bfe77f672943d448d7dc05327adf64b8e7af50039c469d7f7c994c4',\n '4859deb36eaf0c802f0d1514602368143a33ec6ce8fd55248b59025debc6afb',\n ],\n [\n '3fd2bcd1c89d706a3647fbd354097f09c76636e93ae504973f944d8fc3bcc1',\n '677ef842cf5eb2444941f527abec567725e469469192354ad509a26ebb3d0e0',\n ],\n [\n '39222ea924ac17b533c72ffb2c47ffdc11d6a7f7c70fbde3a10fb0b8f35eb2f',\n '20dc4bd1089019bc1d7379b4feb3eae6eb5af59e9f253845da9fd633057e952',\n ],\n [\n '326f58994e1347f62e4102183215b5db956378d2f61f14aba4dec94577f53c',\n '7a03284c296003bbe05178a1d82efdb7b8125511d63e20e50aed789c2e52e1',\n ],\n [\n '53aa8939c74d4ee58f03bc88bace5a45c7bfcf27466201da05dc6723a5f5632',\n '2e32535ca7732904a048183247b04b426ecf9b39fc393a9cebe92fb1dc7a7f1',\n ],\n [\n '6cee1a03145e93b3e826e6067005f09c06099c98198c91c222407ba5c8c132e',\n 'beaecad1274e7c6e5476a100c271aa1a6f86ee5a9fa5c2f26124d5886fa63',\n ],\n [\n '3ec659b8175e1be1bd5a252108714776b813e330393f587814f5f1f32a73332',\n '529a5cf9f8c237ae69a94217d173c8d19c156952041f5c980da557990863fa7',\n ],\n [\n '3d66ec5963d0c534d4139c8cef2e1ac48b3e7965fafabf58be26f903318af4e',\n '3d3f2de7a95f59b683725ee6283cbaf31f97c4b600df9a4621413223a468740',\n ],\n [\n '7fb38ace8e0932fac2ea0d3eb676db8d684db1817e2e4d59da7996ce398b4a',\n '68f92bd5768cdd4710249f9d49ef1d5654e497b9a4ba10bd2971366d83fb400',\n ],\n [\n '1c4a49314d6b4969cdd142c76ceb7682bfb868ace7f7568b0fc8635bda5a9fb',\n '5fc0519f1f4cc10b5771312458748c036313b87707ed0540026ac64a5955aa9',\n ],\n [\n '3073c95d08d3b97caea5f0be16b2789bee766f76b7e5499f8ce8f96abb0f344',\n '52a8974b4eb9a1f6a0ae2c83cb4715bf18d73f057255fcb3f63b74f7e78f590',\n ],\n [\n '44485b16d597a5de3604df6f7ed7e00b8aeef9e7e8dea8688255153b8bb16aa',\n '6cccb0ba170123266f24b5d93a744397dc2c44820edc4f8f5b9a0f5c9b3b940',\n ],\n [\n '7618f77b7b32d512688dd62e0b48231d9574c6361e8be353a7dc04f7c3a115e',\n '78ffcd16d80636381ca231aae70d99c9e20298b4f5388fd823ea9fa2b8ddfd9',\n ],\n [\n '7dc82fee1ef95cf5b3720fcc07f63246654bfe39762627839da40e51c75654d',\n '4c0ccdd70955da74558de20c88352df8a02aa97e4d5971c500e884740a8cb62',\n ],\n [\n '7fa5d460dc10cbb418b444d9bde97e92c70a99a222b99f244dccee7e62cc04c',\n '636163901baa5b7576c38c43407af578b8c4607e01e86011ae2dde587a89f84',\n ],\n [\n '758930d46006623a756c89bd0cc378f6a3c1f43c9a0edbb42274c35e75c16d2',\n '1d74dd9f81c2fec811b8cbd6168a745b0a111932b2a345265ef2853b50b6245',\n ],\n [\n '7332ee0626b044d664ef228f8cb84df7c643e52f6a2591ae1c9007ad61ec16e',\n '229bd8e630572cbdee54283234cf3e9f060e6382f99943bf234119d47b54470',\n ],\n [\n '78a16ef803aa20a075bb2f66c61bb2dae5698bebb94a0995fa74c3d53de1614',\n '246d588b68edb6fed96c128349908c42dcd64c46341b205e79f4aed9b5d3675',\n ],\n [\n '6e1933939bd03b67bba753cc0cbe7d2f25bad68c993887ef8c9e2fcd59b0647',\n '599413f7c204a11a5ce315eab11299ab7326603412bb00bc1c59ff75a37d6b4',\n ],\n [\n '4a79957a5a1888ad063b51c69565a2b48e8eb917183e220a1c8d3374526d30e',\n '1f092de0e069bba7fc5386e2e9a114c1618f88c4b95e220cd35ffe96f99fcad',\n ],\n [\n '3148aa3df9ece39aca84f59489f2710522216f14be6055ee0027529d1d55e2d',\n '617e9a52a92975db0ba1977f71116f7058a0d31b869ac7f3ee2fd80b0c5100c',\n ],\n [\n '5c1188e72384160ae39d07328346cda4f6c12d227448e6236f04dc971625287',\n '1643006eb3a3bc6aafd5f685cf054f2a572e6ca58c0118bcec0b833741f116d',\n ],\n [\n '3f72efc93c9b71adc4c51d8fc69d3940b20d08733af2b7d05140fdb1d1c1004',\n '7399259987c8f4ebfab46e522380707e58427d3962ee0c2a91760813f76d232',\n ],\n [\n '3129b34c03c51aa8f611e91d5cfcc9bd3ef108ee66e6d3ee35a0e0e50055bb',\n '563b18b5650085efb4cf179a029e6afff27b1d3091cd28eaa68d24fa1f801c6',\n ],\n [\n '16eac0f9fb4c67cf89a7fa4ee615bbe731d8edcb709a1b9b50c7d873a530f52',\n '7ff8288b6e199ca8f316192881424a37fb080c29daa76b1f0edaccaf580a80e',\n ],\n [\n '75f6b6028c43ce832f65d7e8e620d43b16cba215b4b94df5b60fc24e9655ee4',\n '35e9ccfaed2293a8b94b28de03bcb13eb64a26c831e26cc61a39b97969a2ff0',\n ],\n [\n '3c6152fe093bd6316897917ec56a218640ec1b2148f21db9b14fc7a5ff362e8',\n '6eef2df27ae7d63a28856b07b73e7aad7ca94f317201a1e675ffc6f9a1710dd',\n ],\n [\n '54e01b5fe4fd96052aad55b3f26b1d254dfc7e2525fffb9ae0a77eb8cc5579',\n '7c3d39232ab333675b219abc766ed9b4782c840e6b046614dedb8a619696eb0',\n ],\n [\n 'd1e63f8ea8a76429cf254a6d3b668761f0dc572d4bfac4fd56d9eaf58fb6c0',\n '2bd0a84d3908a63085824c9329a0983913006ba155b56a58eb3f9becab29c45',\n ],\n [\n '2d6122f2a702edd4da7385b1580796a71d13bd72be94cfb3fec01149c006c2d',\n '70eb282fae992efa6f5915e578b640653549f23385ef3a29ab29b1b9b8ad63b',\n ],\n [\n '752fec14beaadb5ddbba6b3a17fcb86579fa588ef407fad0ea07dbb22a640d3',\n '3feb6728eca21a1e84e8f9f23010387a53a96a1cb62d86fb37996150a1299ef',\n ],\n [\n '63f94a92f27acde8f5ed949b459506f51d70c85bcc61a34d647264ecc53c65e',\n '37e5dce0646ee66f4fdb93b82d54d83a054948fa7d7fa74ab6b36246fc7383e',\n ],\n [\n 'd6aa909287a2f05b9528690c741702c4c5f4d486c19a46c38215f52ef79c7b',\n '5ebe1128dd81093df4aca0df365d58adab848d1be1a94b95eeb649afd66a018',\n ],\n [\n '12866812b3053e2f7a9572bdaf5ef2b48c6fb62a0eed9ff0356df50e7d05557',\n '6785f7eb2cd1c120e4c7167b46861d10117040a2e9f2ca86a71e9d67df90613',\n ],\n [\n '46a730d05330b1b13673cb8a1b8f45460035e4a9f1a1751cfba099c4355c1c',\n '76fb0ec6cd16a8141cdcd875c8b2de9fce42d296072643d148ac7e7fa7472df',\n ],\n [\n '4bd4380a22900bd34835e0a908eacf4b6edb61eda0cf483f9212453b37e7516',\n '5e9551cd20d8d7ddbf4366880b7d5267385afa1966ff30da4baaf273b009d29',\n ],\n [\n '71f1994ad40baa2922424ae222663a64f93d8b67929e9a10f9e4c1ab19f3833',\n '85320fe68ec0d37cc19fdfd03589d66906ffa4046c80e1b094a85f27676346',\n ],\n [\n '5a63b1bf5232f28f808765c6be7ce1f81c52145b39f01c879fae0f4303bee61',\n '3bc5d6df68bb6d0577bf9ae2ae59ec0e9b2dc7dd56ea179fb38a41e853db950',\n ],\n [\n '161ded55ff1087032381e6c1449704f63ad2d88df82dfc44a71890fa09b3941',\n '78a52e0013842037274ea75daaf8eb4afc04ccc4b07bfaf3f5ee47d165e01b',\n ],\n [\n '1bfce5229c5fbff5c0f452a22317fcfcd9262f23df41840f84fe7d44cfba1a1',\n '66b387872c00e63c73006a955d42cf49c46c5708fc9d1579b9ae38341b24a3d',\n ],\n [\n '56d47dadc9cbd1dcb2ee3efcd5d4af5e6aea71df10815c68b54a14e81d11b44',\n '47e966ba54df48e9b612a903685e0060a67e4725402e8cb4cf654e54e813a3e',\n ],\n [\n '4b1c44438afd4ddf20a2cf612df2ee494ce84c7274c5529e857693e73018491',\n '430403bd31d8f0677e06abff7159384560f27b9622943fea1a3192f14bf40d4',\n ],\n [\n '7f7281728fc2214aa1dbf13176a4624b53814734abd570eb6ef7c7e32379606',\n '312da47be347fb3fa2c9089b38df372560dcace2effeeacab4d96ab11567295',\n ],\n [\n '16a28884a1be8183e0d3fc0db84a9afbf47126fd3be548c2a584aaafbfa7dfe',\n '7c3f57b3b895564ba562c1cd80b71fda6d2e611665c6ab87744f5390858fe24',\n ],\n [\n '323339f37b327a731232a9580e79952063c7c232bd1380146d8a83c285f4b8b',\n '4f16be1d983c7232f92cce6b9690695978d42cecc8eeb8c206e125d1098a265',\n ],\n [\n '624d26cbaa197e104eb83cebf2adeed09a5cdad359993fe5e3529d4d0def21d',\n '261b7da3cfb55c788977e0d8d640e3e93ae5a325d962ce85c816d7d32cfc430',\n ],\n [\n 'f24ecb7ee83a3e28dab54a330dc93d0429a7aea36412e922dce8fbff40d60d',\n 'b043e36a258d1df1d21b0cc7be9c4dcae1bd4ed326c110e668ac23d86805a6',\n ],\n [\n '686cea46b710bde1231483bfdbc700cfa3da6ecd5841c0e0c782f9ea24328ec',\n '7eb7407aa58edd6911c7c7e8d1e03bb52ead4a2415a0c33325872ff3a521dd6',\n ],\n [\n '3866ee1186264549df3dfcdf8705c0380c9372eef6d4081c2454d3aded1720e',\n '634c6d3e8eb8af652a4be73e3b613452c2213104ca875b66b4b15ee5b1716af',\n ],\n [\n '484c687cd2969a1d20a58cdfb9a60f280a473284503b1ecff5de514aaf8206b',\n '34d44d26b7427e51a646d1b924084762f5b461685450f21d6a472de565bebd8',\n ],\n [\n '203561333771fa0fe22c4033349f7b877d15b0542a5598e81e067968768247a',\n '2b6a533aff6e2163a36a2a89cb7415848bef48db40f952ffd380f47676707c2',\n ],\n [\n '2ffa6cca6233695760251206fc5e34c8d3692498589478cdd3d5b09f0b7c05d',\n '6c57d605478fa9626c4ed769554d075daa53e1a1d0bd4d94174d3bfeeb11ad6',\n ],\n [\n '5dccf0fa46a5571f204d0b033b45f299cbb3d9f80fded57253ea4f1c64faaef',\n '30a38e131ee8756ee5ea2a3e16618a5dbc28b5b9311308bf037ecc2039dfc7d',\n ],\n [\n '57b0a2eaebeafd950221facdd24790d7d1ab8883e5c5d55635f0d14a1ee4741',\n '7b41cc478fa6be38417271db8ed12efc0da6982552c1496025d2df0576bf4ad',\n ],\n [\n '611b5725101f611c387ccaa13889ecf3bb5595071a179ce350029bfca4ad7f1',\n '3129755977abc8995fec7eec1123a1561e429fde37ff36af002d3211831ecf4',\n ],\n [\n '1c06bbd0c52fdab9fcaf680c7a93fb821e538a2ed79f00f3c34d5afb9ea6b31',\n '3873d3bdfe0be0157bbc141198dc95497823cc222986d24c594b87bd48dc527',\n ],\n [\n '275cdbabc989c615130d36dabfa55ca9d539ed5f67c187444b0a9a12e5b7234',\n '2b7f723e68e579e551115d56f0ae71a3b787b843cc04a35b9f11084b006521',\n ],\n [\n '6cc702eb20f8b5940c7da71f8b1801f55c8c2d8e2e4a3c6c983f00bc1ffdd95',\n '5d15b3727bc66f3aba6d589acdd139fae115232eb845abe61fbdfc51341352e',\n ],\n [\n '44defb418700cee8c9bd696b872adb005490512d8bba081f8f99a9f15cc981c',\n '3b2072cdb1d919b2b65b5cb3557f0a3381d7ca293c267ca4a38f83e77bcc96e',\n ],\n [\n 'fd83ce77b1578b3a9b8c3cbeaddb1504d2fd4a19c901c21ac65961224e4966',\n '110cbe64fc10c6b9c66f15ca406a35f50b723b35d83c5eb9797a57f8395f4f9',\n ],\n [\n '9dc6ff90e341875e113bbfb507724dc7095a280d2f32cb6ba61a1e0c2d2aef',\n '4aeb622896c852c2747454e8f172c9482955a42ecbe522d6ce07ecde79d0a51',\n ],\n [\n '71c58b0e47b9dd9107ebd8a8c8fa9f0534e78231bac612c1ddc7a94edf33eb7',\n '7f90edaf4792bf8334adbaa0f4ee7c654312725af188682d75f34874c4eccb9',\n ],\n [\n '1f6de1f14988778ceb2dfe844f92394f1f1e72fd1581ceb3bf336c95ce50345',\n '4f6007ed4e022d2ee9fe4ca8207c5f6c766c4f3b85260e941fb24ad0dcbf0bc',\n ],\n [\n '3ddc3ac25ede4a67a97547ed27dc920239b585fb3624177e2e8d59eba678115',\n 'a9afd8f8bb759cbd1dff2addc63f47da4ba1291ea34229c09c0637dc5c8d24',\n ],\n [\n 'c56b0269d8431556e471cab9d70edda3a37b391696f107b2dc370631de51d',\n '729c52f6b134f733eb750c14bd9f95c077f0f6f6ff4005701e5bedc6544599d',\n ],\n [\n '44d32ce19ac6807cb22e4f25fe1486a36a13926f147fbfa054b63ff0446177d',\n '212a21e8c124c9cd37c80d2dd66913ceaa6b6f666522f115c39382b2d5925e8',\n ],\n [\n '35dfc16f3ae6ccc06a267bf6d931601e52f3e45359ffc513570b65b96adc4f',\n '74311d10f4bece01b5ae65a6affe5c931463aa1b73a3320eeb41bbb7bb1ff62',\n ],\n [\n 'e0acd9d2d907031b319b80121dc90699d003d220ea785d50e5033cdb3b1a03',\n '3911ba78d6e507485d6374b0f7d2e6198f6462a7d6d3cf046404a07af690357',\n ],\n [\n '3c57918ca254c0cb7dac251ef4e10c7d82327969552eae15d26c4c52660922a',\n '5fd5f5ff3f14e671548074114c72c48409df8a2e71fc8aa3c8acb506e2a88df',\n ],\n [\n '222ad8b61e219ba2b581f606b7c996516850a46a3db72fe1f72b5a9be6c324c',\n '72015a5e2db648112abd284fd867b59fc5606645177d26cf6e9a655c9912d42',\n ],\n [\n '3c86d5d774bc614469768ad38f7be9a53e9a233942c5c553b82e49aae684764',\n '480febea8229e130dedffff89c11f3c43e11724e6bd89d5566d78752859d41c',\n ],\n [\n 'adb73bb8352d0c10175df371f7868ef2c9e0c79ac788430c480c0f7d85c187',\n '60b564785248111502e6f39c4994d6293fac22bc25f4d764b2fb1957d3c9bd8',\n ],\n [\n '3836ab8b46cf4f453a22532c886940b982029b29c42adca90ded5bf77e6bcb9',\n '7b15e91d6355f147b171a90b064a9d8b2d7bf3699bbf4987664c61c950d8996',\n ],\n [\n '12ed96af1a97c45ec31f1531e96f6fb28a03ba52ab8484545fbe0dddc97bb32',\n '6d1f522b6c6cad0940cff8e23decc72bb8d4164696af031415508b025aa8be1',\n ],\n [\n '27382994ae5878223ef802e9b4882f481a1b4008f1eec8484483471f7aa742b',\n 'c31750d242b3975b0026a0e86ccdd17d0f680a8c6f53f197fc25eb1f777917',\n ],\n [\n '431677eba3715455bc235557518a74f3b111a88844ef13e159ad44bc16de3e6',\n '30000e1eb6a17d9df776981e65c6e500fded1ac12003adc9446b269812c9197',\n ],\n [\n '4b563e6f42589671579eabfa2cda5502b361c46a5ac8d45c8ed44741a925b33',\n '627bdb41678443fdd1aa607709e9699b652308615f4bea760a3b79ee0d9ab5c',\n ],\n [\n '2932fd3f81fc973ca9def6b7f1bb50f980fe589187cfe9e9f52ba4d356cf2c8',\n '1e6bfd00fa976c4770263a227048214c38850fe0f059e7b3d2c7871ef07d68f',\n ],\n [\n 'e44e4f3d96d9dec775b996be57e57fdc28e7c68023109b221c414a244a0dbc',\n '58b1e52fa274812e5184e00e9ad812bec2463140adfb4bea3b2d665867dcc9',\n ],\n [\n '7fcb89be1f4bec745887bb891e53fefd665c53d00a9e74de16b8a7e1f7adfb5',\n '74af0b06633f779897e199609c71cc5649bbb65bc2c0abd4c678f0480c198d1',\n ],\n [\n '62a381ffb904ea3ff4d451d4c8459457cdbc3dc2fd2da646a95d8c1e90c0b7b',\n '1ba058658e09db9e319fa73de8ab4a992b71e4efc22c273725bdcab84e2a315',\n ],\n [\n '1b0fbb7a84c67e668450a54449c7a46261a2d355589f8b84ebfbaf9a77ee938',\n '44f8fffa33dd33a6146c35d196595e22cc4a215f61ee9197cd751400970a1b',\n ],\n [\n '78fe920bd96a356d4d95ee34adafe8fecf071d3107c36f047b4024ddc4b3eea',\n '6162f29607fdbec10181fbac6e57d5cb41b922c5791fb24bd28bcdd75d16c41',\n ],\n [\n '5629b849e026e65d119ac11821d7ab7efd9c52226f75c7427505d6818bb0c8d',\n '1539c0f90970ee8b490e45bbe5568170e5708521a0e59f976be680595906feb',\n ],\n [\n '62bc853f349bac8c6e5921d27ba85dbd9ba20a375d70a7bc008928f3e123b04',\n '6acfeb1de05ba43c3ef1a9110a983a320e77b3ca294abbc04aeca19b194f26f',\n ],\n [\n '4cf4bed663464418285cbae359b5d84ec76b5997d24f3640984c7663421190f',\n '941f818e3e3e8fb1568da85217d17f9250ebc948379014d900a7b1a848494',\n ],\n [\n '52ff3d9ffe9a302f6dfaaf74bab57c08027d5cb699a69b30830540c0a2d47a1',\n '987dd8876873778d933fbfed37aab2f7d6f669c37024f926b1edcb2ca55782',\n ],\n [\n '1109ee32f0bc53de6bfa457060b366e909d7c18061ec9845f46ac715496897f',\n '38f36f172bdfd454b9285f86e6bdece8fdffc95182c7d801b03c671cc55139b',\n ],\n [\n '4b4482f1d84efe23dadf3bb10df3dcaa251312dcdd604f616f1eb540e1f3232',\n '7c9c149dcae9135f940fb54482f9c3cd8193721643a6e23157b8020410d439c',\n ],\n [\n '69cb459b9e415b7581ca163611c470d875971d5d7949de732d1f0f200544a73',\n 'a7136fa9dd00c0469863b7def3f83a5611ed628810d7e807e7a873da5a9897',\n ],\n [\n 'b66a4e32ac9a4baa8f64780acd94ed3628b2b0ea874ba4dece629af65f9e62',\n '24328ba9996a24389658e3467b8b90dc3927ef8419fe28b3f55b1c1aaa51915',\n ],\n [\n '5ecc3080062dd451236de0e4eb91c5c75100733364bc5469f5fa76f79021ecb',\n '6da4abb9031a27b5be94529324fad8026e7d871570780081b0f424d4fe543c9',\n ],\n [\n '1e3146f00880bb22486d5bc73e54367d54251f4002bcf342d0393b05a4b9ce0',\n '23b6fb8e945d3205f633ba724202db5a99305f807137edf942cd60eef867699',\n ],\n [\n '2e1da8013285598b899f026c6974185db12c97b4c63509769d3d4ad1d18a4e5',\n '1e7e7b668674d1593c39d58bc7bccbf568208732b3519bc2cdf93db34366862',\n ],\n [\n 'd26c3f389d81709506f184b53871497c8d36c5c9eee8e3737358204c1acba3',\n '34649c3d39f3b825947fedbca215ae30c5a5995e93b1c8efca4944cf85a082a',\n ],\n [\n '91300478a83595d548f32f259033291fc7d083953b0b8bde88c7559660c563',\n 'e5d2bff57fc6551e9b80c06ac7314a71907cdcc66ce82f2cce721a670df10a',\n ],\n [\n '1f7abcb9d462c63ffe92aa56619ae8590089cca4d93ee3e5f34a63882452cc7',\n '7e9f85c7b7ca6e9a4f3a026d1048adbeef69ea9d876c6f647c257b879a81bdd',\n ],\n [\n '4d2caa1323012e4c83b0ad387308b8aef5637bc35ddd882e7f5e41cf2ca410f',\n '47150e808c81a540b6f8864e9d6636589cacaa516f82caaa96506edfbd6f0e',\n ],\n [\n '3c10a6083c38351deb3e6d1b386827d0acf48979b66b95249eb8700ec26b069',\n '47e34bfe561d903cffdd1d849b85aa3cbd31cb4a9bbd8cc2e5fd2f95016cabc',\n ],\n [\n '758bd54868eec045d0b4d3d2bc415d24bce13fee47cefdfda46425c109b657',\n '3392a7c66ea3bd7b044680bbe9f78ae86752097404c067e9d2572f55330df83',\n ],\n [\n '19e718e0ca1d2d6fadbc6006ee7dda7a385430e29f5e239cdd4bb7c3fdcb2f8',\n '5c68249b7fe03ea2e13481a63b6cd4bf74ce42009a89fee0b3f8f968b3ec709',\n ],\n [\n '28077f57ea62401806367e6d54fe45d02de5b072db787ffdcc3854e12a3e855',\n '14f3762689072f5fb41d03e94b01808c739f6d42b7b785b0e464100b150efd2',\n ],\n [\n '3b8a8cefd017363ce867265af3293cec081fa589fe561830f0078778cbd338f',\n '69ccf2383cb7b4f9c806d72535812483e7c5e9a1a5928529d64ca7e085e758d',\n ],\n [\n '77878f388d22161a2953e5aca6bac1ea480e102f329574b4b201640d44a296b',\n '7eb35706a90a03aff7c2fecca72659136547cee98038746db5aba16fd7178df',\n ],\n [\n '97332e6da70961f2ef31b7b628f1018d21db8db015922a301fca7d6fc6a8e6',\n '2e37b06f639fc7a82601b744570a2619e543cbfaf60e474107fcaf4686d3223',\n ],\n [\n 'a81518d452d3aac48bf0386c3ff170ef4e684a4def242c964e129c64f4d647',\n '37506e44c85908ec7b7adda9547fbdcc2e3605151fefa77fbf127ce3bc938f2',\n ],\n [\n 'e80336b2220b1d666074f6b0dac85353d0e4c2e8bd0f37055a2236a6a9fadc',\n '1cae76d73eda7a5964c5d9d3ad6748aff51f5543c56441d2fdb7b444a39846a',\n ],\n [\n '2c01fd8430ecb44e066f352c4f697fc9fda177dbe162f82862d7b9ea8c918de',\n '6e1dfa99640fdf5b30603d34c7c97c1aa6e6b7f3a2c52a21fc64b0fcac7d591',\n ],\n [\n '744e37b511cd0ddcfe15f3581947014c159de81ed055d15a13c7a2d1fa39f0f',\n '685caa8ff6979a6c63640ac638a3f9c75737f2031bd55322a47384357af164d',\n ],\n [\n '40e627ff84e1a7a9068b4368770f5956128a4d9e9e33e9cf5e24d9a242149fd',\n '2465bd6cb20bbdf810e2bc5c3c458cecf4f3aa163a7ac99c2579e5f33417f2e',\n ],\n [\n '5f635af7f554a17bceb6ccb6e637abf89ab6dadd399189b0a0390e87b1896bc',\n '2aa6238a69f89665646c0e3ca2ba5f709cc6e14351cf71e1b00ec45201417a2',\n ],\n [\n '5edad3063c9fa8305978d7e6a4e037c9fa519b8023c7608dfc3b66e5c1e8985',\n '49f405d07d7d01919da51159ecdad1031a5ac208c026fdfc14d38f633d92183',\n ],\n [\n '2fdf2e8a45858c12926a1f25a62255fb2d02d0149a15ef669f859806683e649',\n '61cfb686bb31e2524470d4ad2ae09e3cc91b16305a21d748098feb1d8ce3b3d',\n ],\n [\n 'ecdbd7c37f1dffa3943977278da3bb429afdf948b4ea6cdebace3d3be82381',\n '190b67fb34f7f3ad6afd3d6b6427aa327547d8ac0fb4deeb0feeba1f63d6c60',\n ],\n [\n '233021b483f578dfa5222f8cccba5766ceee0ac65f6d4a3b1673b302a21fb3c',\n '7d4b6d44d175d4b593f06f5a6dcba2cdbc4eaa2097abaf613123546866cf4ef',\n ],\n [\n '42db4e953c2a7a743de9fe20c5798f2247f51db4eabc6f40e86c13909a310ce',\n '12c1a0764a0b9f3666e431923ce15e7fcd0ded5ab153f0b48d362cca1604e65',\n ],\n [\n '30d539e2b545fb957e40e2255f6463b52d227c9808472cee6a3d521aa283a44',\n '5f9eccf747fe6313570f99e845db32b40070acee9ce9e34da7f3c29ca53a07a',\n ],\n [\n '4bd64e5ade3e2733580a6116b4af328751198e7128f9acfe3a3496b545efb5a',\n '4d584768900dabfc0dbaa086632b8051bb3905ef79b84d96c01514441d0cc93',\n ],\n [\n '62d6e771f02e591557197d13c3e77dfa2d1794ac1808407bd8227c4be31b466',\n '5c6f5607c1808e899ba36a425911fa8566b7ea9cc80de8a80538c0fceb837c0',\n ],\n [\n '5ce406218cb2852b1d2fe1836b19462f664631785216e87ffbce26030e2101f',\n '5225f107743c255ab50e7be4a090fe39478d1ef4ff558468559d8cfa87bb94',\n ],\n [\n '670286486e8dda3dc66b0ed3149be7697d3e06c8279844079daa7e42d5af728',\n '26becabe7430380c56e320f5ae3329569cae7b0af06fd5327ee23979d200eb0',\n ],\n [\n '3ef448df33a4394c43e93e5850cd0c5a6dcb18ae1cd865d00fe8ede9336a9f5',\n '56711f6ab7e0e4f7365ac34e284ac2879f40208c46f6febcc1dcf7146ecf015',\n ],\n [\n '4b63fc130288e92f2d6ba238caa7a6364804e29829ac037c57df32fbf762bc3',\n '1eb8c80af55278b4113286c038fff2bfad2da62763bb03426506b869139da0e',\n ],\n [\n '4e7e998557b29a95f805a6e2e26efc1e970108272d4755738c04f28572295c0',\n '97cfcc2f447bde61bde71049d8200a74a3028b21703bc139143d81a3623f09',\n ],\n [\n '574b67898f02964c408f68e9470e7b615be037e40b824e6617f89cb56c21219',\n '49392d5f8e6740a1b0b7444f56d7a17363f8656c6e4c628678c86223f2e46c8',\n ],\n [\n '7e8cb50ea5d5c1b09e219e7305bcb601d99b6d7185b1c388aa8e36fe1e56554',\n '47fefa308645455c12ccb5817da338f0c4f423b341aff4a9d158891a4fd69ba',\n ],\n [\n '67266dea9e71b4ed2bf24a597a823dd048cf31e725db511edceac72998c9ef6',\n '39babd65850befde1f7c28e41dbdbb4caf82bbcf3bcb5b33161f1c2960b2d8',\n ],\n [\n '63e99c2cb9c74eb9227d48065e27abb8f606df8fc83b2c44e4ea38b046bad2b',\n '60494a53dd13ecf34e08079d343c88fb655d6d810785af81f08d5aa9bcdcf9',\n ],\n [\n '3cf0600b0f5a2a4eb78c487cd385350e8c7848e3f6983231881d7f1bbe28543',\n '56dee4288528de609976ef6b903b652127c37b0590e91a2fdbebc3f11df2628',\n ],\n [\n '758f09245fa4b8b23d290ee2b3bfcede199b4fdb11f3cf2502a8ceedd61b129',\n '622d9baadfde781e985d9722e0a04715666769a4cc7a9bea0b96d6386be1746',\n ],\n [\n '38e1a45b81492aa95d7abea2b08b8c14dc0b8a41108b036871fb737910ae18c',\n '145c611262656385e5ed6243568cd3f9f59dbfed7a01ba11e22bb8bb272e08e',\n ],\n [\n '206e54ca53a2f155bd4fc45bf2edb77798ae6623defd4cf22f2dd4a7d119dad',\n '6c94e7f0825ad81680e4cdbcaaaf4df806d57a0d1fb2331926c3fe2b79d22e8',\n ],\n [\n '56e98d2862893caebf66180e84badf19ffc8b53041eaaa313ae7286a8fac3d',\n '526306f9c01afd6e0c1198ea5de17630f5a39c4ecd02d8e6f0d613c355995c6',\n ],\n [\n '4fa56f376c83db33f9dab2656558f3399099ec1de5e3018b7a6932dba8aa378',\n '3fa0984c931c9e38113e0c0e47e4401562761f92a7a23b45168f4e80ff5b54d',\n ],\n [\n '450cfaadfecdb8a2fbd4b95c44cb1db723ee5ac9677c9c188b3d7c8eff4ca58',\n '1a552bdfc0c81be734f1f6ca9a6dd3ab4daa61c11fb53ebb7046eee25d617c7',\n ],\n [\n '6fe20e5c8a8004e33eafc84d16ef770f2f0b7bace19adaaa150f987d295a34d',\n '28a35040a2ebe9a14a162d3208d5eabc6e2f3a8310f926bd80be65aa71775e2',\n ],\n [\n '1bd65f45a35bf62ae8f9ffcbd7de2976b90518b6820c219f039c50043bb1edf',\n 'fb5f0f8659f9b6ed7cb0ddd7999506d0c20b26bbe69d1915a31842cfac41eb',\n ],\n [\n '4ba4cc166be8dec764910f75b45f74b40c690c74709e90f3aa372f0bd2d6997',\n '40301cf5c1751f4b971e46c4ede85fcac5c59a5ce5ae7c48151f27b24b219c',\n ],\n [\n '21cfbc678f5a279ebb6ed124273c8df37eaf12a2d04180403ae6b5ec0b1e1ef',\n '4478ed6a346d899ad7b0b10350270aad39ddd5b68529297e4c91a54357f0a7f',\n ],\n [\n '350bfefbe3d864eaadac9cc1195c14159bb736be743aed7380d2384cadd2046',\n '5e2a4b3ad0e1d7b9b8ef72b10d68a80e5ee691d7db591fcfbaad6240d41da8b',\n ],\n [\n '529acd569127f73c8d34345f87e96cebfb48ee12a00a3861cda209337ed94e6',\n '3120671a89b705e5bfd99b0e7fd2118b4914a3ac309b3d74527cacb5ad7491',\n ],\n [\n '55d3d7956a97d10e65a4d8ffeba40deaf0db0b57f8e022cdb3df6df613f5c6d',\n '159e59a6f92f48fcf85aa96c1a03749a4c4e2cf9e2bc94dd36796daebd9b8b9',\n ],\n [\n '405f019ee8f2e972a005c549b0884b5051f63d1e78480b73208dc07d8c65a1f',\n '4301a3d0c285ad309ff24a12c100ead7f48ba1368143712f32ac141ab4d9e8d',\n ],\n [\n '376d59b298d982f02dccad0edd5bbd4e5e8fad7898750675ed0856850a7babe',\n '5233b12bbc50564eb61cc098a17d3d97f06ec7a230380e4c5d3b725cc318eba',\n ],\n [\n '2f55624af6109ef04b2ed035a44a904ace8627f55889f011f768aabf4de9a38',\n '7f64209ce7dfb63337ccf3d8c14f4093295f86996cabfee23b1655549aca089',\n ],\n [\n '3b8965e942bed2714bc2e685fb103496e1e3595ac6a343d6df45fb5ef6979ed',\n '5b7cac7a165cb69ae103dd9052fb39c00ed0aad47989005aee53972d82d45b5',\n ],\n [\n '7abfe3accdec1eae1a50049efdd9a8eb7c2921a08e8bf1fe606e9d5a4039ec4',\n '3af178e7e831f8148244d2d2b284a32991852db6212ad0a9d77540ef648a5fe',\n ],\n [\n '4983196df6ad7d6f0a8d76f86af3863ad8611374a03fc0fd00793181dbde9d',\n '204c1f91b70f975a21d24a8face664e496f00f602daaafa69a3b56098a4cf89',\n ],\n [\n '79e2b91c1531a3b16dbd53e72d94e16bf265cbec261658151acfaea3718ea72',\n '3d9bdb47e8b148c1c5e9e694ffbc2cf71aac74ae1a85e8d8c3f77e580f962eb',\n ],\n [\n '297efceec61b3be17565843cae465c52524b4ecd9331a4170f54f7de8c4556c',\n '6ccef1733624cc8b973ac63dd54e7a53604929affe81c3439525ae5ed6af993',\n ],\n [\n '44f04b1966264a23ccdc870c8563ad2efcd4c8087b5469b90e792287a5581c7',\n '1c417f0e9829fa3d3cbb7c3cf4dc7aac04c5bf66ff3f86b833a42c533aed1fc',\n ],\n [\n '6ff83f5d8b51db3be0bda80eed2e2adb7037f2f58f705e88f0f98197431ac26',\n '64f59b8428894c2b7afd740866065ded42e716c7d48accd3f117f22768ed9fd',\n ],\n [\n '14aa8187c9559f77cd1cf96b2dfc949182529936f2b0b4050ea56e134073b24',\n '5f36508c68b1dc586f3fd3f4e2bd29c6d8258491b8a6aa19ede811ce0d3d0a1',\n ],\n [\n '95e8882a68c5000d1c2be7c0b43e7f2a6f8de906485241f0285a5c73a27a83',\n '1e4cb67207ab73bc1e5d19fa2146fde6d03021393b77a55df4ddda1fd28f5b1',\n ],\n [\n '2ae0704dacb3da47d564514b4c3543505b403ba09a248c6e74593cba1867ff5',\n '5a4b5818088dc9ef4066b90a8893ae80fc89584f987ec1928ef9d72cea2bd67',\n ],\n [\n '61a10898a76fb99989e51c0e823cb60b95ec7ccccb917c42b2b28014f5fd94d',\n '23d8ec1de45366d3b86c64c2da05a2ce3d171adf52ca5522e652ffd0eeee795',\n ],\n [\n '79884133c879cf07734976fd64de220c5a972e04c2a3afb74c362d6c3beecbf',\n '2aaa0e6d4891b792b5643fdf09873343cd0e3fbba3cbd0601b481a4083f32b6',\n ],\n [\n '45f73d2fa82be6c5ccd0f62d2237efe8727c479967d27cce28e42b9a44bad5b',\n '2fa4932215f72d56d8be5205c5851c9b3e5f2a14468e4a7acace5437c6b27dd',\n ],\n [\n '37f53f771850f52f9c8f87b53c6bf0c93c2bed76f5fd1d5697356d0b2325007',\n '50f1a052b79b446fbc7b93ffa1a4515f6c3be3a76a2b0bc5eb8ff327549960c',\n ],\n [\n '71bd6d23e0d2f312d47582efa609101f15b9ccc571fca8ac4fe3457c67fbc9b',\n '3b3fdf86bd4c7fc26d60540a6439b4d179dcbf7b91efb0ddc60dfbff9a148c6',\n ],\n [\n '78219ba049438385b829c13a4993874a4a326c4143de0dd581c7b9956f99b06',\n '5505f1268dcdd4ee01b77abac3bfdcbf3f0513ab097c69ff777b4a631aaf256',\n ],\n [\n 'b81e924a86536dcf68bc5a2ca2065a61103ba6c9eb0ae4cf8cce9dbe286f15',\n '653a6dfb51acfe8a844fb8362795e5549d424aed88d3a090366a44f840b5b83',\n ],\n [\n '441c0d7b7aa705046dc0e07ba5f33a7d9df23f694a05192ff8c2d7be2aa3fdc',\n '4c06568c0902bb99d428bfa0a946ed0f0ca0a51fbf07cad88e06e9c78e38a59',\n ],\n [\n '2569c8c78b6d6b92533f29f767c95720d377fa63ad5a3b9827ee0a74b0488aa',\n '4b59c81d3cfe08834f946d9d57614f5366e0bcd9349475aaaebe01341196fe0',\n ],\n [\n '3f2fa285a0471647b214eac652bbad9d58a9f2dd2e812aff0210d0d8a6eb32f',\n '4cdb18e1c2848c2b52c1a6557165bd1a8f55c2f7562f5cc0b326f73c25b696c',\n ],\n [\n '5bb5141ab4fcc5290ae9151b8045a2cd8391547ce7b3b33cbbb10f8fb538092',\n '5a36bfd52acc6a83a9913b937ec086cc27fed030b5fa70dbc5d3c12c9515f56',\n ],\n [\n '3f3fed272edf91aa7f8ca5d70005d390fbc67830ffc69c5fa3ae17582d2771',\n '459057e0883c44d8776fa217405f443e5954f08c4a5db68e437becaa664a999',\n ],\n [\n '5237ca6656237a717a739a4509f70db1b9dedbb6cd232f60c9bd8c4563a6b1f',\n '56c7799dd02896dbe7d69dd8bb9718270549592099569d107b7b49c34bf5a49',\n ],\n [\n '1cf6b8499ac881e0b2fc7def9bc1a28937033b2fc52de99e75909a620c7a281',\n '5769cf4f735366fa386b6858043dc99a100f86fbc77b16d57d77766197ba27a',\n ],\n [\n '1b74b8a6b86dbf9638cdb0601e1a332b8d880753423d38c3394902c57f15e40',\n '6bb2dc10d2ecbb913219d0ebdc8d3337d644ed8b6c4e70637ef4c7e50887488',\n ],\n [\n '61e4da415661bba52a4737e2bcde1a837787c4796b2e1854778534f1582c29b',\n '27c43e632cb7652e8508c9c38e3b4ad0d3dd6ba748d42dc84ec2685e64b9aad',\n ],\n [\n '7c460a204d23f20ce86596dae6ac9b36734e4a9f7c5b43262c97a36c6a41c6e',\n '481a11f9300ab4c4bf6924c5ca884728cc361247377065920966785d043fbbf',\n ],\n [\n '124ff5e55e4effa40daa5b9618d75c49c8b6fad95cbe8c0bfdd83cb9bed8316',\n '33a2ea15d0f71f58a00de71acd7f22ccf9002115e49dd1f7631faa0d32f9987',\n ],\n [\n '61c9f8fc86715e95ff43583a865c5a6515f93381839d557ef884a68637eaf4c',\n '5877daaa42bbab9083b571e12648a9d62ced4470d71653092b6546f4a5acceb',\n ],\n [\n '70a6b9a9e5d1fcc07dd9ebef6d8f5fcf04c6cb34932d0fe2335330ac6dc8d3d',\n '3f0cbd332ac56922e886656bee74f6e9bb4bb88f7af7bba9098678af1f38fc',\n ],\n [\n '41db8a0f1ea78443a39e08a54323743c8897eed1ddc28f41aec6f2655040d9f',\n '7d4bf32f8f4719c2e4af8b7889f3b65cfdd033dc2f971798a12170f2b26efce',\n ],\n [\n '62f035e01acdfe841104942d6c8c07f0fbd618cb85998ea24bcc24cfac1f8',\n '1caa886104b7d753fda93645a746989794cd825c62473b526ea34b3d51b5771',\n ],\n [\n '441c6f016d270e86c19843727b83b864cec060cafc813b23d7e41e5abb1a60a',\n '29fece4e40400f3acae0586f4fc8ed535e805e472123ec38d662d8a0b01c086',\n ],\n [\n '2c791ba0fb0b66177815c98191fa6188dba9c795e34a7c3c8a19086215e3cee',\n '11123151389d4b330db6a665a560407e7cd8c3807c749e2b0cffd9c3074ba77',\n ],\n [\n '5292da4ca71ae75ed0554c267747e39c7a129b3b863e1af3ebb3e368439c4ea',\n '63af6a5016deea8cc674c44f16c63c1db31f09af4fb4d2ea7917c28116661fc',\n ],\n [\n '3367388d5d1b7758dc3d92e244f227bb8a54e3d9909e7b7dd62ab5965e3efc7',\n '7ffb4833071e4b03ea755ccb9938487a478248fe9b1158a08f1ac298801c092',\n ],\n [\n '95c863314b7f18090f8eee602403be823a367a1b416d54c32e5f914e67d922',\n '159c2824f899171deee23e0ed520d4825bd667983df0a8d45d3a1f7156d91f9',\n ],\n [\n '621c6e08b3c57404644ad49ac7629832c141273fa1f323781b3395393fe985c',\n '65d1eb0140652958c4371ebec791e03317d6b2e689d90e304666f1b610783dd',\n ],\n [\n '54313129bf13993952cd2b31ed06013aba85e74c1b8a00e062031f32188a84e',\n '680129efc9eb8ec07fc180e8f6877e5f0f9f44e3000a2c586ed4ce49d12a313',\n ],\n [\n '21ea57a1c8286bb45872e78617853c47b89091670ba51c124afa3362e7260d',\n '7087e5c1536df233ec9bfe2f983e8d7622892b9bf64c450c9823898e2cc2fc8',\n ],\n [\n '3793b05b99e7a57d88db4ed0dbc3b771285abcd9052da50f88595354409f3f3',\n '12164105041c056f127e737c7cd63981e05f246bd2b6b65d1f427019c7c3801',\n ],\n [\n 'befd345cef5fcae22ac37dacd6b9128cc58cbba3e3fd774e11b421c2ba392',\n '6209d25f24f88f7876ca604db23d05f78e6b3b67fb033f2f1bee221f352b8c8',\n ],\n [\n '15fa536045fda4c65ff74f10b4e669ce88b9996c6772288289d3ad725987fa6',\n '30e0c2124a35e265e931ccc66ce5ac3697d982814beb407144ff6762cb691df',\n ],\n [\n '38b795bd77ac573576dc204857a488cac2cce19809882631ca2069598c577c8',\n '786ba555d55ebef688b068bb9186a34a08cb00bdfef51619bbf911890ae9a13',\n ],\n [\n '6c66853592196c3eb8d9526dc155205e2c64097adf8684bb0e15eb460ce1c72',\n '1bb4ebf654f4250c8dd1061a4e1b464b31a8a9999ac9960446ef8108a66871a',\n ],\n [\n '5b08dfbc87ad9c00b88e78816973ad2f9c10c70f2156908892cc7b7a2a1fd30',\n '1151f407a77e2556073173d8f5c9ff561d8a23742121ca15f7d0ac391af50ea',\n ],\n [\n '309190eba106aa6ead54b5ca5817969aa68b4b4c627700799a49fc6bdd32ba1',\n '505b6a2bc7b0d78ca6ce2abe7dfb7312369918a4599cccf8a615f6701cfd851',\n ],\n [\n '89cc205966af08acc8910d563af7443d5dfbb5d88dae79c013c678c65dcecc',\n '1f8cf955694b246a423ac725791231257b88936e00347ecaa1e17045c0ab540',\n ],\n [\n '480086b61a80c36cf1e1a350baf554e58ee8d9333186b70c9c512fb9e9d5a84',\n '511edfe58f8d36a6170df743731da1ff525cfd5108be20e30ac4183d1281570',\n ],\n [\n '3caf14fb1d2e90a13ad4eb091250fe37133aabf6029633e905e5a93ead41dbb',\n '49122aff6059dfda19e4b973aba5ebe3804c91728936c6381c1ed1ea9380920',\n ],\n [\n '66d1b8fb2cabc46cd79741ce1cb7326077ad8ea3227a6427244bdd3806bdadd',\n '4a52eb74f4d5371ba3265dffd61c844f9e68d4ff0b44dc4936182f9280bb66b',\n ],\n [\n '373330c5afd53c31257fcc9050fef873e15ea9f81d9810f30744309b04e02b3',\n '5889806607b3dc97a9c5b0c8a2f16d1792099a22866b879ca480cb89a11ef5c',\n ],\n [\n '26840d0ec69a22c6818ff64b8b14633b531508c866e21d1dc9239778ae9e8c7',\n '157971f9a6e3a24d3b307be0e7c8cd352e2eb5cad33cf276270c0f309ee63fc',\n ],\n [\n 'ebb84848f1c38c19a754d1b5d9460e39624dadbb30800987c9419c0f933b9f',\n '517b297cf32f4064e6d6c8e761ba8db89809604a701c7b3aa1a9c6beb370ea7',\n ],\n [\n '25780380bc0795ed0dca727c55240f1d63593e552d224adb40df2d3721c0f66',\n '10215fb5a893e0275e9f1f66b217dde35addee91ed0e8f7d79531a2ff57b8c8',\n ],\n [\n '243e1581cd1abfbf18c31c19a4c3d1cedfe69a40bb57b607c9af2717eefc742',\n '1296c27929f14535718c3a4ebe045f00afdc60afc74c7d398d8ce1b6609dc0f',\n ],\n [\n '48babb8649e054bc8e0b902c89e6940c265f48464520649502ef1064eb94562',\n '3235be7852b0526d1a16f6969ec0e5b0e09cedaadc65863dea4e47f4f398264',\n ],\n [\n '592db7c27e63489ef4bcef2eafce89f40067cd9a1ba48bc3dc76b5fc62ad9ca',\n '48b7711b570cd9ac65910e75e752f4b751fdbfb4091a28f59b8c046d3d9f8bc',\n ],\n [\n '31d133456222586ae42a9ec7ce8539ee04afbe0b2ed00a2564dab0798d9b55d',\n 'a77c52fa1fd718db5c83e7fda6d7d4d9aafef9ad95cad621470f2b753729e5',\n ],\n [\n '4651668379883521e7983aafcb93811b4a72ef2975b3277773746708ef3e3fc',\n '512507f3f544d80ba5d47f73b571881e8d70d7b1d305b9704bdad036b7abc47',\n ],\n [\n '26069e359b2e847affaef604f772f36224608b7642245d0e643889ed231bddc',\n '75ae1ec379f074ebc91270077c74b4d34347ce183b676b4dbe100bfff143b9e',\n ],\n [\n '3196d01d1fa11dc3803b4813c4bbc6326869f61410f2bd14bc0f570d875aebe',\n '20313217cac79875bd2a503db1e86d1e5559911667a02524759344468d9561d',\n ],\n [\n '483256607f75f06fb126addc60cadddd602154cc4782bcc08351a48745d0b97',\n '2950a7e500ebbe9775f08be37cc2e62ccf9030de18948d1bab07a4a9173f75d',\n ],\n [\n '65f07b6050a2fc6eebe2c29ffa62f764060f7f9d3c82d2cb5e4e368aaa442c9',\n '562c9654b646cb84a213b41de203c871b3eae0a05c9c105a66a53c319c06373',\n ],\n [\n '284870f6181c43f3b01d94baa9c5b6ada0deb861145523ad9169580eb7bed35',\n '5e03e6c40c1cfa3cafb01fd0622349871832a9d35499d06408a83edc1b76d02',\n ],\n [\n '32229810a52137f0e6c3d37595c46f6132822d4b05f42674b48d7a7ac3ad85',\n '7babde959a0cf2c53ee59fc52c77c3adf899453f077f441965629f9aead30cd',\n ],\n [\n '1ea8b98a6b85e74e0a2fbc18b206e290f3ed94ce99ca665e8e2351dfade990a',\n '478e93c4724115fb1648c8d5347422adbc1a0bbf962b2312e14aec80e1be742',\n ],\n [\n '270cbaa08c79140c85b864475a0bf569cc03ac785e57f543dc444f37ce746cf',\n '3a9b8d894016680ae9d1bf3deb931d8987d4d8d8bfed45b81ccc595ec79046b',\n ],\n [\n '6943922708b8ae5b40dd7031ef2e487abc4ac39a3591368285e83d6c9c51f4d',\n '5f157c37d09634e8cbfbef90ea50af59815d011e419a691c67ca3402b5efc33',\n ],\n [\n '48ac6a80979fab4912cf0cb557d917a0bd68825d8658ec100496eaae6ff62e1',\n '2b6931350ab183402e39476340eb1177b7006f7a552915581e29a79bd7203a0',\n ],\n [\n 'e3adf9517d92ef22d1e2a787740a292ba32d5ca69faa9e8675f63ed816dce5',\n '36bccf69bb12dadd610145a3399213248d193660d8dc90a2e206f23bf2c7997',\n ],\n [\n '5e6c8ae5afb2fa470f767581f3d578cf6a49547e4b78665edfd45776948bef8',\n '6cbfc11953dd7e195d2ce74e52a60df524767b44c4608bdd755be4bc85eb74c',\n ],\n [\n '15a576a1242d39300f0db3ad770983825988da0457718ecd596c63a0a0eb4a6',\n '69a42e5f6f5a63349b57683a4609bba90f556a1680fa1ec3b02ee7d3211f903',\n ],\n [\n '274cd14e4fbf2ed07402e8ad8075b320c5f76b7ea45ea36af523e95ed63ab50',\n '6ca640f9557c5f2d8b27f6ce95b108880ff4e4816b26b70b6506114389ce656',\n ],\n [\n '4d8284e132e2fe81c5f71be1e3c79ab51b229e2c56c323e207cda179999d123',\n '116cfc00e9fbee1cf16af6282123cdf20eed13021c2037ef4c86f94eb6e6cba',\n ],\n [\n '4056194fb5643e97991942ef5b63cadd89080bf57a01489c4398aca03f0980a',\n '2e2cddb434fa6f6da7859c3d518f0ced8795eea043a6c9613fb3e020103339f',\n ],\n [\n '5d119d5c5ce532afc0875e0ee9b026d878c8773d34237f90a0d0670da6f01b3',\n '4a79fc025ce076b6a4742fbcc8cad313d0a8220c58024a41a5a674c0947e64b',\n ],\n [\n '11800ce4061d99b9d53fd4138802335258f7798c5a935c9979f5a949ce1d483',\n '36745a4741a5c7290eaa8f2a3f9ec955ccb7ca323272e5d35d35c2a724ffac8',\n ],\n [\n '4302525bceb97fa642fd5560a4a39fba3d2c06f68e6aff3332ff1854439ebb3',\n 'e31edfd081ce82f8177b2d7d96e69851d09e908c2517114ffb37ee12c0ac64',\n ],\n [\n '2f5fcbb96f0a66fd3bdfbcc78bda361cb812570f50e7c476533d56eee01c0e3',\n '527428a34855b5695c479d8fb7e831a299f7897f36682a74169cc60d160df2d',\n ],\n [\n '52167df045ad0dc999b98de3d035aced9da4434211149b8cf4bf20e774580cf',\n '19051d2a1ad3fab190c5dfaf45188b49b4e90cca22aae54f0a785562d3d3f41',\n ],\n [\n '541b5332491dbdb2b6f6bccceb7634970c046963891fae936dd950f4432b961',\n '78fa54da996a51e3a9c06091d58c2405a806649da2bb1f323807c4eec50eda2',\n ],\n [\n '5f11e973da659b7738f87ca5bd4f3bd02207dd3c8d978f0d3e83fe81030febd',\n '137aba7027069f62d25caed416e13537687bb1428e71e5f0a0c52d52f2e65bc',\n ],\n [\n '15ec941ee6c2110b819b5541be52981c09d83484c9dc735c43f39f5778718b4',\n '4561826142dc5b56acfcf605a78a4090472bb61235bcd605a765e05d0a7e549',\n ],\n [\n '68ba398736d659522f484406110b43c68158bf4992094acf797a38979c587a4',\n '7c1d9e1702e28afddf22fed7a7a79df4315c174d0c6c4f4c75bc77d9b56777f',\n ],\n [\n '67889cea31c81a429fbae643a4fce0ecd690a5c32b99397e39ed6d7a08702df',\n '7ea277c80b671146c9e455b98f42f45b941ac95ca2d15c8fa9ea82ee9b45e01',\n ],\n [\n '596f2c68390ac26505d3c2eca5c77d46f8f3acbed192a2649d8c525a58d2334',\n '49f3bd8c62c610d5c19c52d970bde24b270c4ff7ae900453b909e72483974a0',\n ],\n [\n '567779fb8b0afe592cea284629e3621ccfae3c4d7d3dc559c9fed750591a395',\n '6010bdc33f1cdb374facefff537e7910b72a1120502f312a7ce41df0d552ddd',\n ],\n [\n 'cebed0233e810aa6a29a8b0829d28f1c92f303d14dd73d6b12da98117dfc7',\n '4bdd51e1192a00df23aa8d0673e4915877ca41ddb8c9eaf21d39dd167fde7b7',\n ],\n [\n '4c7085f066adeb6781596771972b188177e63f2e2b3788d03e033cdd5af1f06',\n '2929ee89f525862b0cedb3ab9b5166e1680cb77fb4668f10a6a3d76b5434566',\n ],\n [\n '760e341bd836899c226176f47685f69438270c150c6fe7744cd723cd1e72359',\n '1bf09f2f1aac1a10ce8bdf20d5d178db747f01a4aa0aa8a5e4bfeef562cd94e',\n ],\n [\n '6016b94c00b54920027ef64902c61478244b1936337d2ad41d9a8d43dd6a4b2',\n '3bf3dd9bce7f6d6f120de87fcbce6219340b59c2c1d75ee0d45105d33aab1cd',\n ],\n [\n '4929e44ff692eb944d1045bee96e750219cda3bda0500029f0df49a1db30b5b',\n '2e138dcbd092242699004b4ce98764ffe4e892841f56830af298581cd1e523f',\n ],\n [\n '5972d0e526311bacb70a04e88969b6c63c7399b578f0dc28bbd00d65ef01da7',\n '76b22bca9ac12d26530e7b0757e646beb3bbc5680d0f3f82fb8ee57ed4b5e39',\n ],\n [\n '2ca0a42a26e26934ca2d48db960b4719113d87c5e57fb437d557c5eb4e03ac7',\n '62778c02561d4ec5d83a132afd7763a8349207c6b5d01fba70b56ba660cba2e',\n ],\n [\n '5137ee53f076e21a2c23da09f63c0d275408c31e4634a6b6373be5cf13e6c00',\n '14fb446c077beb78e04de3282a63bfde12f9af85caaca4ddfab506cee31c0c1',\n ],\n [\n '7d944853d1627b63f560aeda33acf640d35a4ee4d23a744957a2dae9d5b7c6c',\n 'bcb411a210710acbcb9ea12680d89e3e4e652228b6786d3886e95f4d9e6970',\n ],\n [\n '37d412c2ffb173a728477446b60b2b702d07a5243cb5fc8963e623a5ee75843',\n '672c79968908f92cd0cb0b4c65ba86e8f359b015623a89441e1bf859bba84cb',\n ],\n [\n '5b37f472aa80398bff12cc74c8ee784c4fc89757292580d3a498bff17e9f114',\n '7d79da1aab9cfef58a5f3d1c9ec466956a45f8d2af0c1da6dd4c93f720fae6e',\n ],\n [\n '25c09b3f1188c562571536202eb0f5fc4b9a7590417b8ea58b4343685d88a63',\n '3d5b817c73b37e9a1d24ca923351359b42ced2f3cafbcac8c2d6322dc767bb',\n ],\n [\n '32e60904e73f9756f71e0a918d302aeca17cad4acacc81bab15702ab5ff78f0',\n 'bcf4c0204f8275072f98a65b09ac58b87cdc9c70c4edfe99fe18870a3a5459',\n ],\n [\n '49c35575996c1517d2daed90d2fe4a58e674d6b4aaa7288d0642c8bf59e562f',\n '57eeee00adea4ca80eeabab57852cbf03f1a57e21872cd44221e0550b9193b8',\n ],\n [\n '10e1776b4c2a867bf1b028c6edec224cc6616c747e272f49e69b67b02a893dd',\n '8d45d62ec8e627b56950f2f7622a0438647f9e9f28e723e4a37cebc039a1b0',\n ],\n [\n '79a93a75ecbe943acc964fd39ecfc971dc6555b2bc335e7b53f52f4eb16cd36',\n '146132a68ce2ca8b48363612226771ac547eb3cf52b6eb7981718faac08aa3c',\n ],\n [\n '6b22d32e0590e169504e7f19864fd646d0994e7ed3e578a5b88f6e095913439',\n '68c3b22d859fb85e5c8fa0a8aea932285945b230957e603394333e9ad5acd82',\n ],\n [\n '71ce5ec8286eb8c93b8481c6d19cf0a288ef4da4397e9c80f65023e516bc097',\n '54470babc742780cd8a05499026e738ccbf81d4170d1731734de68a8e5b402c',\n ],\n [\n '27beb13a43bc6a1f6ce046da438b0beac5899ff4d57962dcfb6476b563f74b',\n '14074e9e93ee45394dfbe833998b9d1691961f8ba3166224b36404448c61bb3',\n ],\n [\n '6b1de6c8f161aa6509a1dcacf2c0aa1bcf6ee9d9b40e032a9d72f77a6fa298c',\n '5e9312eb5b59d6cbadd7d3dcbc39f1b5bd9a8346fdcfdf1107bada6f9cc048',\n ],\n [\n '32670fc3fa43bf39974ba72ea51f0d045d92d084a81fe5282dfc8309aa900b9',\n '518fee521bf1af62356aac3b7e53fdbf57121e030c6e9572b3de69912ca4eb4',\n ],\n [\n '4b9ca363eabed9c66091a347375f7065cd28f49f914447de7cc1461f1375f1e',\n '3a1a3a2e5e7e72476befe2571ece708052d740d02cbe6fed58740968ae609c4',\n ],\n [\n '4cc6da42863a3deca62fa218b7a3b50e034eb4bafd393eccba3f4cbe192ef10',\n '20bfa683c884f203713953b26d2821287ecd305fa2cb70570474533fc07f918',\n ],\n [\n '87705353c44a5ccec8de65cf5433be6b3d9bd21eea49b60e6c907cf1a67a6a',\n '112804b13eee56e3b01aff75fa08fa8374c44fc461aed8a30ad54acd09c24eb',\n ],\n [\n '6cf6eeeb9d339c0a05f72fd5af73fc7588e6d957100ee8999109437bc126cae',\n '54fa257cea22032eac272fcd034dadf2e00d602ef9e519cf7072023c130aad1',\n ],\n [\n '19b32925048c5519d929650c833661b452ef7be7963fab0b6b328ab7dd7a28a',\n '1bd0c14a10bf9b88ea61011c0b2e64d07da151c6203800d5a5d12063838a510',\n ],\n [\n '12a5fc5559428bc3b4eff97b21b63668b866e0722807f1db1f19696bacd9b0d',\n '4c2eb07f0c24047a3d73b560144f3fd32c99d6dbd9fc7cd2fd2a72a6e4b24c7',\n ],\n [\n '13662b7a7d390aa76eb86a7c3bff6d9913eb28db6bd1a7c42de5cdad2e35ce2',\n '40626aded7f56f82cc431ae30527b096f57fbfbc04d3e12a5abae3edf301cf1',\n ],\n [\n '255825bd49b8a2cce114360bd9c8fe8c641af64c8e7710107213cfcb006f43d',\n '3619cce4482335232f9e76a1460be9d296f2d468d26e4f95a78c71524fe59cc',\n ],\n [\n '7f83009eeed4f12f54d341bbf06066480cfcdf51dda103ac54d4bcecf6b3b31',\n '4269519d28faafd7fd68bebfd8404d71ba05d62c4bb6d65d24aa6802fb84ab6',\n ],\n [\n '2f325650eb316646b4eec903fe44828fcb11054f1bd42ca3a77f7e734110b35',\n '44f976082271016f9048e22c507d97d628722bb431f8d5cc1890524e6c386bf',\n ],\n [\n '750b166bb6edc0ee80fae39c7c106879036738df2d79fb2294e1c21e9a24d6b',\n '54f8aa297a1afafe2a17a3254f45861167414327e918d17003c6aad01d0b24c',\n ],\n [\n '3aedb10db9cf3285cdeee375879396fac1fb50dd259e1716f8c01e66f67ca72',\n '7feb9400f621f58c21601f23b7ec7c94a9b6b193c1cd74a8a60846aedadd359',\n ],\n [\n '4ab7151702de76faa493e7a0b1ac20ee4d10c33b83fec9477547cb1236973eb',\n '63f1f122e3ef3acc46b0915ac69c3f5772879799cad889a817f55f5853d1235',\n ],\n [\n '1675ead0d20e5bc3a7a7331999a87ac4c916ae29669e54197bb02aa6364520f',\n '4d1122da90d49e491922d9b533a6a668e2f65a2737ebb391ebb29fb7c1f8a9d',\n ],\n [\n '2f7148111ef53c613157aeec12e16a20f13481da4390b6ce18a85d1d8547087',\n '2eeda779ab395597651d2a0b833ccf53b10280750139916ae2baf4ec57c633d',\n ],\n [\n '4439c7810e7b2ba772b701ec3acdca0b80c9df23047710b87f7dc3f13b337d3',\n '5029cfe704c602a8a4662af0a5860ec03fb88f046d0e3400f2ce7638014c621',\n ],\n [\n '2248eec40b5732a6a488b681f093643af7937071bc73118acae295a32b51b05',\n '1577e4aec30a97b648de4d0b19cf8891151b4eb11f8de9c6d7312f091552e19',\n ],\n [\n '4738424e558d4e0d87a3124ca02ea24f0adc6b7a9768b0d3945ed2a6104857c',\n '33576f92aca3f0c8ae689c3c274c2de6b918940d86a6852e02fc99e35d1614',\n ],\n [\n '7829edd8b866ebf7baaf604ed13d19a9797578f44bbc51b1cd67ca53803e96b',\n '5559040a6083f2af1f9133ccaf5bc2ce06e56ddfc7dd410e9635c0116b62722',\n ],\n [\n '7f927b881f2cdc05e1a69e40bb714af47b630d1425f08ab5d574ee698f33d51',\n '26a465288e96572de303203bd38f4a03031e8158da0591cb037c0a5111d1056',\n ],\n [\n '36a65598552f8753580d1655417d645a140966e10a1e1663015f9fdfae44881',\n '33d5bbfaebf59eae72b89b1aea12ab2ba3c9617f8c3baed1ec16bdf668381b5',\n ],\n [\n '403becfa545c826782026ff409cc16c9d4fe428f1b5b6e630c92439d2fa5fd',\n '47bd6f2bf5d74f710ecb479c79b01fb774fbdad590e683a415cdedf33f71dc5',\n ],\n [\n '3a747826d241b877d3d56b16e0b810cf088eda4fd6048da174c9991a942a5eb',\n '2c7ba19b0a3486a2cdb84d4a388d34beb077a0e467ba44590166f93f6a09d2e',\n ],\n [\n '3d60cd375842714b37bda89dd1f13a7e0f3ff133b522209617d031bce05a537',\n 'f77f216451ab01ad5226844d2162a7f32744688bcb4325445539e2ce5cec4',\n ],\n [\n '235bf66f67c9100e7f0e22bb299cdfaa603644b240e0770aec7e7fd163e2a65',\n '37110b3fa83ece3990afca2bea8d5ebb3c7aace60a0147f8e6ab733e2f2b4d5',\n ],\n [\n '3b796d4eb69a55471fa86108f787b3604874e92b6887a7667a6c2bfbbd9a42b',\n '4912d6dc0419732ef82cb3278415851d4e2d7ca89e0f4d7128cc9de51b810fe',\n ],\n [\n '48d53516dd51e49faa7ab46c8c10db1befd10f23c6a9d9bc3640a2f0da44518',\n '73a2fb3d064adadf21aa1362c04affc660598f38a9e069b3afb74d0a99ae9ee',\n ],\n [\n '48c32cff161ed145da0d5b73084897647abb777adf65738559ceab6939cf3e0',\n '3d99308978e828f857c382df32b472bda81e8ec8e30c8844077ba6d6d2ba903',\n ],\n [\n '2947ff091a8ec9684affbc9a62e09e598841c4a6dc638088492aa47dea57097',\n '19a2cc97975e547f97a4d02e42f89e6ced6f5a953cfccdec347867d26926541',\n ],\n [\n '1960d85f30475615f82484eba0bdafb7ea7cac3809f0518a757d66f02b01676',\n '36c8f77baabf0cc8805d993bbe62041fcf4e3239cf9d53278a4fbd91e75eeb7',\n ],\n [\n '2765f28074d21d5a055340b6d40092d2bbef807e02009fabfa08ec0b9bdf38b',\n '7fb189e0553d5df52b6843661814824b3f3cbebbd54988f042fb256c6bf30b',\n ],\n [\n '348836cb2aaa00212f4b1a4e2d7fc5417f246bf2fe5c9a16ebabda449e2e08a',\n '3f7276fd7d69e0d55ce5ee1d2d830534a27227fe0b6d8a36c93f9a78b872969',\n ],\n [\n '7afb9d34b6a42ea8c6d870e4b8191c274201dc1f93a1a2219a2392b7e345a31',\n '42bbc20dc7115e0758b364a110227b16b64ec58fc535ce5ff1a9ad8b8a09fdd',\n ],\n [\n '2cae0c2afee1767fd4c66f52e1f176d217e92e89cc19eb36d5a6c1715f641a',\n '5335efe2d9bc3667d25ea88bf76438a4d6ab9ba5c512f9da7d0529b79b62d83',\n ],\n [\n '1cc5fde334707723c3a06f00c106db88664284a2df47bb6b144d9f960aea3e2',\n 'dbbf610d100316938bcd8bcd078513512ecb50d4579690dbefaa419c05980d',\n ],\n [\n '54e90cb8f3a2998d2675c5780679e06c0556b1e618f8fdf07f9a4b2466fbf1e',\n '16248676b6f06ec5e34994bc3115f85c8147b54f34d8500928f2fdc051e2089',\n ],\n [\n '525c70a2ba0dbdd68d75640f47f13d0d415ea595f7030f533f4625c2a46523b',\n '58292c8675e5e1a438f49e0c05648d9a7aa997f2f1fd77d5de1944afe5d7eea',\n ],\n [\n '54726d78d099007393348787a03107ab492e59690a46c87fb02ec554f2353bd',\n '53b54b77184ba75a3391e0ebfa6d6974db028f3f8e34bbd5460759a5848dd76',\n ],\n [\n '4ac81a66903537769d3aac6c483ccc08535cb767b6b5e1ec8017a7393ab70ae',\n '2cb22b77a8a05d26f11a4dec80eff292633aa05553a889c5ab16b6ac6e2ab17',\n ],\n [\n '21d0175349e21114988a2930b9a607d43245783cb4a0c984ce27f4c4206708',\n '59f1f49342cc5496213d3329bf4ca7fb0044337449c579bf53147a1dac9e67c',\n ],\n [\n '167f821b381f4c8adcc39789475fb55ba639e5124fe75f26dd61be396dd5e66',\n '22002c87d4cafb47ac9d27286d5cf5ff7a6715d69814118269b0729be9e4b3a',\n ],\n [\n '31010666c6db83a9f9e4db4c48173afd405783ac53852a6e38a8ff925528843',\n '1f466dc9b5d9094107c741dbf380f9fd98d8549cd50f67169901516f8cce74c',\n ],\n [\n '1ad3875769a5053388a86edc85dd80fdffbbda6a456aea497ff81a0f1f6707b',\n '2de7cdec5e2bad56a71bd2f33a4ae4c874e1ad4210a6ac32b443cfa34e85b1b',\n ],\n [\n 'c489650fb7f459ce09cd05a456fc5a46b849b38a671298ed645bcdaab168b0',\n '45610d092b8af1c43ceed474cd17f7bbee65120aa6fa4d37f949e7e41f25327',\n ],\n [\n '394256a5ef4d7af5459587a0bd2edb8acaf5ecfef2563c9a04daf34a4abe4c6',\n '1ebee390dae1403c0c53994e1d064fa64e20fcb45392e209b2b99486a559ffd',\n ],\n [\n '410a1511fead6151e9bedb089b9832d0fe01fab76d3f8459929f767525aeb27',\n '361f0a5ffe09fcc3ad4eff3f5e89508ac247af80267100b69de3c59df561cfa',\n ],\n [\n '38cd437c9f659e110a869605c182ee9fdc26de36baf559d9229e258267bb734',\n '624b1128ea7739bf1cbd0e423af92a4884323c868d2ba0ee9d362946edee2d1',\n ],\n [\n '78b126e50b7042d2a019f95cb87a3213c664ca1bafe345999b1e9e2dac1e608',\n '19e398196b22f4488cbe854c614ad8c353839abc5ab3a4f3f5c03c16ba8a198',\n ],\n [\n '6d3a5ce91132f385a91823c5c8046c4b638f5fe63357424410d901457cdb867',\n '7b80bae16d2d487e122495174f7a70992bc5dafbed72bf84127ead7c57302bb',\n ],\n [\n '32d053a904dc4d88fbe7d0b96e0cbeca22a00aa5c79c753d52b0b60abf31602',\n '3af6a02e5cae6d6490354ae51185149e3fdb6d0d9caab90e95ff58aa0c40377',\n ],\n [\n '49b1fbff5bdb0aa6938b066dde0ed772c0d81f9eff52e7fe038b0ccbd78adb5',\n '1c6e57834eb14d507eed8b36c81ddf92fa91c242467061927a742fafa82b43d',\n ],\n [\n '2f28b8994ca6f234d9293d26196b43b9d1d5306844348c4a638102c05de85f5',\n '759cfb172eab065d477248b3569f4ff5791055f01e95fe71b94b8e615d73c96',\n ],\n [\n '3c2ee954ff534f856f59188fa0f29ed8a022aee0cac52d634f6dc58cd514d70',\n '22bd162e74925f0a876bd8a206b8767dfdd7c898576a73a490f138d9a7f99c6',\n ],\n [\n '5763a7cab001e1aaeabf9ab5b9b2fffe6cc2b299ab04ec4933da74d960e1ab',\n '715ee4f8ee93ab5a1dba00f0a6abc4eec47d49b61254cc27fc36a031e32f0f8',\n ],\n [\n '19976ad8d7b7f47c785408243a227401996b36e47c7a78a7bc7d4256233ba9a',\n '896b713c5d7777b0703821a73c1d9a4c3755501042120534ff13990975e1f5',\n ],\n [\n '61674b992c29827186cab5ff454758dbbed8e89bc23d0bd33193afccc3a04bc',\n '38e1020744c13903809ea30a0662fdb5226ae760cdcf10800faabec452e00f8',\n ],\n [\n '2ea2d48bcb83c0c9cda4efe11f07165cfcbc9ccd26526e5fb12556316d4b1df',\n '1d2d68b74ad384c5c4a9c85453104216357bfcdf635680b40215f0f800974cb',\n ],\n [\n '7881212050264c40c336ed3a15dd2cd868ec9a558f5b728869eab66e8b8ed54',\n '21aaefcc8ad8a161b8971d6880321781dbd939570c540da4c330922b8c81e9b',\n ],\n [\n 'b6be88ce0461d20f59c5199573cda0170b61decf6e8e69a6d32f1695adc4ed',\n '5536e4808370716f2bb3423a9a49a38ddbfe91faf3b7a35eb53d3519238b6cf',\n ],\n [\n 'e5972af1655eb6dde2e8c77cc58044299922441b5ee41ceaf5cafedc765bcc',\n '550282f37a4783dd60801c237045992d6fbe82a5902e7d837ea25f6f98c7b3a',\n ],\n [\n '7efc1aad1f580d8f50274f1c114c40056be19a8c96fa8c4cb5bf85e1e7f3e4',\n '2689f1c3898b114d668be6413643ee9f879913d40c262541fd0316264c60a4f',\n ],\n [\n '7939db98037f59b0113e9d60051f75ac9c3cfd1a3eb535c73e2d945068c6c5c',\n '410914ca8bbf3c65cdf3e9772ca790c19131c50068d34b7346c10260a578a8e',\n ],\n [\n '225b77ad00a2b83d26690190b74867326eca4f55bfbc3a13be036225ca3b1b5',\n '411faafef89042ce6beb64309fdaff70fa53e9d32d79a21e7f82f80e79ff05e',\n ],\n [\n '1501e64c99c8b6658b0479f2c05c9142d246eaabfccf2fcec8dc4399539d8e1',\n '3bab1e3339e42c9ee66c65b0b20236fdd9362d3ce786ad3a9779ab578af50a8',\n ],\n [\n '59b907b941f24fb8ea2458153e55f07534b388e835af7b69f3c9f54392a335',\n '1d5438c4f2f68a417f3d56f916d899a6ffe910f5f2989ca31687f1b10f60db8',\n ],\n [\n '2887d08a26f484546f360e33abbf7a998b7170a5b30070938b84f072c676bf3',\n '62a78e8d00e5d3a59e2fc424ffa08961567ba1ef24c8531cd7bceee6074a535',\n ],\n [\n '6e3cc8076b3d45377929033af35aab0c6d19ae4fd47c0daf844079ca04c46eb',\n '7b90f338e4d848aa8f19d0b5c3bca916a2a9024acbf14bddb278bca2aa39e5f',\n ],\n [\n '34844dacdd3ec54a3af328bb9d67715ab33425e194ac9977ca02ef22e8f7a88',\n '3c1affc6372f32a1634748124f9e1a03c4f0c993971da0dc28888b0801279d',\n ],\n [\n '436b192e03a49796cf9bc5e93c88268b71c9c24f9c3a85322bba634ebea309d',\n '67a8091ef69d62abcb28ce5df4dc7d53f8dc2b9690344f75ecd03a6d9386044',\n ],\n [\n '592d25b68baff87a6d7fd41ff0dadbddc1bd1316683de3b2d677501c0eb14e4',\n '27ad1e1099683f54589010faeefb19e38569ace43653be8787a42b0591e7bc5',\n ],\n [\n '89a5111ae911512ba62e87b97f643c0219702f235c70f62c6678a129302009',\n '557fa3d98e9ce7b83b47545013a4498f3de43787fb66b1a54521222242f7c1b',\n ],\n [\n '1c9b5e53377e72da5066cb08566bbf9ec31ec1877f455d932cd9b1aa375d34e',\n '72f79555a8bc207863f32d482fca54692825449fd8963fcea3de3a8183a739a',\n ],\n [\n '574a6e05eb14591729515be239ea8c1fa9e12d4049d42876f76c8ff37bca03',\n '5f99b3af43ca68c1c73e8190d5f73c8de162ba643d7d5f0cd73cfa8135db6d3',\n ],\n [\n '513fc5c2e16505b2b25a2f284e167d5401194bcac0dc3ecf8b7c9acb560daa1',\n '687ee7a1a8954d08d3856e1a16ded808e419e789736d3f55f79f7693bad69f5',\n ],\n [\n '53d48bd1205274b1c2b0a0ceb3d21c5fcd7c8892a784931603240b288a598b9',\n '35387abd7ea59c9b956de44d36533cad1f6668c438d666651695ff3862159be',\n ],\n [\n '213eb1ea99e08825110dd61094eb6e8145119dc1c507636f068730b1e086d44',\n '744f6853f4f02f4f042468d0739e0c9f64df720b87ed77d1979547084ef7a89',\n ],\n [\n '735ef017d091ca23264ad0aa7bb9b2be3309b4539605e79ed4a652ccb2fbe3c',\n '7f0ccc7a5747c4e921fff97d431169f690763427e2cfd1ad74d7a0308d7faa9',\n ],\n [\n '3f36babc5a30070b610ed97db44997e6d9115c9c0579ad8f75d295a17130001',\n '79047908a2474e32d5c712a07bf5c4ad522590bb5d6cefda410d30528e12ca8',\n ],\n [\n '51c04907ae88a5926b242fb2862cb1f2c651a94e6caad5bff8601c079fded74',\n '10a585a269f460aed43f54c7de13cdf623fc8de5957526997278be939ef32ad',\n ],\n [\n 'c1e1bd626a735aa2c065831317217ecce68e377eb1f67e54ce2e97bc2ef2dc',\n '53c5af23a9b482f420be6dfd37b6886154cfd130794098e1f51c1885ac2556a',\n ],\n [\n '5aff3b30775ae4758e604a4a6262803a545f5ef4e7855fa245ac6a6431a9ece',\n '39a4799e5519047f29333bee9c86c99bfa8056d4aa381c396c4a44331fe795f',\n ],\n [\n '3d753e9723701a8e9d99b91bb93dee2eda7ffa5072fb2cd5c5fd99aebcdb299',\n '15798bf5c17d6d5880fed1553af32dd8d8baf2888c715a886575448a24c7975',\n ],\n [\n '6593e5078466b07a4222d2e544da826d2c583c9cc5f2eaea148b129b00d4aa0',\n '11b352b08a0a61d3cd67d1dc08069dec3bde907b3da0f56de5011b956bf8744',\n ],\n [\n '7a6eb353c5be9ff03fe4a06c01fb71aad2b38144179a291ebcbb2c2417cca65',\n '3de3ecb12f2fa699b46a9d399abf77ca17bebc3e491bfb2542dd0fba991e2bb',\n ],\n [\n '2c7ead583d6c32162091034a9eddfa775b4e84b8bdbea939edb2a80dcf64f6',\n '461790ce40d9c276d962b2a1e9a74d66e9d7335962e234e8a2fc6963d31722d',\n ],\n [\n '34285af023d9b4c2c2b88e8704bf2c05a9b553b00b2e70ff05f8c2970cb134f',\n '33fe678e7671760a83836107428dbade68c3593fbe568f3f8f1b2c568099c44',\n ],\n [\n '6222f720a24466263db6a11842f117fc4bb78da6705f140e48869db3e087441',\n '6eff5b9bf3aeedc962bc5a24b66e7bdad2153450ed53a058bf2c8dbf2907693',\n ],\n [\n '17c6ec5ea206eb97cbf53851e37ce391080e0d2bf1e5395610f79ab0503f7ce',\n '3adb71ca3523d88ceb1e365f12dfb24895453c14daf0046b2626cddadfdf5f7',\n ],\n [\n '70859f9771a713e54974ce11cdaf44b0dcc3e9befa0c0834908d877eeaafd27',\n 'd18f794bf0cc0623b711e7450030424e52326c45ba9b03341883ae4828a5f8',\n ],\n [\n '2a820cfd0fd4ab0871e7b303cd545a3086caf8fa818c087a4017197da74efbf',\n '5f992683ff37f6c041b84bfc01503d333ac9763505cc8f69473da01812969d1',\n ],\n [\n '5b0526de2c07fe7cd73e3884f642d57a0ac5e13c68590ed03a14e530616e8c1',\n 'eec69d0cbd92c9fca31ec967dba848bec368e792d6678797946a5e34fe3487',\n ],\n [\n '6cf6b3efee707210cb3a72f1e885c3d0953aefb43e5e148c740aa1641725c61',\n '911cb630b898e2c1a9115f9e45bafe3b819edfb1eab6e15612d14289939984',\n ],\n [\n '74e913de55f1e46143cb2ecfc580f8d3d3908f200281322b84e21c989cda293',\n '761d2736c9ac7670ba905bc2629c6c0dbe988820a4454ff415ba68710f7df92',\n ],\n [\n '44084305e0c911a40b7cbefe5f13cffe9a99375d1a584c4a2200958050af7a9',\n '249c83877371564708ea525b64b1e7e12785460d83364446531c9adcacba5f0',\n ],\n [\n '2bf71ad4d1bee1a67fb300477029f54bdb0e09f78bf2ac2e8afc7465a7adbcc',\n '6244dd6cad282539049be57487bfd9900bb0d5da805d02b535096368fcb4cd5',\n ],\n [\n '3a62d8f763b62def36e4089458046a49c5ecb91b861549530773e0548ff2bb',\n '6a10a03ba61e6ac657270465c09aa9526cf1ebe96bdecdf0e7000476a47b9eb',\n ],\n [\n '284eed3a17c51e0677d4fe897f056abe9def8af07a4630e6ca5723e2aa6677',\n '516a06ac1d5626ed03d2eee9de6f60f0311eca703a99b0fb31b9c66b01c27c7',\n ],\n [\n '2a2c63b16cccd685f731d06fe93ce2cffb358d34d03dda9a7368185c1eb0c32',\n '7180baca0ba81284809f92eca1654cd76b925a9242e5d5e0f18d0a55d13c6ec',\n ],\n [\n '5f9466017ec09769611389ea5370ad68dda936d3f5816c9e928ff9574abf9a7',\n '6619b5b145bb5f4f29deb7a4cd68ef4da3995312fa6537f0d01684da4267ece',\n ],\n [\n '74f229babe01b4962b3307589c1a13019134b1db6822698388bebb55d21c30f',\n '156ae857ab3279f754facba0db36398dffec8c31e5e160473198f2f891b7531',\n ],\n [\n '334b9fe3a5fd99bc966ddd1309698fd32afd1f235062f2c275b6616a185de45',\n '221a60053583cc0607f6f2e6966b62fc9dac00538bb7eb1148e007a92116d2',\n ],\n [\n '7ad710ba002a67c731efbaba2149d16fec5d2f7aa3d126fd9886172e9f4ea30',\n '3a10f8e902a7a13aec94d66415347e1314f9bac83a7db176096b809b25ffb86',\n ],\n [\n '4306dd0a184a3283c3097ff8f7434cec80912e9dc04b7df21ba73fda9f8e6d8',\n '6d42bd3d1a8dbddafd09e872e2aa3891ae79ec939dc1b382196bc21c4ab749',\n ],\n [\n '1c3f2124e1135c32a426d1d14e471edd9e0f2c7bd703ee123cbbd608e8c4be7',\n '3cc607a3c3f1ab68dd5fa56c65996002721b8ad8ad4b0dd9e5b1467d316583',\n ],\n [\n '294af33272ffcee0b56a436de1b73759cbddebef4c07888b42c2f92b0b68e1',\n 'd837164311d5dca8d37b99ef9eb22708643c83d1cbdfe852f63ea07b06fbad',\n ],\n [\n '753bdb5439a19bbffdfa02b1dc24e8368f22d0a8276b109c11e6feb26f56f39',\n '6ed396231af93647633eab467f1a034f38e76823eb85baf97cae56e2dcd9f75',\n ],\n [\n '5674f0cb892b733fc0b50e121d8679afed0a925c32594cc65ffe83bebe7748e',\n '7fbf0325dd38dd94905adab2c52758552292a6a103d9edfcb11938828e828c8',\n ],\n [\n '4a8f053573a0a74251059d0229d89b6660407ba0b491779fd10f87a5117c81f',\n '21b70112485398bf67ec9d733df24a1df30dea718a93b786f41ed04e3ae3c5e',\n ],\n [\n '726c01ec4a08df8fc8de173311f50d4f3b97c5a9cf68c1536146f827db95ae8',\n '15013cafadefa7f1c4e4dfdd70bd4d3979dd18bd7f0332572ce2a3fd8773d12',\n ],\n [\n '38ac0fbfa98937257460db7e6645d7e5112b6fce7234813fc8a704e8ade8da2',\n '73c0109f86048aad08c443f781ae60ad13b99f7b9cfdf3128fe6d6eeb799a7b',\n ],\n [\n '6f6d3a38621582ace092eb50ecfe9eff265df141ebdcab8653299116fcea291',\n '4a1bf3f39bc919c8f1b720a0b1ce952cad17f2ba98308ee6b76dd9b6f3d7b75',\n ],\n [\n '6a307fc28e1df8d9ad01766419e097797d65cb674436fa1c8f012d3de2c2a1f',\n '26911a635ba824db004875d79dd84834a97ac12643e42829015bf88c1fd6f05',\n ],\n [\n '2a74860e3336d6db916555894cc8028f41508812925db1925457afe40257155',\n '5f8da573f4c39816ce2dba8a20224223a7cfec53117ec78973930c0e9b60244',\n ],\n [\n '4d2b49e1ed0799f719b8269f092cb489a466a645bc0ccabafdc678864c176d7',\n '5410083df7d256f18cbf5697ae5e52c31e075d8a3b27e21d6f5177ca882f6c1',\n ],\n [\n '110ecb9fbf6c333d168cee473cc5ad98809b6cb9eb5d1f6cd28ab5fab504fd3',\n '7e3c54d7533d9f8c3310f219dab0cc3ea4d39b418a748eeffd6bae2b8637a43',\n ],\n [\n '5be4d711b80da70e6d3ac493250bbfd16f20b25f31919b3a91cf14ffbac1096',\n '7f55a0919f082e8885f1515e83c5b39b6022404503507498e1b4422d79c43e2',\n ],\n [\n '2605125b95ca4ba93a21cbbba5762898a7cf9e988f07ab9e64cb3868e3b139d',\n '62f0ccf55b9fc0eaf9736fc8ee484e2acdbe259813af9803cf815829a5e9d3b',\n ],\n [\n '1092bbbf206f2a3068167c3dd99a72de31e206f6c504c071c8214d105ff814d',\n '309f489f68a62089f53b96df5d4fbc3ecc5a1a42eb7ece0e49bad17ad490ff4',\n ],\n [\n '2abdee9409d9c92559ca3f4e6bddd649c31aa09b90bfcb4a612af491241e18d',\n '3ffa8eac180a29de3f8a69efca84bac046f921f5725e96a6ff0530be1436aaf',\n ],\n [\n '376313f27d00bb1aae7ec991745efe6ee28c6b50de0c6cd9845cc4bb4f83543',\n '6a8e0a9389ba528b156fa94ac090a895d7b795818d4941c29415d9e2984c547',\n ],\n [\n 'a80380c71bd466a696b3f0fbf02817c9459d9798f4f3899cf32edf647fe066',\n '6a09805e814e7cdfc76eba4b79f1df5ae559e0f0aba9f728d3cba4ea5c57471',\n ],\n [\n '223694b921d247d989a79b9b2b2f07496036c40cb043eab074a9d6a2cd2ffed',\n 'c247217f1b1df35e30d9e15fdaadf42d6fb0edd3a5a7e265d4cdc426c120aa',\n ],\n [\n '102333620df278c6714bbc880fc087db58c1b9b4d77ed4d61b32a74bfc7c3e2',\n '6a77d37727ccf71c2caeb151faf4404d4b94e9047f9f0a7c3966367f3b53c65',\n ],\n [\n '891626f466536929ee7eadcd18b41925706dedab7528ed5f0f7abf039eb9d2',\n '5f73d11c141c933a35b2d0d06e5cbae614a20d17dc3b439f8bcdc3413c5ea37',\n ],\n [\n '215c23fd3f073f870e5e80303967391bf173f8adcdbeec72d131c557babc203',\n '10634332e9d9439a321597dc5b0fac9ff478834c3d6e281735f21a4a5e13266',\n ],\n [\n '21ea0bdc1332bc36e6aeb43be9071651c27e4ea2eadec636c8d818d4af72a36',\n '3a523d9643dccc6bb9c7c58413312caa3e60ba9c7c7f0177e0f3f469a3241e3',\n ],\n [\n '60deaed1bffb6190beed40caaf2bfab5e43d3707aff7ad3f278d571aa247eae',\n 'e41f71ff254c1418e6a66992af307789fe04d6606fb2670900bb1a089fd879',\n ],\n [\n '1e1fac4a1646253fb1332fadc21fbdd3e3a24a840d129400f520ae4116a4cf5',\n '69c406f9f46576afad68808de0ab7e8922b6226af748e721d9097e21f1800f3',\n ],\n [\n '5db0ddcdf79ffe74d6454c12d2bc60b06776db03c75dc413f5be42ea9a91b5e',\n '134c3d6c699841f17306835bb193785228ffe7ab212a01a861c56b086a18cec',\n ],\n [\n '626814e320fb5bea505b248fd1c1389ad586c1cfe04923fe2f83173e915f4f8',\n '7ae407a926e887206a8b85cf485f1f327c9bb8ccbb6897024e2d122877d8ee0',\n ],\n [\n '23186237dc7d3b570cea645282ad4c359731bbfa54e7f036426bf6493812cd',\n '7d1fbab7e61a22d3b00993290d9f4cd5d820061573e787f66c2cff9a18e1eaf',\n ],\n [\n '54302dcb0e6cc1c6e44cca8f61a63bb2ca65048d53fb325d36ff12c49a58202',\n '1b77b3e37d13504b348046268d8ae25ce98ad783c25561a879dcc77e99c2426',\n ],\n [\n '13961b56b9fc0e412e468c385c22bd0680a25624ec211ffbb6bc877b2a6926c',\n '62f7f7792c77cd981fad13cb6863fe099c4d971c1374109185eae99943f16e9',\n ],\n [\n '47abd7308c70659af3f00fafe6837298af3cb530b6c2ba710ffd07a6bc1ae98',\n '75d0c8a7377aa9f0663d0c124a5659750847afabc29e39893fd27534a4a03cb',\n ],\n [\n '2c6276b764fb398fa555857dbe0ce0ec18fab7a233bf23851295739801f0585',\n '5d8f4897ce44007ec5bfcb9aeb78b8f6e1d40a514f72d213c9300d2770d2b8c',\n ],\n];\n","import BN from 'bn.js';\nimport assert from 'minimalistic-assert';\n\nimport { addHexPrefix, removeHexPrefix } from './encode';\n\nexport type BigNumberish = string | number | BN;\n\nexport function isHex(hex: string): boolean {\n return /^0x[0-9a-f]*$/i.test(hex);\n}\n\nexport function toBN(number: BigNumberish, base?: number | 'hex') {\n if (typeof number === 'string') {\n // eslint-disable-next-line no-param-reassign\n number = number.toLowerCase();\n }\n if (typeof number === 'string' && isHex(number) && !base)\n return new BN(removeHexPrefix(number), 'hex');\n return new BN(number, base);\n}\n\nexport function toHex(number: BN): string {\n return addHexPrefix(number.toString('hex'));\n}\n\nexport function hexToDecimalString(hex: string): string {\n return toBN(`0x${hex.replace(/^0x/, '')}`).toString();\n}\n\nexport function toFelt(num: BigNumberish): string {\n if (BN.isBN(num)) {\n return num.toString();\n }\n return toBN(num).toString();\n}\n\n/**\n * Remove hex string leading zero and lower case '0x01A'.. -> '0x1a..'\n * @param hex string\n */\nexport const cleanHex = (hex: string) => hex.toLowerCase().replace(/^(0x)0+/, '$1');\n\n/*\n Asserts input is equal to or greater then lowerBound and lower then upperBound.\n Assert message specifies inputName.\n input, lowerBound, and upperBound should be of type BN.\n inputName should be a string.\n*/\nexport function assertInRange(\n input: BigNumberish,\n lowerBound: BigNumberish,\n upperBound: BigNumberish,\n inputName = ''\n) {\n const messageSuffix = inputName === '' ? 'invalid length' : `invalid ${inputName} length`;\n const inputBn = toBN(input);\n assert(\n inputBn.gte(toBN(lowerBound)) && inputBn.lt(toBN(upperBound)),\n `Message not signable, ${messageSuffix}.`\n );\n}\n\nexport function bigNumberishArrayToDecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toBN(x).toString(10));\n}\n\nexport function bigNumberishArrayToHexadecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toHex(toBN(x)));\n}\n\nexport const isStringWholeNumber = (value: string) => /^\\d+$/.test(value);\nexport const toHexString = (value: string) => toHex(toBN(value));\n\nexport function getDecimalString(value: string) {\n if (isHex(value)) {\n return hexToDecimalString(value);\n }\n if (isStringWholeNumber(value)) {\n return value;\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\nexport function getHexString(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\nexport function getHexStringArray(value: Array<string>) {\n return value.map((el) => getHexString(el));\n}\n\nexport const toCairoBool = (value: boolean): string => (+value).toString();\n","/* eslint-disable no-param-reassign */\nexport const IS_BROWSER = typeof window !== 'undefined';\n\nconst STRING_ZERO = '0';\n\nexport function arrayBufferToString(array: ArrayBuffer): string {\n return new Uint8Array(array).reduce((data, byte) => data + String.fromCharCode(byte), '');\n}\n\nexport function btoaUniversal(b: ArrayBuffer): string {\n return IS_BROWSER ? btoa(arrayBufferToString(b)) : Buffer.from(b).toString('base64');\n}\n\nexport function buf2hex(buffer: Uint8Array) {\n return [...buffer].map((x) => x.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Some function imported from https://github.com/pedrouid/enc-utils/blob/master/src/index.ts\n * enc-utils is no dependency to avoid using `Buffer` which just works in node and no browsers\n */\n\nexport function removeHexPrefix(hex: string): string {\n return hex.replace(/^0x/, '');\n}\n\nexport function addHexPrefix(hex: string): string {\n return `0x${removeHexPrefix(hex)}`;\n}\n\nfunction padString(str: string, length: number, left: boolean, padding = STRING_ZERO): string {\n const diff = length - str.length;\n let result = str;\n if (diff > 0) {\n const pad = padding.repeat(diff);\n result = left ? pad + str : str + pad;\n }\n return result;\n}\n\nexport function padLeft(str: string, length: number, padding = STRING_ZERO): string {\n return padString(str, length, true, padding);\n}\n\nexport function calcByteLength(length: number, byteSize = 8): number {\n const remainder = length % byteSize;\n return remainder ? ((length - remainder) / byteSize) * byteSize + byteSize : length;\n}\n\nexport function sanitizeBytes(str: string, byteSize = 8, padding = STRING_ZERO): string {\n return padLeft(str, calcByteLength(str.length, byteSize), padding);\n}\n\nexport function sanitizeHex(hex: string): string {\n hex = removeHexPrefix(hex);\n hex = sanitizeBytes(hex, 2);\n if (hex) {\n hex = addHexPrefix(hex);\n }\n return hex;\n}\n\n// implemented using TextEncoder to make it isomorphic\nexport function utf8ToArray(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n","import elliptic from 'elliptic';\nimport hashJS from 'hash.js';\nimport assert from 'minimalistic-assert';\n\nimport { CONSTANT_POINTS, EC_ORDER, FIELD_PRIME, MAX_ECDSA_VAL, ONE, ZERO } from '../constants';\nimport { KeyPair, Signature } from '../types';\nimport { addHexPrefix, removeHexPrefix, sanitizeBytes } from './encode';\nimport { BigNumberish, assertInRange, toBN, toHex } from './number';\n\nconst { ec: EC, curves } = elliptic;\n\nexport const ec = new EC(\n new curves.PresetCurve({\n type: 'short',\n prime: null,\n p: FIELD_PRIME,\n a: '00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001',\n b: '06f21413 efbe40de 150e596d 72f7a8c5 609ad26c 15c915c1 f4cdfcb9 9cee9e89',\n n: EC_ORDER,\n hash: hashJS.sha256,\n gRed: false,\n g: CONSTANT_POINTS[1],\n })\n);\n\n/**\n * The function _truncateToN in lib/elliptic/ec/index.js does a shift-right of 4 bits\n * in some cases. This function does the opposite operation so that\n * _truncateToN(fixMessage(msg)) == msg.\n *\n * @param msg\n */\nfunction fixMessage(msg: string) {\n const pureHex = msg.replace(/^0x0*/, '');\n\n if (pureHex.length <= 62) {\n // In this case, pureHex should not be transformed, as the byteLength() is at most 31,\n // so delta < 0 (see _truncateToN).\n return pureHex;\n }\n assert(pureHex.length === 63);\n // In this case delta will be 4 so we perform a shift-left of 4 bits by adding a ZERO_BN.\n return `${pureHex}0`;\n}\n\nexport const genKeyPair = ec.genKeyPair.bind(ec);\n\nexport function getKeyPair(pk: BigNumberish): KeyPair {\n const pkBn = toBN(pk);\n return ec.keyFromPrivate(removeHexPrefix(toHex(pkBn)), 'hex');\n}\n\nexport function getStarkKey(keyPair: KeyPair): string {\n // this method needs to be run to generate the .pub property used below\n // the result can be dumped\n keyPair.getPublic(true, 'hex');\n return addHexPrefix(sanitizeBytes((keyPair as any).pub.getX().toString(16), 2));\n}\n\n/**\n * Takes a public key and casts it into `elliptic` KeyPair format.\n *\n * @param publicKey - public key which should get casted to a KeyPair\n * @returns keyPair with public key only, which can be used to verify signatures, but cant sign anything\n */\nexport function getKeyPairFromPublicKey(publicKey: BigNumberish): KeyPair {\n const publicKeyBn = toBN(publicKey);\n return ec.keyFromPublic(removeHexPrefix(toHex(publicKeyBn)), 'hex');\n}\n\n/**\n * Signs a message using the provided key.\n *\n * @param keyPair should be an KeyPair with a valid private key.\n * @returns an Signature.\n */\nexport function sign(keyPair: KeyPair, msgHash: string): Signature {\n const msgHashBN = toBN(addHexPrefix(msgHash));\n // Verify message hash has valid length.\n assertInRange(msgHashBN, ZERO, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'msgHash');\n const msgSignature = keyPair.sign(fixMessage(msgHash));\n const { r, s } = msgSignature;\n const w = s.invm((ec as any).n);\n // Verify signature has valid length.\n assertInRange(r, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'r');\n assertInRange(s, ONE, toBN(addHexPrefix(EC_ORDER)), 's');\n assertInRange(w, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'w');\n return [r.toString(), s.toString()];\n}\n\nfunction chunkArray(arr: any[], n: number): any[][] {\n return Array(Math.ceil(arr.length / n))\n .fill('')\n .map((_, i) => arr.slice(i * n, i * n + n));\n}\n\n/**\n * Verifies a message using the provided key.\n *\n * @param keyPair should be an KeyPair with a valid public key.\n * @param sig should be an Signature.\n * @returns true if the verification succeeds.\n */\nexport function verify(keyPair: KeyPair | KeyPair[], msgHash: string, sig: Signature): boolean {\n const keyPairArray = Array.isArray(keyPair) ? keyPair : [keyPair];\n const msgHashBN = toBN(addHexPrefix(msgHash));\n assert(sig.length % 2 === 0, 'Signature must be an array of length dividable by 2');\n assertInRange(msgHashBN, ZERO, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'msgHash');\n assert(keyPairArray.length === sig.length / 2, 'Signature and keyPair length must be equal');\n\n return chunkArray(sig, 2).every(([r, s], i) => {\n const rBN = toBN(r);\n const sBN = toBN(s);\n const w = sBN.invm((ec as any).n);\n assertInRange(rBN, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'r');\n assertInRange(sBN, ONE, toBN(addHexPrefix(EC_ORDER)), 's');\n assertInRange(w, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'w');\n return ec.verify(fixMessage(msgHash), { r: rBN, s: sBN }, keyPairArray[i]) ?? false;\n });\n}\n","import Json from 'json-bigint';\n\nconst json = (alwaysParseAsBig: boolean) => {\n return Json({\n alwaysParseAsBig,\n useNativeBigInt: true,\n protoAction: 'preserve',\n constructorAction: 'preserve',\n });\n};\n\nexport const { parse, stringify } = json(false);\nexport const { parse: parseAlwaysAsBig, stringify: stringifyAlwaysAsBig } = json(true);\n\nexport default { parse, stringify };\n","import BN from 'bn.js';\nimport { gzip } from 'pako';\n\nimport { Calldata, CompressedProgram, Program, RawArgs, Signature } from '../types';\nimport { genKeyPair, getStarkKey } from './ellipticCurve';\nimport { addHexPrefix, btoaUniversal } from './encode';\nimport { stringify } from './json';\nimport { BigNumberish, toBN } from './number';\n\n/**\n * Function to compress compiled cairo program\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/services/api/gateway/transaction.py#L54-L58)\n * @param jsonProgram - json file representing the compiled cairo program\n * @returns Compressed cairo program\n */\nexport function compressProgram(jsonProgram: Program | string): CompressedProgram {\n const stringified = typeof jsonProgram === 'string' ? jsonProgram : stringify(jsonProgram);\n const compressedProgram = gzip(stringified);\n return btoaUniversal(compressedProgram);\n}\n\nexport function randomAddress(): string {\n const randomKeyPair = genKeyPair();\n return getStarkKey(randomKeyPair);\n}\n\nexport function makeAddress(input: string): string {\n return addHexPrefix(input).toLowerCase();\n}\n\nexport function formatSignature(sig?: Signature): string[] {\n if (!sig) return [];\n try {\n return sig.map((x) => toBN(x)).map((x) => x.toString());\n } catch (e) {\n return [];\n }\n}\n\nexport function compileCalldata(args: RawArgs): Calldata {\n return Object.values(args).flatMap((value) => {\n if (Array.isArray(value))\n return [toBN(value.length).toString(), ...value.map((x) => toBN(x).toString())];\n if (typeof value === 'object' && 'type' in value)\n return Object.entries(value)\n .filter(([k]) => k !== 'type')\n .map(([, v]) => toBN(v).toString());\n return toBN(value).toString();\n });\n}\n\nexport function estimatedFeeToMaxFee(estimatedFee: BigNumberish, overhead: number = 0.5): BN {\n // BN can only handle Integers, so we need to do all calulations with integers\n const overHeadPercent = Math.round((1 + overhead) * 100);\n return toBN(estimatedFee).mul(toBN(overHeadPercent)).div(toBN(100));\n}\n","import { CompiledContract, ContractClass, RawCalldata } from '../types';\nimport { parse } from './json';\nimport { isHex, toBN, toHex } from './number';\nimport { compressProgram } from './stark';\n\nexport function wait(delay: number) {\n return new Promise((res) => {\n setTimeout(res, delay);\n });\n}\n\nexport function parseCalldata(calldata: RawCalldata = []) {\n return calldata.map((data) => {\n if (typeof data === 'string' && isHex(data as string)) {\n return data;\n }\n return toHex(toBN(data));\n });\n}\n\nexport function parseContract(contract: CompiledContract | string) {\n const parsedContract =\n typeof contract === 'string' ? (parse(contract) as CompiledContract) : contract;\n return {\n ...parsedContract,\n program: compressProgram(parsedContract.program),\n } as ContractClass;\n}\n","/**\n * Map RPC Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\nimport {\n CallContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionResponse,\n RPC,\n} from '../../types';\nimport { toBN } from '../number';\nimport { ResponseParser } from '.';\n\ntype RpcGetBlockResponse = RPC.GetBlockWithTxHashesResponse & {\n [key: string]: any;\n};\n\ntype GetTransactionByHashResponse = RPC.GetTransactionByHashResponse & {\n [key: string]: any;\n};\n\nexport class RPCResponseParser\n implements\n Omit<\n ResponseParser,\n | 'parseDeclareContractResponse'\n | 'parseDeployContractResponse'\n | 'parseInvokeFunctionResponse'\n | 'parseGetTransactionReceiptResponse'\n >\n{\n public parseGetBlockResponse(res: RpcGetBlockResponse): GetBlockResponse {\n return {\n timestamp: res.timestamp,\n block_hash: res.block_hash,\n block_number: res.block_number,\n new_root: res.new_root,\n parent_hash: res.parent_hash,\n status: res.status,\n transactions: res.transactions,\n };\n }\n\n public parseGetTransactionResponse(res: GetTransactionByHashResponse): GetTransactionResponse {\n return {\n calldata: res.calldata || [],\n contract_address: res.contract_address,\n max_fee: res.max_fee,\n nonce: res.nonce,\n signature: res.signature || [],\n transaction_hash: res.transaction_hash,\n version: res.version,\n };\n }\n\n public parseFeeEstimateResponse(res: RPC.EstimateFeeResponse): EstimateFeeResponse {\n return {\n overall_fee: toBN(res.overall_fee),\n gas_consumed: toBN(res.gas_consumed),\n gas_price: toBN(res.gas_price),\n };\n }\n\n public parseCallContractResponse(res: Array<string>): CallContractResponse {\n return {\n result: res,\n };\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { CustomError } from 'ts-custom-error';\n\nexport class LibraryError extends CustomError {}\n\nexport class GatewayError extends LibraryError {\n constructor(message: string, public errorCode: string) {\n super(message);\n }\n}\n\nexport class HttpError extends LibraryError {\n constructor(message: string, public errorCode: number) {\n super(message);\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { BN } from 'bn.js';\n\nimport type { BlockNumber } from '../types';\nimport { BigNumberish, isHex, toBN, toHex } from '../utils/number';\n\n/**\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L148-L153)\n *\n * @param hashValue\n * @param hashField\n */\nexport function formatHash(hashValue: BigNumberish): string {\n if (typeof hashValue === 'string') return hashValue;\n return toHex(toBN(hashValue));\n}\n\n/**\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L156-L161)\n * @param txHash\n * @param txId\n */\nexport function txIdentifier(txHash?: BigNumberish, txId?: BigNumberish): string {\n if (!txHash) {\n return `transactionId=${JSON.stringify(txId)}`;\n }\n const hashString = formatHash(txHash);\n\n return `transactionHash=${hashString}`;\n}\n\n// hex string and BN are detected as block hashes\n// decimal string and number are detected as block numbers\n// null appends nothing to the request url\n\nexport type BlockIdentifier = BlockNumber | BigNumberish;\nexport const validBlockTags = ['latest', 'pending'];\n\nexport class Block {\n hash: BlockIdentifier = null;\n\n number: BlockIdentifier = null;\n\n tag: BlockIdentifier = null;\n\n private setIdentifier(__identifier: BlockIdentifier) {\n if (typeof __identifier === 'string' && isHex(__identifier)) {\n this.hash = __identifier;\n } else if (BN.isBN(__identifier)) {\n this.hash = toHex(__identifier);\n } else if (typeof __identifier === 'number') {\n this.number = __identifier;\n } else if (typeof __identifier === 'string' && validBlockTags.includes(__identifier)) {\n this.tag = __identifier;\n } else {\n // default\n this.tag = 'pending';\n }\n }\n\n constructor(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n // TODO: fix any\n get queryIdentifier(): any {\n if (this.number !== null) {\n return `blockNumber=${this.number}`;\n }\n\n if (this.hash !== null) {\n return `blockHash=${this.hash}`;\n }\n\n return `blockNumber=${this.tag}`;\n }\n\n // TODO: fix any\n get identifier(): any {\n if (this.number !== null) {\n return { block_number: this.number };\n }\n\n if (this.hash !== null) {\n return { block_hash: this.hash };\n }\n\n return this.tag;\n }\n\n set identifier(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n valueOf = () => this.number;\n\n toString = () => this.hash;\n}\n","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n RPC,\n} from '../types';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelectorFromName } from '../utils/hash';\nimport { stringify } from '../utils/json';\nimport {\n BigNumberish,\n bigNumberishArrayToHexadecimalStringArray,\n toBN,\n toHex,\n} from '../utils/number';\nimport { parseCalldata, wait } from '../utils/provider';\nimport { RPCResponseParser } from '../utils/responseParser/rpc';\nimport { LibraryError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { Block, BlockIdentifier } from './utils';\n\nexport type RpcProviderOptions = {\n nodeUrl: string;\n retries?: number;\n headers?: object;\n blockIdentifier?: BlockIdentifier;\n};\n\n// Default Pathfinder disabled pending block https://github.com/eqlabs/pathfinder/blob/main/README.md\n// Note that pending support is disabled by default and must be enabled by setting poll-pending=true in the configuration options.\nconst defaultOptions = {\n headers: { 'Content-Type': 'application/json' },\n blockIdentifier: 'latest',\n retries: 200,\n};\n\nexport class RpcProvider implements ProviderInterface {\n public nodeUrl: string;\n\n public chainId!: StarknetChainId;\n\n public headers: object;\n\n private responseParser = new RPCResponseParser();\n\n private retries: number;\n\n private blockIdentifier: BlockIdentifier;\n\n constructor(optionsOrProvider: RpcProviderOptions) {\n const { nodeUrl, retries, headers, blockIdentifier } = optionsOrProvider;\n this.nodeUrl = nodeUrl;\n this.retries = retries || defaultOptions.retries;\n this.headers = { ...defaultOptions.headers, ...headers };\n this.blockIdentifier = blockIdentifier || defaultOptions.blockIdentifier;\n\n this.getChainId().then((chainId) => {\n this.chainId = chainId;\n });\n }\n\n public fetch(method: any, params: any): Promise<any> {\n return fetch(this.nodeUrl, {\n method: 'POST',\n body: stringify({ method, jsonrpc: '2.0', params, id: 0 }),\n headers: this.headers as Record<string, string>,\n });\n }\n\n protected errorHandler(error: any) {\n if (error) {\n const { code, message } = error;\n throw new LibraryError(`${code}: ${message}`);\n }\n }\n\n protected async fetchEndpoint<T extends keyof RPC.Methods>(\n method: T,\n params?: RPC.Methods[T]['params']\n ): Promise<RPC.Methods[T]['result']> {\n try {\n const rawResult = await this.fetch(method, params);\n const { error, result } = await rawResult.json();\n this.errorHandler(error);\n return result as RPC.Methods[T]['result'];\n } catch (error: any) {\n this.errorHandler(error?.response?.data);\n throw error;\n }\n }\n\n // Methods from Interface\n public async getChainId(): Promise<any> {\n return this.fetchEndpoint('starknet_chainId');\n }\n\n // Methods from Interface\n public async getBlock(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<GetBlockResponse> {\n return this.getBlockWithTxHashes(blockIdentifier).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getBlockHashAndNumber(): Promise<RPC.BlockHashAndNumber> {\n return this.fetchEndpoint('starknet_blockHashAndNumber');\n }\n\n public async getBlockWithTxHashes(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.GetBlockWithTxHashesResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxHashes', { block_id });\n }\n\n public async getBlockWithTxs(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.GetBlockWithTxs> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxs', { block_id });\n }\n\n public async getClassHashAt(\n contractAddress: RPC.ContractAddress,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.Felt> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassHashAt', {\n block_id,\n contract_address: contractAddress,\n });\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.Nonce> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getNonce', {\n contract_address: contractAddress,\n block_id,\n });\n }\n\n public async getPendingTransactions(): Promise<RPC.PendingTransactions> {\n return this.fetchEndpoint('starknet_pendingTransactions');\n }\n\n public async getProtocolVersion(): Promise<Error> {\n throw new Error('Pathfinder does not implement this rpc 0.1.0 method');\n }\n\n public async getStateUpdate(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.StateUpdate> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStateUpdate', { block_id });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<BigNumberish> {\n const parsedKey = toHex(toBN(key));\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStorageAt', {\n contract_address: contractAddress,\n key: parsedKey,\n block_id,\n });\n }\n\n // Methods from Interface\n public async getTransaction(txHash: string): Promise<GetTransactionResponse> {\n return this.getTransactionByHash(txHash).then(this.responseParser.parseGetTransactionResponse);\n }\n\n public async getTransactionByHash(txHash: string): Promise<RPC.GetTransactionByHashResponse> {\n return this.fetchEndpoint('starknet_getTransactionByHash', { transaction_hash: txHash });\n }\n\n public async getTransactionByBlockIdAndIndex(\n blockIdentifier: BlockIdentifier,\n index: number\n ): Promise<RPC.GetTransactionByBlockIdAndIndex> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getTransactionByBlockIdAndIndex', { block_id, index });\n }\n\n public async getTransactionReceipt(txHash: string): Promise<RPC.TransactionReceipt> {\n return this.fetchEndpoint('starknet_getTransactionReceipt', { transaction_hash: txHash });\n }\n\n public async getClassByHash(classHash: RPC.Felt): Promise<RPC.ContractClass> {\n return this.getClass(classHash);\n }\n\n public async getClass(\n classHash: RPC.Felt,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.ContractClass> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClass', { class_hash: classHash, block_id });\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.ContractClass> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassAt', {\n block_id,\n contract_address: contractAddress,\n });\n }\n\n public async getCode(\n _contractAddress: string,\n _blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n throw new Error('RPC does not implement getCode function');\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'INVOKE',\n sender_address: invocation.contractAddress,\n calldata: parseCalldata(invocation.calldata),\n signature: bigNumberishArrayToHexadecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocationDetails?.version || 0)),\n nonce: toHex(toBN(invocationDetails.nonce)),\n max_fee: toHex(toBN(invocationDetails?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n // TODO: Revisit after Pathfinder release with JSON-RPC v0.2.1 RPC Spec\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'DECLARE',\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi, // rpc 2.0\n },\n sender_address: senderAddress,\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'DEPLOY_ACCOUNT',\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(toBN(classHash)),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getEstimateFeeBulk(\n _invocations: InvocationBulk,\n _blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponseBulk> {\n throw new Error('RPC does not implement getInvokeEstimateFeeBulk function');\n }\n\n // TODO: Revisit after Pathfinder release with JSON-RPC v0.2.1 RPC Spec\n public async declareContract(\n { contractDefinition, signature, senderAddress }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.fetchEndpoint('starknet_addDeclareTransaction', {\n declare_transaction: {\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi, // rpc 2.0\n },\n type: 'DECLARE',\n version: toHex(toBN(details.version || 0)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n sender_address: senderAddress,\n nonce: toHex(toBN(details.nonce)),\n },\n });\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.fetchEndpoint('starknet_addDeployAccountTransaction', {\n deploy_account_transaction: {\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(toBN(classHash)),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n type: 'DEPLOY_ACCOUNT',\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n nonce: toHex(toBN(details.nonce)),\n },\n });\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('starknet_addInvokeTransaction', {\n invoke_transaction: {\n sender_address: functionInvocation.contractAddress,\n calldata: parseCalldata(functionInvocation.calldata),\n type: 'INVOKE',\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 1)),\n signature: bigNumberishArrayToHexadecimalStringArray(functionInvocation.signature || []),\n nonce: toHex(toBN(details.nonce)),\n },\n });\n }\n\n // Methods from Interface\n public async callContract(\n call: Call,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<CallContractResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n const result = await this.fetchEndpoint('starknet_call', {\n request: {\n contract_address: call.contractAddress,\n entry_point_selector: getSelectorFromName(call.entrypoint),\n calldata: parseCalldata(call.calldata),\n },\n block_id,\n });\n\n return this.responseParser.parseCallContractResponse(result);\n }\n\n public async traceTransaction(transactionHash: RPC.TransactionHash): Promise<RPC.Trace> {\n return this.fetchEndpoint('starknet_traceTransaction', { transaction_hash: transactionHash });\n }\n\n public async traceBlockTransactions(blockHash: RPC.BlockHash): Promise<RPC.Traces> {\n return this.fetchEndpoint('starknet_traceBlockTransactions', { block_hash: blockHash });\n }\n\n public async waitForTransaction(\n txHash: string,\n retryInterval: number = 8000,\n successStates = ['ACCEPTED_ON_L1', 'ACCEPTED_ON_L2', 'PENDING']\n ) {\n const errorStates = ['REJECTED', 'NOT_RECEIVED'];\n let { retries } = this;\n let onchain = false;\n let txReceipt: any = {};\n\n while (!onchain) {\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n try {\n // eslint-disable-next-line no-await-in-loop\n txReceipt = await this.getTransactionReceipt(txHash);\n\n if (!('status' in txReceipt)) {\n const error = new Error('pending transaction');\n throw error;\n }\n\n if (txReceipt.status && successStates.includes(txReceipt.status)) {\n onchain = true;\n } else if (txReceipt.status && errorStates.includes(txReceipt.status)) {\n const message = txReceipt.status;\n const error = new Error(message) as Error & { response: any };\n error.response = txReceipt;\n throw error;\n }\n } catch (error: unknown) {\n if (error instanceof Error && errorStates.includes(error.message)) {\n throw error;\n }\n\n if (retries === 0) {\n throw new Error(`waitForTransaction timed-out with retries ${this.retries}`);\n }\n }\n\n retries -= 1;\n }\n\n await wait(retryInterval);\n return txReceipt;\n }\n\n /**\n * Gets the transaction count from a block.\n *\n *\n * @param blockIdentifier\n * @returns Number of transactions\n */\n public async getTransactionCount(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.GetTransactionCountResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockTransactionCount', { block_id });\n }\n\n /**\n * Gets the latest block number\n *\n *\n * @returns Number of the latest block\n */\n public async getBlockNumber(): Promise<RPC.GetBlockNumberResponse> {\n return this.fetchEndpoint('starknet_blockNumber');\n }\n\n /**\n * Gets syncing status of the node\n *\n *\n * @returns Object with the stats data\n */\n public async getSyncingStats(): Promise<RPC.GetSyncingStatsResponse> {\n return this.fetchEndpoint('starknet_syncing');\n }\n\n /**\n * Gets all the events filtered\n *\n *\n * @returns events and the pagination of the events\n */\n public async getEvents(eventFilter: RPC.EventFilter): Promise<RPC.GetEventsResponse> {\n return this.fetchEndpoint('starknet_getEvents', { filter: eventFilter });\n }\n}\n","import urljoin from 'url-join';\n\nimport { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n CallL1Handler,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetContractAddressesResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n GetTransactionStatusResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Sequencer,\n TransactionTraceResponse,\n} from '../types';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelector, getSelectorFromName } from '../utils/hash';\nimport { parse, parseAlwaysAsBig, stringify } from '../utils/json';\nimport {\n BigNumberish,\n bigNumberishArrayToDecimalStringArray,\n getDecimalString,\n getHexString,\n getHexStringArray,\n toBN,\n toHex,\n} from '../utils/number';\nimport { parseContract, wait } from '../utils/provider';\nimport { SequencerAPIResponseParser } from '../utils/responseParser/sequencer';\nimport { randomAddress } from '../utils/stark';\nimport { buildUrl } from '../utils/url';\nimport { GatewayError, HttpError, LibraryError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { Block, BlockIdentifier } from './utils';\n\ntype NetworkName = 'mainnet-alpha' | 'goerli-alpha' | 'goerli-alpha-2';\n\nexport type SequencerProviderOptions = {\n headers?: object;\n blockIdentifier?: BlockIdentifier;\n} & (\n | {\n network: NetworkName | StarknetChainId;\n chainId?: StarknetChainId;\n }\n | {\n baseUrl: string;\n feederGatewayUrl?: string;\n gatewayUrl?: string;\n chainId?: StarknetChainId;\n }\n);\n\nfunction isEmptyQueryObject(obj?: Record<any, any>): obj is undefined {\n return (\n obj === undefined ||\n Object.keys(obj).length === 0 ||\n (Object.keys(obj).length === 1 &&\n Object.entries(obj).every(([k, v]) => k === 'blockIdentifier' && v === null))\n );\n}\n\nconst defaultOptions = {\n network: 'goerli-alpha-2' as NetworkName,\n blockIdentifier: 'pending',\n};\n\nexport class SequencerProvider implements ProviderInterface {\n public baseUrl: string;\n\n public feederGatewayUrl: string;\n\n public gatewayUrl: string;\n\n public chainId: StarknetChainId;\n\n public headers: object | undefined;\n\n private responseParser = new SequencerAPIResponseParser();\n\n private blockIdentifier: BlockIdentifier;\n\n constructor(optionsOrProvider: SequencerProviderOptions = defaultOptions) {\n if ('network' in optionsOrProvider) {\n this.baseUrl = SequencerProvider.getNetworkFromName(optionsOrProvider.network);\n this.feederGatewayUrl = buildUrl(this.baseUrl, 'feeder_gateway');\n this.gatewayUrl = buildUrl(this.baseUrl, 'gateway');\n } else {\n this.baseUrl = optionsOrProvider.baseUrl;\n this.feederGatewayUrl = buildUrl(\n this.baseUrl,\n 'feeder_gateway',\n optionsOrProvider.feederGatewayUrl\n );\n this.gatewayUrl = buildUrl(this.baseUrl, 'gateway', optionsOrProvider.gatewayUrl);\n }\n this.chainId =\n optionsOrProvider?.chainId ?? SequencerProvider.getChainIdFromBaseUrl(this.baseUrl);\n this.headers = optionsOrProvider.headers;\n this.blockIdentifier = optionsOrProvider?.blockIdentifier || defaultOptions.blockIdentifier;\n }\n\n protected static getNetworkFromName(name: NetworkName | StarknetChainId) {\n switch (name) {\n case 'mainnet-alpha' || StarknetChainId.MAINNET:\n return 'https://alpha-mainnet.starknet.io';\n case 'goerli-alpha' || StarknetChainId.TESTNET:\n return 'https://alpha4.starknet.io';\n case 'goerli-alpha-2' || StarknetChainId.TESTNET2:\n return 'https://alpha4-2.starknet.io';\n default:\n return 'https://alpha4.starknet.io';\n }\n }\n\n protected static getChainIdFromBaseUrl(baseUrl: string): StarknetChainId {\n try {\n const url = new URL(baseUrl);\n if (url.host.includes('mainnet.starknet.io')) {\n return StarknetChainId.MAINNET;\n }\n if (url.host.includes('alpha4-2.starknet.io')) {\n return StarknetChainId.TESTNET2;\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Could not parse baseUrl: ${baseUrl}`);\n }\n return StarknetChainId.TESTNET;\n }\n\n private getFetchUrl(endpoint: keyof Sequencer.Endpoints) {\n const gatewayUrlEndpoints = ['add_transaction'];\n\n return gatewayUrlEndpoints.includes(endpoint) ? this.gatewayUrl : this.feederGatewayUrl;\n }\n\n private getFetchMethod(endpoint: keyof Sequencer.Endpoints) {\n const postMethodEndpoints = [\n 'add_transaction',\n 'call_contract',\n 'estimate_fee',\n 'estimate_message_fee',\n 'estimate_fee_bulk',\n 'simulate_transaction',\n ];\n\n return postMethodEndpoints.includes(endpoint) ? 'POST' : 'GET';\n }\n\n private getQueryString(query?: Record<string, any>): string {\n if (isEmptyQueryObject(query)) {\n return '';\n }\n const queryString = Object.entries(query)\n .map(([key, value]) => {\n if (key === 'blockIdentifier') {\n const block = new Block(value);\n return `${block.queryIdentifier}`;\n }\n return `${key}=${value}`;\n })\n .join('&');\n\n return `?${queryString}`;\n }\n\n private getHeaders(method: 'POST' | 'GET'): object | undefined {\n if (method === 'POST') {\n return {\n 'Content-Type': 'application/json',\n ...this.headers,\n };\n }\n return this.headers;\n }\n\n // typesafe fetch\n protected async fetchEndpoint<T extends keyof Sequencer.Endpoints>(\n endpoint: T,\n // typescript type magic to create a nice fitting function interface\n ...[query, request]: Sequencer.Endpoints[T]['QUERY'] extends never\n ? Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [] // when no query and no request is needed, we can omit the query and request parameters\n : [undefined, Sequencer.Endpoints[T]['REQUEST']]\n : Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [Sequencer.Endpoints[T]['QUERY']] // when no request is needed, we can omit the request parameter\n : [Sequencer.Endpoints[T]['QUERY'], Sequencer.Endpoints[T]['REQUEST']] // when both query and request are needed, we cant omit anything\n ): Promise<Sequencer.Endpoints[T]['RESPONSE']> {\n const baseUrl = this.getFetchUrl(endpoint);\n const method = this.getFetchMethod(endpoint);\n const queryString = this.getQueryString(query);\n const headers = this.getHeaders(method);\n const url = urljoin(baseUrl, endpoint, queryString);\n\n try {\n const res = await fetch(url, {\n method,\n body: stringify(request),\n headers: headers as Record<string, string>,\n });\n const textResponse = await res.text();\n if (!res.ok) {\n // This will allow user to handle contract errors\n let responseBody: any;\n try {\n responseBody = parse(textResponse);\n } catch {\n // if error parsing fails, return an http error\n throw new HttpError(res.statusText, res.status);\n }\n\n const errorCode = responseBody.code || ((responseBody as any)?.status_code as string); // starknet-devnet uses status_code instead of code; They need to fix that\n throw new GatewayError(responseBody.message, errorCode); // Caught locally, and re-thrown for the user\n }\n\n if (endpoint === 'estimate_fee') {\n return parseAlwaysAsBig(textResponse, (_, v) => {\n if (v && typeof v === 'bigint') {\n return toBN(v.toString());\n }\n return v;\n });\n }\n return parse(textResponse) as Sequencer.Endpoints[T]['RESPONSE'];\n } catch (err) {\n // rethrow custom errors\n if (err instanceof GatewayError || err instanceof HttpError) {\n throw err;\n }\n if (err instanceof Error) {\n throw Error(`Could not ${method} from endpoint \\`${url}\\`: ${err.message}`);\n }\n throw err;\n }\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return Promise.resolve(this.chainId);\n }\n\n public async callContract(\n { contractAddress, entrypoint: entryPointSelector, calldata = [] }: Call,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<CallContractResponse> {\n return this.fetchEndpoint(\n 'call_contract',\n { blockIdentifier },\n {\n signature: [],\n contract_address: contractAddress,\n entry_point_selector: getSelectorFromName(entryPointSelector),\n calldata,\n }\n ).then(this.responseParser.parseCallContractResponse);\n }\n\n public async getBlock(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<GetBlockResponse> {\n return this.fetchEndpoint('get_block', { blockIdentifier }).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<BigNumberish> {\n return this.fetchEndpoint('get_nonce', { contractAddress, blockIdentifier });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<BigNumberish> {\n const parsedKey = toBN(key).toString(10);\n return this.fetchEndpoint('get_storage_at', {\n blockIdentifier,\n contractAddress,\n key: parsedKey,\n });\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction', { transactionHash: txHashHex }).then((result) => {\n // throw for no matching transaction to unify behavior with RPC and avoid parsing errors\n if (Object.values(result).length === 1) throw new LibraryError(result.status);\n return this.responseParser.parseGetTransactionResponse(result);\n });\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_receipt', { transactionHash: txHashHex }).then(\n this.responseParser.parseGetTransactionReceiptResponse\n );\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<ContractClass> {\n return this.fetchEndpoint('get_full_contract', { blockIdentifier, contractAddress }).then(\n parseContract\n );\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<string> {\n return this.fetchEndpoint('get_class_hash_at', { blockIdentifier, contractAddress });\n }\n\n public async getClassByHash(classHash: string): Promise<ContractClass> {\n return this.fetchEndpoint('get_class_by_hash', { classHash }).then(parseContract);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'INVOKE_FUNCTION',\n contract_address: functionInvocation.contractAddress,\n calldata: bigNumberishArrayToDecimalStringArray(functionInvocation.calldata ?? []),\n signature: bigNumberishArrayToDecimalStringArray(functionInvocation.signature ?? []),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 1)),\n }).then(this.responseParser.parseInvokeFunctionResponse);\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DEPLOY_ACCOUNT',\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata ?? []),\n class_hash: toHex(toBN(classHash)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n }).then(this.responseParser.parseDeployContractResponse);\n }\n\n public async declareContract(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DECLARE',\n contract_class: contractDefinition,\n nonce: toHex(toBN(details.nonce)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n sender_address: senderAddress,\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 1)),\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'INVOKE_FUNCTION',\n contract_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n signature: bigNumberishArrayToDecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocationDetails?.version || 1)),\n nonce: toHex(toBN(invocationDetails.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'DECLARE',\n sender_address: senderAddress,\n contract_class: contractDefinition,\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 1)),\n nonce: toHex(toBN(details.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, addressSalt, constructorCalldata, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'DEPLOY_ACCOUNT',\n class_hash: toHex(toBN(classHash)),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata || []),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getEstimateFeeBulk(\n invocations: InvocationBulk,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponseBulk> {\n const params: Sequencer.EstimateFeeRequestBulk = invocations.map((invocation) => {\n let res;\n if (invocation.type === 'INVOKE_FUNCTION') {\n res = {\n type: invocation.type,\n contract_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n };\n } else if (invocation.type === 'DECLARE') {\n res = {\n type: invocation.type,\n sender_address: invocation.senderAddress,\n contract_class: invocation.contractDefinition,\n };\n } else {\n res = {\n type: invocation.type,\n class_hash: toHex(toBN(invocation.classHash)),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(\n invocation.constructorCalldata || []\n ),\n contract_address_salt: toHex(toBN(invocation.addressSalt || 0)),\n };\n }\n return {\n ...res,\n signature: bigNumberishArrayToDecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocation?.version || 1)),\n nonce: toHex(toBN(invocation.nonce)),\n };\n });\n\n return this.fetchEndpoint('estimate_fee_bulk', { blockIdentifier }, params).then(\n this.responseParser.parseFeeEstimateBulkResponse\n );\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.GetCodeResponse> {\n return this.fetchEndpoint('get_code', { contractAddress, blockIdentifier });\n }\n\n public async waitForTransaction(\n txHash: BigNumberish,\n retryInterval: number = 8000,\n successStates = ['ACCEPTED_ON_L1', 'ACCEPTED_ON_L2', 'PENDING']\n ) {\n const errorStates = ['REJECTED', 'NOT_RECEIVED'];\n let onchain = false;\n let res;\n\n while (!onchain) {\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n // eslint-disable-next-line no-await-in-loop\n res = await this.getTransactionStatus(txHash);\n\n if (successStates.includes(res.tx_status)) {\n onchain = true;\n } else if (errorStates.includes(res.tx_status)) {\n const message = res.tx_failure_reason\n ? `${res.tx_status}: ${res.tx_failure_reason.code}\\n${res.tx_failure_reason.error_message}`\n : res.tx_status;\n const error = new Error(message) as Error & { response: GetTransactionStatusResponse };\n error.response = res;\n throw error;\n }\n }\n const txReceipt = await this.getTransactionReceipt(txHash);\n return txReceipt;\n }\n\n /**\n * Gets the status of a transaction.\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L48-L52)\n *\n * @param txHash\n * @returns the transaction status object { block_number, tx_status: NOT_RECEIVED | RECEIVED | PENDING | REJECTED | ACCEPTED_ONCHAIN }\n */\n public async getTransactionStatus(txHash: BigNumberish): Promise<GetTransactionStatusResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_status', { transactionHash: txHashHex });\n }\n\n /**\n * Gets the smart contract address on the goerli testnet.\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L13-L15)\n * @returns starknet smart contract addresses\n */\n public async getContractAddresses(): Promise<GetContractAddressesResponse> {\n return this.fetchEndpoint('get_contract_addresses');\n }\n\n /**\n * Gets the transaction trace from a tx id.\n *\n * @param txHash\n * @returns the transaction trace\n */\n public async getTransactionTrace(txHash: BigNumberish): Promise<TransactionTraceResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_trace', { transactionHash: txHashHex });\n }\n\n public async estimateMessageFee(\n { from_address, to_address, entry_point_selector, payload }: CallL1Handler,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.EstimateFeeResponse> {\n const validCallL1Handler = {\n from_address: getDecimalString(from_address),\n to_address: getHexString(to_address),\n entry_point_selector: getSelector(entry_point_selector),\n payload: getHexStringArray(payload),\n };\n\n return this.fetchEndpoint('estimate_message_fee', { blockIdentifier }, validCallL1Handler);\n }\n\n public async simulateTransaction(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.TransactionSimulationResponse> {\n return this.fetchEndpoint(\n 'simulate_transaction',\n { blockIdentifier },\n {\n type: 'INVOKE_FUNCTION',\n contract_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n signature: bigNumberishArrayToDecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocationDetails?.version || 1)),\n nonce: toHex(toBN(invocationDetails.nonce)),\n }\n );\n }\n}\n","import {\n CallContractResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n} from '../../types';\n\nexport abstract class ResponseParser {\n abstract parseGetBlockResponse(res: any): GetBlockResponse;\n\n abstract parseGetTransactionResponse(res: any): GetTransactionResponse;\n\n abstract parseGetTransactionReceiptResponse(res: any): GetTransactionReceiptResponse;\n\n abstract parseFeeEstimateResponse(res: any): EstimateFeeResponse;\n\n abstract parseCallContractResponse(res: any): CallContractResponse;\n\n abstract parseInvokeFunctionResponse(res: any): InvokeFunctionResponse;\n\n abstract parseDeployContractResponse(res: any): DeployContractResponse;\n\n abstract parseDeclareContractResponse(res: any): DeclareContractResponse;\n}\n","/**\n * Map Sequencer Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\nimport {\n CallContractResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n Sequencer,\n} from '../../types';\nimport { toBN } from '../number';\nimport { ResponseParser } from '.';\n\nexport class SequencerAPIResponseParser extends ResponseParser {\n public parseGetBlockResponse(res: Sequencer.GetBlockResponse): GetBlockResponse {\n return {\n ...res,\n new_root: res.state_root,\n parent_hash: res.parent_block_hash,\n transactions: Object.values(res.transactions)\n .map((value) => 'transaction_hash' in value && value.transaction_hash)\n .filter(Boolean) as Array<string>,\n };\n }\n\n public parseGetTransactionResponse(\n res: Sequencer.GetTransactionResponse\n ): GetTransactionResponse {\n return {\n ...res,\n calldata: 'calldata' in res.transaction ? (res.transaction.calldata as Array<string>) : [],\n contract_address:\n 'contract_address' in res.transaction ? res.transaction.contract_address : undefined,\n contract_class:\n 'contract_class' in res.transaction ? (res.transaction.contract_class as any) : undefined,\n entry_point_selector:\n 'entry_point_selector' in res.transaction\n ? res.transaction.entry_point_selector\n : undefined,\n max_fee: 'max_fee' in res.transaction ? (res.transaction.max_fee as string) : undefined,\n nonce: res.transaction.nonce as string,\n sender_address:\n 'sender_address' in res.transaction\n ? (res.transaction.sender_address as string)\n : undefined,\n signature: 'signature' in res.transaction ? res.transaction.signature : undefined,\n transaction_hash:\n 'transaction_hash' in res.transaction ? res.transaction.transaction_hash : undefined,\n version: 'version' in res.transaction ? (res.transaction.version as string) : undefined,\n };\n }\n\n public parseGetTransactionReceiptResponse(\n res: Sequencer.TransactionReceiptResponse\n ): GetTransactionReceiptResponse {\n return {\n transaction_hash: res.transaction_hash,\n status: res.status,\n messages_sent: res.l2_to_l1_messages as any, // TODO: parse\n events: res.events as any,\n ...('block_hash' in res && { block_hash: res.block_hash }),\n ...('block_number' in res && { block_number: res.block_number }),\n ...('actual_fee' in res && { actual_fee: res.actual_fee }),\n ...('transaction_index' in res && { transaction_index: res.transaction_index }),\n ...('execution_resources' in res && { execution_resources: res.execution_resources }),\n ...('l1_to_l2_consumed_message' in res && {\n // eslint-disable-next-line @typescript-eslint/dot-notation\n l1_to_l2_consumed_message: res['l1_to_l2_consumed_message'],\n }),\n ...('transaction_failure_reason' in res && {\n transaction_failure_reason: res.transaction_failure_reason,\n }),\n };\n }\n\n public parseFeeEstimateResponse(res: Sequencer.EstimateFeeResponse): EstimateFeeResponse {\n if ('overall_fee' in res) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBN(res.gas_usage),\n gas_price: toBN(res.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBN(res.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBN(res.amount),\n };\n }\n\n public parseFeeEstimateBulkResponse(\n res: Sequencer.EstimateFeeResponseBulk\n ): EstimateFeeResponseBulk {\n return [].concat(res as []).map((item: Sequencer.EstimateFeeResponse) => {\n if ('overall_fee' in item) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBN(item.gas_usage),\n gas_price: toBN(item.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBN(item.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBN(item.amount),\n };\n });\n }\n\n public parseCallContractResponse(res: Sequencer.CallContractResponse): CallContractResponse {\n return {\n result: res.result,\n };\n }\n\n public parseInvokeFunctionResponse(\n res: Sequencer.AddTransactionResponse\n ): InvokeFunctionResponse {\n return {\n transaction_hash: res.transaction_hash,\n };\n }\n\n public parseDeployContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeployContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n contract_address: res.address as string,\n };\n }\n\n public parseDeclareContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeclareContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n class_hash: res.class_hash as string,\n };\n }\n}\n","import urljoin from 'url-join';\n\n/**\n * Inspired from https://github.com/segmentio/is-url\n */\n\n/**\n * RegExps.\n * A URL must match #1 and then at least one of #2/#3.\n * Use two levels of REs to avoid REDOS.\n */\nconst protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\n\nconst localhostDomainRE = /^localhost[:?\\d]*(?:[^:?\\d]\\S*)?$/;\nconst nonLocalhostDomainRE = /^[^\\s.]+\\.\\S{2,}$/;\n\n/**\n * Loosely validate a URL `string`.\n * @param {String} s\n * @return {Boolean}\n */\nexport function isUrl(s?: string): boolean {\n if (!s) {\n return false;\n }\n\n if (typeof s !== 'string') {\n return false;\n }\n\n const match = s.match(protocolAndDomainRE);\n if (!match) {\n return false;\n }\n\n const everythingAfterProtocol = match[1];\n if (!everythingAfterProtocol) {\n return false;\n }\n\n if (\n localhostDomainRE.test(everythingAfterProtocol) ||\n nonLocalhostDomainRE.test(everythingAfterProtocol)\n ) {\n return true;\n }\n\n return false;\n}\n\nexport function buildUrl(baseUrl: string, defaultPath: string, urlOrPath?: string) {\n return isUrl(urlOrPath) ? urlOrPath! : urljoin(baseUrl, urlOrPath ?? defaultPath);\n}\n","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Status,\n} from '../types';\nimport { BigNumberish } from '../utils/number';\nimport { ProviderInterface } from './interface';\nimport { RpcProvider, RpcProviderOptions } from './rpc';\nimport { SequencerProvider, SequencerProviderOptions } from './sequencer';\nimport { BlockIdentifier } from './utils';\n\nexport interface ProviderOptions {\n sequencer?: SequencerProviderOptions;\n rpc?: RpcProviderOptions;\n}\n\nexport class Provider implements ProviderInterface {\n private provider!: ProviderInterface;\n\n constructor(providerOrOptions?: ProviderOptions | ProviderInterface) {\n if (providerOrOptions instanceof Provider) {\n // providerOrOptions is Provider\n this.provider = providerOrOptions.provider;\n } else if (\n providerOrOptions instanceof RpcProvider ||\n providerOrOptions instanceof SequencerProvider\n ) {\n // providerOrOptions is SequencerProvider or RpcProvider\n this.provider = <ProviderInterface>providerOrOptions;\n } else if (providerOrOptions && 'rpc' in providerOrOptions) {\n // providerOrOptions is rpc option\n this.provider = new RpcProvider(<RpcProviderOptions>providerOrOptions.rpc);\n } else if (providerOrOptions && 'sequencer' in providerOrOptions) {\n // providerOrOptions is sequencer option\n this.provider = new SequencerProvider(<SequencerProviderOptions>providerOrOptions.sequencer);\n } else {\n // providerOrOptions is none, create SequencerProvider as default\n this.provider = new SequencerProvider();\n }\n }\n\n public get chainId(): StarknetChainId {\n return this.provider.chainId;\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return this.provider.getChainId();\n }\n\n public async getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse> {\n return this.provider.getBlock(blockIdentifier);\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClass> {\n return this.provider.getClassAt(contractAddress, blockIdentifier);\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier\n ): Promise<string> {\n return this.provider.getClassHashAt(contractAddress, blockIdentifier);\n }\n\n public getClassByHash(classHash: string): Promise<ContractClass> {\n return this.provider.getClassByHash(classHash);\n }\n\n public async getEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.provider.getEstimateFee(invocationWithTxType, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.provider.getInvokeEstimateFee(\n invocationWithTxType,\n invocationDetails,\n blockIdentifier\n );\n }\n\n public async getEstimateFeeBulk(\n invocations: InvocationBulk,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponseBulk> {\n return this.provider.getEstimateFeeBulk(invocations, blockIdentifier);\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish> {\n return this.provider.getNonceForAddress(contractAddress, blockIdentifier);\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish> {\n return this.provider.getStorageAt(contractAddress, key, blockIdentifier);\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n return this.provider.getTransaction(txHash);\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n return this.provider.getTransactionReceipt(txHash);\n }\n\n public async callContract(\n request: Call,\n blockIdentifier?: BlockIdentifier\n ): Promise<CallContractResponse> {\n return this.provider.callContract(request, blockIdentifier);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.provider.invokeFunction(functionInvocation, details);\n }\n\n public async deployAccountContract(\n payload: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.provider.deployAccountContract(payload, details);\n }\n\n public async declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.provider.declareContract(transaction, details);\n }\n\n public async getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeclareEstimateFee(transaction, details, blockIdentifier);\n }\n\n public getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeployAccountEstimateFee(transaction, details, blockIdentifier);\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n return this.provider.getCode(contractAddress, blockIdentifier);\n }\n\n public async waitForTransaction(\n txHash: BigNumberish,\n retryInterval?: number,\n successStates?: Array<Status>\n ): Promise<GetTransactionReceiptResponse> {\n return this.provider.waitForTransaction(txHash, retryInterval, successStates);\n }\n}\n","import { StarknetChainId } from '../constants';\nimport type {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Status,\n} from '../types';\nimport type { BigNumberish } from '../utils/number';\nimport { BlockIdentifier } from './utils';\n\nexport abstract class ProviderInterface {\n public abstract chainId: StarknetChainId;\n\n /**\n * Gets the Starknet chain Id\n *\n * @returns the chain Id\n */\n public abstract getChainId(): Promise<StarknetChainId>;\n\n /**\n * Calls a function on the StarkNet contract.\n *\n * @param call transaction to be called\n * @param blockIdentifier block identifier\n * @returns the result of the function on the smart contract.\n */\n public abstract callContract(\n call: Call,\n blockIdentifier?: BlockIdentifier\n ): Promise<CallContractResponse>;\n\n /**\n * Gets the block information\n *\n * @param blockIdentifier block identifier\n * @returns the block object\n */\n public abstract getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse>;\n\n /**\n * @deprecated The method should not be used\n */\n public abstract getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse>;\n\n /**\n * Gets the contract class of the deployed contract.\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Contract class of compiled contract\n */\n public abstract getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClass>;\n\n /**\n * Returns the class hash deployed under the given address.\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Class hash\n */\n public abstract getClassHashAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<string>;\n\n /**\n * Returns the contract class deployed under the given class hash.\n *\n * @param classHash - class hash\n * @returns Contract class of compiled contract\n */\n public abstract getClassByHash(classHash: string): Promise<ContractClass>;\n\n /**\n * Gets the nonce of a contract with respect to a specific block\n *\n * @param contractAddress - contract address\n * @returns the hex nonce\n */\n public abstract getNonceForAddress(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish>;\n\n /**\n * Gets the contract's storage variable at a specific key.\n *\n * @param contractAddress\n * @param key - from getStorageVarAddress('<STORAGE_VARIABLE_NAME>') (WIP)\n * @param blockIdentifier - block identifier\n * @returns the value of the storage variable\n */\n public abstract getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish>;\n\n /**\n * Gets the transaction information from a tx id.\n *\n * @param txHash\n * @returns the transaction object { transaction_id, status, transaction, block_number?, block_number?, transaction_index?, transaction_failure_reason? }\n */\n public abstract getTransaction(transactionHash: BigNumberish): Promise<GetTransactionResponse>;\n\n /**\n * Gets the transaction receipt from a tx hash.\n *\n * @param txHash\n * @returns the transaction receipt object\n */\n public abstract getTransactionReceipt(\n transactionHash: BigNumberish\n ): Promise<GetTransactionReceiptResponse>;\n\n /**\n * Deploys a given compiled Account contract (json) to starknet\n *\n * @param payload payload to be deployed containing:\n * - compiled contract code\n * - constructor calldata\n * - address salt\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccountContract(\n payload: DeployAccountContractPayload,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse>;\n\n /**\n * Invokes a function on starknet\n * @deprecated This method wont be supported as soon as fees are mandatory. Should not be used outside of Account class\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * - maxFee - optional maxFee\n * @returns response from addTransaction\n */\n public abstract invokeFunction(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * @param transaction transaction payload to be deployed containing:\n * - compiled contract code\n * - sender address\n * - signature\n * @param details Invocation Details containing:\n * - nonce\n * - optional version\n * - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n * @deprecated Please use getInvokeEstimateFee or getDeclareEstimateFee instead. Should not be used outside of Account class\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param blockIdentifier - block identifier\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @returns the estimated fee\n */\n public abstract getEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param blockIdentifier - block identifier\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @returns the estimated fee\n */\n public abstract getInvokeEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DECLARE transaction\n *\n * @param transaction transaction payload to be declared containing:\n * - compiled contract code\n * - sender address\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DEPLOY_ACCOUNT transaction\n *\n * @param transaction transaction payload to be deployed containing:\n * - classHash\n * - constructorCalldata\n * - addressSalt\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a list of INVOKE transaction\n *\n * @param invocations the array of invocation and invocation details object containing:\n * - contractAddress - the address of the account\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * - nonce - optional nonce\n * - version - optional version\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getEstimateFeeBulk(\n invocations: InvocationBulk,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponseBulk>;\n\n /**\n * Wait for the transaction to be accepted\n * @param txHash - transaction hash\n * @param retryInterval - retry interval\n * @return GetTransactionReceiptResponse\n */\n public abstract waitForTransaction(\n txHash: BigNumberish,\n retryInterval?: number,\n successStates?: Array<Status>\n ): Promise<GetTransactionReceiptResponse>;\n}\n","import { Provider } from './default';\n\nexport * from './default';\nexport * from './errors';\nexport * from './sequencer';\nexport * from './interface';\nexport * from './rpc';\n\nexport const defaultProvider = new Provider();\n","import BN from 'bn.js';\nimport assert from 'minimalistic-assert';\n\nimport { Abi, AbiEntry, Calldata, FunctionAbi, ParsedStruct, StructAbi } from '../types';\nimport { BigNumberish, toFelt } from './number';\n\nexport class CheckCallData {\n abi: Abi;\n\n protected readonly structs: { [name: string]: StructAbi };\n\n constructor(abi: Abi) {\n this.abi = abi;\n this.structs = abi\n .filter((abiEntry) => abiEntry.type === 'struct')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n }\n\n /**\n * Parse the calldata by using input fields from the abi for that method\n *\n * @param args - arguments passed the the method\n * @param inputs - list of inputs(fields) that are in the abi\n * @return {Calldata} - parsed arguments in format that contract is expecting\n */\n public compileCalldata(args: Array<any>, inputs: AbiEntry[]): Calldata {\n const argsIterator = args[Symbol.iterator]();\n return inputs.reduce((acc, input) => {\n if (/_len$/.test(input.name)) {\n return acc;\n }\n const parsedData = this.parseCalldataField(argsIterator, input);\n if (Array.isArray(parsedData)) {\n acc.push(...parsedData);\n } else {\n acc.push(parsedData);\n }\n return acc;\n }, [] as Calldata);\n }\n\n /**\n * Validates if all arguments that are passed to the method are corresponding to the ones in the abi\n *\n * @param type - type of the method\n * @param method - name of the method\n * @param args - arguments that are passed to the method\n */\n public validateMethodAndArgs(\n type: 'INVOKE' | 'CALL' | 'DEPLOY',\n method: string,\n args: Array<any> = []\n ) {\n // ensure provided method exists\n if (type !== 'DEPLOY') {\n const invocableFunctionNames = this.abi\n .filter((abi) => {\n if (abi.type !== 'function') return false;\n const isView = abi.stateMutability === 'view';\n return type === 'INVOKE' ? !isView : isView;\n })\n .map((abi) => abi.name);\n assert(\n invocableFunctionNames.includes(method),\n `${type === 'INVOKE' ? 'invocable' : 'viewable'} method not found in abi`\n );\n }\n\n // ensure args match abi type\n const methodAbi = this.abi.find((abi) =>\n type === 'DEPLOY'\n ? abi.name === method && abi.type === method\n : abi.name === method && abi.type === 'function'\n ) as FunctionAbi;\n let argPosition = 0;\n methodAbi.inputs.forEach((input) => {\n if (/_len$/.test(input.name)) {\n return;\n }\n if (input.type === 'felt') {\n assert(\n typeof args[argPosition] === 'string' ||\n typeof args[argPosition] === 'number' ||\n args[argPosition] instanceof BN,\n `arg ${input.name} should be a felt (string, number, BigNumber)`\n );\n argPosition += 1;\n } else if (input.type in this.structs && typeof args[argPosition] === 'object') {\n if (Array.isArray(args[argPosition])) {\n const structMembersLength = this.calculateStructMembers(input.type);\n assert(\n args[argPosition].length === structMembersLength,\n `arg should be of length ${structMembersLength}`\n );\n } else {\n this.structs[input.type].members.forEach(({ name }) => {\n assert(\n Object.keys(args[argPosition]).includes(name),\n `arg should have a property ${name}`\n );\n });\n }\n argPosition += 1;\n } else {\n assert(Array.isArray(args[argPosition]), `arg ${input.name} should be an Array`);\n if (input.type === 'felt*') {\n args[argPosition].forEach((felt: BigNumberish) => {\n assert(\n typeof felt === 'string' || typeof felt === 'number' || felt instanceof BN,\n `arg ${input.name} should be an array of string, number or BigNumber`\n );\n });\n argPosition += 1;\n } else if (/\\(felt/.test(input.type)) {\n const tupleLength = input.type.split(',').length;\n assert(\n args[argPosition].length === tupleLength,\n `arg ${input.name} should have ${tupleLength} elements in tuple`\n );\n args[argPosition].forEach((felt: BigNumberish) => {\n assert(\n typeof felt === 'string' || typeof felt === 'number' || felt instanceof BN,\n `arg ${input.name} should be an array of string, number or BigNumber`\n );\n });\n argPosition += 1;\n } else {\n const arrayType = input.type.replace('*', '');\n args[argPosition].forEach((struct: any) => {\n this.structs[arrayType].members.forEach(({ name }) => {\n if (Array.isArray(struct)) {\n const structMembersLength = this.calculateStructMembers(arrayType);\n assert(\n struct.length === structMembersLength,\n `arg should be of length ${structMembersLength}`\n );\n } else {\n assert(\n Object.keys(struct).includes(name),\n `arg ${input.name} should be an array of ${arrayType}`\n );\n }\n });\n });\n argPosition += 1;\n }\n }\n });\n }\n\n /**\n * Parse one field of the calldata by using input field from the abi for that method\n *\n * @param args - value of the field\n * @param input - input(field) information from the abi that will be used to parse the data\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\n protected parseCalldataField(argsIterator: Iterator<any>, input: AbiEntry): string | string[] {\n const { name, type } = input;\n const { value } = argsIterator.next();\n\n const parsedCalldata: string[] = [];\n switch (true) {\n case /\\*/.test(type):\n if (Array.isArray(value)) {\n parsedCalldata.push(toFelt(value.length));\n return (value as (BigNumberish | ParsedStruct)[]).reduce((acc, el) => {\n if (/felt/.test(type)) {\n acc.push(toFelt(el as BigNumberish));\n } else {\n acc.push(...this.parseCalldataValue(el, type.replace('*', '')));\n }\n return acc;\n }, parsedCalldata);\n }\n throw Error(`Expected ${name} to be array`);\n case type in this.structs:\n return this.parseCalldataValue(value as ParsedStruct | BigNumberish[], type);\n case /\\(felt/.test(type):\n if (Array.isArray(value)) {\n return value.map((el) => toFelt(el as BigNumberish));\n }\n throw Error(`Expected ${name} to be array`);\n default:\n return toFelt(value as BigNumberish);\n }\n }\n\n /**\n * Deep parse of the object that has been passed to the method\n *\n * @param element - element that needs to be parsed\n * @param type - name of the method\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\n\n protected parseCalldataValue(\n element: ParsedStruct | BigNumberish | BigNumberish[],\n type: string\n ): string | string[] {\n if (element === undefined) {\n throw Error('Missing element in calldata');\n }\n if (Array.isArray(element)) {\n const structMemberNum = this.calculateStructMembers(type);\n if (element.length !== structMemberNum) {\n throw Error('Missing element in calldata');\n }\n return element.map((el) => toFelt(el));\n }\n // checking if the passed element is struct or element in struct\n if (this.structs[type] && this.structs[type].members.length) {\n // going through all the members of the struct and parsing the value\n return this.structs[type].members.reduce((acc, member: AbiEntry) => {\n // if the member of the struct is another struct this will return array of the felts if not it will be single felt\n // TODO: refactor types so member name can be used as keyof ParsedStruct\n /* @ts-ignore */\n const parsedData = this.parseCalldataValue(element[member.name], member.type);\n if (typeof parsedData === 'string') {\n acc.push(parsedData);\n } else {\n acc.push(...parsedData);\n }\n return acc;\n }, [] as string[]);\n }\n return toFelt(element as BigNumberish);\n }\n\n /**\n * Deep parse of the object that has been passed to the method\n *\n * @param struct - struct that needs to be calculated\n * @return {number} - number of members for the given struct\n */\n private calculateStructMembers(struct: string): number {\n return this.structs[struct].members.reduce((acc, member) => {\n if (member.type === 'felt') {\n return acc + 1;\n }\n return acc + this.calculateStructMembers(member.type);\n }, 0);\n }\n}\n","import { AccountInterface } from '../account';\nimport { ProviderInterface } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport {\n Abi,\n AsyncContractFunction,\n ContractFunction,\n Invocation,\n InvokeFunctionResponse,\n Overrides,\n Result,\n} from '../types';\n\nexport type CallOptions = {\n blockIdentifier?: BlockIdentifier;\n};\n\nexport abstract class ContractInterface {\n public abstract abi: Abi;\n\n public abstract address: string;\n\n public abstract providerOrAccount: ProviderInterface | AccountInterface;\n\n public abstract deployTransactionHash?: string;\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n /**\n * Saves the address of the contract deployed on network that will be used for interaction\n *\n * @param address - address of the contract\n */\n public abstract attach(address: string): void;\n\n /**\n * Attaches to new Provider or Account\n *\n * @param providerOrAccount - new Provider or Account to attach to\n */\n public abstract connect(providerOrAccount: ProviderInterface | AccountInterface): void;\n\n /**\n * Resolves when contract is deployed on the network or when no deployment transaction is found\n *\n * @returns Promise that resolves when contract is deployed on the network or when no deployment transaction is found\n * @throws When deployment fails\n */\n public abstract deployed(): Promise<ContractInterface>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @param options optional blockIdentifier\n * @returns Result of the call as an array with key value pars\n */\n public abstract call(method: string, args?: Array<any>, options?: CallOptions): Promise<Result>;\n\n /**\n * Invokes a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the invoke\n * @param options\n * @returns Add Transaction Response\n */\n public abstract invoke(\n method: string,\n args?: Array<any>,\n options?: Overrides\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Estimates a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @param options optional blockIdentifier\n */\n public abstract estimate(\n method: string,\n args?: Array<any>,\n options?: {\n blockIdentifier?: BlockIdentifier;\n }\n ): Promise<any>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @returns Invocation object\n */\n public abstract populate(method: string, args?: Array<any>): Invocation;\n}\n","import assert from 'minimalistic-assert';\n\nimport { AccountInterface } from '../account';\nimport { Abi, CompiledContract, FunctionAbi } from '../types';\nimport { CheckCallData } from '../utils/calldata';\nimport { Contract } from './default';\n\nexport class ContractFactory {\n abi: Abi;\n\n compiledContract: CompiledContract;\n\n classHash: string;\n\n account: AccountInterface;\n\n private checkCalldata: CheckCallData;\n\n constructor(\n compiledContract: CompiledContract,\n classHash: string,\n account: AccountInterface,\n abi: Abi = compiledContract.abi // abi can be different from the deployed contract ie for proxy contracts\n ) {\n this.abi = abi;\n this.compiledContract = compiledContract;\n this.account = account;\n this.classHash = classHash;\n this.checkCalldata = new CheckCallData(abi);\n }\n\n /**\n * Deploys contract and returns new instance of the Contract\n *\n * @param args - Array of the constructor arguments for deployment\n * @param addressSalt (optional) - Address Salt for deployment\n * @returns deployed Contract\n */\n public async deploy(args: Array<any> = [], addressSalt?: string | undefined): Promise<Contract> {\n this.checkCalldata.validateMethodAndArgs('DEPLOY', 'constructor', args);\n const { inputs } = this.abi.find((abi) => abi.type === 'constructor') as FunctionAbi;\n\n // compile calldata\n const constructorCalldata = this.checkCalldata.compileCalldata(args, inputs);\n\n const {\n deploy: { contract_address, transaction_hash },\n } = await this.account.declareDeploy({\n contract: this.compiledContract,\n classHash: this.classHash,\n constructorCalldata,\n salt: addressSalt,\n });\n assert(Boolean(contract_address), 'Deployment of the contract failed');\n\n const contractInstance = new Contract(\n this.compiledContract.abi,\n contract_address!,\n this.account\n );\n contractInstance.deployTransactionHash = transaction_hash;\n\n return contractInstance;\n }\n\n /**\n * Attaches to new Provider or Account\n *\n * @param account - new Provider or Account to attach to\n * @returns ContractFactory\n */\n connect(account: AccountInterface): ContractFactory {\n this.account = account;\n return this;\n }\n\n /**\n * Attaches current abi and provider or account to the new address\n *\n * @param address - Contract address\n * @returns Contract\n */\n attach(address: string): Contract {\n return new Contract(this.abi, address, this.account);\n }\n\n // ethers.js' getDeployTransaction cant be supported as it requires the account or signer to return a signed transaction which is not possible with the current implementation\n}\n","import { BN } from 'bn.js';\n\nimport { UDC, ZERO } from '../constants';\nimport { ProviderInterface, ProviderOptions } from '../provider';\nimport { Provider } from '../provider/default';\nimport { BlockIdentifier } from '../provider/utils';\nimport { Signer, SignerInterface } from '../signer';\nimport {\n Abi,\n AllowArray,\n Call,\n DeclareContractPayload,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeclareDeployContractPayload,\n DeclareDeployUDCResponse,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractResponse,\n DeployContractUDCResponse,\n EstimateFee,\n EstimateFeeAction,\n EstimateFeeDetails,\n Invocation,\n InvocationsDetails,\n InvocationsSignerDetails,\n InvokeFunctionResponse,\n KeyPair,\n MultiDeployContractResponse,\n Signature,\n TransactionBulk,\n UniversalDeployerContractPayload,\n} from '../types';\nimport { EstimateFeeBulk } from '../types/account';\nimport { parseUDCEvent } from '../utils/events';\nimport {\n calculateContractAddressFromHash,\n feeTransactionVersion,\n pedersen,\n transactionVersion,\n} from '../utils/hash';\nimport { BigNumberish, hexToDecimalString, toBN, toCairoBool } from '../utils/number';\nimport { parseContract } from '../utils/provider';\nimport { compileCalldata, estimatedFeeToMaxFee, randomAddress } from '../utils/stark';\nimport { getStarknetIdContract, useDecoded, useEncoded } from '../utils/starknetId';\nimport { fromCallsToExecuteCalldata } from '../utils/transaction';\nimport { TypedData, getMessageHash } from '../utils/typedData';\nimport { AccountInterface } from './interface';\n\nexport class Account extends Provider implements AccountInterface {\n public signer: SignerInterface;\n\n public address: string;\n\n constructor(\n providerOrOptions: ProviderOptions | ProviderInterface,\n address: string,\n keyPairOrSigner: KeyPair | SignerInterface\n ) {\n super(providerOrOptions);\n this.address = address.toLowerCase();\n this.signer =\n 'getPubKey' in keyPairOrSigner ? keyPairOrSigner : new Signer(keyPairOrSigner as KeyPair);\n }\n\n public async getNonce(blockIdentifier?: BlockIdentifier): Promise<BigNumberish> {\n return super.getNonceForAddress(this.address, blockIdentifier);\n }\n\n public async getStarkName(StarknetIdContract?: string): Promise<string | Error> {\n const chainId = await this.getChainId();\n const contract = StarknetIdContract ?? getStarknetIdContract(chainId);\n\n try {\n const hexDomain = await this.callContract({\n contractAddress: contract,\n entrypoint: 'address_to_domain',\n calldata: compileCalldata({\n address: this.address,\n }),\n });\n const decimalDomain = hexDomain.result\n .map((element) => new BN(hexToDecimalString(element)))\n .slice(1);\n\n const stringDomain = useDecoded(decimalDomain);\n\n return stringDomain;\n } catch {\n return Error('Could not get stark name');\n }\n }\n\n public async getAddressFromStarkName(\n name: string,\n StarknetIdContract?: string\n ): Promise<string | Error> {\n const chainId = await this.getChainId();\n const contract = StarknetIdContract ?? getStarknetIdContract(chainId);\n\n try {\n const addressData = await this.callContract({\n contractAddress: contract,\n entrypoint: 'domain_to_address',\n calldata: compileCalldata({\n domain: [useEncoded(name.replace('.stark', '')).toString(10)],\n }),\n });\n\n return addressData.result[0];\n } catch {\n return Error('Could not get address from stark name');\n }\n }\n\n public async estimateFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails | undefined\n ): Promise<EstimateFee> {\n return this.estimateInvokeFee(calls, estimateFeeDetails);\n }\n\n public async estimateInvokeFee(\n calls: AllowArray<Call>,\n { nonce: providedNonce, blockIdentifier }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee: ZERO,\n version,\n chainId,\n };\n\n const invocation = await this.buildInvocation(transactions, signerDetails);\n const response = await super.getInvokeEstimateFee(\n { ...invocation },\n { version, nonce },\n blockIdentifier\n );\n\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeclareFee(\n { classHash, contract }: DeclareContractPayload,\n { blockIdentifier, nonce: providedNonce }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const payload = await this.buildDeclarePayload(\n { classHash, contract },\n { nonce, chainId, version, walletAddress: this.address, maxFee: ZERO }\n );\n\n const response = await super.getDeclareEstimateFee(\n { ...payload },\n { version, nonce },\n blockIdentifier\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateAccountDeployFee(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { blockIdentifier }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = '0x0';\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const payload = await this.buildAccountDeployPayload(\n { classHash, addressSalt, constructorCalldata, contractAddress: providedContractAddress },\n { nonce, chainId, version, walletAddress: this.address, maxFee: ZERO }\n );\n\n const response = await super.getDeployAccountEstimateFee(\n { ...payload },\n { version, nonce },\n blockIdentifier\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeployFee(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n transactionsDetail?: InvocationsDetails | undefined\n ): Promise<EstimateFee> {\n const calls = this.buildUDCContractPayload(payload);\n return this.estimateInvokeFee(calls, transactionsDetail);\n }\n\n public async estimateFeeBulk(\n transactions: TransactionBulk,\n { nonce: providedNonce, blockIdentifier }: EstimateFeeDetails = {}\n ): Promise<EstimateFeeBulk> {\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const params: any = await Promise.all(\n [].concat(transactions as []).map(async (transaction: any, index: number) => {\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce: toBN(Number(nonce) + index),\n maxFee: ZERO,\n version,\n chainId,\n };\n\n const txPayload = transaction.payload;\n\n let res;\n if (typeof transaction === 'object' && transaction.type === 'INVOKE_FUNCTION') {\n const invocation = await this.buildInvocation(\n Array.isArray(txPayload) ? txPayload : [txPayload],\n signerDetails\n );\n res = {\n type: 'INVOKE_FUNCTION',\n ...invocation,\n version,\n nonce: toBN(Number(nonce) + index),\n blockIdentifier,\n };\n } else if (typeof transaction === 'object' && transaction.type === 'DECLARE') {\n const declareContractPayload = await this.buildDeclarePayload(txPayload, signerDetails);\n res = {\n type: 'DECLARE',\n ...declareContractPayload,\n version,\n nonce: toBN(Number(nonce) + index),\n blockIdentifier,\n };\n } else if (typeof transaction === 'object' && transaction.type === 'DEPLOY_ACCOUNT') {\n const payload = await this.buildAccountDeployPayload(txPayload, signerDetails);\n res = {\n type: 'DEPLOY_ACCOUNT',\n ...payload,\n version,\n nonce,\n blockIdentifier,\n };\n } else if (typeof transaction === 'object' && transaction.type === 'DEPLOY') {\n const calls = this.buildUDCContractPayload(txPayload);\n const invocation = await this.buildInvocation(calls, signerDetails);\n res = {\n type: 'INVOKE_FUNCTION',\n ...invocation,\n version,\n nonce: toBN(Number(nonce) + index),\n blockIdentifier,\n };\n }\n return res;\n })\n );\n\n const response = await super.getEstimateFeeBulk(params, blockIdentifier);\n\n return [].concat(response as []).map((elem: any) => {\n const suggestedMaxFee = estimatedFeeToMaxFee(elem.overall_fee);\n return {\n ...elem,\n suggestedMaxFee,\n };\n });\n }\n\n public async buildInvocation(\n call: Array<Call>,\n signerDetails: InvocationsSignerDetails\n ): Promise<Invocation> {\n const calldata = fromCallsToExecuteCalldata(call);\n const signature = await this.signer.signTransaction(call, signerDetails);\n\n return {\n contractAddress: this.address,\n calldata,\n signature,\n };\n }\n\n public async execute(\n calls: AllowArray<Call>,\n abis: Abi[] | undefined = undefined,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<InvokeFunctionResponse> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee({ type: 'INVOKE', payload: calls }, transactionsDetail));\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee,\n version,\n chainId,\n };\n\n const signature = await this.signer.signTransaction(transactions, signerDetails, abis);\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n\n return this.invokeFunction(\n { contractAddress: this.address, calldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async declare(\n { classHash, contract }: DeclareContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeclareContractResponse> {\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n { type: 'DECLARE', payload: { classHash, contract } },\n transactionsDetail\n ));\n\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n senderAddress: this.address,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n const contractDefinition = parseContract(contract);\n\n return this.declareContract(\n { contractDefinition, senderAddress: this.address, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async deploy(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<MultiDeployContractResponse> {\n const params = [].concat(payload as []).map((it) => {\n const {\n classHash,\n salt,\n unique = true,\n constructorCalldata = [],\n } = it as UniversalDeployerContractPayload;\n\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n const deploySalt = salt ?? randomAddress();\n\n return {\n call: {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n deploySalt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n },\n address: calculateContractAddressFromHash(\n unique ? pedersen([this.address, deploySalt]) : deploySalt,\n classHash,\n compiledConstructorCallData,\n unique ? UDC.ADDRESS : 0\n ),\n };\n });\n\n const calls = params.map((it) => it.call);\n const addresses = params.map((it) => it.address);\n const invokeResponse = await this.execute(calls, undefined, details);\n\n return {\n ...invokeResponse,\n contract_address: addresses,\n };\n }\n\n public async deployContract(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<DeployContractUDCResponse> {\n const deployTx = await this.deploy(payload, details);\n const txReceipt = await this.waitForTransaction(deployTx.transaction_hash, undefined, [\n 'ACCEPTED_ON_L2',\n ]);\n return parseUDCEvent(txReceipt);\n }\n\n public async declareDeploy(\n payload: DeclareDeployContractPayload,\n details?: InvocationsDetails | undefined\n ): Promise<DeclareDeployUDCResponse> {\n const { classHash, contract, constructorCalldata, salt, unique } = payload;\n const { transaction_hash } = await this.declare({ contract, classHash }, details);\n const declare = await this.waitForTransaction(transaction_hash, undefined, ['ACCEPTED_ON_L2']);\n const deploy = await this.deployContract(\n { classHash, salt, unique, constructorCalldata },\n details\n );\n return { declare: { ...declare, class_hash: classHash }, deploy };\n }\n\n public async deployAccount(\n {\n classHash,\n constructorCalldata = [],\n addressSalt = 0,\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeployContractResponse> {\n const nonce = '0x0';\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, constructorCalldata, 0);\n\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n {\n type: 'DEPLOY_ACCOUNT',\n payload: { classHash, constructorCalldata, addressSalt, contractAddress },\n },\n transactionsDetail\n ));\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n constructorCalldata,\n contractAddress,\n addressSalt,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return this.deployAccountContract(\n { classHash, addressSalt, constructorCalldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async signMessage(typedData: TypedData): Promise<Signature> {\n return this.signer.signMessage(typedData, this.address);\n }\n\n public async hashMessage(typedData: TypedData): Promise<string> {\n return getMessageHash(typedData, this.address);\n }\n\n public async verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean> {\n try {\n await this.callContract({\n contractAddress: this.address,\n entrypoint: 'isValidSignature',\n calldata: compileCalldata({\n hash: toBN(hash).toString(),\n signature: signature.map((x) => toBN(x).toString()),\n }),\n });\n return true;\n } catch {\n return false;\n }\n }\n\n public async verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean> {\n const hash = await this.hashMessage(typedData);\n return this.verifyMessageHash(hash, signature);\n }\n\n public async getSuggestedMaxFee(\n { type, payload }: EstimateFeeAction,\n details: EstimateFeeDetails\n ) {\n let feeEstimate: EstimateFee;\n\n switch (type) {\n case 'INVOKE':\n feeEstimate = await this.estimateInvokeFee(payload, details);\n break;\n\n case 'DECLARE':\n feeEstimate = await this.estimateDeclareFee(payload, details);\n break;\n\n case 'DEPLOY_ACCOUNT':\n feeEstimate = await this.estimateAccountDeployFee(payload, details);\n break;\n\n case 'DEPLOY':\n feeEstimate = await this.estimateDeployFee(payload, details);\n break;\n\n default:\n feeEstimate = { suggestedMaxFee: ZERO, overall_fee: ZERO };\n break;\n }\n\n return feeEstimate.suggestedMaxFee.toString();\n }\n\n public async buildDeclarePayload(\n { classHash, contract }: DeclareContractPayload,\n { nonce, chainId, version, walletAddress, maxFee }: InvocationsSignerDetails\n ): Promise<DeclareContractTransaction> {\n const contractDefinition = parseContract(contract);\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n senderAddress: walletAddress,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return {\n senderAddress: walletAddress,\n signature,\n contractDefinition,\n };\n }\n\n public async buildAccountDeployPayload(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { nonce, chainId, version, maxFee }: InvocationsSignerDetails\n ): Promise<DeployAccountContractTransaction> {\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, constructorCalldata, 0);\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n contractAddress,\n chainId,\n maxFee,\n version,\n nonce,\n addressSalt,\n constructorCalldata,\n });\n\n return {\n classHash,\n addressSalt,\n constructorCalldata,\n signature,\n };\n }\n\n public buildUDCContractPayload(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[]\n ): Call[] {\n const calls = [].concat(payload as []).map((it) => {\n const {\n classHash,\n salt = '0',\n unique = true,\n constructorCalldata = [],\n } = it as UniversalDeployerContractPayload;\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n\n return {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n salt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n };\n });\n return calls;\n }\n}\n","import {\n Abi,\n Call,\n DeclareSignerDetails,\n DeployAccountSignerDetails,\n InvocationsSignerDetails,\n Signature,\n} from '../types';\nimport { TypedData } from '../utils/typedData';\n\nexport abstract class SignerInterface {\n /**\n * Method to get the public key of the signer\n *\n * @returns public key of signer as hex string with 0x prefix\n */\n public abstract getPubKey(): Promise<string>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param typedData - JSON object to be signed\n * @param accountAddress - account\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData, accountAddress: string): Promise<Signature>;\n\n /**\n * Signs a transaction with the starknet private key and returns the signature\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns signature\n */\n public abstract signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature>;\n\n /**\n * Signs a DEPLOY_ACCOUNT transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - contractAddress - the computed address of the contract\n * - constructorCalldata - calldata to be passed in deploy constructor\n * - addressSalt - contract address salt\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeployAccountTransaction(\n transaction: DeployAccountSignerDetails\n ): Promise<Signature>;\n\n /**\n * Signs a DECLARE transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - classHash - computed class hash. Will be replaced by ContractClass in future once class hash is present in CompiledContract\n * - senderAddress - the address of the sender\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeclareTransaction(transaction: DeclareSignerDetails): Promise<Signature>;\n}\n","import { Call, ParsedStruct } from '../types';\nimport { getSelectorFromName } from './hash';\nimport { BigNumberish, bigNumberishArrayToDecimalStringArray, toBN } from './number';\n\n/**\n * Transforms a list of Calls, each with their own calldata, into\n * two arrays: one with the entrypoints, and one with the concatenated calldata.\n * @param calls\n * @returns\n */\nexport const transformCallsToMulticallArrays = (calls: Call[]) => {\n const callArray: ParsedStruct[] = [];\n const calldata: BigNumberish[] = [];\n calls.forEach((call) => {\n const data = call.calldata || [];\n callArray.push({\n to: toBN(call.contractAddress).toString(10),\n selector: toBN(getSelectorFromName(call.entrypoint)).toString(10),\n data_offset: calldata.length.toString(),\n data_len: data.length.toString(),\n });\n calldata.push(...data);\n });\n return {\n callArray,\n calldata: bigNumberishArrayToDecimalStringArray(calldata),\n };\n};\n\n/**\n * Transforms a list of calls in the full flattened calldata expected\n * by the __execute__ protocol.\n * @param calls\n * @returns\n */\nexport const fromCallsToExecuteCalldata = (calls: Call[]): string[] => {\n const { callArray, calldata } = transformCallsToMulticallArrays(calls);\n return [\n callArray.length.toString(),\n ...callArray\n .map(\n ({ to, selector, data_offset, data_len }) =>\n [to, selector, data_offset, data_len] as string[]\n )\n .flat(),\n calldata.length.toString(),\n ...calldata,\n ];\n};\n\nexport const fromCallsToExecuteCalldataWithNonce = (\n calls: Call[],\n nonce: BigNumberish\n): string[] => {\n return [...fromCallsToExecuteCalldata(calls), toBN(nonce).toString()];\n};\n","import { computeHashOnElements, getSelectorFromName } from '../hash';\nimport { MerkleTree } from '../merkle';\nimport { BigNumberish, isHex, toBN, toHex } from '../number';\nimport { encodeShortString } from '../shortString';\nimport { StarkNetMerkleType, StarkNetType, TypedData } from './types';\nimport { validateTypedData } from './utils';\n\nexport * from './types';\n\nfunction getHex(value: BigNumberish): string {\n try {\n return toHex(toBN(value));\n } catch (e) {\n if (typeof value === 'string') {\n return toHex(toBN(encodeShortString(value)));\n }\n throw new Error(`Invalid BigNumberish: ${value}`);\n }\n}\n\nexport function prepareSelector(selector: string): string {\n return isHex(selector) ? selector : getSelectorFromName(selector);\n}\n\nexport function isMerkleTreeType(type: StarkNetType): type is StarkNetMerkleType {\n return type.type === 'merkletree';\n}\n\ninterface Context {\n parent?: string;\n key?: string;\n}\n\n/**\n * Get the dependencies of a struct type. If a struct has the same dependency multiple times, it's only included once\n * in the resulting array.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {string[]} [dependencies]\n * @return {string[]}\n */\nexport const getDependencies = (\n types: TypedData['types'],\n type: string,\n dependencies: string[] = []\n): string[] => {\n // Include pointers (struct arrays)\n if (type[type.length - 1] === '*') {\n // eslint-disable-next-line no-param-reassign\n type = type.slice(0, -1);\n }\n\n if (dependencies.includes(type)) {\n return dependencies;\n }\n\n if (!types[type]) {\n return dependencies;\n }\n\n return [\n type,\n ...types[type].reduce<string[]>(\n (previous, t) => [\n ...previous,\n ...getDependencies(types, t.type, previous).filter(\n (dependency) => !previous.includes(dependency)\n ),\n ],\n []\n ),\n ];\n};\n\nfunction getMerkleTreeType(types: TypedData['types'], ctx: Context) {\n if (ctx.parent && ctx.key) {\n const parentType = types[ctx.parent];\n const merkleType = parentType.find((t) => t.name === ctx.key)!;\n const isMerkleTree = isMerkleTreeType(merkleType);\n if (!isMerkleTree) {\n throw new Error(`${ctx.key} is not a merkle tree`);\n }\n if (merkleType.contains.endsWith('*')) {\n throw new Error(`Merkle tree contain property must not be an array but was given ${ctx.key}`);\n }\n return merkleType.contains;\n }\n return 'raw';\n}\n\n/**\n * Encode a type to a string. All dependant types are alphabetically sorted.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @return {string}\n */\nexport const encodeType = (types: TypedData['types'], type: string): string => {\n const [primary, ...dependencies] = getDependencies(types, type);\n const newTypes = !primary ? [] : [primary, ...dependencies.sort()];\n\n return newTypes\n .map((dependency) => {\n return `${dependency}(${types[dependency].map((t) => `${t.name}:${t.type}`)})`;\n })\n .join('');\n};\n\n/**\n * Get a type string as hash.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @return {string}\n */\nexport const getTypeHash = (types: TypedData['types'], type: string): string => {\n return getSelectorFromName(encodeType(types, type));\n};\n\n/**\n * Encodes a single value to an ABI serialisable string, number or Buffer. Returns the data as tuple, which consists of\n * an array of ABI compatible types, and an array of corresponding values.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {any} data\n * @returns {[string, string]}\n */\nexport const encodeValue = (\n types: TypedData['types'],\n type: string,\n data: unknown,\n ctx: Context = {}\n): [string, string] => {\n if (types[type]) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return [type, getStructHash(types, type, data as Record<string, unknown>)];\n }\n\n if (\n Object.keys(types)\n .map((x) => `${x}*`)\n .includes(type)\n ) {\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return getStructHash(types, type.slice(0, -1), struct as Record<string, unknown>);\n });\n return [type, computeHashOnElements(structHashes)];\n }\n\n if (type === 'merkletree') {\n const merkleTreeType = getMerkleTreeType(types, ctx);\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return encodeValue(types, merkleTreeType, struct as Record<string, unknown>)[1];\n });\n const { root } = new MerkleTree(structHashes as string[]);\n return ['felt', root];\n }\n\n if (type === 'felt*') {\n return ['felt*', computeHashOnElements(data as string[])];\n }\n\n if (type === 'selector') {\n return ['felt', prepareSelector(data as string)];\n }\n\n return [type, getHex(data as string)];\n};\n\n/**\n * Encode the data to an ABI encoded Buffer. The data should be a key -> value object with all the required values. All\n * dependant types are automatically encoded.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {Record<string, any>} data\n */\nexport const encodeData = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n const [returnTypes, values] = types[type].reduce<[string[], string[]]>(\n ([ts, vs], field) => {\n if (data[field.name] === undefined || data[field.name] === null) {\n throw new Error(`Cannot encode data: missing data for '${field.name}'`);\n }\n\n const value = data[field.name];\n const [t, encodedValue] = encodeValue(types, field.type, value, {\n parent: type,\n key: field.name,\n });\n\n return [\n [...ts, t],\n [...vs, encodedValue],\n ];\n },\n [['felt'], [getTypeHash(types, type)]]\n );\n\n return [returnTypes, values];\n};\n\n/**\n * Get encoded data as a hash. The data should be a key -> value object with all the required values. All dependant\n * types are automatically encoded.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {Record<string, any>} data\n * @return {Buffer}\n */\nexport const getStructHash = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n return computeHashOnElements(encodeData(types, type, data)[1]);\n};\n\n/**\n * Get the EIP-191 encoded message to sign, from the typedData object.\n *\n * @param {TypedData} typedData\n * @param {BigNumberish} account\n * @return {string}\n */\nexport const getMessageHash = (typedData: TypedData, account: BigNumberish): string => {\n if (!validateTypedData(typedData)) {\n throw new Error('Typed data does not match JSON schema');\n }\n\n const message = [\n encodeShortString('StarkNet Message'),\n getStructHash(typedData.types, 'StarkNetDomain', typedData.domain),\n account,\n getStructHash(typedData.types, typedData.primaryType, typedData.message),\n ];\n\n return computeHashOnElements(message);\n};\n","import { pedersen } from './hash';\nimport { toBN } from './number';\n\nexport class MerkleTree {\n public leaves: string[];\n\n public branches: string[][] = [];\n\n public root: string;\n\n constructor(leafHashes: string[]) {\n this.leaves = leafHashes;\n this.root = this.build(leafHashes);\n }\n\n private build(leaves: string[]): string {\n if (leaves.length === 1) {\n return leaves[0];\n }\n if (leaves.length !== this.leaves.length) {\n this.branches.push(leaves);\n }\n const newLeaves = [];\n for (let i = 0; i < leaves.length; i += 2) {\n if (i + 1 === leaves.length) {\n newLeaves.push(MerkleTree.hash(leaves[i], '0x0'));\n } else {\n newLeaves.push(MerkleTree.hash(leaves[i], leaves[i + 1]));\n }\n }\n return this.build(newLeaves);\n }\n\n static hash(a: string, b: string) {\n const [aSorted, bSorted] = [toBN(a), toBN(b)].sort((x: any, y: any) => (x.gte(y) ? 1 : -1));\n return pedersen([aSorted, bSorted]);\n }\n\n public getProof(leaf: string, branch = this.leaves, hashPath: string[] = []): string[] {\n const index = branch.indexOf(leaf);\n if (index === -1) {\n throw new Error('leaf not found');\n }\n if (branch.length === 1) {\n return hashPath;\n }\n const isLeft = index % 2 === 0;\n const neededBranch = (isLeft ? branch[index + 1] : branch[index - 1]) ?? '0x0';\n const newHashPath = [...hashPath, neededBranch];\n const currentBranchLevelIndex =\n this.leaves.length === branch.length\n ? -1\n : this.branches.findIndex((b) => b.length === branch.length);\n const nextBranch = this.branches[currentBranchLevelIndex + 1] ?? [this.root];\n return this.getProof(\n MerkleTree.hash(isLeft ? leaf : neededBranch, isLeft ? neededBranch : leaf),\n nextBranch,\n newHashPath\n );\n }\n}\n\nexport function proofMerklePath(root: string, leaf: string, path: string[]): boolean {\n if (path.length === 0) {\n return root === leaf;\n }\n const [next, ...rest] = path;\n return proofMerklePath(root, MerkleTree.hash(leaf, next), rest);\n}\n","import { addHexPrefix, removeHexPrefix } from './encode';\n\nexport function isASCII(str: string) {\n // eslint-disable-next-line no-control-regex\n return /^[\\x00-\\x7F]*$/.test(str);\n}\n\n// function to check if string has less or equal 31 characters\nexport function isShortString(str: string) {\n return str.length <= 31;\n}\n\nexport function encodeShortString(str: string) {\n if (!isASCII(str)) throw new Error(`${str} is not an ASCII string`);\n if (!isShortString(str)) throw new Error(`${str} is too long`);\n return addHexPrefix(str.replace(/./g, (char) => char.charCodeAt(0).toString(16)));\n}\n\nexport function decodeShortString(str: string) {\n return removeHexPrefix(str).replace(/.{2}/g, (hex) => String.fromCharCode(parseInt(hex, 16)));\n}\n","import { TypedData } from './types';\n\n/**\n * Validates that `data` matches the EIP-712 JSON schema.\n *\n * @param {any} data\n * @return {boolean}\n */\nexport const validateTypedData = (data: unknown): data is TypedData => {\n const typedData = data as TypedData;\n\n // Validate that the data matches the EIP-712 JSON schema\n const valid = Boolean(typedData.types && typedData.primaryType && typedData.message);\n\n return valid;\n};\n","import {\n Abi,\n Call,\n DeclareSignerDetails,\n DeployAccountSignerDetails,\n InvocationsSignerDetails,\n KeyPair,\n Signature,\n} from '../types';\nimport { genKeyPair, getStarkKey, sign } from '../utils/ellipticCurve';\nimport {\n calculateDeclareTransactionHash,\n calculateDeployAccountTransactionHash,\n calculateTransactionHash,\n} from '../utils/hash';\nimport { fromCallsToExecuteCalldata } from '../utils/transaction';\nimport { TypedData, getMessageHash } from '../utils/typedData';\nimport { SignerInterface } from './interface';\n\nexport class Signer implements SignerInterface {\n protected keyPair: KeyPair;\n\n constructor(keyPair: KeyPair = genKeyPair()) {\n this.keyPair = keyPair;\n }\n\n public async getPubKey(): Promise<string> {\n return getStarkKey(this.keyPair);\n }\n\n public async signMessage(typedData: TypedData, accountAddress: string): Promise<Signature> {\n const msgHash = getMessageHash(typedData, accountAddress);\n return sign(this.keyPair, msgHash);\n }\n\n public async signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature> {\n if (abis && abis.length !== transactions.length) {\n throw new Error('ABI must be provided for each transaction or no transaction');\n }\n // now use abi to display decoded data somewhere, but as this signer is headless, we can't do that\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n\n const msgHash = calculateTransactionHash(\n transactionsDetail.walletAddress,\n transactionsDetail.version,\n calldata,\n transactionsDetail.maxFee,\n transactionsDetail.chainId,\n transactionsDetail.nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n\n public async signDeployAccountTransaction({\n classHash,\n contractAddress,\n constructorCalldata,\n addressSalt,\n maxFee,\n version,\n chainId,\n nonce,\n }: DeployAccountSignerDetails) {\n const msgHash = calculateDeployAccountTransactionHash(\n contractAddress,\n classHash,\n constructorCalldata,\n addressSalt,\n version,\n maxFee,\n chainId,\n nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n\n public async signDeclareTransaction(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n { classHash, senderAddress, chainId, maxFee, version, nonce }: DeclareSignerDetails\n ) {\n const msgHash = calculateDeclareTransactionHash(\n classHash,\n senderAddress,\n version,\n maxFee,\n chainId,\n nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n}\n","import { UDC } from '../constants';\nimport { InvokeTransactionReceiptResponse } from '../types/provider';\nimport { cleanHex } from './number';\n\n/**\n * Parse Transaction Receipt Event from UDC invoke transaction and\n * create DeployContractResponse compatibile response with adition of UDC Event data\n *\n * @param txReceipt\n * @returns DeployContractResponse | UDC Event Response data\n */\nexport function parseUDCEvent(txReceipt: InvokeTransactionReceiptResponse) {\n if (!txReceipt.events) {\n throw new Error('UDC emited event is empty');\n }\n const event = txReceipt.events.find(\n (it) => cleanHex(it.from_address) === cleanHex(UDC.ADDRESS)\n ) || {\n data: [],\n };\n return {\n transaction_hash: txReceipt.transaction_hash,\n contract_address: event.data[0],\n address: event.data[0],\n deployer: event.data[1],\n unique: event.data[2],\n classHash: event.data[3],\n calldata_len: event.data[4],\n calldata: event.data.slice(5, 5 + parseInt(event.data[4], 16)),\n salt: event.data[event.data.length - 1],\n };\n}\n","/* eslint-disable no-param-reassign */\nimport BN from 'bn.js';\n\nimport { StarknetChainId } from '../constants';\n\nconst basicAlphabet = 'abcdefghijklmnopqrstuvwxyz0123456789-';\nconst basicSizePlusOne = new BN(basicAlphabet.length + 1);\nconst bigAlphabet = '这来';\nconst basicAlphabetSize = new BN(basicAlphabet.length);\nconst bigAlphabetSize = new BN(bigAlphabet.length);\nconst bigAlphabetSizePlusOne = new BN(bigAlphabet.length + 1);\n\nfunction extractStars(str: string): [string, number] {\n let k = 0;\n while (str.endsWith(bigAlphabet[bigAlphabet.length - 1])) {\n str = str.substring(0, str.length - 1);\n k += 1;\n }\n return [str, k];\n}\n\nexport function useDecoded(encoded: BN[]): string {\n let decoded = '';\n\n encoded.forEach((subdomain) => {\n while (!subdomain.isZero()) {\n const code = subdomain.mod(basicSizePlusOne).toNumber();\n subdomain = subdomain.div(basicSizePlusOne);\n if (code === basicAlphabet.length) {\n const nextSubdomain = subdomain.div(bigAlphabetSizePlusOne);\n if (nextSubdomain.isZero()) {\n const code2 = subdomain.mod(bigAlphabetSizePlusOne).toNumber();\n subdomain = nextSubdomain;\n if (code2 === 0) decoded += basicAlphabet[0];\n else decoded += bigAlphabet[code2 - 1];\n } else {\n const code2 = subdomain.mod(bigAlphabetSize).toNumber();\n decoded += bigAlphabet[code2];\n subdomain = subdomain.div(bigAlphabetSize);\n }\n } else decoded += basicAlphabet[code];\n }\n\n const [str, k] = extractStars(decoded);\n if (k)\n decoded =\n str +\n (k % 2 === 0\n ? bigAlphabet[bigAlphabet.length - 1].repeat(k / 2 - 1) +\n bigAlphabet[0] +\n basicAlphabet[1]\n : bigAlphabet[bigAlphabet.length - 1].repeat((k - 1) / 2 + 1));\n decoded += '.';\n });\n return decoded.concat('stark');\n}\n\nexport function useEncoded(decoded: string): BN {\n let encoded = new BN(0);\n let multiplier = new BN(1);\n\n if (decoded.endsWith(bigAlphabet[0] + basicAlphabet[1])) {\n const [str, k] = extractStars(decoded.substring(0, decoded.length - 2));\n decoded = str + bigAlphabet[bigAlphabet.length - 1].repeat(2 * (k + 1));\n } else {\n const [str, k] = extractStars(decoded);\n if (k) decoded = str + bigAlphabet[bigAlphabet.length - 1].repeat(1 + 2 * (k - 1));\n }\n\n for (let i = 0; i < decoded.length; i += 1) {\n const char = decoded[i];\n const index = basicAlphabet.indexOf(char);\n const bnIndex = new BN(basicAlphabet.indexOf(char));\n\n if (index !== -1) {\n // add encoded + multiplier * index\n if (i === decoded.length - 1 && decoded[i] === basicAlphabet[0]) {\n encoded = encoded.add(multiplier.mul(basicAlphabetSize));\n multiplier = multiplier.mul(basicSizePlusOne);\n // add 0\n multiplier = multiplier.mul(basicSizePlusOne);\n } else {\n encoded = encoded.add(multiplier.mul(bnIndex));\n multiplier = multiplier.mul(basicSizePlusOne);\n }\n } else if (bigAlphabet.indexOf(char) !== -1) {\n // add encoded + multiplier * (basicAlphabetSize)\n encoded = encoded.add(multiplier.mul(basicAlphabetSize));\n multiplier = multiplier.mul(basicSizePlusOne);\n // add encoded + multiplier * index\n const newid = (i === decoded.length - 1 ? 1 : 0) + bigAlphabet.indexOf(char);\n encoded = encoded.add(multiplier.mul(new BN(newid)));\n multiplier = multiplier.mul(bigAlphabetSize);\n }\n }\n\n return encoded;\n}\n\nexport function getStarknetIdContract(chainId: StarknetChainId): string {\n const starknetIdMainnetContract =\n '0x6ac597f8116f886fa1c97a23fa4e08299975ecaf6b598873ca6792b9bbfb678';\n const starknetIdTestnetContract =\n '0x05cf267a0af6101667013fc6bd3f6c11116a14cda9b8c4b1198520d59f900b17';\n\n switch (chainId) {\n case StarknetChainId.MAINNET:\n return starknetIdMainnetContract;\n\n case StarknetChainId.TESTNET:\n return starknetIdTestnetContract;\n\n default:\n throw new Error('Starknet.id is not yet deployed on this network');\n }\n}\n","import { ProviderInterface } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport { SignerInterface } from '../signer';\nimport {\n Abi,\n AllowArray,\n Call,\n DeclareContractPayload,\n DeclareContractResponse,\n DeclareDeployContractPayload,\n DeclareDeployUDCResponse,\n DeployAccountContractPayload,\n DeployContractResponse,\n DeployContractUDCResponse,\n EstimateFeeAction,\n EstimateFeeDetails,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n InvocationsDetails,\n InvokeFunctionResponse,\n MultiDeployContractResponse,\n Signature,\n TransactionBulk,\n UniversalDeployerContractPayload,\n} from '../types';\nimport { BigNumberish } from '../utils/number';\nimport { TypedData } from '../utils/typedData/types';\n\nexport abstract class AccountInterface extends ProviderInterface {\n public abstract address: string;\n\n public abstract signer: SignerInterface;\n\n /**\n * @deprecated Use estimateInvokeFee or estimateDeclareFee instead\n * Estimate Fee for executing an INVOKE transaction on starknet\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract estimateFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing an INVOKE transaction on starknet\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract estimateInvokeFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DECLARE transaction on starknet\n *\n * @param contractPayload the payload object containing:\n * - contract - the compiled contract to be declared\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n *\n * @returns response from estimate_fee\n */\n public abstract estimateDeclareFee(\n contractPayload: DeclareContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DEPLOY_ACCOUNT transaction on starknet\n *\n * @param contractPayload -\n * - contract - the compiled contract to be deployed\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n * @param estimateFeeDetails -\n * - optional blockIdentifier\n * - constant nonce = 0\n * @returns response from estimate_fee\n */\n public abstract estimateAccountDeployFee(\n contractPayload: DeployAccountContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a UDC DEPLOY transaction on starknet\n * This is different from the normal DEPLOY transaction as it goes through the Universal Deployer Contract (UDC)\n \n * @param deployContractPayload containing\n * - classHash: computed class hash of compiled contract\n * - salt: address salt\n * - unique: bool if true ensure unique salt\n * - calldata: constructor calldata\n * \n * @param transactionsDetail Invocation Details containing:\n * - optional nonce\n * - optional version\n * - optional maxFee\n */\n public abstract estimateDeployFee(\n deployContractPayload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n transactionsDetail?: InvocationsDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a list of transactions on starknet\n * Contract must be deployed for fee estimation to be possible\n *\n * @param transactions array of transaction object containing :\n * - type - the type of transaction : 'DECLARE' | 'DEPLOY' | 'INVOKE_FUNCTION' | 'DEPLOY_ACCOUNT'\n * - payload - the payload of the transaction\n *\n * @returns response from estimate_fee\n */\n public abstract estimateFeeBulk(\n transactions: TransactionBulk,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponseBulk>;\n\n /**\n * Invoke execute function in account contract\n *\n * @param transactions the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n public abstract execute(\n transactions: AllowArray<Call>,\n abis?: Abi[],\n transactionsDetail?: InvocationsDetails\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - contract: compiled contract code\n - classHash: computed class hash of compiled contract\n * @param transactionsDetail Invocation Details containing:\n - optional nonce\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declare(\n contractPayload: DeclareContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeclareContractResponse>;\n\n /**\n * Deploys a declared contract to starknet - using Universal Deployer Contract (UDC)\n * support multicall\n *\n * @param payload -\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details -\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - contract_address[]\n * - transaction_hash\n */\n public abstract deploy(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<MultiDeployContractResponse>;\n\n /**\n * Simplify deploy simulating old DeployContract with same response + UDC specific response\n * Internal wait for L2 transaction, support multicall\n *\n * @param payload -\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details -\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - contract_address\n * - transaction_hash\n * - address\n * - deployer\n * - unique\n * - classHash\n * - calldata_len\n * - calldata\n * - salt\n */\n public abstract deployContract(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<DeployContractUDCResponse>;\n\n /**\n * Declares and Deploy a given compiled contract (json) to starknet using UDC\n * Internal wait for L2 transaction, do not support multicall\n *\n * @param containing\n * - contract: compiled contract code\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - declare\n * - transaction_hash\n * - deploy\n * - contract_address\n * - transaction_hash\n * - address\n * - deployer\n * - unique\n * - classHash\n * - calldata_len\n * - calldata\n * - salt\n */\n public abstract declareDeploy(\n payload: DeclareDeployContractPayload,\n details?: InvocationsDetails | undefined\n ): Promise<DeclareDeployUDCResponse>;\n\n /**\n * Deploy the account on Starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - classHash: computed class hash of compiled contract\n - optional constructor calldata\n - optional address salt \n - optional contractAddress\n * @param transactionsDetail Invocation Details containing:\n - constant nonce = 0\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccount(\n contractPayload: DeployAccountContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeployContractResponse>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData): Promise<Signature>;\n\n /**\n * Hash a JSON object with pederson hash and return the hash\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be hashed\n * @returns the hash of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract hashMessage(typedData: TypedData): Promise<string>;\n\n /**\n * Verify a signature of a JSON object\n *\n * @param typedData - JSON object to be verified\n * @param signature - signature of the JSON object\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the JSON object is not a valid JSON or the signature is not a valid signature\n */\n public abstract verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean>;\n\n /**\n * Verify a signature of a given hash\n * @warning This method is not recommended, use verifyMessage instead\n *\n * @param hash - hash to be verified\n * @param signature - signature of the hash\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the signature is not a valid signature\n */\n public abstract verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean>;\n\n /**\n * Gets the nonce of the account with respect to a specific block\n *\n * @param {BlockIdentifier} blockIdentifier - optional blockIdentifier. Defaults to 'pending'\n * @returns nonce of the account\n */\n public abstract getNonce(blockIdentifier?: BlockIdentifier): Promise<BigNumberish>;\n\n /**\n * Gets Suggested Max Fee based on the transaction type\n *\n * @param {EstimateFeeAction} estimateFeeAction\n * @param {EstimateFeeDetails} details\n * @returns suggestedMaxFee\n */\n public abstract getSuggestedMaxFee(\n estimateFeeAction: EstimateFeeAction,\n details: EstimateFeeDetails\n ): Promise<BigNumberish>;\n}\n","import { addHexPrefix } from './encode';\nimport { BigNumberish, toBN } from './number';\n\n// Represents an integer in the range [0, 2^256).\nexport interface Uint256 {\n // The low 128 bits of the value.\n low: BigNumberish;\n // The high 128 bits of the value.\n high: BigNumberish;\n}\n\n// function to convert Uint256 to BN\nexport function uint256ToBN(uint256: Uint256) {\n return toBN(uint256.high).shln(128).add(toBN(uint256.low));\n}\n\nexport const UINT_128_MAX = toBN(1).shln(128).sub(toBN(1));\nexport const UINT_256_MAX = toBN(1).shln(256).sub(toBN(1));\n// function to check if BN is smaller or equal 2**256-1\nexport function isUint256(bn: BigNumberish): boolean {\n return toBN(bn).lte(UINT_256_MAX);\n}\n\n// function to convert BN to Uint256\nexport function bnToUint256(bignumber: BigNumberish): Uint256 {\n const bn = toBN(bignumber);\n if (!isUint256(bn)) throw new Error('Number is too large');\n return {\n low: addHexPrefix(bn.maskn(128).toString(16)),\n high: addHexPrefix(bn.shrn(128).toString(16)),\n };\n}\n","/* eslint-disable no-bitwise */\nimport { arrayify } from '@ethersproject/bytes';\n\nimport { MASK_251, ZERO } from '../constants';\nimport { addHexPrefix, removeHexPrefix } from './encode';\nimport { keccakBn } from './hash';\nimport { BigNumberish, assertInRange, toBN, toHex } from './number';\n\nexport function addAddressPadding(address: BigNumberish): string {\n return addHexPrefix(removeHexPrefix(toHex(toBN(address))).padStart(64, '0'));\n}\n\nexport function validateAndParseAddress(address: BigNumberish): string {\n assertInRange(address, ZERO, MASK_251, 'Starknet Address');\n\n const result = addAddressPadding(address);\n\n if (!result.match(/^(0x)?[0-9a-fA-F]{64}$/)) {\n throw new Error('Invalid Address Format');\n }\n\n return result;\n}\n\n// from https://github.com/ethers-io/ethers.js/blob/fc1e006575d59792fa97b4efb9ea2f8cca1944cf/packages/address/src.ts/index.ts#L12\nexport function getChecksumAddress(address: BigNumberish): string {\n const chars = removeHexPrefix(validateAndParseAddress(address)).toLowerCase().split('');\n const hashed = arrayify(keccakBn(address), { hexPad: 'left' }); // in case the hash is 251 bits (63 chars) we need to pad it to 64 chars without changing the number value (\"left\")\n\n for (let i = 0; i < chars.length; i += 2) {\n if (hashed[i >> 1] >> 4 >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n\n return addHexPrefix(chars.join(''));\n}\n\nexport function validateChecksumAddress(address: string): boolean {\n return getChecksumAddress(address) === address;\n}\n"],"mappings":"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F;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EAC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","names":["import_minimalistic_assert","isomorphicFetch","import_minimalistic_assert","BN","assert","StarknetChainId","TransactionHashPrefix","import_minimalistic_assert","elliptic","hashJS","assert","assert","Json","import_bn","import_url_join","urljoin","defaultOptions","urljoin","import_bn","import_minimalistic_assert","assert","BN","assert","import_minimalistic_assert","assert","import_bn","import_bn","BN"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/contract/default.ts","../src/utils/fetchPonyfill.ts","../src/utils/hash.ts","../src/constants.ts","../src/utils/number.ts","../src/utils/encode.ts","../src/utils/ellipticCurve.ts","../src/utils/json.ts","../src/utils/stark.ts","../src/utils/provider.ts","../src/utils/responseParser/rpc.ts","../src/provider/errors.ts","../src/provider/utils.ts","../src/provider/rpc.ts","../src/provider/sequencer.ts","../src/utils/responseParser/index.ts","../src/utils/responseParser/sequencer.ts","../src/utils/url.ts","../src/provider/default.ts","../src/provider/interface.ts","../src/provider/index.ts","../src/utils/calldata.ts","../src/contract/interface.ts","../src/contract/contractFactory.ts","../src/account/default.ts","../src/signer/interface.ts","../src/utils/transaction.ts","../src/utils/typedData/index.ts","../src/utils/merkle.ts","../src/utils/shortString.ts","../src/utils/typedData/utils.ts","../src/signer/default.ts","../src/utils/events.ts","../src/utils/starknetId.ts","../src/account/interface.ts","../src/utils/uint256.ts","../src/utils/address.ts"],"sourcesContent":["/**\n * Main\n */\nexport * from './contract';\nexport * from './types';\nexport * from './provider';\nexport * from './account';\nexport * from './signer';\n\n/**\n * Utils\n */\nexport * as constants from './constants';\nexport * as encode from './utils/encode';\nexport * as hash from './utils/hash';\nexport * as json from './utils/json';\nexport * as number from './utils/number';\nexport * as transaction from './utils/transaction';\nexport * as stark from './utils/stark';\nexport * as merkle from './utils/merkle';\nexport * as ec from './utils/ellipticCurve';\nexport * as uint256 from './utils/uint256';\nexport * as shortString from './utils/shortString';\nexport * as typedData from './utils/typedData';\nexport * from './utils/address';\nexport * from './utils/url';\n","import BN from 'bn.js';\nimport assert from 'minimalistic-assert';\n\nimport { AccountInterface } from '../account';\nimport { ProviderInterface, defaultProvider } from '../provider';\nimport {\n Abi,\n AbiEntry,\n Args,\n AsyncContractFunction,\n BlockTag,\n Call,\n ContractFunction,\n FunctionAbi,\n InvokeFunctionResponse,\n Overrides,\n ParsedStruct,\n Result,\n StructAbi,\n} from '../types';\nimport { CheckCallData } from '../utils/calldata';\nimport { BigNumberish, toBN } from '../utils/number';\nimport { CallOptions, ContractInterface } from './interface';\n\nfunction parseFelt(candidate: string): BN {\n try {\n return toBN(candidate);\n } catch (e) {\n throw Error('Could not parse felt');\n }\n}\n\n/**\n * Adds call methods to the contract\n *\n */\nfunction buildCall(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n let blockIdentifier: BlockTag | null = null;\n\n args.forEach((arg) => {\n if (arg.blockIdentifier) {\n blockIdentifier = arg.blockIdentifier;\n }\n });\n\n return contract.call(functionAbi.name, args, { blockIdentifier });\n };\n}\n\n/**\n * Adds invoke methods to the contract\n *\n */\nfunction buildInvoke(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n const { inputs } = functionAbi;\n const inputsLength = inputs.reduce((acc, input) => {\n if (!/_len$/.test(input.name)) {\n return acc + 1;\n }\n return acc;\n }, 0);\n const options = {};\n if (inputsLength + 1 === args.length && typeof args[args.length - 1] === 'object') {\n Object.assign(options, args.pop());\n }\n return contract.invoke(functionAbi.name, args, options);\n };\n}\n\n/**\n * Adds call/invoke methods to the contract\n *\n */\nfunction buildDefault(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n if (functionAbi.stateMutability === 'view') {\n return buildCall(contract, functionAbi);\n }\n return buildInvoke(contract, functionAbi);\n}\n\n/**\n * Adds populate for methods to the contract\n *\n */\nfunction buildPopulate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.populate(functionAbi.name, args);\n };\n}\n\n/**\n * Adds estimateFee for methods to the contract\n *\n */\nfunction buildEstimate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.estimate(functionAbi.name, args);\n };\n}\n\nexport class Contract implements ContractInterface {\n abi: Abi;\n\n address: string;\n\n providerOrAccount: ProviderInterface | AccountInterface;\n\n deployTransactionHash?: string;\n\n protected readonly structs: { [name: string]: StructAbi };\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n private checkCalldata: CheckCallData;\n\n /**\n * Contract class to handle contract methods\n *\n * @param abi - Abi of the contract object\n * @param address (optional) - address to connect to\n * @param providerOrAccount (optional) - Provider or Account to attach to\n */\n constructor(\n abi: Abi,\n address: string,\n providerOrAccount: ProviderInterface | AccountInterface = defaultProvider\n ) {\n this.address = address && address.toLowerCase();\n this.providerOrAccount = providerOrAccount;\n this.abi = abi;\n this.structs = abi\n .filter((abiEntry) => abiEntry.type === 'struct')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n this.checkCalldata = new CheckCallData(abi);\n\n Object.defineProperty(this, 'functions', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'callStatic', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'populateTransaction', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'estimateFee', {\n enumerable: true,\n value: {},\n writable: false,\n });\n this.abi.forEach((abiElement) => {\n if (abiElement.type !== 'function') {\n return;\n }\n const signature = abiElement.name;\n if (!this[signature]) {\n Object.defineProperty(this, signature, {\n enumerable: true,\n value: buildDefault(this, abiElement),\n writable: false,\n });\n }\n if (!this.functions[signature]) {\n Object.defineProperty(this.functions, signature, {\n enumerable: true,\n value: buildDefault(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.callStatic[signature]) {\n Object.defineProperty(this.callStatic, signature, {\n enumerable: true,\n value: buildCall(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.populateTransaction[signature]) {\n Object.defineProperty(this.populateTransaction, signature, {\n enumerable: true,\n value: buildPopulate(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.estimateFee[signature]) {\n Object.defineProperty(this.estimateFee, signature, {\n enumerable: true,\n value: buildEstimate(this, abiElement),\n writable: false,\n });\n }\n });\n }\n\n public attach(address: string): void {\n this.address = address;\n }\n\n public connect(providerOrAccount: ProviderInterface | AccountInterface) {\n this.providerOrAccount = providerOrAccount;\n }\n\n public async deployed(): Promise<Contract> {\n if (this.deployTransactionHash) {\n await this.providerOrAccount.waitForTransaction(this.deployTransactionHash);\n this.deployTransactionHash = undefined;\n }\n return this;\n }\n\n public async call(\n method: string,\n args: Array<any> = [],\n options: CallOptions = {}\n ): Promise<Result> {\n // default value also for null\n const blockIdentifier = options?.blockIdentifier || undefined;\n\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n\n // validate method and args\n this.checkCalldata.validateMethodAndArgs('CALL', method, args);\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n\n // compile calldata\n const calldata = this.checkCalldata.compileCalldata(args, inputs);\n return this.providerOrAccount\n .callContract(\n {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n },\n blockIdentifier\n )\n .then((x) => this.parseResponse(method, x.result));\n }\n\n public invoke(\n method: string,\n args: Array<any> = [],\n options: Overrides = {}\n ): Promise<InvokeFunctionResponse> {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n // validate method and args\n this.checkCalldata.validateMethodAndArgs('INVOKE', method, args);\n\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const inputsLength = inputs.reduce((acc, input) => {\n if (!/_len$/.test(input.name)) {\n return acc + 1;\n }\n return acc;\n }, 0);\n\n if (args.length !== inputsLength) {\n throw Error(\n `Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`\n );\n }\n // compile calldata\n const calldata = this.checkCalldata.compileCalldata(args, inputs);\n\n const invocation = {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n };\n if ('execute' in this.providerOrAccount) {\n return this.providerOrAccount.execute(invocation, undefined, {\n maxFee: options.maxFee,\n nonce: options.nonce,\n });\n }\n\n if (!options.nonce) {\n throw new Error(`Nonce is required when invoking a function without an account`);\n }\n\n // eslint-disable-next-line no-console\n console.warn(`Invoking ${method} without an account. This will not work on a public node.`);\n\n return this.providerOrAccount.invokeFunction(\n {\n ...invocation,\n signature: options.signature || [],\n },\n {\n nonce: options.nonce,\n }\n );\n }\n\n public async estimate(method: string, args: Array<any> = []) {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n\n // validate method and args\n this.checkCalldata.validateMethodAndArgs('INVOKE', method, args);\n const invocation = this.populateTransaction[method](...args);\n if ('estimateInvokeFee' in this.providerOrAccount) {\n return this.providerOrAccount.estimateInvokeFee(invocation);\n }\n throw Error('Contract must be connected to the account contract to estimate');\n }\n\n public populate(method: string, args: Array<any> = []): Call {\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n return {\n contractAddress: this.address,\n entrypoint: method,\n calldata: this.checkCalldata.compileCalldata(args, inputs),\n };\n }\n\n /**\n * Parse of the response elements that are converted to Object (Struct) by using the abi\n *\n * @param responseIterator - iterator of the response\n * @param type - type of the struct\n * @return {BigNumberish | ParsedStruct} - parsed arguments in format that contract is expecting\n */\n protected parseResponseStruct(\n responseIterator: Iterator<string>,\n type: string\n ): BigNumberish | ParsedStruct {\n // check the type of current element\n if (type in this.structs && this.structs[type]) {\n return this.structs[type].members.reduce((acc, el) => {\n // parse each member of the struct (member can felt or nested struct)\n acc[el.name] = this.parseResponseStruct(responseIterator, el.type);\n return acc;\n }, {} as any);\n }\n return parseFelt(responseIterator.next().value);\n }\n\n /**\n * Parse elements of the response and structuring them into one field by using output property from the abi for that method\n *\n * @param responseIterator - iterator of the response\n * @param output - output(field) information from the abi that will be used to parse the data\n * @return - parsed response corresponding to the abi structure of the field\n */\n protected parseResponseField(\n responseIterator: Iterator<string>,\n output: AbiEntry,\n parsedResult?: Args\n ): any {\n const { name, type } = output;\n const parsedDataArr: (BigNumberish | ParsedStruct)[] = [];\n switch (true) {\n case /_len$/.test(name):\n return parseFelt(responseIterator.next().value).toNumber();\n case /\\(felt/.test(type):\n return type.split(',').reduce((acc) => {\n acc.push(parseFelt(responseIterator.next().value));\n return acc;\n }, [] as BigNumberish[]);\n case /\\*/.test(type):\n if (parsedResult && parsedResult[`${name}_len`]) {\n const arrLen = parsedResult[`${name}_len`] as number;\n while (parsedDataArr.length < arrLen) {\n parsedDataArr.push(\n this.parseResponseStruct(responseIterator, output.type.replace('*', ''))\n );\n }\n }\n return parsedDataArr;\n case type in this.structs:\n return this.parseResponseStruct(responseIterator, type);\n default:\n return parseFelt(responseIterator.next().value);\n }\n }\n\n /**\n * Parse elements of the response array and structuring them into response object\n *\n * @param method - method name\n * @param response - response from the method\n * @return - parsed response corresponding to the abi\n */\n protected parseResponse(method: string, response: string[]): Result {\n const { outputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const responseIterator = response.flat()[Symbol.iterator]();\n const resultObject = outputs.flat().reduce((acc, output) => {\n acc[output.name] = this.parseResponseField(responseIterator, output, acc);\n if (acc[output.name] && acc[`${output.name}_len`]) {\n delete acc[`${output.name}_len`];\n }\n return acc;\n }, {} as Args);\n return Object.entries(resultObject).reduce((acc, [key, value]) => {\n acc.push(value);\n acc[key] = value;\n return acc;\n }, [] as Result);\n }\n}\n","import isomorphicFetch from 'isomorphic-fetch';\n\nexport default (typeof window !== 'undefined' && window.fetch) || // use buildin fetch in browser if available\n (typeof global !== 'undefined' && global.fetch) || // use buildin fetch in node, react-native and service worker if available\n isomorphicFetch; // ponyfill fetch in node and browsers that don't have it\n","/* eslint-disable import/extensions */\nimport BN from 'bn.js';\nimport { keccak256 } from 'ethereum-cryptography/keccak.js';\nimport { hexToBytes } from 'ethereum-cryptography/utils.js';\nimport assert from 'minimalistic-assert';\n\nimport {\n CONSTANT_POINTS,\n FIELD_PRIME,\n MASK_250,\n ONE,\n StarknetChainId,\n TransactionHashPrefix,\n ZERO,\n} from '../constants';\nimport { RawCalldata } from '../types';\nimport { ec } from './ellipticCurve';\nimport { addHexPrefix, buf2hex, removeHexPrefix, utf8ToArray } from './encode';\nimport {\n BigNumberish,\n isHex,\n isStringWholeNumber,\n toBN,\n toFelt,\n toHex,\n toHexString,\n} from './number';\n\nexport const transactionVersion = 1;\nexport const feeTransactionVersion = toBN(2).pow(toBN(128)).add(toBN(transactionVersion));\n\nexport function keccakBn(value: BigNumberish): string {\n const hexWithoutPrefix = removeHexPrefix(toHex(toBN(value)));\n const evenHex = hexWithoutPrefix.length % 2 === 0 ? hexWithoutPrefix : `0${hexWithoutPrefix}`;\n return addHexPrefix(buf2hex(keccak256(hexToBytes(evenHex))));\n}\n\nfunction keccakHex(value: string): string {\n return addHexPrefix(buf2hex(keccak256(utf8ToArray(value))));\n}\n\n/**\n * Function to get the starknet keccak hash from a string\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L17-L22)\n * @param value - string you want to get the starknetKeccak hash from\n * @returns starknet keccak hash as BigNumber\n */\nexport function starknetKeccak(value: string): BN {\n return toBN(keccakHex(value)).and(MASK_250);\n}\n\n/**\n * Function to get the hex selector from a given function name\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L25-L26)\n * @param funcName - selectors abi function name\n * @returns hex selector of given abi function name\n */\nexport function getSelectorFromName(funcName: string) {\n // sometimes BigInteger pads the hex string with zeros, which is not allowed in the starknet api\n return toHex(starknetKeccak(funcName));\n}\n\n/**\n * Function to get hex selector from function name, decimal string or hex string\n * @param value hex string | decimal string | string\n * @returns Hex selector\n */\nexport function getSelector(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n return getSelectorFromName(value);\n}\n\nconst constantPoints = CONSTANT_POINTS.map((coords: string[]) =>\n ec.curve.point(coords[0], coords[1])\n);\n\nexport function pedersen(input: [BigNumberish, BigNumberish]) {\n let point = constantPoints[0];\n for (let i = 0; i < input.length; i += 1) {\n let x = toBN(input[i]);\n assert(x.gte(ZERO) && x.lt(toBN(addHexPrefix(FIELD_PRIME))), `Invalid input: ${input[i]}`);\n if (!x.isZero()) {\n for (let j = 0; j < 252; j += 1) {\n const pt = constantPoints[2 + i * 252 + j];\n assert(!point.getX().eq(pt.getX()));\n if (x.and(ONE).toNumber() !== 0) {\n point = point.add(pt);\n }\n x = x.shrn(1);\n }\n }\n }\n return addHexPrefix(point.getX().toString(16));\n}\n\nexport function computeHashOnElements(data: BigNumberish[]) {\n return [...data, data.length].reduce((x, y) => pedersen([x, y]), 0).toString();\n}\n\n// following implementation is based on this python implementation:\n// https://github.com/starkware-libs/cairo-lang/blob/b614d1867c64f3fb2cf4a4879348cfcf87c3a5a7/src/starkware/starknet/core/os/transaction_hash/transaction_hash.py\n\nexport function calculateTransactionHashCommon(\n txHashPrefix: TransactionHashPrefix,\n version: BigNumberish,\n contractAddress: BigNumberish,\n entryPointSelector: BigNumberish,\n calldata: BigNumberish[],\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n additionalData: BigNumberish[] = []\n): string {\n const calldataHash = computeHashOnElements(calldata);\n const dataToHash = [\n txHashPrefix,\n version,\n contractAddress,\n entryPointSelector,\n calldataHash,\n maxFee,\n chainId,\n ...additionalData,\n ];\n return computeHashOnElements(dataToHash);\n}\n\nexport function calculateDeployTransactionHash(\n contractAddress: BigNumberish,\n constructorCalldata: BigNumberish[],\n version: BigNumberish,\n chainId: StarknetChainId\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY,\n version,\n contractAddress,\n getSelectorFromName('constructor'),\n constructorCalldata,\n ZERO,\n chainId\n );\n}\n\nexport function calculateDeclareTransactionHash(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n classHash: BigNumberish,\n senderAddress: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DECLARE,\n version,\n senderAddress,\n 0,\n [classHash],\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateDeployAccountTransactionHash(\n contractAddress: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: BigNumberish[],\n salt: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n) {\n const calldata = [classHash, salt, ...constructorCalldata];\n\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY_ACCOUNT,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateTransactionHash(\n contractAddress: BigNumberish,\n version: BigNumberish,\n calldata: BigNumberish[],\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.INVOKE,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateContractAddressFromHash(\n salt: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: RawCalldata,\n deployerAddress: BigNumberish\n) {\n const constructorCalldataHash = computeHashOnElements(constructorCalldata);\n\n const CONTRACT_ADDRESS_PREFIX = toFelt('0x535441524b4e45545f434f4e54524143545f41444452455353'); // Equivalent to 'STARKNET_CONTRACT_ADDRESS'\n\n const dataToHash = [\n CONTRACT_ADDRESS_PREFIX,\n deployerAddress,\n salt,\n classHash,\n constructorCalldataHash,\n ];\n\n return computeHashOnElements(dataToHash);\n}\n","import { toBN } from './utils/number';\n\nexport { IS_BROWSER } from './utils/encode';\n\nexport const ZERO = toBN(0);\nexport const ONE = toBN(1);\nexport const TWO = toBN(2);\nexport const MASK_250 = TWO.pow(toBN(250)).sub(ONE); // 2 ** 250 - 1\nexport const MASK_251 = TWO.pow(toBN(251));\n\nexport enum StarknetChainId {\n MAINNET = '0x534e5f4d41494e', // encodeShortString('SN_MAIN'),\n TESTNET = '0x534e5f474f45524c49', // encodeShortString('SN_GOERLI'),\n TESTNET2 = '0x534e5f474f45524c4932',\n}\nexport enum TransactionHashPrefix {\n DECLARE = '0x6465636c617265', // encodeShortString('declare'),\n DEPLOY = '0x6465706c6f79', // encodeShortString('deploy'),\n DEPLOY_ACCOUNT = '0x6465706c6f795f6163636f756e74', // encodeShortString('deploy_account'),\n INVOKE = '0x696e766f6b65', // encodeShortString('invoke'),\n L1_HANDLER = '0x6c315f68616e646c6572', // encodeShortString('l1_handler'),\n}\n\nexport const UDC = {\n ADDRESS: '0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf',\n ENTRYPOINT: 'deployContract',\n};\n\n/**\n * The following is taken from https://github.com/starkware-libs/starkex-resources/blob/master/crypto/starkware/crypto/signature/pedersen_params.json but converted to hex, because JS is very bad handling big integers by default\n * Please do not edit until the JSON changes.\n */\nexport const FIELD_PRIME = '800000000000011000000000000000000000000000000000000000000000001';\nexport const FIELD_GEN = '3';\nexport const FIELD_SIZE = 251;\nexport const EC_ORDER = '800000000000010FFFFFFFFFFFFFFFFB781126DCAE7B2321E66A241ADC64D2F';\nexport const ALPHA = '1';\nexport const BETA = '6F21413EFBE40DE150E596D72F7A8C5609AD26C15C915C1F4CDFCB99CEE9E89';\nexport const MAX_ECDSA_VAL = '800000000000000000000000000000000000000000000000000000000000000';\nexport const CONSTANT_POINTS = [\n [\n '49ee3eba8c1600700ee1b87eb599f16716b0b1022947733551fde4050ca6804',\n '3ca0cfe4b3bc6ddf346d49d06ea0ed34e621062c0e056c1d0405d266e10268a',\n ],\n [\n '1ef15c18599971b7beced415a40f0c7deacfd9b0d1819e03d723d8bc943cfca',\n '5668060aa49730b7be4801df46ec62de53ecd11abe43a32873000c36e8dc1f',\n ],\n [\n '234287dcbaffe7f969c748655fca9e58fa8120b6d56eb0c1080d17957ebe47b',\n '3b056f100f96fb21e889527d41f4e39940135dd7a6c94cc6ed0268ee89e5615',\n ],\n [\n '3909690e1123c80678a7ba0fde0e8447f6f02b3f6b960034d1e93524f8b476',\n '7122e9063d239d89d4e336753845b76f2b33ca0d7f0c1acd4b9fe974994cc19',\n ],\n [\n '40fd002e38ea01a01b2702eb7c643e9decc2894cbf31765922e281939ab542c',\n '109f720a79e2a41471f054ca885efd90c8cfbbec37991d1b6343991e0a3e740',\n ],\n [\n '2f52066635c139fc2f64eb0bd5e3fd7a705f576854ec4f00aa60361fddb981b',\n '6d78a24d8a5f97fc600318ce16b3c840315979c3273078ec1a285f217ee6a26',\n ],\n [\n '6a0767a1fd60d5b9027a35af1b68e57a1c366ebcde2006cdd07af27043ef674',\n '606b72c0ca0498b8c1817ed7922d550894c324f5efdfc85a19a1ae382411ca2',\n ],\n [\n '7fa463ee2a2d6a585d5c3358918270f6c28c66df1f86803374d1edf3819cc62',\n 'a996edf01598832e644e1cae9a37288865ad80e2787f9bf958aceccc99afae',\n ],\n [\n '3d4da70d1540da597dbae1651d28487604a4e66a4a1823b97e8e9639393dbec',\n '45cdef70c35d3b6f0a2273a9886ccb6306d813e8204bdfd30b4efee63c8a3f9',\n ],\n [\n '1e448fdbcd9896c6fbf5f36cb7e7fcb77a751ff2d942593cae023363cc7750e',\n '30c81da0f3a8cb64468eaa491c7ae7b4842b62cb4148820da211afc4caffb3a',\n ],\n [\n '6531acf1a7cb90a4eb27de0b7f915e387a3b0fd063ba6e1289b91f48411be26',\n '31330f5daa091889981a3ea782ae997f5f171336ed0487a03f051551a2cafa2',\n ],\n [\n '54be016394d5662d67d7e82f5e889ed2f97ccf95d911f57dd2362c4040ed4f4',\n 'c6cb184053f054d6a59c1bf0986d17090d25089b3fdcdaf185edc87ef113e5',\n ],\n [\n '35b9ecd0499ca1d5d42dcbb0c6b4042b3733c64b607ca711e706e786ef2afc6',\n '5624b476a5b21c3a544f0712d4817b06ad380a5a6529d323bf64da8ef862d8d',\n ],\n [\n '4ce0378e3ee8f77ed58f2ddbd8bb7676c8a38bfb1d3694c275254bd8ca38e23',\n '5a16fcbff0769c9cf2b02c31621878ec819fff4b8231bff82c6183db2746820',\n ],\n [\n '648d5c6f98680a1b926bfeb01c00224c56fdcf751b251c4449c8a94f425cfcf',\n '72c05ac793cd1620a833fbe2214d36900ebe446e095c62fcb740937f98cca8c',\n ],\n [\n 'bd09be3e4e1af8a14189977e334f097c18e4a8bf42577ef5aafa0f807bd89b',\n '6e0e72ed7eb65c86cee29c411fb4761122558ee81013344ba8509c49de9f9b6',\n ],\n [\n '35ea4e339b44ae7724419bdfbe07022253137a4afb7cbaffad341ea61249357',\n '3665d676a026a174f367bb4417780e53a7803cb02d0db32eb4545c267c42f14',\n ],\n [\n '36457bc744f42e697b825c2d1afd8f4029d696a4514710f81da52d88e178643',\n '7c93715896735492a68c7969a024b3a8fd538bffc1521538107de1a5f13ce9c',\n ],\n [\n '5b3a08ebcf9c109cc9082f70d9df2b9c11b5428ee23917b4e790c4c10f6e661',\n '9d7b42ab0c20f5510df7ea5e196eec99342739077e9a168198c89da859753',\n ],\n [\n '21883ef8580fc06e59481955d52ece3aca6e82c8c9fc58e216dcf46f96990c6',\n '51a6423543e6e8a43e71da34cd90f5b520b8d33b67c4bf857573ab9e301aa4c',\n ],\n [\n '19e86b77f9b581e81092b305c852faf53940a8f15f0a6990c414f04c0fa7ef9',\n '515630e35d4398c9c79fc4ee08e1023fa47d8e03c6e7819c6d2ccef45398fa',\n ],\n [\n '888ab8eb4c31bb2ac5b54aa320dbe1a69c96b864e8a5f54d89c1d1a6b86c24',\n '730e148467f6a55ce22c5296f5380df88f38de76ef0b2de844cd3094aaaf3ea',\n ],\n [\n '75e79ff13a894e7120dac17b7429c0c32ce7828f726c9973728c0977a5f5977',\n '4960526e59c1c736561a201bc56f7d762641b39f609d273cc996f5d9197cfb8',\n ],\n [\n '640fe009249115d7254f72ecafb3006139e4bed7e9041af51458c737282d1d5',\n '3cc6c978a575246e2ce4f7ef1fcc7f63085db9ff98a1b1f3fe374087c0332c',\n ],\n [\n '6d6fd09ccab7c26de9b3906191235deb5c34685580c488275356a05e209ca96',\n '7157f81a34213dd8f91dea4f6df1bcfabc4ee091a3049eeeb3b7923d39b8645',\n ],\n [\n '5531ca1d00f151d71da820918f74caf2985b24dca20e124721fff507b5a5876',\n '518529643d3f25e47f72c322223ba60a63d6bfe78cf3f612215d9c19bf29200',\n ],\n [\n '6192d454e4f8fe212bdfccd5b15dd5056d7622ffe456c6c67e5a7265aea49c4',\n '2377a45dc630017ae863cb968ddb38333a70c7946d8684e6d7a6213f634b7bc',\n ],\n [\n '542fb44b4ef3640a64fdb22a2560fb26668065c069cf31d1df424819a39ff18',\n '5dbae9b0948e0361aea443503840341c322aa1a1366ce5390e71bf161f78f8c',\n ],\n [\n '299ff3e3412a7eb4cb4a3051b07b1be2e7b1c4b789f39ffb52cba3d048b71de',\n '1951d3175c02761b291d86b6c0a08387ad5e2a2130ccc33c852530572cb3958',\n ],\n [\n '628ce3f5367dadc1411133e55eb25e2e3c2880d6e28754a5cb1c5d109627e73',\n 'ae3e9b7d50964e28bd15380400b7659b87affdef5d2586cbefcd9be7d67c0d',\n ],\n [\n '6ea54aff064895eccf9db2283225d62044ae67621192b3346338948382f5933',\n '6431507e51aadacfaf39f102a8ff387756e9b5e1bc8323d44acae55130d93db',\n ],\n [\n '28097d50d175a6235320fe8cfe138dd9e46895d189582e472c38ad7a67d923a',\n '7f9eab4133d7d09a7ff63368d6135c26262b62336eca1b5ca33f2096ce388ba',\n ],\n [\n '619fd09cdd6ff4323973f256c2cbdcb224f7f25b8aef623af2d4a0105e62e02',\n '2c95f0ae11d47eeae1bc7f1350f75f9185c5bc840382ceb38a797cae9c40308',\n ],\n [\n '641c18982ced304512a3f2395942a38add0d6a7156229c2a7c8b8dfbe9beb96',\n '6f6288c9c659b6af5ac975f4180deffe53d516399b2cc62f31732e9d4ba9837',\n ],\n [\n '58ab546e51fe49fc5a382e4064a2bd6cfc268904412f86c26de14f28a71d0f2',\n '124b7217943e7e328408e8afdfa7da00dcbc94a2bb85fd8e01fb162d2c2c0a9',\n ],\n [\n 'a82c2fdedbb26c3c762a12f7e86b0e01e65320e0a25a8399d665f6e266bf74',\n '1a1de28e253f3e10f44d0111e8074f882d7f42e5900780ccbdc31da372d3fd8',\n ],\n [\n '744c725a7455a992e3cf5bd007bc234dd4668dba285f553f38350ad94c1615b',\n '7f721a87f48798bdc4a9c0eb88559e2ad7a74112fd901e70ea159e67a9c33f',\n ],\n [\n '434df142ddaa60f7881b6348d91687de40457de7ccfb07f0304b9e820705d0c',\n '7fae425e3b53f97dd1f5b20e49ed9fe24ff1efc341ba5e017ac89cf8df0cc39',\n ],\n [\n '7a1e2b809dff46277021cbc376f79c37e1b683bbd6bca5317014f0dc0e1ae73',\n '56790278a231912c334eff05281e08af1558e85516b4411ef64647c13bea431',\n ],\n [\n '4931b7990348d41cf8907be79f45bb7991fd18f8a57868351c92fa7a34cbcd7',\n 'ca35091815cdf0837d396e25aad6052ad32d497a33b123256cffdc008bc50e',\n ],\n [\n '250b815d352fd89f8210b624b147ea7d0a4f47bcac49f3ac9b777840da93ebe',\n '1173f10e9691948b7da7632f328520455aadcba46e017f891e0a1d7da2bef04',\n ],\n [\n '2223b85032fa67292f6e1f822628e6756e5c3cc08fc252ab88d63d624e4dfb2',\n '55619ba96a7dcec77832fcb22cd5c21c7dcebc0280d730cba0002b67e0a8c63',\n ],\n [\n '249b131e04de73af9820d3e22492d9ec51bdc0c4c4f34d95352fa44dd61f245',\n '7576d3b5d136368ff01170a77d8286d0d1c7c40688862fb40813b4af3c6065e',\n ],\n [\n '6777915d9b4769027eb7e04733f8a2d669c84fe06080f55e8a55674dfbf9efb',\n '640d0ff384c9635e1af364760f104e058e3c86209fa9d2320aeac887b2e02d8',\n ],\n [\n '2abe3f237681052f002414399111cf07f8421535af41251edc427a36b5b19c9',\n '636ce4deaf468a503ab20ccb2f7e5bdc98551656ebf53e9c7786b11dd9090be',\n ],\n [\n '4d5cc5414758ea1be55be779bd7da296c7e11f1564d9e8797ceea347c16f8ea',\n '1a680c4c410cf5ddc74e95ff2897c193edaaecce5b2cde4e96bbae5c0054eff',\n ],\n [\n '46c375c684b30adf4d51de81e92afee52b1a3847e177403372c82109373edca',\n '1eaadc5783c90a0261306423d52009e991126b3f620e9cb6cffca41ca096f4f',\n ],\n [\n '2ddfb71f51205888118cbabba8fd07d460a810289bfdeeb7118707e310cb152',\n '1fd905d07b3933be886f2518246bdafa6f33259a174668808223cd7c28183c7',\n ],\n [\n '386f3879960713d41fdb3b1e41bbebf26b1c0e27a9a75bb1adcc1a0d3e8547b',\n '2b21498c0f34ec6f17c720334dc0f36021c2f87afbbbc8847d0bd536eb265e5',\n ],\n [\n '407eae62c6c4de3b942195afec3f45efec71ddb5e6edee3d427631bcdbf9b90',\n '436e7f2d78268ef62c4172d2ff1469028bad1f1d0f97ab007064418e61caa8f',\n ],\n [\n '1b881175e21201d17e095e9b3966b354f47de8c1acee5177f5909e0fd72328f',\n '69954b1a9b8bfccf8ec384d32924518a935758f3d3662ef754bcc88f1f6f3ec',\n ],\n [\n '7d545a82bff003b8115be32a0c437f7c0a98f776bcf7fddb0392822844f3c5e',\n '34b6e53a9565a7daa010711f5bf72254a4e61da3e6a562210a9abc9e8b66d69',\n ],\n [\n '299b9fcd4fadfc4b6141457a3036aaa68501c23df579de26df69d4def89b913',\n 'b95bf2c2bb303c38bb396382edc798ca6a4847e573ce19b7b08533d1912675',\n ],\n [\n '551f5a4dae4a341a3e20336a7d2f365ddd45849351ec6dd4fcbedfe4806d5d5',\n '5865c977a0ecf13ce85ae14c5c316872080bd36f0f614f56b6dfc7ece83792e',\n ],\n [\n '7a1d69c08e68c80ad8b310736e6247a53bcba0183b9b8798833bc696a0fb6e2',\n '3ce803a20ebb3b120d5eaf0ad64bed0522fad1a0f2ce39a5c5cbae98c4438f6',\n ],\n [\n '28acacc0bc41d84e83663f02b36981a2c8272ecd72d3901164be2affb09c504',\n '7a5aee0b160eaff5b5968ab1a0304ce58c3d5ae0148d9191c39e87668229e5b',\n ],\n [\n '1f78cfdbcc767b68e69a224a077468cdfcb0afd6952b85bccbdb96d1fb8500b',\n '4772ba173c6b583284eb001cfc2a124104833f464ff9df096443e10ef3e9dd4',\n ],\n [\n '2774108962ca9897e7f22c064d2ccedac4fef5fc9569331c27cdc336c95774b',\n '9e13d79b68e8dc8091c019618f5b07283a710ddf1733dc674a99fc32c12911',\n ],\n [\n '770d116415cd2c4ace0d8b721dd77e4a2ef766591f9ec9fa0b61304548994ed',\n '42165d93c82f687635aa2b68492b3adffd516beb4baa94520efa11467a209fd',\n ],\n [\n '5e6e4ece6621e2275415e1fda1e7c4f496de498b77c0b913073c6a6099394b9',\n '3d92ce044fc77fa227adc31f6fc17ef8b4ec1c5aafc44630c0d9195075bf56d',\n ],\n [\n '6e69c717b5d98807ff1e404a5187a9ceaf0110b83aa15a84f930928b1171825',\n '1ee7cfc3a9744d7fa380ba28604af9df33ac077724374c04588bd71fa16b177',\n ],\n [\n '404318f2d2ceb44f549c80f9d7de9879d8f7da4b81e7350c00e974ebf2daef1',\n '3934831b5af70d17a3f1da9d2931bd757e6acf2893236264fc7e0d92ff1a1cb',\n ],\n [\n '20dcb6f394fea6d549b2e75748f61b7ec03b6e52319cb14163373a9c22bb9dc',\n '106a8c96cfb95a331618b7416d1498554730499e194a58fbf63019890480fc7',\n ],\n [\n '119000f277ccee013e6bb121194ec1ab5460fb6a96eb702a14079865f4170aa',\n '1737a32f5415e8720a5606ec1dd4756f02e7c6817e3723b453d091f2d192773',\n ],\n [\n '45d0fb5cd95db76d05dec3faa12e467a308eabaad363a062353db3cd2d9b749',\n 'ae08691b5b0cdd19ec499132421638f470f493320e4003d123ab1da761b965',\n ],\n [\n '1257b3e65cdfb6367c6d0942327e799bc66eb221e70c6573a9862889eb51c38',\n '593309fd45755dd2cc4afd2b9316bc4638b0c5ddb3009694fcb7b250d0c8a2f',\n ],\n [\n '186dcf9950f72e868014a8accf14aa36e82a7a2a29f86ba37f6632da4189db3',\n '55684c9f7a043fc523ed78f756f834b4db823d5e4161bd79602c17d55a5cd8c',\n ],\n [\n '58791d5569f282f5c3b01ecdc9388df7ba3ca223a2dc1eed5edaf2a1d302fb9',\n '6298d7dd51561a045bb4089deda9f40b2865589ed433e56d54554f8b45e79f0',\n ],\n [\n '13fd87144aa5aa4b24d5a7bf907d8280d15937fed262d41084898cb688fc28b',\n '3fa54367770cc4479a857411ddcabe86627b405ce1cd14ad3b2863bde13abe4',\n ],\n [\n '48118139445415f0c1879224e2dee744ed35280ff00537260402a1741ec3676',\n '4dfa39dadaabecfc54ecb7a25319444f8e952782d863790e42a9887064fc0c1',\n ],\n [\n '4ad031bb9eda84f2fe5d354c7948d41558ca657a04508654721810ee72ef158',\n '620ebd5d0086b92c6009a42777b946a351c2c7ba852b57d3c9905fc337459ef',\n ],\n [\n '4a34abb016ad8cb4575ea5bd28385d2348e5bcc0cbba90059f90f9c71f86e8b',\n '4f781829ad83f9ed1e1b6de0e5f4ac60dfdfe7f23cb4411e815817e705e52c8',\n ],\n [\n '7fc632d7512aab5356b7915dca854c8b12b369ab54f524fbce352f00eb9b9f9',\n '2ce80b944fc9158005f630b34385d50c3ad84450a9e1e529925b3211dd2a1de',\n ],\n [\n '65ed10347503cbc0216ca03f7536cca16b6abd18d332a9258685907f2e5c23f',\n '3be1a18c6bfa6f2f4898ebefad5a8e844c74626d5baa04a820d407fe28bbca6',\n ],\n [\n '1a8abba1be2e276cdd1f28c912280833a5ede1ec121738fcca47dc070dcc71d',\n '21b724378bc029a5199799df005922590d4e59cae52976f8e437bf6693eec4a',\n ],\n [\n '3a99c22dafcfe9004ebb674805736a26aeed7ed5d465ae37226dcbe270a972b',\n '5bf67552af08e1e6e2a24bf562c23225e89869cab9bef8becb3669175a3c94f',\n ],\n [\n '4a6a5e4b3501f2b7bbdd8da73ea81ffca347170bdfb6776a037cdd74c560fb4',\n '5af167ebb259c2da88740ec559ee04052bb66480b836cadd0e2590c32d7111b',\n ],\n [\n '6890d95308525f0bac9dc25cc1189eb92d29d4b3fe61bc8aee1c716ac17b1e8',\n 'e6f23f78e882026b53ea4fac6950e56e3da461e52339eb43d2fdb2dade7ca9',\n ],\n [\n '748f4cf4f027efdeaed7c7f91ef3730ff2f2bb0bfc2db8f27aadde947f7d4d5',\n '3a1cbc550699411052c76293b8c41a3a8a1ecf12cbbc029a1b2b6ea986fca93',\n ],\n [\n '7321f3f581690922cd0dec40c9c352aae412ec2ccdf718f137f7786ab452cd3',\n '5be5130c9277cdb76d7409452438ec15d246b211dd1e276ee58e82a81c98fd4',\n ],\n [\n '6c4d6cb7e7ae70955224b8a912ff57ca218635a2436b36cee25dce8a5cdf51f',\n '32f8c03c6db3246946e432e4148e69f5628b200c6d7d72449df6eeac0998039',\n ],\n [\n '1dad5f2e795ea6fa5177f110989516eacf8fb37bd6a091c7c93f1d73a2fe309',\n '56b2298c538180e99dea3e171dbb5c6fba0bd0a9ed40537277c0c2373a8e2c4',\n ],\n [\n '1610605baacc9bc62c4cc923dc943347cfece7ae241e746fbe6c2c878221dbd',\n '431a82d657e0d109d00dea88cf3fa9b999845221b7b5590a20c40fc71368c1c',\n ],\n [\n '6a4f5c787fb09a5be2b04d2eafa1e6f3d3c863ee22960eb0b64f6eaf6659162',\n '14dbc3eaea6146ee7eaace5a91ed9430dad3a47e9ca2f68b455171f8fe6a7b3',\n ],\n [\n '738415b73e55412b0e582e45ff0d7bf4b1bf2922db581783fdcc75559f40e',\n '33825aeb3fd8459999eb418d15102ba5864b069c6ea517f0c6e9eab8d9aca47',\n ],\n [\n '2603e72ce53985c70782774057a17944f7b4ce224a809be4e2b5af3606aa1d8',\n '92822921809c42318f42dac4d773325f41c43069e990adac7818a45e2554dc',\n ],\n [\n '181cd967ab4615357cc96c82eae9152ce7598c1a1dfdd91a458bddb016ae9fe',\n '5d562fdaeb0e12647e230e50eaf216bed52fa73c6b7378821a3bfc4cd66d4ff',\n ],\n [\n '1121726069b9ef5954ba6490100b226e0be53fef3e071b7c58a1286174b789a',\n '4b25594cf4e9eb2d14b3f52f2661a9992234fc222c0a0d44517cb77deb9c16f',\n ],\n [\n 'e543663969b915337f105f80995a77b356f1a51d8b4a4fb12d44364130e873',\n '34b2e3c009fdab4cb7349a580df2e64c0098a123280078e5da6623a9ec6b44f',\n ],\n [\n '4e2f8909bb62de5ef65600e61bbf969293815296b6e23702875e049b3ce5c45',\n '3cb81f2c21f22a7add26fa38a9ce5d9cce1bb251bd2698f90c34ff0a84f7af',\n ],\n [\n '37b546e403a1ba970c17b67c2f1361ab9c803f8d2b5cd93803014faa08861ed',\n '37079184ea46272f5809b523d060686633f7995167897a153be1772fd6566f6',\n ],\n [\n '27bddca77f7bd7f66b3693567a4238f2e6751d95b0bcb409f6b24d08f84798c',\n '6417a85cbfd6fc02df560d3963a241a986baacdfa423f65d7227ce49a96c57d',\n ],\n [\n '2de71a39aa043057d1bc66e45f804542acddf18f7a6d88c0d7fb0ca240debdf',\n '306c1ce39ab46300f7cca0f3a2fbfa77296a27e24bc66b0b8044968ec0ee413',\n ],\n [\n '307c877154364c0c03534e7327d5a88e1380ceef6481567ade37a14ee7c1a72',\n '3404bc7dbfb33b95d922d0693aaf9358f77888d7d95e773c38d83dbe2e5f995',\n ],\n [\n '79f09ff7c60850e5f5ea020722659a1ed27db4c95dca131f99552f785c8afbc',\n '40429528c099349b426ddbf129497176951a64a53db5f9d8bd2be0252cb22b2',\n ],\n [\n '4027dc6b56d446e5972f35464eeac85c5254ef377c902d9fe37aea841bb5292',\n '7c3ea37689ef679fa2f5c7e031a78e23d484a8317990fd34d44d95cc1db3717',\n ],\n [\n '645dbf78a3c228c4b7151450b5e65edb58e71f37e1e4bc5f471e0f1abd6d9c2',\n '15cfe7850f327b256e23b00627451560c5c6ab60db78d45b7ab286afb6f13ab',\n ],\n [\n '1503ca373757677ad1d911a2b599d01c46eb879d1ce21ae171c7e439846a85f',\n '583eb269b7030da6a0c324026919de3f9489d2ff6ae0e6320c36f05469ad66c',\n ],\n [\n '66e1819ba3ec4ad4ae9f7d7588d23baa004e29d3aad2393d52af204a81626ca',\n '505249980cbe6273b82ad5038fe04a981896f4117345ac1abcc67e2525c0ee4',\n ],\n [\n '5ec20dbb290254545f9292c0a8e4fbbfb80ad9aab0a0e0e9e9923f784d70ed1',\n 'bdb1ca3a859227cf5d00eaae1f22584e826ed83b7ccdb65483ed5213dc4323',\n ],\n [\n 'a5c1a5011f4b81c5c01ef0b07c0fbf0a166de77280f0ae241f2db6cba15194',\n '4444521fb9b33d7dfeb1247d0ee1a2b854ad166cb663d9dd2e686909362a689',\n ],\n [\n '1f35335de40e00c62642dac2fda8b30f071986ce4f11db849df11bc45ad4e0c',\n '7801a2c761b90fd4477ba0be9a775003d5dfcd959b1ed198b4681f15e7acbf',\n ],\n [\n '48db4798cf6821c1ffb8178b1d3bb6020e04186c96aaf4670972d367f4ed5f',\n '781019494df95b888f1578f1b4a3f8e125ea60eca47ef9207a10630671217a3',\n ],\n [\n '17f653d904210148a8e74d8e719a3061683c164aa6d79c902a19f185ab437bd',\n '6780e97985932c3860d810af1e065d454b1cb4be0e7ffe2d8cea7d52526e223',\n ],\n [\n '5c4d0c7432f9b0070436240f9855adae1467cdc9826952ae01b68cd52a3ad89',\n '1c5747f968ed91261b7ae9bf1023c999da9816e37de602d6a1a50d397752bff',\n ],\n [\n '6fedd7639fdaa2f7bad4ca0b391710f6f8a7e890250ae8ae4252bb8b39a1e58',\n '436a215f655a3fd3778b2335ffdc9aca6b98474e43d764c1f8362830b084f0e',\n ],\n [\n '7fbd45a889c5e9d127bb4f8474d6be7cb9796bbfff923b75e42a1ad4cae37d6',\n '484bd12622a6ba81cd53049c550d9ed682a8e765b656b1cbff9bbea637bd1f4',\n ],\n [\n '17d984d47937263f7966a3e7b1eea04071e678494bd749c9e02b48b3234f06d',\n '7b341ff08722c4e161005d0037204a7a2001fdda7af2cc1a0b04a027f115a0f',\n ],\n [\n '7f1822045db45ea07e1519c3ee1f7705915f35fe4dd8db1e8921b5d1c740edf',\n '33d41e06b93320ad1b3d9580380ec797a05dac3f1cc8008899110ebefde2f78',\n ],\n [\n '7b19453ecb74b7d0e2a66b9890ff73bfbbcd61a266abd6d82dbe665bf32f34d',\n '6dba2355420dac582b1f349609ea1c89b89bba2d1a68a0642f1dd12d86e73cb',\n ],\n [\n '273e82a15f395ddf2489a95685bec8bac62c4b459d1b28987d3cb27e4bc9128',\n '653375b48a4cf5d5b101c9ef533039bedce5dbeef3f59e8f168bdc99b06ca5f',\n ],\n [\n '3006c9e7fc6a553d8eb4e8a47ce9f10d1a39576ac255ae9e0a4ce3869e76212',\n '65fe9e2ef2aae608be309332d464f57e28f1df5de1a6a519751b056971f932e',\n ],\n [\n '5e8f384c8a4607fbe9789fcc52d54249d304d698562597d114c1d81452d3dee',\n '3c8bc78066b5d947dc1e405e326ee55ea606c7988f666748d259850fa259a22',\n ],\n [\n '7841b2102e9aa103fb53a642b3e167b21113ea44751ab38e0b5ef8312654db9',\n '71bf5c8308fcf9c4a7847494cd9bdd946fddf7d3a37e8bb0b201ff2343deb8e',\n ],\n [\n '40f68027420c11e3ade9aae041978dc18081c4f94943463aac92d887f922a62',\n '499c6062594a6c7e21a3cb91ea451813393bff365a27a08f1a515439b83cf42',\n ],\n [\n '6ce77a50d038b222634e87948df0590b79d66087b01e42b9b6d8fa30ebb1465',\n '35f5c46bb1be8555a93f155a174d54ec048c2ac8676e7c743054ddc52709d37',\n ],\n [\n '604f8b9f2dacb13d569262864063c2d4bb2b2cd716db6eeb2b1eeabc57746f6',\n '68c6799e24f3b44eec3049973445174727a66970f1614a782efa2b91ab1e457',\n ],\n [\n '73d620f3bfe77f672943d448d7dc05327adf64b8e7af50039c469d7f7c994c4',\n '4859deb36eaf0c802f0d1514602368143a33ec6ce8fd55248b59025debc6afb',\n ],\n [\n '3fd2bcd1c89d706a3647fbd354097f09c76636e93ae504973f944d8fc3bcc1',\n '677ef842cf5eb2444941f527abec567725e469469192354ad509a26ebb3d0e0',\n ],\n [\n '39222ea924ac17b533c72ffb2c47ffdc11d6a7f7c70fbde3a10fb0b8f35eb2f',\n '20dc4bd1089019bc1d7379b4feb3eae6eb5af59e9f253845da9fd633057e952',\n ],\n [\n '326f58994e1347f62e4102183215b5db956378d2f61f14aba4dec94577f53c',\n '7a03284c296003bbe05178a1d82efdb7b8125511d63e20e50aed789c2e52e1',\n ],\n [\n '53aa8939c74d4ee58f03bc88bace5a45c7bfcf27466201da05dc6723a5f5632',\n '2e32535ca7732904a048183247b04b426ecf9b39fc393a9cebe92fb1dc7a7f1',\n ],\n [\n '6cee1a03145e93b3e826e6067005f09c06099c98198c91c222407ba5c8c132e',\n 'beaecad1274e7c6e5476a100c271aa1a6f86ee5a9fa5c2f26124d5886fa63',\n ],\n [\n '3ec659b8175e1be1bd5a252108714776b813e330393f587814f5f1f32a73332',\n '529a5cf9f8c237ae69a94217d173c8d19c156952041f5c980da557990863fa7',\n ],\n [\n '3d66ec5963d0c534d4139c8cef2e1ac48b3e7965fafabf58be26f903318af4e',\n '3d3f2de7a95f59b683725ee6283cbaf31f97c4b600df9a4621413223a468740',\n ],\n [\n '7fb38ace8e0932fac2ea0d3eb676db8d684db1817e2e4d59da7996ce398b4a',\n '68f92bd5768cdd4710249f9d49ef1d5654e497b9a4ba10bd2971366d83fb400',\n ],\n [\n '1c4a49314d6b4969cdd142c76ceb7682bfb868ace7f7568b0fc8635bda5a9fb',\n '5fc0519f1f4cc10b5771312458748c036313b87707ed0540026ac64a5955aa9',\n ],\n [\n '3073c95d08d3b97caea5f0be16b2789bee766f76b7e5499f8ce8f96abb0f344',\n '52a8974b4eb9a1f6a0ae2c83cb4715bf18d73f057255fcb3f63b74f7e78f590',\n ],\n [\n '44485b16d597a5de3604df6f7ed7e00b8aeef9e7e8dea8688255153b8bb16aa',\n '6cccb0ba170123266f24b5d93a744397dc2c44820edc4f8f5b9a0f5c9b3b940',\n ],\n [\n '7618f77b7b32d512688dd62e0b48231d9574c6361e8be353a7dc04f7c3a115e',\n '78ffcd16d80636381ca231aae70d99c9e20298b4f5388fd823ea9fa2b8ddfd9',\n ],\n [\n '7dc82fee1ef95cf5b3720fcc07f63246654bfe39762627839da40e51c75654d',\n '4c0ccdd70955da74558de20c88352df8a02aa97e4d5971c500e884740a8cb62',\n ],\n [\n '7fa5d460dc10cbb418b444d9bde97e92c70a99a222b99f244dccee7e62cc04c',\n '636163901baa5b7576c38c43407af578b8c4607e01e86011ae2dde587a89f84',\n ],\n [\n '758930d46006623a756c89bd0cc378f6a3c1f43c9a0edbb42274c35e75c16d2',\n '1d74dd9f81c2fec811b8cbd6168a745b0a111932b2a345265ef2853b50b6245',\n ],\n [\n '7332ee0626b044d664ef228f8cb84df7c643e52f6a2591ae1c9007ad61ec16e',\n '229bd8e630572cbdee54283234cf3e9f060e6382f99943bf234119d47b54470',\n ],\n [\n '78a16ef803aa20a075bb2f66c61bb2dae5698bebb94a0995fa74c3d53de1614',\n '246d588b68edb6fed96c128349908c42dcd64c46341b205e79f4aed9b5d3675',\n ],\n [\n '6e1933939bd03b67bba753cc0cbe7d2f25bad68c993887ef8c9e2fcd59b0647',\n '599413f7c204a11a5ce315eab11299ab7326603412bb00bc1c59ff75a37d6b4',\n ],\n [\n '4a79957a5a1888ad063b51c69565a2b48e8eb917183e220a1c8d3374526d30e',\n '1f092de0e069bba7fc5386e2e9a114c1618f88c4b95e220cd35ffe96f99fcad',\n ],\n [\n '3148aa3df9ece39aca84f59489f2710522216f14be6055ee0027529d1d55e2d',\n '617e9a52a92975db0ba1977f71116f7058a0d31b869ac7f3ee2fd80b0c5100c',\n ],\n [\n '5c1188e72384160ae39d07328346cda4f6c12d227448e6236f04dc971625287',\n '1643006eb3a3bc6aafd5f685cf054f2a572e6ca58c0118bcec0b833741f116d',\n ],\n [\n '3f72efc93c9b71adc4c51d8fc69d3940b20d08733af2b7d05140fdb1d1c1004',\n '7399259987c8f4ebfab46e522380707e58427d3962ee0c2a91760813f76d232',\n ],\n [\n '3129b34c03c51aa8f611e91d5cfcc9bd3ef108ee66e6d3ee35a0e0e50055bb',\n '563b18b5650085efb4cf179a029e6afff27b1d3091cd28eaa68d24fa1f801c6',\n ],\n [\n '16eac0f9fb4c67cf89a7fa4ee615bbe731d8edcb709a1b9b50c7d873a530f52',\n '7ff8288b6e199ca8f316192881424a37fb080c29daa76b1f0edaccaf580a80e',\n ],\n [\n '75f6b6028c43ce832f65d7e8e620d43b16cba215b4b94df5b60fc24e9655ee4',\n '35e9ccfaed2293a8b94b28de03bcb13eb64a26c831e26cc61a39b97969a2ff0',\n ],\n [\n '3c6152fe093bd6316897917ec56a218640ec1b2148f21db9b14fc7a5ff362e8',\n '6eef2df27ae7d63a28856b07b73e7aad7ca94f317201a1e675ffc6f9a1710dd',\n ],\n [\n '54e01b5fe4fd96052aad55b3f26b1d254dfc7e2525fffb9ae0a77eb8cc5579',\n '7c3d39232ab333675b219abc766ed9b4782c840e6b046614dedb8a619696eb0',\n ],\n [\n 'd1e63f8ea8a76429cf254a6d3b668761f0dc572d4bfac4fd56d9eaf58fb6c0',\n '2bd0a84d3908a63085824c9329a0983913006ba155b56a58eb3f9becab29c45',\n ],\n [\n '2d6122f2a702edd4da7385b1580796a71d13bd72be94cfb3fec01149c006c2d',\n '70eb282fae992efa6f5915e578b640653549f23385ef3a29ab29b1b9b8ad63b',\n ],\n [\n '752fec14beaadb5ddbba6b3a17fcb86579fa588ef407fad0ea07dbb22a640d3',\n '3feb6728eca21a1e84e8f9f23010387a53a96a1cb62d86fb37996150a1299ef',\n ],\n [\n '63f94a92f27acde8f5ed949b459506f51d70c85bcc61a34d647264ecc53c65e',\n '37e5dce0646ee66f4fdb93b82d54d83a054948fa7d7fa74ab6b36246fc7383e',\n ],\n [\n 'd6aa909287a2f05b9528690c741702c4c5f4d486c19a46c38215f52ef79c7b',\n '5ebe1128dd81093df4aca0df365d58adab848d1be1a94b95eeb649afd66a018',\n ],\n [\n '12866812b3053e2f7a9572bdaf5ef2b48c6fb62a0eed9ff0356df50e7d05557',\n '6785f7eb2cd1c120e4c7167b46861d10117040a2e9f2ca86a71e9d67df90613',\n ],\n [\n '46a730d05330b1b13673cb8a1b8f45460035e4a9f1a1751cfba099c4355c1c',\n '76fb0ec6cd16a8141cdcd875c8b2de9fce42d296072643d148ac7e7fa7472df',\n ],\n [\n '4bd4380a22900bd34835e0a908eacf4b6edb61eda0cf483f9212453b37e7516',\n '5e9551cd20d8d7ddbf4366880b7d5267385afa1966ff30da4baaf273b009d29',\n ],\n [\n '71f1994ad40baa2922424ae222663a64f93d8b67929e9a10f9e4c1ab19f3833',\n '85320fe68ec0d37cc19fdfd03589d66906ffa4046c80e1b094a85f27676346',\n ],\n [\n '5a63b1bf5232f28f808765c6be7ce1f81c52145b39f01c879fae0f4303bee61',\n '3bc5d6df68bb6d0577bf9ae2ae59ec0e9b2dc7dd56ea179fb38a41e853db950',\n ],\n [\n '161ded55ff1087032381e6c1449704f63ad2d88df82dfc44a71890fa09b3941',\n '78a52e0013842037274ea75daaf8eb4afc04ccc4b07bfaf3f5ee47d165e01b',\n ],\n [\n '1bfce5229c5fbff5c0f452a22317fcfcd9262f23df41840f84fe7d44cfba1a1',\n '66b387872c00e63c73006a955d42cf49c46c5708fc9d1579b9ae38341b24a3d',\n ],\n [\n '56d47dadc9cbd1dcb2ee3efcd5d4af5e6aea71df10815c68b54a14e81d11b44',\n '47e966ba54df48e9b612a903685e0060a67e4725402e8cb4cf654e54e813a3e',\n ],\n [\n '4b1c44438afd4ddf20a2cf612df2ee494ce84c7274c5529e857693e73018491',\n '430403bd31d8f0677e06abff7159384560f27b9622943fea1a3192f14bf40d4',\n ],\n [\n '7f7281728fc2214aa1dbf13176a4624b53814734abd570eb6ef7c7e32379606',\n '312da47be347fb3fa2c9089b38df372560dcace2effeeacab4d96ab11567295',\n ],\n [\n '16a28884a1be8183e0d3fc0db84a9afbf47126fd3be548c2a584aaafbfa7dfe',\n '7c3f57b3b895564ba562c1cd80b71fda6d2e611665c6ab87744f5390858fe24',\n ],\n [\n '323339f37b327a731232a9580e79952063c7c232bd1380146d8a83c285f4b8b',\n '4f16be1d983c7232f92cce6b9690695978d42cecc8eeb8c206e125d1098a265',\n ],\n [\n '624d26cbaa197e104eb83cebf2adeed09a5cdad359993fe5e3529d4d0def21d',\n '261b7da3cfb55c788977e0d8d640e3e93ae5a325d962ce85c816d7d32cfc430',\n ],\n [\n 'f24ecb7ee83a3e28dab54a330dc93d0429a7aea36412e922dce8fbff40d60d',\n 'b043e36a258d1df1d21b0cc7be9c4dcae1bd4ed326c110e668ac23d86805a6',\n ],\n [\n '686cea46b710bde1231483bfdbc700cfa3da6ecd5841c0e0c782f9ea24328ec',\n '7eb7407aa58edd6911c7c7e8d1e03bb52ead4a2415a0c33325872ff3a521dd6',\n ],\n [\n '3866ee1186264549df3dfcdf8705c0380c9372eef6d4081c2454d3aded1720e',\n '634c6d3e8eb8af652a4be73e3b613452c2213104ca875b66b4b15ee5b1716af',\n ],\n [\n '484c687cd2969a1d20a58cdfb9a60f280a473284503b1ecff5de514aaf8206b',\n '34d44d26b7427e51a646d1b924084762f5b461685450f21d6a472de565bebd8',\n ],\n [\n '203561333771fa0fe22c4033349f7b877d15b0542a5598e81e067968768247a',\n '2b6a533aff6e2163a36a2a89cb7415848bef48db40f952ffd380f47676707c2',\n ],\n [\n '2ffa6cca6233695760251206fc5e34c8d3692498589478cdd3d5b09f0b7c05d',\n '6c57d605478fa9626c4ed769554d075daa53e1a1d0bd4d94174d3bfeeb11ad6',\n ],\n [\n '5dccf0fa46a5571f204d0b033b45f299cbb3d9f80fded57253ea4f1c64faaef',\n '30a38e131ee8756ee5ea2a3e16618a5dbc28b5b9311308bf037ecc2039dfc7d',\n ],\n [\n '57b0a2eaebeafd950221facdd24790d7d1ab8883e5c5d55635f0d14a1ee4741',\n '7b41cc478fa6be38417271db8ed12efc0da6982552c1496025d2df0576bf4ad',\n ],\n [\n '611b5725101f611c387ccaa13889ecf3bb5595071a179ce350029bfca4ad7f1',\n '3129755977abc8995fec7eec1123a1561e429fde37ff36af002d3211831ecf4',\n ],\n [\n '1c06bbd0c52fdab9fcaf680c7a93fb821e538a2ed79f00f3c34d5afb9ea6b31',\n '3873d3bdfe0be0157bbc141198dc95497823cc222986d24c594b87bd48dc527',\n ],\n [\n '275cdbabc989c615130d36dabfa55ca9d539ed5f67c187444b0a9a12e5b7234',\n '2b7f723e68e579e551115d56f0ae71a3b787b843cc04a35b9f11084b006521',\n ],\n [\n '6cc702eb20f8b5940c7da71f8b1801f55c8c2d8e2e4a3c6c983f00bc1ffdd95',\n '5d15b3727bc66f3aba6d589acdd139fae115232eb845abe61fbdfc51341352e',\n ],\n [\n '44defb418700cee8c9bd696b872adb005490512d8bba081f8f99a9f15cc981c',\n '3b2072cdb1d919b2b65b5cb3557f0a3381d7ca293c267ca4a38f83e77bcc96e',\n ],\n [\n 'fd83ce77b1578b3a9b8c3cbeaddb1504d2fd4a19c901c21ac65961224e4966',\n '110cbe64fc10c6b9c66f15ca406a35f50b723b35d83c5eb9797a57f8395f4f9',\n ],\n [\n '9dc6ff90e341875e113bbfb507724dc7095a280d2f32cb6ba61a1e0c2d2aef',\n '4aeb622896c852c2747454e8f172c9482955a42ecbe522d6ce07ecde79d0a51',\n ],\n [\n '71c58b0e47b9dd9107ebd8a8c8fa9f0534e78231bac612c1ddc7a94edf33eb7',\n '7f90edaf4792bf8334adbaa0f4ee7c654312725af188682d75f34874c4eccb9',\n ],\n [\n '1f6de1f14988778ceb2dfe844f92394f1f1e72fd1581ceb3bf336c95ce50345',\n '4f6007ed4e022d2ee9fe4ca8207c5f6c766c4f3b85260e941fb24ad0dcbf0bc',\n ],\n [\n '3ddc3ac25ede4a67a97547ed27dc920239b585fb3624177e2e8d59eba678115',\n 'a9afd8f8bb759cbd1dff2addc63f47da4ba1291ea34229c09c0637dc5c8d24',\n ],\n [\n 'c56b0269d8431556e471cab9d70edda3a37b391696f107b2dc370631de51d',\n '729c52f6b134f733eb750c14bd9f95c077f0f6f6ff4005701e5bedc6544599d',\n ],\n [\n '44d32ce19ac6807cb22e4f25fe1486a36a13926f147fbfa054b63ff0446177d',\n '212a21e8c124c9cd37c80d2dd66913ceaa6b6f666522f115c39382b2d5925e8',\n ],\n [\n '35dfc16f3ae6ccc06a267bf6d931601e52f3e45359ffc513570b65b96adc4f',\n '74311d10f4bece01b5ae65a6affe5c931463aa1b73a3320eeb41bbb7bb1ff62',\n ],\n [\n 'e0acd9d2d907031b319b80121dc90699d003d220ea785d50e5033cdb3b1a03',\n '3911ba78d6e507485d6374b0f7d2e6198f6462a7d6d3cf046404a07af690357',\n ],\n [\n '3c57918ca254c0cb7dac251ef4e10c7d82327969552eae15d26c4c52660922a',\n '5fd5f5ff3f14e671548074114c72c48409df8a2e71fc8aa3c8acb506e2a88df',\n ],\n [\n '222ad8b61e219ba2b581f606b7c996516850a46a3db72fe1f72b5a9be6c324c',\n '72015a5e2db648112abd284fd867b59fc5606645177d26cf6e9a655c9912d42',\n ],\n [\n '3c86d5d774bc614469768ad38f7be9a53e9a233942c5c553b82e49aae684764',\n '480febea8229e130dedffff89c11f3c43e11724e6bd89d5566d78752859d41c',\n ],\n [\n 'adb73bb8352d0c10175df371f7868ef2c9e0c79ac788430c480c0f7d85c187',\n '60b564785248111502e6f39c4994d6293fac22bc25f4d764b2fb1957d3c9bd8',\n ],\n [\n '3836ab8b46cf4f453a22532c886940b982029b29c42adca90ded5bf77e6bcb9',\n '7b15e91d6355f147b171a90b064a9d8b2d7bf3699bbf4987664c61c950d8996',\n ],\n [\n '12ed96af1a97c45ec31f1531e96f6fb28a03ba52ab8484545fbe0dddc97bb32',\n '6d1f522b6c6cad0940cff8e23decc72bb8d4164696af031415508b025aa8be1',\n ],\n [\n '27382994ae5878223ef802e9b4882f481a1b4008f1eec8484483471f7aa742b',\n 'c31750d242b3975b0026a0e86ccdd17d0f680a8c6f53f197fc25eb1f777917',\n ],\n [\n '431677eba3715455bc235557518a74f3b111a88844ef13e159ad44bc16de3e6',\n '30000e1eb6a17d9df776981e65c6e500fded1ac12003adc9446b269812c9197',\n ],\n [\n '4b563e6f42589671579eabfa2cda5502b361c46a5ac8d45c8ed44741a925b33',\n '627bdb41678443fdd1aa607709e9699b652308615f4bea760a3b79ee0d9ab5c',\n ],\n [\n '2932fd3f81fc973ca9def6b7f1bb50f980fe589187cfe9e9f52ba4d356cf2c8',\n '1e6bfd00fa976c4770263a227048214c38850fe0f059e7b3d2c7871ef07d68f',\n ],\n [\n 'e44e4f3d96d9dec775b996be57e57fdc28e7c68023109b221c414a244a0dbc',\n '58b1e52fa274812e5184e00e9ad812bec2463140adfb4bea3b2d665867dcc9',\n ],\n [\n '7fcb89be1f4bec745887bb891e53fefd665c53d00a9e74de16b8a7e1f7adfb5',\n '74af0b06633f779897e199609c71cc5649bbb65bc2c0abd4c678f0480c198d1',\n ],\n [\n '62a381ffb904ea3ff4d451d4c8459457cdbc3dc2fd2da646a95d8c1e90c0b7b',\n '1ba058658e09db9e319fa73de8ab4a992b71e4efc22c273725bdcab84e2a315',\n ],\n [\n '1b0fbb7a84c67e668450a54449c7a46261a2d355589f8b84ebfbaf9a77ee938',\n '44f8fffa33dd33a6146c35d196595e22cc4a215f61ee9197cd751400970a1b',\n ],\n [\n '78fe920bd96a356d4d95ee34adafe8fecf071d3107c36f047b4024ddc4b3eea',\n '6162f29607fdbec10181fbac6e57d5cb41b922c5791fb24bd28bcdd75d16c41',\n ],\n [\n '5629b849e026e65d119ac11821d7ab7efd9c52226f75c7427505d6818bb0c8d',\n '1539c0f90970ee8b490e45bbe5568170e5708521a0e59f976be680595906feb',\n ],\n [\n '62bc853f349bac8c6e5921d27ba85dbd9ba20a375d70a7bc008928f3e123b04',\n '6acfeb1de05ba43c3ef1a9110a983a320e77b3ca294abbc04aeca19b194f26f',\n ],\n [\n '4cf4bed663464418285cbae359b5d84ec76b5997d24f3640984c7663421190f',\n '941f818e3e3e8fb1568da85217d17f9250ebc948379014d900a7b1a848494',\n ],\n [\n '52ff3d9ffe9a302f6dfaaf74bab57c08027d5cb699a69b30830540c0a2d47a1',\n '987dd8876873778d933fbfed37aab2f7d6f669c37024f926b1edcb2ca55782',\n ],\n [\n '1109ee32f0bc53de6bfa457060b366e909d7c18061ec9845f46ac715496897f',\n '38f36f172bdfd454b9285f86e6bdece8fdffc95182c7d801b03c671cc55139b',\n ],\n [\n '4b4482f1d84efe23dadf3bb10df3dcaa251312dcdd604f616f1eb540e1f3232',\n '7c9c149dcae9135f940fb54482f9c3cd8193721643a6e23157b8020410d439c',\n ],\n [\n '69cb459b9e415b7581ca163611c470d875971d5d7949de732d1f0f200544a73',\n 'a7136fa9dd00c0469863b7def3f83a5611ed628810d7e807e7a873da5a9897',\n ],\n [\n 'b66a4e32ac9a4baa8f64780acd94ed3628b2b0ea874ba4dece629af65f9e62',\n '24328ba9996a24389658e3467b8b90dc3927ef8419fe28b3f55b1c1aaa51915',\n ],\n [\n '5ecc3080062dd451236de0e4eb91c5c75100733364bc5469f5fa76f79021ecb',\n '6da4abb9031a27b5be94529324fad8026e7d871570780081b0f424d4fe543c9',\n ],\n [\n '1e3146f00880bb22486d5bc73e54367d54251f4002bcf342d0393b05a4b9ce0',\n '23b6fb8e945d3205f633ba724202db5a99305f807137edf942cd60eef867699',\n ],\n [\n '2e1da8013285598b899f026c6974185db12c97b4c63509769d3d4ad1d18a4e5',\n '1e7e7b668674d1593c39d58bc7bccbf568208732b3519bc2cdf93db34366862',\n ],\n [\n 'd26c3f389d81709506f184b53871497c8d36c5c9eee8e3737358204c1acba3',\n '34649c3d39f3b825947fedbca215ae30c5a5995e93b1c8efca4944cf85a082a',\n ],\n [\n '91300478a83595d548f32f259033291fc7d083953b0b8bde88c7559660c563',\n 'e5d2bff57fc6551e9b80c06ac7314a71907cdcc66ce82f2cce721a670df10a',\n ],\n [\n '1f7abcb9d462c63ffe92aa56619ae8590089cca4d93ee3e5f34a63882452cc7',\n '7e9f85c7b7ca6e9a4f3a026d1048adbeef69ea9d876c6f647c257b879a81bdd',\n ],\n [\n '4d2caa1323012e4c83b0ad387308b8aef5637bc35ddd882e7f5e41cf2ca410f',\n '47150e808c81a540b6f8864e9d6636589cacaa516f82caaa96506edfbd6f0e',\n ],\n [\n '3c10a6083c38351deb3e6d1b386827d0acf48979b66b95249eb8700ec26b069',\n '47e34bfe561d903cffdd1d849b85aa3cbd31cb4a9bbd8cc2e5fd2f95016cabc',\n ],\n [\n '758bd54868eec045d0b4d3d2bc415d24bce13fee47cefdfda46425c109b657',\n '3392a7c66ea3bd7b044680bbe9f78ae86752097404c067e9d2572f55330df83',\n ],\n [\n '19e718e0ca1d2d6fadbc6006ee7dda7a385430e29f5e239cdd4bb7c3fdcb2f8',\n '5c68249b7fe03ea2e13481a63b6cd4bf74ce42009a89fee0b3f8f968b3ec709',\n ],\n [\n '28077f57ea62401806367e6d54fe45d02de5b072db787ffdcc3854e12a3e855',\n '14f3762689072f5fb41d03e94b01808c739f6d42b7b785b0e464100b150efd2',\n ],\n [\n '3b8a8cefd017363ce867265af3293cec081fa589fe561830f0078778cbd338f',\n '69ccf2383cb7b4f9c806d72535812483e7c5e9a1a5928529d64ca7e085e758d',\n ],\n [\n '77878f388d22161a2953e5aca6bac1ea480e102f329574b4b201640d44a296b',\n '7eb35706a90a03aff7c2fecca72659136547cee98038746db5aba16fd7178df',\n ],\n [\n '97332e6da70961f2ef31b7b628f1018d21db8db015922a301fca7d6fc6a8e6',\n '2e37b06f639fc7a82601b744570a2619e543cbfaf60e474107fcaf4686d3223',\n ],\n [\n 'a81518d452d3aac48bf0386c3ff170ef4e684a4def242c964e129c64f4d647',\n '37506e44c85908ec7b7adda9547fbdcc2e3605151fefa77fbf127ce3bc938f2',\n ],\n [\n 'e80336b2220b1d666074f6b0dac85353d0e4c2e8bd0f37055a2236a6a9fadc',\n '1cae76d73eda7a5964c5d9d3ad6748aff51f5543c56441d2fdb7b444a39846a',\n ],\n [\n '2c01fd8430ecb44e066f352c4f697fc9fda177dbe162f82862d7b9ea8c918de',\n '6e1dfa99640fdf5b30603d34c7c97c1aa6e6b7f3a2c52a21fc64b0fcac7d591',\n ],\n [\n '744e37b511cd0ddcfe15f3581947014c159de81ed055d15a13c7a2d1fa39f0f',\n '685caa8ff6979a6c63640ac638a3f9c75737f2031bd55322a47384357af164d',\n ],\n [\n '40e627ff84e1a7a9068b4368770f5956128a4d9e9e33e9cf5e24d9a242149fd',\n '2465bd6cb20bbdf810e2bc5c3c458cecf4f3aa163a7ac99c2579e5f33417f2e',\n ],\n [\n '5f635af7f554a17bceb6ccb6e637abf89ab6dadd399189b0a0390e87b1896bc',\n '2aa6238a69f89665646c0e3ca2ba5f709cc6e14351cf71e1b00ec45201417a2',\n ],\n [\n '5edad3063c9fa8305978d7e6a4e037c9fa519b8023c7608dfc3b66e5c1e8985',\n '49f405d07d7d01919da51159ecdad1031a5ac208c026fdfc14d38f633d92183',\n ],\n [\n '2fdf2e8a45858c12926a1f25a62255fb2d02d0149a15ef669f859806683e649',\n '61cfb686bb31e2524470d4ad2ae09e3cc91b16305a21d748098feb1d8ce3b3d',\n ],\n [\n 'ecdbd7c37f1dffa3943977278da3bb429afdf948b4ea6cdebace3d3be82381',\n '190b67fb34f7f3ad6afd3d6b6427aa327547d8ac0fb4deeb0feeba1f63d6c60',\n ],\n [\n '233021b483f578dfa5222f8cccba5766ceee0ac65f6d4a3b1673b302a21fb3c',\n '7d4b6d44d175d4b593f06f5a6dcba2cdbc4eaa2097abaf613123546866cf4ef',\n ],\n [\n '42db4e953c2a7a743de9fe20c5798f2247f51db4eabc6f40e86c13909a310ce',\n '12c1a0764a0b9f3666e431923ce15e7fcd0ded5ab153f0b48d362cca1604e65',\n ],\n [\n '30d539e2b545fb957e40e2255f6463b52d227c9808472cee6a3d521aa283a44',\n '5f9eccf747fe6313570f99e845db32b40070acee9ce9e34da7f3c29ca53a07a',\n ],\n [\n '4bd64e5ade3e2733580a6116b4af328751198e7128f9acfe3a3496b545efb5a',\n '4d584768900dabfc0dbaa086632b8051bb3905ef79b84d96c01514441d0cc93',\n ],\n [\n '62d6e771f02e591557197d13c3e77dfa2d1794ac1808407bd8227c4be31b466',\n '5c6f5607c1808e899ba36a425911fa8566b7ea9cc80de8a80538c0fceb837c0',\n ],\n [\n '5ce406218cb2852b1d2fe1836b19462f664631785216e87ffbce26030e2101f',\n '5225f107743c255ab50e7be4a090fe39478d1ef4ff558468559d8cfa87bb94',\n ],\n [\n '670286486e8dda3dc66b0ed3149be7697d3e06c8279844079daa7e42d5af728',\n '26becabe7430380c56e320f5ae3329569cae7b0af06fd5327ee23979d200eb0',\n ],\n [\n '3ef448df33a4394c43e93e5850cd0c5a6dcb18ae1cd865d00fe8ede9336a9f5',\n '56711f6ab7e0e4f7365ac34e284ac2879f40208c46f6febcc1dcf7146ecf015',\n ],\n [\n '4b63fc130288e92f2d6ba238caa7a6364804e29829ac037c57df32fbf762bc3',\n '1eb8c80af55278b4113286c038fff2bfad2da62763bb03426506b869139da0e',\n ],\n [\n '4e7e998557b29a95f805a6e2e26efc1e970108272d4755738c04f28572295c0',\n '97cfcc2f447bde61bde71049d8200a74a3028b21703bc139143d81a3623f09',\n ],\n [\n '574b67898f02964c408f68e9470e7b615be037e40b824e6617f89cb56c21219',\n '49392d5f8e6740a1b0b7444f56d7a17363f8656c6e4c628678c86223f2e46c8',\n ],\n [\n '7e8cb50ea5d5c1b09e219e7305bcb601d99b6d7185b1c388aa8e36fe1e56554',\n '47fefa308645455c12ccb5817da338f0c4f423b341aff4a9d158891a4fd69ba',\n ],\n [\n '67266dea9e71b4ed2bf24a597a823dd048cf31e725db511edceac72998c9ef6',\n '39babd65850befde1f7c28e41dbdbb4caf82bbcf3bcb5b33161f1c2960b2d8',\n ],\n [\n '63e99c2cb9c74eb9227d48065e27abb8f606df8fc83b2c44e4ea38b046bad2b',\n '60494a53dd13ecf34e08079d343c88fb655d6d810785af81f08d5aa9bcdcf9',\n ],\n [\n '3cf0600b0f5a2a4eb78c487cd385350e8c7848e3f6983231881d7f1bbe28543',\n '56dee4288528de609976ef6b903b652127c37b0590e91a2fdbebc3f11df2628',\n ],\n [\n '758f09245fa4b8b23d290ee2b3bfcede199b4fdb11f3cf2502a8ceedd61b129',\n '622d9baadfde781e985d9722e0a04715666769a4cc7a9bea0b96d6386be1746',\n ],\n [\n '38e1a45b81492aa95d7abea2b08b8c14dc0b8a41108b036871fb737910ae18c',\n '145c611262656385e5ed6243568cd3f9f59dbfed7a01ba11e22bb8bb272e08e',\n ],\n [\n '206e54ca53a2f155bd4fc45bf2edb77798ae6623defd4cf22f2dd4a7d119dad',\n '6c94e7f0825ad81680e4cdbcaaaf4df806d57a0d1fb2331926c3fe2b79d22e8',\n ],\n [\n '56e98d2862893caebf66180e84badf19ffc8b53041eaaa313ae7286a8fac3d',\n '526306f9c01afd6e0c1198ea5de17630f5a39c4ecd02d8e6f0d613c355995c6',\n ],\n [\n '4fa56f376c83db33f9dab2656558f3399099ec1de5e3018b7a6932dba8aa378',\n '3fa0984c931c9e38113e0c0e47e4401562761f92a7a23b45168f4e80ff5b54d',\n ],\n [\n '450cfaadfecdb8a2fbd4b95c44cb1db723ee5ac9677c9c188b3d7c8eff4ca58',\n '1a552bdfc0c81be734f1f6ca9a6dd3ab4daa61c11fb53ebb7046eee25d617c7',\n ],\n [\n '6fe20e5c8a8004e33eafc84d16ef770f2f0b7bace19adaaa150f987d295a34d',\n '28a35040a2ebe9a14a162d3208d5eabc6e2f3a8310f926bd80be65aa71775e2',\n ],\n [\n '1bd65f45a35bf62ae8f9ffcbd7de2976b90518b6820c219f039c50043bb1edf',\n 'fb5f0f8659f9b6ed7cb0ddd7999506d0c20b26bbe69d1915a31842cfac41eb',\n ],\n [\n '4ba4cc166be8dec764910f75b45f74b40c690c74709e90f3aa372f0bd2d6997',\n '40301cf5c1751f4b971e46c4ede85fcac5c59a5ce5ae7c48151f27b24b219c',\n ],\n [\n '21cfbc678f5a279ebb6ed124273c8df37eaf12a2d04180403ae6b5ec0b1e1ef',\n '4478ed6a346d899ad7b0b10350270aad39ddd5b68529297e4c91a54357f0a7f',\n ],\n [\n '350bfefbe3d864eaadac9cc1195c14159bb736be743aed7380d2384cadd2046',\n '5e2a4b3ad0e1d7b9b8ef72b10d68a80e5ee691d7db591fcfbaad6240d41da8b',\n ],\n [\n '529acd569127f73c8d34345f87e96cebfb48ee12a00a3861cda209337ed94e6',\n '3120671a89b705e5bfd99b0e7fd2118b4914a3ac309b3d74527cacb5ad7491',\n ],\n [\n '55d3d7956a97d10e65a4d8ffeba40deaf0db0b57f8e022cdb3df6df613f5c6d',\n '159e59a6f92f48fcf85aa96c1a03749a4c4e2cf9e2bc94dd36796daebd9b8b9',\n ],\n [\n '405f019ee8f2e972a005c549b0884b5051f63d1e78480b73208dc07d8c65a1f',\n '4301a3d0c285ad309ff24a12c100ead7f48ba1368143712f32ac141ab4d9e8d',\n ],\n [\n '376d59b298d982f02dccad0edd5bbd4e5e8fad7898750675ed0856850a7babe',\n '5233b12bbc50564eb61cc098a17d3d97f06ec7a230380e4c5d3b725cc318eba',\n ],\n [\n '2f55624af6109ef04b2ed035a44a904ace8627f55889f011f768aabf4de9a38',\n '7f64209ce7dfb63337ccf3d8c14f4093295f86996cabfee23b1655549aca089',\n ],\n [\n '3b8965e942bed2714bc2e685fb103496e1e3595ac6a343d6df45fb5ef6979ed',\n '5b7cac7a165cb69ae103dd9052fb39c00ed0aad47989005aee53972d82d45b5',\n ],\n [\n '7abfe3accdec1eae1a50049efdd9a8eb7c2921a08e8bf1fe606e9d5a4039ec4',\n '3af178e7e831f8148244d2d2b284a32991852db6212ad0a9d77540ef648a5fe',\n ],\n [\n '4983196df6ad7d6f0a8d76f86af3863ad8611374a03fc0fd00793181dbde9d',\n '204c1f91b70f975a21d24a8face664e496f00f602daaafa69a3b56098a4cf89',\n ],\n [\n '79e2b91c1531a3b16dbd53e72d94e16bf265cbec261658151acfaea3718ea72',\n '3d9bdb47e8b148c1c5e9e694ffbc2cf71aac74ae1a85e8d8c3f77e580f962eb',\n ],\n [\n '297efceec61b3be17565843cae465c52524b4ecd9331a4170f54f7de8c4556c',\n '6ccef1733624cc8b973ac63dd54e7a53604929affe81c3439525ae5ed6af993',\n ],\n [\n '44f04b1966264a23ccdc870c8563ad2efcd4c8087b5469b90e792287a5581c7',\n '1c417f0e9829fa3d3cbb7c3cf4dc7aac04c5bf66ff3f86b833a42c533aed1fc',\n ],\n [\n '6ff83f5d8b51db3be0bda80eed2e2adb7037f2f58f705e88f0f98197431ac26',\n '64f59b8428894c2b7afd740866065ded42e716c7d48accd3f117f22768ed9fd',\n ],\n [\n '14aa8187c9559f77cd1cf96b2dfc949182529936f2b0b4050ea56e134073b24',\n '5f36508c68b1dc586f3fd3f4e2bd29c6d8258491b8a6aa19ede811ce0d3d0a1',\n ],\n [\n '95e8882a68c5000d1c2be7c0b43e7f2a6f8de906485241f0285a5c73a27a83',\n '1e4cb67207ab73bc1e5d19fa2146fde6d03021393b77a55df4ddda1fd28f5b1',\n ],\n [\n '2ae0704dacb3da47d564514b4c3543505b403ba09a248c6e74593cba1867ff5',\n '5a4b5818088dc9ef4066b90a8893ae80fc89584f987ec1928ef9d72cea2bd67',\n ],\n [\n '61a10898a76fb99989e51c0e823cb60b95ec7ccccb917c42b2b28014f5fd94d',\n '23d8ec1de45366d3b86c64c2da05a2ce3d171adf52ca5522e652ffd0eeee795',\n ],\n [\n '79884133c879cf07734976fd64de220c5a972e04c2a3afb74c362d6c3beecbf',\n '2aaa0e6d4891b792b5643fdf09873343cd0e3fbba3cbd0601b481a4083f32b6',\n ],\n [\n '45f73d2fa82be6c5ccd0f62d2237efe8727c479967d27cce28e42b9a44bad5b',\n '2fa4932215f72d56d8be5205c5851c9b3e5f2a14468e4a7acace5437c6b27dd',\n ],\n [\n '37f53f771850f52f9c8f87b53c6bf0c93c2bed76f5fd1d5697356d0b2325007',\n '50f1a052b79b446fbc7b93ffa1a4515f6c3be3a76a2b0bc5eb8ff327549960c',\n ],\n [\n '71bd6d23e0d2f312d47582efa609101f15b9ccc571fca8ac4fe3457c67fbc9b',\n '3b3fdf86bd4c7fc26d60540a6439b4d179dcbf7b91efb0ddc60dfbff9a148c6',\n ],\n [\n '78219ba049438385b829c13a4993874a4a326c4143de0dd581c7b9956f99b06',\n '5505f1268dcdd4ee01b77abac3bfdcbf3f0513ab097c69ff777b4a631aaf256',\n ],\n [\n 'b81e924a86536dcf68bc5a2ca2065a61103ba6c9eb0ae4cf8cce9dbe286f15',\n '653a6dfb51acfe8a844fb8362795e5549d424aed88d3a090366a44f840b5b83',\n ],\n [\n '441c0d7b7aa705046dc0e07ba5f33a7d9df23f694a05192ff8c2d7be2aa3fdc',\n '4c06568c0902bb99d428bfa0a946ed0f0ca0a51fbf07cad88e06e9c78e38a59',\n ],\n [\n '2569c8c78b6d6b92533f29f767c95720d377fa63ad5a3b9827ee0a74b0488aa',\n '4b59c81d3cfe08834f946d9d57614f5366e0bcd9349475aaaebe01341196fe0',\n ],\n [\n '3f2fa285a0471647b214eac652bbad9d58a9f2dd2e812aff0210d0d8a6eb32f',\n '4cdb18e1c2848c2b52c1a6557165bd1a8f55c2f7562f5cc0b326f73c25b696c',\n ],\n [\n '5bb5141ab4fcc5290ae9151b8045a2cd8391547ce7b3b33cbbb10f8fb538092',\n '5a36bfd52acc6a83a9913b937ec086cc27fed030b5fa70dbc5d3c12c9515f56',\n ],\n [\n '3f3fed272edf91aa7f8ca5d70005d390fbc67830ffc69c5fa3ae17582d2771',\n '459057e0883c44d8776fa217405f443e5954f08c4a5db68e437becaa664a999',\n ],\n [\n '5237ca6656237a717a739a4509f70db1b9dedbb6cd232f60c9bd8c4563a6b1f',\n '56c7799dd02896dbe7d69dd8bb9718270549592099569d107b7b49c34bf5a49',\n ],\n [\n '1cf6b8499ac881e0b2fc7def9bc1a28937033b2fc52de99e75909a620c7a281',\n '5769cf4f735366fa386b6858043dc99a100f86fbc77b16d57d77766197ba27a',\n ],\n [\n '1b74b8a6b86dbf9638cdb0601e1a332b8d880753423d38c3394902c57f15e40',\n '6bb2dc10d2ecbb913219d0ebdc8d3337d644ed8b6c4e70637ef4c7e50887488',\n ],\n [\n '61e4da415661bba52a4737e2bcde1a837787c4796b2e1854778534f1582c29b',\n '27c43e632cb7652e8508c9c38e3b4ad0d3dd6ba748d42dc84ec2685e64b9aad',\n ],\n [\n '7c460a204d23f20ce86596dae6ac9b36734e4a9f7c5b43262c97a36c6a41c6e',\n '481a11f9300ab4c4bf6924c5ca884728cc361247377065920966785d043fbbf',\n ],\n [\n '124ff5e55e4effa40daa5b9618d75c49c8b6fad95cbe8c0bfdd83cb9bed8316',\n '33a2ea15d0f71f58a00de71acd7f22ccf9002115e49dd1f7631faa0d32f9987',\n ],\n [\n '61c9f8fc86715e95ff43583a865c5a6515f93381839d557ef884a68637eaf4c',\n '5877daaa42bbab9083b571e12648a9d62ced4470d71653092b6546f4a5acceb',\n ],\n [\n '70a6b9a9e5d1fcc07dd9ebef6d8f5fcf04c6cb34932d0fe2335330ac6dc8d3d',\n '3f0cbd332ac56922e886656bee74f6e9bb4bb88f7af7bba9098678af1f38fc',\n ],\n [\n '41db8a0f1ea78443a39e08a54323743c8897eed1ddc28f41aec6f2655040d9f',\n '7d4bf32f8f4719c2e4af8b7889f3b65cfdd033dc2f971798a12170f2b26efce',\n ],\n [\n '62f035e01acdfe841104942d6c8c07f0fbd618cb85998ea24bcc24cfac1f8',\n '1caa886104b7d753fda93645a746989794cd825c62473b526ea34b3d51b5771',\n ],\n [\n '441c6f016d270e86c19843727b83b864cec060cafc813b23d7e41e5abb1a60a',\n '29fece4e40400f3acae0586f4fc8ed535e805e472123ec38d662d8a0b01c086',\n ],\n [\n '2c791ba0fb0b66177815c98191fa6188dba9c795e34a7c3c8a19086215e3cee',\n '11123151389d4b330db6a665a560407e7cd8c3807c749e2b0cffd9c3074ba77',\n ],\n [\n '5292da4ca71ae75ed0554c267747e39c7a129b3b863e1af3ebb3e368439c4ea',\n '63af6a5016deea8cc674c44f16c63c1db31f09af4fb4d2ea7917c28116661fc',\n ],\n [\n '3367388d5d1b7758dc3d92e244f227bb8a54e3d9909e7b7dd62ab5965e3efc7',\n '7ffb4833071e4b03ea755ccb9938487a478248fe9b1158a08f1ac298801c092',\n ],\n [\n '95c863314b7f18090f8eee602403be823a367a1b416d54c32e5f914e67d922',\n '159c2824f899171deee23e0ed520d4825bd667983df0a8d45d3a1f7156d91f9',\n ],\n [\n '621c6e08b3c57404644ad49ac7629832c141273fa1f323781b3395393fe985c',\n '65d1eb0140652958c4371ebec791e03317d6b2e689d90e304666f1b610783dd',\n ],\n [\n '54313129bf13993952cd2b31ed06013aba85e74c1b8a00e062031f32188a84e',\n '680129efc9eb8ec07fc180e8f6877e5f0f9f44e3000a2c586ed4ce49d12a313',\n ],\n [\n '21ea57a1c8286bb45872e78617853c47b89091670ba51c124afa3362e7260d',\n '7087e5c1536df233ec9bfe2f983e8d7622892b9bf64c450c9823898e2cc2fc8',\n ],\n [\n '3793b05b99e7a57d88db4ed0dbc3b771285abcd9052da50f88595354409f3f3',\n '12164105041c056f127e737c7cd63981e05f246bd2b6b65d1f427019c7c3801',\n ],\n [\n 'befd345cef5fcae22ac37dacd6b9128cc58cbba3e3fd774e11b421c2ba392',\n '6209d25f24f88f7876ca604db23d05f78e6b3b67fb033f2f1bee221f352b8c8',\n ],\n [\n '15fa536045fda4c65ff74f10b4e669ce88b9996c6772288289d3ad725987fa6',\n '30e0c2124a35e265e931ccc66ce5ac3697d982814beb407144ff6762cb691df',\n ],\n [\n '38b795bd77ac573576dc204857a488cac2cce19809882631ca2069598c577c8',\n '786ba555d55ebef688b068bb9186a34a08cb00bdfef51619bbf911890ae9a13',\n ],\n [\n '6c66853592196c3eb8d9526dc155205e2c64097adf8684bb0e15eb460ce1c72',\n '1bb4ebf654f4250c8dd1061a4e1b464b31a8a9999ac9960446ef8108a66871a',\n ],\n [\n '5b08dfbc87ad9c00b88e78816973ad2f9c10c70f2156908892cc7b7a2a1fd30',\n '1151f407a77e2556073173d8f5c9ff561d8a23742121ca15f7d0ac391af50ea',\n ],\n [\n '309190eba106aa6ead54b5ca5817969aa68b4b4c627700799a49fc6bdd32ba1',\n '505b6a2bc7b0d78ca6ce2abe7dfb7312369918a4599cccf8a615f6701cfd851',\n ],\n [\n '89cc205966af08acc8910d563af7443d5dfbb5d88dae79c013c678c65dcecc',\n '1f8cf955694b246a423ac725791231257b88936e00347ecaa1e17045c0ab540',\n ],\n [\n '480086b61a80c36cf1e1a350baf554e58ee8d9333186b70c9c512fb9e9d5a84',\n '511edfe58f8d36a6170df743731da1ff525cfd5108be20e30ac4183d1281570',\n ],\n [\n '3caf14fb1d2e90a13ad4eb091250fe37133aabf6029633e905e5a93ead41dbb',\n '49122aff6059dfda19e4b973aba5ebe3804c91728936c6381c1ed1ea9380920',\n ],\n [\n '66d1b8fb2cabc46cd79741ce1cb7326077ad8ea3227a6427244bdd3806bdadd',\n '4a52eb74f4d5371ba3265dffd61c844f9e68d4ff0b44dc4936182f9280bb66b',\n ],\n [\n '373330c5afd53c31257fcc9050fef873e15ea9f81d9810f30744309b04e02b3',\n '5889806607b3dc97a9c5b0c8a2f16d1792099a22866b879ca480cb89a11ef5c',\n ],\n [\n '26840d0ec69a22c6818ff64b8b14633b531508c866e21d1dc9239778ae9e8c7',\n '157971f9a6e3a24d3b307be0e7c8cd352e2eb5cad33cf276270c0f309ee63fc',\n ],\n [\n 'ebb84848f1c38c19a754d1b5d9460e39624dadbb30800987c9419c0f933b9f',\n '517b297cf32f4064e6d6c8e761ba8db89809604a701c7b3aa1a9c6beb370ea7',\n ],\n [\n '25780380bc0795ed0dca727c55240f1d63593e552d224adb40df2d3721c0f66',\n '10215fb5a893e0275e9f1f66b217dde35addee91ed0e8f7d79531a2ff57b8c8',\n ],\n [\n '243e1581cd1abfbf18c31c19a4c3d1cedfe69a40bb57b607c9af2717eefc742',\n '1296c27929f14535718c3a4ebe045f00afdc60afc74c7d398d8ce1b6609dc0f',\n ],\n [\n '48babb8649e054bc8e0b902c89e6940c265f48464520649502ef1064eb94562',\n '3235be7852b0526d1a16f6969ec0e5b0e09cedaadc65863dea4e47f4f398264',\n ],\n [\n '592db7c27e63489ef4bcef2eafce89f40067cd9a1ba48bc3dc76b5fc62ad9ca',\n '48b7711b570cd9ac65910e75e752f4b751fdbfb4091a28f59b8c046d3d9f8bc',\n ],\n [\n '31d133456222586ae42a9ec7ce8539ee04afbe0b2ed00a2564dab0798d9b55d',\n 'a77c52fa1fd718db5c83e7fda6d7d4d9aafef9ad95cad621470f2b753729e5',\n ],\n [\n '4651668379883521e7983aafcb93811b4a72ef2975b3277773746708ef3e3fc',\n '512507f3f544d80ba5d47f73b571881e8d70d7b1d305b9704bdad036b7abc47',\n ],\n [\n '26069e359b2e847affaef604f772f36224608b7642245d0e643889ed231bddc',\n '75ae1ec379f074ebc91270077c74b4d34347ce183b676b4dbe100bfff143b9e',\n ],\n [\n '3196d01d1fa11dc3803b4813c4bbc6326869f61410f2bd14bc0f570d875aebe',\n '20313217cac79875bd2a503db1e86d1e5559911667a02524759344468d9561d',\n ],\n [\n '483256607f75f06fb126addc60cadddd602154cc4782bcc08351a48745d0b97',\n '2950a7e500ebbe9775f08be37cc2e62ccf9030de18948d1bab07a4a9173f75d',\n ],\n [\n '65f07b6050a2fc6eebe2c29ffa62f764060f7f9d3c82d2cb5e4e368aaa442c9',\n '562c9654b646cb84a213b41de203c871b3eae0a05c9c105a66a53c319c06373',\n ],\n [\n '284870f6181c43f3b01d94baa9c5b6ada0deb861145523ad9169580eb7bed35',\n '5e03e6c40c1cfa3cafb01fd0622349871832a9d35499d06408a83edc1b76d02',\n ],\n [\n '32229810a52137f0e6c3d37595c46f6132822d4b05f42674b48d7a7ac3ad85',\n '7babde959a0cf2c53ee59fc52c77c3adf899453f077f441965629f9aead30cd',\n ],\n [\n '1ea8b98a6b85e74e0a2fbc18b206e290f3ed94ce99ca665e8e2351dfade990a',\n '478e93c4724115fb1648c8d5347422adbc1a0bbf962b2312e14aec80e1be742',\n ],\n [\n '270cbaa08c79140c85b864475a0bf569cc03ac785e57f543dc444f37ce746cf',\n '3a9b8d894016680ae9d1bf3deb931d8987d4d8d8bfed45b81ccc595ec79046b',\n ],\n [\n '6943922708b8ae5b40dd7031ef2e487abc4ac39a3591368285e83d6c9c51f4d',\n '5f157c37d09634e8cbfbef90ea50af59815d011e419a691c67ca3402b5efc33',\n ],\n [\n '48ac6a80979fab4912cf0cb557d917a0bd68825d8658ec100496eaae6ff62e1',\n '2b6931350ab183402e39476340eb1177b7006f7a552915581e29a79bd7203a0',\n ],\n [\n 'e3adf9517d92ef22d1e2a787740a292ba32d5ca69faa9e8675f63ed816dce5',\n '36bccf69bb12dadd610145a3399213248d193660d8dc90a2e206f23bf2c7997',\n ],\n [\n '5e6c8ae5afb2fa470f767581f3d578cf6a49547e4b78665edfd45776948bef8',\n '6cbfc11953dd7e195d2ce74e52a60df524767b44c4608bdd755be4bc85eb74c',\n ],\n [\n '15a576a1242d39300f0db3ad770983825988da0457718ecd596c63a0a0eb4a6',\n '69a42e5f6f5a63349b57683a4609bba90f556a1680fa1ec3b02ee7d3211f903',\n ],\n [\n '274cd14e4fbf2ed07402e8ad8075b320c5f76b7ea45ea36af523e95ed63ab50',\n '6ca640f9557c5f2d8b27f6ce95b108880ff4e4816b26b70b6506114389ce656',\n ],\n [\n '4d8284e132e2fe81c5f71be1e3c79ab51b229e2c56c323e207cda179999d123',\n '116cfc00e9fbee1cf16af6282123cdf20eed13021c2037ef4c86f94eb6e6cba',\n ],\n [\n '4056194fb5643e97991942ef5b63cadd89080bf57a01489c4398aca03f0980a',\n '2e2cddb434fa6f6da7859c3d518f0ced8795eea043a6c9613fb3e020103339f',\n ],\n [\n '5d119d5c5ce532afc0875e0ee9b026d878c8773d34237f90a0d0670da6f01b3',\n '4a79fc025ce076b6a4742fbcc8cad313d0a8220c58024a41a5a674c0947e64b',\n ],\n [\n '11800ce4061d99b9d53fd4138802335258f7798c5a935c9979f5a949ce1d483',\n '36745a4741a5c7290eaa8f2a3f9ec955ccb7ca323272e5d35d35c2a724ffac8',\n ],\n [\n '4302525bceb97fa642fd5560a4a39fba3d2c06f68e6aff3332ff1854439ebb3',\n 'e31edfd081ce82f8177b2d7d96e69851d09e908c2517114ffb37ee12c0ac64',\n ],\n [\n '2f5fcbb96f0a66fd3bdfbcc78bda361cb812570f50e7c476533d56eee01c0e3',\n '527428a34855b5695c479d8fb7e831a299f7897f36682a74169cc60d160df2d',\n ],\n [\n '52167df045ad0dc999b98de3d035aced9da4434211149b8cf4bf20e774580cf',\n '19051d2a1ad3fab190c5dfaf45188b49b4e90cca22aae54f0a785562d3d3f41',\n ],\n [\n '541b5332491dbdb2b6f6bccceb7634970c046963891fae936dd950f4432b961',\n '78fa54da996a51e3a9c06091d58c2405a806649da2bb1f323807c4eec50eda2',\n ],\n [\n '5f11e973da659b7738f87ca5bd4f3bd02207dd3c8d978f0d3e83fe81030febd',\n '137aba7027069f62d25caed416e13537687bb1428e71e5f0a0c52d52f2e65bc',\n ],\n [\n '15ec941ee6c2110b819b5541be52981c09d83484c9dc735c43f39f5778718b4',\n '4561826142dc5b56acfcf605a78a4090472bb61235bcd605a765e05d0a7e549',\n ],\n [\n '68ba398736d659522f484406110b43c68158bf4992094acf797a38979c587a4',\n '7c1d9e1702e28afddf22fed7a7a79df4315c174d0c6c4f4c75bc77d9b56777f',\n ],\n [\n '67889cea31c81a429fbae643a4fce0ecd690a5c32b99397e39ed6d7a08702df',\n '7ea277c80b671146c9e455b98f42f45b941ac95ca2d15c8fa9ea82ee9b45e01',\n ],\n [\n '596f2c68390ac26505d3c2eca5c77d46f8f3acbed192a2649d8c525a58d2334',\n '49f3bd8c62c610d5c19c52d970bde24b270c4ff7ae900453b909e72483974a0',\n ],\n [\n '567779fb8b0afe592cea284629e3621ccfae3c4d7d3dc559c9fed750591a395',\n '6010bdc33f1cdb374facefff537e7910b72a1120502f312a7ce41df0d552ddd',\n ],\n [\n 'cebed0233e810aa6a29a8b0829d28f1c92f303d14dd73d6b12da98117dfc7',\n '4bdd51e1192a00df23aa8d0673e4915877ca41ddb8c9eaf21d39dd167fde7b7',\n ],\n [\n '4c7085f066adeb6781596771972b188177e63f2e2b3788d03e033cdd5af1f06',\n '2929ee89f525862b0cedb3ab9b5166e1680cb77fb4668f10a6a3d76b5434566',\n ],\n [\n '760e341bd836899c226176f47685f69438270c150c6fe7744cd723cd1e72359',\n '1bf09f2f1aac1a10ce8bdf20d5d178db747f01a4aa0aa8a5e4bfeef562cd94e',\n ],\n [\n '6016b94c00b54920027ef64902c61478244b1936337d2ad41d9a8d43dd6a4b2',\n '3bf3dd9bce7f6d6f120de87fcbce6219340b59c2c1d75ee0d45105d33aab1cd',\n ],\n [\n '4929e44ff692eb944d1045bee96e750219cda3bda0500029f0df49a1db30b5b',\n '2e138dcbd092242699004b4ce98764ffe4e892841f56830af298581cd1e523f',\n ],\n [\n '5972d0e526311bacb70a04e88969b6c63c7399b578f0dc28bbd00d65ef01da7',\n '76b22bca9ac12d26530e7b0757e646beb3bbc5680d0f3f82fb8ee57ed4b5e39',\n ],\n [\n '2ca0a42a26e26934ca2d48db960b4719113d87c5e57fb437d557c5eb4e03ac7',\n '62778c02561d4ec5d83a132afd7763a8349207c6b5d01fba70b56ba660cba2e',\n ],\n [\n '5137ee53f076e21a2c23da09f63c0d275408c31e4634a6b6373be5cf13e6c00',\n '14fb446c077beb78e04de3282a63bfde12f9af85caaca4ddfab506cee31c0c1',\n ],\n [\n '7d944853d1627b63f560aeda33acf640d35a4ee4d23a744957a2dae9d5b7c6c',\n 'bcb411a210710acbcb9ea12680d89e3e4e652228b6786d3886e95f4d9e6970',\n ],\n [\n '37d412c2ffb173a728477446b60b2b702d07a5243cb5fc8963e623a5ee75843',\n '672c79968908f92cd0cb0b4c65ba86e8f359b015623a89441e1bf859bba84cb',\n ],\n [\n '5b37f472aa80398bff12cc74c8ee784c4fc89757292580d3a498bff17e9f114',\n '7d79da1aab9cfef58a5f3d1c9ec466956a45f8d2af0c1da6dd4c93f720fae6e',\n ],\n [\n '25c09b3f1188c562571536202eb0f5fc4b9a7590417b8ea58b4343685d88a63',\n '3d5b817c73b37e9a1d24ca923351359b42ced2f3cafbcac8c2d6322dc767bb',\n ],\n [\n '32e60904e73f9756f71e0a918d302aeca17cad4acacc81bab15702ab5ff78f0',\n 'bcf4c0204f8275072f98a65b09ac58b87cdc9c70c4edfe99fe18870a3a5459',\n ],\n [\n '49c35575996c1517d2daed90d2fe4a58e674d6b4aaa7288d0642c8bf59e562f',\n '57eeee00adea4ca80eeabab57852cbf03f1a57e21872cd44221e0550b9193b8',\n ],\n [\n '10e1776b4c2a867bf1b028c6edec224cc6616c747e272f49e69b67b02a893dd',\n '8d45d62ec8e627b56950f2f7622a0438647f9e9f28e723e4a37cebc039a1b0',\n ],\n [\n '79a93a75ecbe943acc964fd39ecfc971dc6555b2bc335e7b53f52f4eb16cd36',\n '146132a68ce2ca8b48363612226771ac547eb3cf52b6eb7981718faac08aa3c',\n ],\n [\n '6b22d32e0590e169504e7f19864fd646d0994e7ed3e578a5b88f6e095913439',\n '68c3b22d859fb85e5c8fa0a8aea932285945b230957e603394333e9ad5acd82',\n ],\n [\n '71ce5ec8286eb8c93b8481c6d19cf0a288ef4da4397e9c80f65023e516bc097',\n '54470babc742780cd8a05499026e738ccbf81d4170d1731734de68a8e5b402c',\n ],\n [\n '27beb13a43bc6a1f6ce046da438b0beac5899ff4d57962dcfb6476b563f74b',\n '14074e9e93ee45394dfbe833998b9d1691961f8ba3166224b36404448c61bb3',\n ],\n [\n '6b1de6c8f161aa6509a1dcacf2c0aa1bcf6ee9d9b40e032a9d72f77a6fa298c',\n '5e9312eb5b59d6cbadd7d3dcbc39f1b5bd9a8346fdcfdf1107bada6f9cc048',\n ],\n [\n '32670fc3fa43bf39974ba72ea51f0d045d92d084a81fe5282dfc8309aa900b9',\n '518fee521bf1af62356aac3b7e53fdbf57121e030c6e9572b3de69912ca4eb4',\n ],\n [\n '4b9ca363eabed9c66091a347375f7065cd28f49f914447de7cc1461f1375f1e',\n '3a1a3a2e5e7e72476befe2571ece708052d740d02cbe6fed58740968ae609c4',\n ],\n [\n '4cc6da42863a3deca62fa218b7a3b50e034eb4bafd393eccba3f4cbe192ef10',\n '20bfa683c884f203713953b26d2821287ecd305fa2cb70570474533fc07f918',\n ],\n [\n '87705353c44a5ccec8de65cf5433be6b3d9bd21eea49b60e6c907cf1a67a6a',\n '112804b13eee56e3b01aff75fa08fa8374c44fc461aed8a30ad54acd09c24eb',\n ],\n [\n '6cf6eeeb9d339c0a05f72fd5af73fc7588e6d957100ee8999109437bc126cae',\n '54fa257cea22032eac272fcd034dadf2e00d602ef9e519cf7072023c130aad1',\n ],\n [\n '19b32925048c5519d929650c833661b452ef7be7963fab0b6b328ab7dd7a28a',\n '1bd0c14a10bf9b88ea61011c0b2e64d07da151c6203800d5a5d12063838a510',\n ],\n [\n '12a5fc5559428bc3b4eff97b21b63668b866e0722807f1db1f19696bacd9b0d',\n '4c2eb07f0c24047a3d73b560144f3fd32c99d6dbd9fc7cd2fd2a72a6e4b24c7',\n ],\n [\n '13662b7a7d390aa76eb86a7c3bff6d9913eb28db6bd1a7c42de5cdad2e35ce2',\n '40626aded7f56f82cc431ae30527b096f57fbfbc04d3e12a5abae3edf301cf1',\n ],\n [\n '255825bd49b8a2cce114360bd9c8fe8c641af64c8e7710107213cfcb006f43d',\n '3619cce4482335232f9e76a1460be9d296f2d468d26e4f95a78c71524fe59cc',\n ],\n [\n '7f83009eeed4f12f54d341bbf06066480cfcdf51dda103ac54d4bcecf6b3b31',\n '4269519d28faafd7fd68bebfd8404d71ba05d62c4bb6d65d24aa6802fb84ab6',\n ],\n [\n '2f325650eb316646b4eec903fe44828fcb11054f1bd42ca3a77f7e734110b35',\n '44f976082271016f9048e22c507d97d628722bb431f8d5cc1890524e6c386bf',\n ],\n [\n '750b166bb6edc0ee80fae39c7c106879036738df2d79fb2294e1c21e9a24d6b',\n '54f8aa297a1afafe2a17a3254f45861167414327e918d17003c6aad01d0b24c',\n ],\n [\n '3aedb10db9cf3285cdeee375879396fac1fb50dd259e1716f8c01e66f67ca72',\n '7feb9400f621f58c21601f23b7ec7c94a9b6b193c1cd74a8a60846aedadd359',\n ],\n [\n '4ab7151702de76faa493e7a0b1ac20ee4d10c33b83fec9477547cb1236973eb',\n '63f1f122e3ef3acc46b0915ac69c3f5772879799cad889a817f55f5853d1235',\n ],\n [\n '1675ead0d20e5bc3a7a7331999a87ac4c916ae29669e54197bb02aa6364520f',\n '4d1122da90d49e491922d9b533a6a668e2f65a2737ebb391ebb29fb7c1f8a9d',\n ],\n [\n '2f7148111ef53c613157aeec12e16a20f13481da4390b6ce18a85d1d8547087',\n '2eeda779ab395597651d2a0b833ccf53b10280750139916ae2baf4ec57c633d',\n ],\n [\n '4439c7810e7b2ba772b701ec3acdca0b80c9df23047710b87f7dc3f13b337d3',\n '5029cfe704c602a8a4662af0a5860ec03fb88f046d0e3400f2ce7638014c621',\n ],\n [\n '2248eec40b5732a6a488b681f093643af7937071bc73118acae295a32b51b05',\n '1577e4aec30a97b648de4d0b19cf8891151b4eb11f8de9c6d7312f091552e19',\n ],\n [\n '4738424e558d4e0d87a3124ca02ea24f0adc6b7a9768b0d3945ed2a6104857c',\n '33576f92aca3f0c8ae689c3c274c2de6b918940d86a6852e02fc99e35d1614',\n ],\n [\n '7829edd8b866ebf7baaf604ed13d19a9797578f44bbc51b1cd67ca53803e96b',\n '5559040a6083f2af1f9133ccaf5bc2ce06e56ddfc7dd410e9635c0116b62722',\n ],\n [\n '7f927b881f2cdc05e1a69e40bb714af47b630d1425f08ab5d574ee698f33d51',\n '26a465288e96572de303203bd38f4a03031e8158da0591cb037c0a5111d1056',\n ],\n [\n '36a65598552f8753580d1655417d645a140966e10a1e1663015f9fdfae44881',\n '33d5bbfaebf59eae72b89b1aea12ab2ba3c9617f8c3baed1ec16bdf668381b5',\n ],\n [\n '403becfa545c826782026ff409cc16c9d4fe428f1b5b6e630c92439d2fa5fd',\n '47bd6f2bf5d74f710ecb479c79b01fb774fbdad590e683a415cdedf33f71dc5',\n ],\n [\n '3a747826d241b877d3d56b16e0b810cf088eda4fd6048da174c9991a942a5eb',\n '2c7ba19b0a3486a2cdb84d4a388d34beb077a0e467ba44590166f93f6a09d2e',\n ],\n [\n '3d60cd375842714b37bda89dd1f13a7e0f3ff133b522209617d031bce05a537',\n 'f77f216451ab01ad5226844d2162a7f32744688bcb4325445539e2ce5cec4',\n ],\n [\n '235bf66f67c9100e7f0e22bb299cdfaa603644b240e0770aec7e7fd163e2a65',\n '37110b3fa83ece3990afca2bea8d5ebb3c7aace60a0147f8e6ab733e2f2b4d5',\n ],\n [\n '3b796d4eb69a55471fa86108f787b3604874e92b6887a7667a6c2bfbbd9a42b',\n '4912d6dc0419732ef82cb3278415851d4e2d7ca89e0f4d7128cc9de51b810fe',\n ],\n [\n '48d53516dd51e49faa7ab46c8c10db1befd10f23c6a9d9bc3640a2f0da44518',\n '73a2fb3d064adadf21aa1362c04affc660598f38a9e069b3afb74d0a99ae9ee',\n ],\n [\n '48c32cff161ed145da0d5b73084897647abb777adf65738559ceab6939cf3e0',\n '3d99308978e828f857c382df32b472bda81e8ec8e30c8844077ba6d6d2ba903',\n ],\n [\n '2947ff091a8ec9684affbc9a62e09e598841c4a6dc638088492aa47dea57097',\n '19a2cc97975e547f97a4d02e42f89e6ced6f5a953cfccdec347867d26926541',\n ],\n [\n '1960d85f30475615f82484eba0bdafb7ea7cac3809f0518a757d66f02b01676',\n '36c8f77baabf0cc8805d993bbe62041fcf4e3239cf9d53278a4fbd91e75eeb7',\n ],\n [\n '2765f28074d21d5a055340b6d40092d2bbef807e02009fabfa08ec0b9bdf38b',\n '7fb189e0553d5df52b6843661814824b3f3cbebbd54988f042fb256c6bf30b',\n ],\n [\n '348836cb2aaa00212f4b1a4e2d7fc5417f246bf2fe5c9a16ebabda449e2e08a',\n '3f7276fd7d69e0d55ce5ee1d2d830534a27227fe0b6d8a36c93f9a78b872969',\n ],\n [\n '7afb9d34b6a42ea8c6d870e4b8191c274201dc1f93a1a2219a2392b7e345a31',\n '42bbc20dc7115e0758b364a110227b16b64ec58fc535ce5ff1a9ad8b8a09fdd',\n ],\n [\n '2cae0c2afee1767fd4c66f52e1f176d217e92e89cc19eb36d5a6c1715f641a',\n '5335efe2d9bc3667d25ea88bf76438a4d6ab9ba5c512f9da7d0529b79b62d83',\n ],\n [\n '1cc5fde334707723c3a06f00c106db88664284a2df47bb6b144d9f960aea3e2',\n 'dbbf610d100316938bcd8bcd078513512ecb50d4579690dbefaa419c05980d',\n ],\n [\n '54e90cb8f3a2998d2675c5780679e06c0556b1e618f8fdf07f9a4b2466fbf1e',\n '16248676b6f06ec5e34994bc3115f85c8147b54f34d8500928f2fdc051e2089',\n ],\n [\n '525c70a2ba0dbdd68d75640f47f13d0d415ea595f7030f533f4625c2a46523b',\n '58292c8675e5e1a438f49e0c05648d9a7aa997f2f1fd77d5de1944afe5d7eea',\n ],\n [\n '54726d78d099007393348787a03107ab492e59690a46c87fb02ec554f2353bd',\n '53b54b77184ba75a3391e0ebfa6d6974db028f3f8e34bbd5460759a5848dd76',\n ],\n [\n '4ac81a66903537769d3aac6c483ccc08535cb767b6b5e1ec8017a7393ab70ae',\n '2cb22b77a8a05d26f11a4dec80eff292633aa05553a889c5ab16b6ac6e2ab17',\n ],\n [\n '21d0175349e21114988a2930b9a607d43245783cb4a0c984ce27f4c4206708',\n '59f1f49342cc5496213d3329bf4ca7fb0044337449c579bf53147a1dac9e67c',\n ],\n [\n '167f821b381f4c8adcc39789475fb55ba639e5124fe75f26dd61be396dd5e66',\n '22002c87d4cafb47ac9d27286d5cf5ff7a6715d69814118269b0729be9e4b3a',\n ],\n [\n '31010666c6db83a9f9e4db4c48173afd405783ac53852a6e38a8ff925528843',\n '1f466dc9b5d9094107c741dbf380f9fd98d8549cd50f67169901516f8cce74c',\n ],\n [\n '1ad3875769a5053388a86edc85dd80fdffbbda6a456aea497ff81a0f1f6707b',\n '2de7cdec5e2bad56a71bd2f33a4ae4c874e1ad4210a6ac32b443cfa34e85b1b',\n ],\n [\n 'c489650fb7f459ce09cd05a456fc5a46b849b38a671298ed645bcdaab168b0',\n '45610d092b8af1c43ceed474cd17f7bbee65120aa6fa4d37f949e7e41f25327',\n ],\n [\n '394256a5ef4d7af5459587a0bd2edb8acaf5ecfef2563c9a04daf34a4abe4c6',\n '1ebee390dae1403c0c53994e1d064fa64e20fcb45392e209b2b99486a559ffd',\n ],\n [\n '410a1511fead6151e9bedb089b9832d0fe01fab76d3f8459929f767525aeb27',\n '361f0a5ffe09fcc3ad4eff3f5e89508ac247af80267100b69de3c59df561cfa',\n ],\n [\n '38cd437c9f659e110a869605c182ee9fdc26de36baf559d9229e258267bb734',\n '624b1128ea7739bf1cbd0e423af92a4884323c868d2ba0ee9d362946edee2d1',\n ],\n [\n '78b126e50b7042d2a019f95cb87a3213c664ca1bafe345999b1e9e2dac1e608',\n '19e398196b22f4488cbe854c614ad8c353839abc5ab3a4f3f5c03c16ba8a198',\n ],\n [\n '6d3a5ce91132f385a91823c5c8046c4b638f5fe63357424410d901457cdb867',\n '7b80bae16d2d487e122495174f7a70992bc5dafbed72bf84127ead7c57302bb',\n ],\n [\n '32d053a904dc4d88fbe7d0b96e0cbeca22a00aa5c79c753d52b0b60abf31602',\n '3af6a02e5cae6d6490354ae51185149e3fdb6d0d9caab90e95ff58aa0c40377',\n ],\n [\n '49b1fbff5bdb0aa6938b066dde0ed772c0d81f9eff52e7fe038b0ccbd78adb5',\n '1c6e57834eb14d507eed8b36c81ddf92fa91c242467061927a742fafa82b43d',\n ],\n [\n '2f28b8994ca6f234d9293d26196b43b9d1d5306844348c4a638102c05de85f5',\n '759cfb172eab065d477248b3569f4ff5791055f01e95fe71b94b8e615d73c96',\n ],\n [\n '3c2ee954ff534f856f59188fa0f29ed8a022aee0cac52d634f6dc58cd514d70',\n '22bd162e74925f0a876bd8a206b8767dfdd7c898576a73a490f138d9a7f99c6',\n ],\n [\n '5763a7cab001e1aaeabf9ab5b9b2fffe6cc2b299ab04ec4933da74d960e1ab',\n '715ee4f8ee93ab5a1dba00f0a6abc4eec47d49b61254cc27fc36a031e32f0f8',\n ],\n [\n '19976ad8d7b7f47c785408243a227401996b36e47c7a78a7bc7d4256233ba9a',\n '896b713c5d7777b0703821a73c1d9a4c3755501042120534ff13990975e1f5',\n ],\n [\n '61674b992c29827186cab5ff454758dbbed8e89bc23d0bd33193afccc3a04bc',\n '38e1020744c13903809ea30a0662fdb5226ae760cdcf10800faabec452e00f8',\n ],\n [\n '2ea2d48bcb83c0c9cda4efe11f07165cfcbc9ccd26526e5fb12556316d4b1df',\n '1d2d68b74ad384c5c4a9c85453104216357bfcdf635680b40215f0f800974cb',\n ],\n [\n '7881212050264c40c336ed3a15dd2cd868ec9a558f5b728869eab66e8b8ed54',\n '21aaefcc8ad8a161b8971d6880321781dbd939570c540da4c330922b8c81e9b',\n ],\n [\n 'b6be88ce0461d20f59c5199573cda0170b61decf6e8e69a6d32f1695adc4ed',\n '5536e4808370716f2bb3423a9a49a38ddbfe91faf3b7a35eb53d3519238b6cf',\n ],\n [\n 'e5972af1655eb6dde2e8c77cc58044299922441b5ee41ceaf5cafedc765bcc',\n '550282f37a4783dd60801c237045992d6fbe82a5902e7d837ea25f6f98c7b3a',\n ],\n [\n '7efc1aad1f580d8f50274f1c114c40056be19a8c96fa8c4cb5bf85e1e7f3e4',\n '2689f1c3898b114d668be6413643ee9f879913d40c262541fd0316264c60a4f',\n ],\n [\n '7939db98037f59b0113e9d60051f75ac9c3cfd1a3eb535c73e2d945068c6c5c',\n '410914ca8bbf3c65cdf3e9772ca790c19131c50068d34b7346c10260a578a8e',\n ],\n [\n '225b77ad00a2b83d26690190b74867326eca4f55bfbc3a13be036225ca3b1b5',\n '411faafef89042ce6beb64309fdaff70fa53e9d32d79a21e7f82f80e79ff05e',\n ],\n [\n '1501e64c99c8b6658b0479f2c05c9142d246eaabfccf2fcec8dc4399539d8e1',\n '3bab1e3339e42c9ee66c65b0b20236fdd9362d3ce786ad3a9779ab578af50a8',\n ],\n [\n '59b907b941f24fb8ea2458153e55f07534b388e835af7b69f3c9f54392a335',\n '1d5438c4f2f68a417f3d56f916d899a6ffe910f5f2989ca31687f1b10f60db8',\n ],\n [\n '2887d08a26f484546f360e33abbf7a998b7170a5b30070938b84f072c676bf3',\n '62a78e8d00e5d3a59e2fc424ffa08961567ba1ef24c8531cd7bceee6074a535',\n ],\n [\n '6e3cc8076b3d45377929033af35aab0c6d19ae4fd47c0daf844079ca04c46eb',\n '7b90f338e4d848aa8f19d0b5c3bca916a2a9024acbf14bddb278bca2aa39e5f',\n ],\n [\n '34844dacdd3ec54a3af328bb9d67715ab33425e194ac9977ca02ef22e8f7a88',\n '3c1affc6372f32a1634748124f9e1a03c4f0c993971da0dc28888b0801279d',\n ],\n [\n '436b192e03a49796cf9bc5e93c88268b71c9c24f9c3a85322bba634ebea309d',\n '67a8091ef69d62abcb28ce5df4dc7d53f8dc2b9690344f75ecd03a6d9386044',\n ],\n [\n '592d25b68baff87a6d7fd41ff0dadbddc1bd1316683de3b2d677501c0eb14e4',\n '27ad1e1099683f54589010faeefb19e38569ace43653be8787a42b0591e7bc5',\n ],\n [\n '89a5111ae911512ba62e87b97f643c0219702f235c70f62c6678a129302009',\n '557fa3d98e9ce7b83b47545013a4498f3de43787fb66b1a54521222242f7c1b',\n ],\n [\n '1c9b5e53377e72da5066cb08566bbf9ec31ec1877f455d932cd9b1aa375d34e',\n '72f79555a8bc207863f32d482fca54692825449fd8963fcea3de3a8183a739a',\n ],\n [\n '574a6e05eb14591729515be239ea8c1fa9e12d4049d42876f76c8ff37bca03',\n '5f99b3af43ca68c1c73e8190d5f73c8de162ba643d7d5f0cd73cfa8135db6d3',\n ],\n [\n '513fc5c2e16505b2b25a2f284e167d5401194bcac0dc3ecf8b7c9acb560daa1',\n '687ee7a1a8954d08d3856e1a16ded808e419e789736d3f55f79f7693bad69f5',\n ],\n [\n '53d48bd1205274b1c2b0a0ceb3d21c5fcd7c8892a784931603240b288a598b9',\n '35387abd7ea59c9b956de44d36533cad1f6668c438d666651695ff3862159be',\n ],\n [\n '213eb1ea99e08825110dd61094eb6e8145119dc1c507636f068730b1e086d44',\n '744f6853f4f02f4f042468d0739e0c9f64df720b87ed77d1979547084ef7a89',\n ],\n [\n '735ef017d091ca23264ad0aa7bb9b2be3309b4539605e79ed4a652ccb2fbe3c',\n '7f0ccc7a5747c4e921fff97d431169f690763427e2cfd1ad74d7a0308d7faa9',\n ],\n [\n '3f36babc5a30070b610ed97db44997e6d9115c9c0579ad8f75d295a17130001',\n '79047908a2474e32d5c712a07bf5c4ad522590bb5d6cefda410d30528e12ca8',\n ],\n [\n '51c04907ae88a5926b242fb2862cb1f2c651a94e6caad5bff8601c079fded74',\n '10a585a269f460aed43f54c7de13cdf623fc8de5957526997278be939ef32ad',\n ],\n [\n 'c1e1bd626a735aa2c065831317217ecce68e377eb1f67e54ce2e97bc2ef2dc',\n '53c5af23a9b482f420be6dfd37b6886154cfd130794098e1f51c1885ac2556a',\n ],\n [\n '5aff3b30775ae4758e604a4a6262803a545f5ef4e7855fa245ac6a6431a9ece',\n '39a4799e5519047f29333bee9c86c99bfa8056d4aa381c396c4a44331fe795f',\n ],\n [\n '3d753e9723701a8e9d99b91bb93dee2eda7ffa5072fb2cd5c5fd99aebcdb299',\n '15798bf5c17d6d5880fed1553af32dd8d8baf2888c715a886575448a24c7975',\n ],\n [\n '6593e5078466b07a4222d2e544da826d2c583c9cc5f2eaea148b129b00d4aa0',\n '11b352b08a0a61d3cd67d1dc08069dec3bde907b3da0f56de5011b956bf8744',\n ],\n [\n '7a6eb353c5be9ff03fe4a06c01fb71aad2b38144179a291ebcbb2c2417cca65',\n '3de3ecb12f2fa699b46a9d399abf77ca17bebc3e491bfb2542dd0fba991e2bb',\n ],\n [\n '2c7ead583d6c32162091034a9eddfa775b4e84b8bdbea939edb2a80dcf64f6',\n '461790ce40d9c276d962b2a1e9a74d66e9d7335962e234e8a2fc6963d31722d',\n ],\n [\n '34285af023d9b4c2c2b88e8704bf2c05a9b553b00b2e70ff05f8c2970cb134f',\n '33fe678e7671760a83836107428dbade68c3593fbe568f3f8f1b2c568099c44',\n ],\n [\n '6222f720a24466263db6a11842f117fc4bb78da6705f140e48869db3e087441',\n '6eff5b9bf3aeedc962bc5a24b66e7bdad2153450ed53a058bf2c8dbf2907693',\n ],\n [\n '17c6ec5ea206eb97cbf53851e37ce391080e0d2bf1e5395610f79ab0503f7ce',\n '3adb71ca3523d88ceb1e365f12dfb24895453c14daf0046b2626cddadfdf5f7',\n ],\n [\n '70859f9771a713e54974ce11cdaf44b0dcc3e9befa0c0834908d877eeaafd27',\n 'd18f794bf0cc0623b711e7450030424e52326c45ba9b03341883ae4828a5f8',\n ],\n [\n '2a820cfd0fd4ab0871e7b303cd545a3086caf8fa818c087a4017197da74efbf',\n '5f992683ff37f6c041b84bfc01503d333ac9763505cc8f69473da01812969d1',\n ],\n [\n '5b0526de2c07fe7cd73e3884f642d57a0ac5e13c68590ed03a14e530616e8c1',\n 'eec69d0cbd92c9fca31ec967dba848bec368e792d6678797946a5e34fe3487',\n ],\n [\n '6cf6b3efee707210cb3a72f1e885c3d0953aefb43e5e148c740aa1641725c61',\n '911cb630b898e2c1a9115f9e45bafe3b819edfb1eab6e15612d14289939984',\n ],\n [\n '74e913de55f1e46143cb2ecfc580f8d3d3908f200281322b84e21c989cda293',\n '761d2736c9ac7670ba905bc2629c6c0dbe988820a4454ff415ba68710f7df92',\n ],\n [\n '44084305e0c911a40b7cbefe5f13cffe9a99375d1a584c4a2200958050af7a9',\n '249c83877371564708ea525b64b1e7e12785460d83364446531c9adcacba5f0',\n ],\n [\n '2bf71ad4d1bee1a67fb300477029f54bdb0e09f78bf2ac2e8afc7465a7adbcc',\n '6244dd6cad282539049be57487bfd9900bb0d5da805d02b535096368fcb4cd5',\n ],\n [\n '3a62d8f763b62def36e4089458046a49c5ecb91b861549530773e0548ff2bb',\n '6a10a03ba61e6ac657270465c09aa9526cf1ebe96bdecdf0e7000476a47b9eb',\n ],\n [\n '284eed3a17c51e0677d4fe897f056abe9def8af07a4630e6ca5723e2aa6677',\n '516a06ac1d5626ed03d2eee9de6f60f0311eca703a99b0fb31b9c66b01c27c7',\n ],\n [\n '2a2c63b16cccd685f731d06fe93ce2cffb358d34d03dda9a7368185c1eb0c32',\n '7180baca0ba81284809f92eca1654cd76b925a9242e5d5e0f18d0a55d13c6ec',\n ],\n [\n '5f9466017ec09769611389ea5370ad68dda936d3f5816c9e928ff9574abf9a7',\n '6619b5b145bb5f4f29deb7a4cd68ef4da3995312fa6537f0d01684da4267ece',\n ],\n [\n '74f229babe01b4962b3307589c1a13019134b1db6822698388bebb55d21c30f',\n '156ae857ab3279f754facba0db36398dffec8c31e5e160473198f2f891b7531',\n ],\n [\n '334b9fe3a5fd99bc966ddd1309698fd32afd1f235062f2c275b6616a185de45',\n '221a60053583cc0607f6f2e6966b62fc9dac00538bb7eb1148e007a92116d2',\n ],\n [\n '7ad710ba002a67c731efbaba2149d16fec5d2f7aa3d126fd9886172e9f4ea30',\n '3a10f8e902a7a13aec94d66415347e1314f9bac83a7db176096b809b25ffb86',\n ],\n [\n '4306dd0a184a3283c3097ff8f7434cec80912e9dc04b7df21ba73fda9f8e6d8',\n '6d42bd3d1a8dbddafd09e872e2aa3891ae79ec939dc1b382196bc21c4ab749',\n ],\n [\n '1c3f2124e1135c32a426d1d14e471edd9e0f2c7bd703ee123cbbd608e8c4be7',\n '3cc607a3c3f1ab68dd5fa56c65996002721b8ad8ad4b0dd9e5b1467d316583',\n ],\n [\n '294af33272ffcee0b56a436de1b73759cbddebef4c07888b42c2f92b0b68e1',\n 'd837164311d5dca8d37b99ef9eb22708643c83d1cbdfe852f63ea07b06fbad',\n ],\n [\n '753bdb5439a19bbffdfa02b1dc24e8368f22d0a8276b109c11e6feb26f56f39',\n '6ed396231af93647633eab467f1a034f38e76823eb85baf97cae56e2dcd9f75',\n ],\n [\n '5674f0cb892b733fc0b50e121d8679afed0a925c32594cc65ffe83bebe7748e',\n '7fbf0325dd38dd94905adab2c52758552292a6a103d9edfcb11938828e828c8',\n ],\n [\n '4a8f053573a0a74251059d0229d89b6660407ba0b491779fd10f87a5117c81f',\n '21b70112485398bf67ec9d733df24a1df30dea718a93b786f41ed04e3ae3c5e',\n ],\n [\n '726c01ec4a08df8fc8de173311f50d4f3b97c5a9cf68c1536146f827db95ae8',\n '15013cafadefa7f1c4e4dfdd70bd4d3979dd18bd7f0332572ce2a3fd8773d12',\n ],\n [\n '38ac0fbfa98937257460db7e6645d7e5112b6fce7234813fc8a704e8ade8da2',\n '73c0109f86048aad08c443f781ae60ad13b99f7b9cfdf3128fe6d6eeb799a7b',\n ],\n [\n '6f6d3a38621582ace092eb50ecfe9eff265df141ebdcab8653299116fcea291',\n '4a1bf3f39bc919c8f1b720a0b1ce952cad17f2ba98308ee6b76dd9b6f3d7b75',\n ],\n [\n '6a307fc28e1df8d9ad01766419e097797d65cb674436fa1c8f012d3de2c2a1f',\n '26911a635ba824db004875d79dd84834a97ac12643e42829015bf88c1fd6f05',\n ],\n [\n '2a74860e3336d6db916555894cc8028f41508812925db1925457afe40257155',\n '5f8da573f4c39816ce2dba8a20224223a7cfec53117ec78973930c0e9b60244',\n ],\n [\n '4d2b49e1ed0799f719b8269f092cb489a466a645bc0ccabafdc678864c176d7',\n '5410083df7d256f18cbf5697ae5e52c31e075d8a3b27e21d6f5177ca882f6c1',\n ],\n [\n '110ecb9fbf6c333d168cee473cc5ad98809b6cb9eb5d1f6cd28ab5fab504fd3',\n '7e3c54d7533d9f8c3310f219dab0cc3ea4d39b418a748eeffd6bae2b8637a43',\n ],\n [\n '5be4d711b80da70e6d3ac493250bbfd16f20b25f31919b3a91cf14ffbac1096',\n '7f55a0919f082e8885f1515e83c5b39b6022404503507498e1b4422d79c43e2',\n ],\n [\n '2605125b95ca4ba93a21cbbba5762898a7cf9e988f07ab9e64cb3868e3b139d',\n '62f0ccf55b9fc0eaf9736fc8ee484e2acdbe259813af9803cf815829a5e9d3b',\n ],\n [\n '1092bbbf206f2a3068167c3dd99a72de31e206f6c504c071c8214d105ff814d',\n '309f489f68a62089f53b96df5d4fbc3ecc5a1a42eb7ece0e49bad17ad490ff4',\n ],\n [\n '2abdee9409d9c92559ca3f4e6bddd649c31aa09b90bfcb4a612af491241e18d',\n '3ffa8eac180a29de3f8a69efca84bac046f921f5725e96a6ff0530be1436aaf',\n ],\n [\n '376313f27d00bb1aae7ec991745efe6ee28c6b50de0c6cd9845cc4bb4f83543',\n '6a8e0a9389ba528b156fa94ac090a895d7b795818d4941c29415d9e2984c547',\n ],\n [\n 'a80380c71bd466a696b3f0fbf02817c9459d9798f4f3899cf32edf647fe066',\n '6a09805e814e7cdfc76eba4b79f1df5ae559e0f0aba9f728d3cba4ea5c57471',\n ],\n [\n '223694b921d247d989a79b9b2b2f07496036c40cb043eab074a9d6a2cd2ffed',\n 'c247217f1b1df35e30d9e15fdaadf42d6fb0edd3a5a7e265d4cdc426c120aa',\n ],\n [\n '102333620df278c6714bbc880fc087db58c1b9b4d77ed4d61b32a74bfc7c3e2',\n '6a77d37727ccf71c2caeb151faf4404d4b94e9047f9f0a7c3966367f3b53c65',\n ],\n [\n '891626f466536929ee7eadcd18b41925706dedab7528ed5f0f7abf039eb9d2',\n '5f73d11c141c933a35b2d0d06e5cbae614a20d17dc3b439f8bcdc3413c5ea37',\n ],\n [\n '215c23fd3f073f870e5e80303967391bf173f8adcdbeec72d131c557babc203',\n '10634332e9d9439a321597dc5b0fac9ff478834c3d6e281735f21a4a5e13266',\n ],\n [\n '21ea0bdc1332bc36e6aeb43be9071651c27e4ea2eadec636c8d818d4af72a36',\n '3a523d9643dccc6bb9c7c58413312caa3e60ba9c7c7f0177e0f3f469a3241e3',\n ],\n [\n '60deaed1bffb6190beed40caaf2bfab5e43d3707aff7ad3f278d571aa247eae',\n 'e41f71ff254c1418e6a66992af307789fe04d6606fb2670900bb1a089fd879',\n ],\n [\n '1e1fac4a1646253fb1332fadc21fbdd3e3a24a840d129400f520ae4116a4cf5',\n '69c406f9f46576afad68808de0ab7e8922b6226af748e721d9097e21f1800f3',\n ],\n [\n '5db0ddcdf79ffe74d6454c12d2bc60b06776db03c75dc413f5be42ea9a91b5e',\n '134c3d6c699841f17306835bb193785228ffe7ab212a01a861c56b086a18cec',\n ],\n [\n '626814e320fb5bea505b248fd1c1389ad586c1cfe04923fe2f83173e915f4f8',\n '7ae407a926e887206a8b85cf485f1f327c9bb8ccbb6897024e2d122877d8ee0',\n ],\n [\n '23186237dc7d3b570cea645282ad4c359731bbfa54e7f036426bf6493812cd',\n '7d1fbab7e61a22d3b00993290d9f4cd5d820061573e787f66c2cff9a18e1eaf',\n ],\n [\n '54302dcb0e6cc1c6e44cca8f61a63bb2ca65048d53fb325d36ff12c49a58202',\n '1b77b3e37d13504b348046268d8ae25ce98ad783c25561a879dcc77e99c2426',\n ],\n [\n '13961b56b9fc0e412e468c385c22bd0680a25624ec211ffbb6bc877b2a6926c',\n '62f7f7792c77cd981fad13cb6863fe099c4d971c1374109185eae99943f16e9',\n ],\n [\n '47abd7308c70659af3f00fafe6837298af3cb530b6c2ba710ffd07a6bc1ae98',\n '75d0c8a7377aa9f0663d0c124a5659750847afabc29e39893fd27534a4a03cb',\n ],\n [\n '2c6276b764fb398fa555857dbe0ce0ec18fab7a233bf23851295739801f0585',\n '5d8f4897ce44007ec5bfcb9aeb78b8f6e1d40a514f72d213c9300d2770d2b8c',\n ],\n];\n","import BN from 'bn.js';\nimport assert from 'minimalistic-assert';\n\nimport { addHexPrefix, removeHexPrefix } from './encode';\n\nexport type BigNumberish = string | number | BN;\n\nexport function isHex(hex: string): boolean {\n return /^0x[0-9a-f]*$/i.test(hex);\n}\n\nexport function toBN(number: BigNumberish, base?: number | 'hex') {\n if (typeof number === 'string') {\n // eslint-disable-next-line no-param-reassign\n number = number.toLowerCase();\n }\n if (typeof number === 'string' && isHex(number) && !base)\n return new BN(removeHexPrefix(number), 'hex');\n return new BN(number, base);\n}\n\nexport function toHex(number: BN): string {\n return addHexPrefix(number.toString('hex'));\n}\n\nexport function hexToDecimalString(hex: string): string {\n return toBN(`0x${hex.replace(/^0x/, '')}`).toString();\n}\n\nexport function toFelt(num: BigNumberish): string {\n if (BN.isBN(num)) {\n return num.toString();\n }\n return toBN(num).toString();\n}\n\n/**\n * Remove hex string leading zero and lower case '0x01A'.. -> '0x1a..'\n * @param hex string\n */\nexport const cleanHex = (hex: string) => hex.toLowerCase().replace(/^(0x)0+/, '$1');\n\n/*\n Asserts input is equal to or greater then lowerBound and lower then upperBound.\n Assert message specifies inputName.\n input, lowerBound, and upperBound should be of type BN.\n inputName should be a string.\n*/\nexport function assertInRange(\n input: BigNumberish,\n lowerBound: BigNumberish,\n upperBound: BigNumberish,\n inputName = ''\n) {\n const messageSuffix = inputName === '' ? 'invalid length' : `invalid ${inputName} length`;\n const inputBn = toBN(input);\n assert(\n inputBn.gte(toBN(lowerBound)) && inputBn.lt(toBN(upperBound)),\n `Message not signable, ${messageSuffix}.`\n );\n}\n\nexport function bigNumberishArrayToDecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toBN(x).toString(10));\n}\n\nexport function bigNumberishArrayToHexadecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toHex(toBN(x)));\n}\n\nexport const isStringWholeNumber = (value: string) => /^\\d+$/.test(value);\nexport const toHexString = (value: string) => toHex(toBN(value));\n\nexport function getDecimalString(value: string) {\n if (isHex(value)) {\n return hexToDecimalString(value);\n }\n if (isStringWholeNumber(value)) {\n return value;\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\nexport function getHexString(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\nexport function getHexStringArray(value: Array<string>) {\n return value.map((el) => getHexString(el));\n}\n\nexport const toCairoBool = (value: boolean): string => (+value).toString();\n","/* eslint-disable no-param-reassign */\nexport const IS_BROWSER = typeof window !== 'undefined';\n\nconst STRING_ZERO = '0';\n\nexport function arrayBufferToString(array: ArrayBuffer): string {\n return new Uint8Array(array).reduce((data, byte) => data + String.fromCharCode(byte), '');\n}\n\nexport function btoaUniversal(b: ArrayBuffer): string {\n return IS_BROWSER ? btoa(arrayBufferToString(b)) : Buffer.from(b).toString('base64');\n}\n\nexport function buf2hex(buffer: Uint8Array) {\n return [...buffer].map((x) => x.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Some function imported from https://github.com/pedrouid/enc-utils/blob/master/src/index.ts\n * enc-utils is no dependency to avoid using `Buffer` which just works in node and no browsers\n */\n\nexport function removeHexPrefix(hex: string): string {\n return hex.replace(/^0x/, '');\n}\n\nexport function addHexPrefix(hex: string): string {\n return `0x${removeHexPrefix(hex)}`;\n}\n\nfunction padString(str: string, length: number, left: boolean, padding = STRING_ZERO): string {\n const diff = length - str.length;\n let result = str;\n if (diff > 0) {\n const pad = padding.repeat(diff);\n result = left ? pad + str : str + pad;\n }\n return result;\n}\n\nexport function padLeft(str: string, length: number, padding = STRING_ZERO): string {\n return padString(str, length, true, padding);\n}\n\nexport function calcByteLength(length: number, byteSize = 8): number {\n const remainder = length % byteSize;\n return remainder ? ((length - remainder) / byteSize) * byteSize + byteSize : length;\n}\n\nexport function sanitizeBytes(str: string, byteSize = 8, padding = STRING_ZERO): string {\n return padLeft(str, calcByteLength(str.length, byteSize), padding);\n}\n\nexport function sanitizeHex(hex: string): string {\n hex = removeHexPrefix(hex);\n hex = sanitizeBytes(hex, 2);\n if (hex) {\n hex = addHexPrefix(hex);\n }\n return hex;\n}\n\n// implemented using TextEncoder to make it isomorphic\nexport function utf8ToArray(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n","import elliptic from 'elliptic';\nimport hashJS from 'hash.js';\nimport assert from 'minimalistic-assert';\n\nimport { CONSTANT_POINTS, EC_ORDER, FIELD_PRIME, MAX_ECDSA_VAL, ONE, ZERO } from '../constants';\nimport { KeyPair, Signature } from '../types';\nimport { addHexPrefix, removeHexPrefix, sanitizeBytes } from './encode';\nimport { BigNumberish, assertInRange, toBN, toHex } from './number';\n\nconst { ec: EC, curves } = elliptic;\n\nexport const ec = new EC(\n new curves.PresetCurve({\n type: 'short',\n prime: null,\n p: FIELD_PRIME,\n a: '00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001',\n b: '06f21413 efbe40de 150e596d 72f7a8c5 609ad26c 15c915c1 f4cdfcb9 9cee9e89',\n n: EC_ORDER,\n hash: hashJS.sha256,\n gRed: false,\n g: CONSTANT_POINTS[1],\n })\n);\n\n/**\n * The function _truncateToN in lib/elliptic/ec/index.js does a shift-right of 4 bits\n * in some cases. This function does the opposite operation so that\n * _truncateToN(fixMessage(msg)) == msg.\n *\n * @param msg\n */\nfunction fixMessage(msg: string) {\n const pureHex = msg.replace(/^0x0*/, '');\n\n if (pureHex.length <= 62) {\n // In this case, pureHex should not be transformed, as the byteLength() is at most 31,\n // so delta < 0 (see _truncateToN).\n return pureHex;\n }\n assert(pureHex.length === 63);\n // In this case delta will be 4 so we perform a shift-left of 4 bits by adding a ZERO_BN.\n return `${pureHex}0`;\n}\n\nexport const genKeyPair = ec.genKeyPair.bind(ec);\n\nexport function getKeyPair(pk: BigNumberish): KeyPair {\n const pkBn = toBN(pk);\n return ec.keyFromPrivate(removeHexPrefix(toHex(pkBn)), 'hex');\n}\n\nexport function getStarkKey(keyPair: KeyPair): string {\n // this method needs to be run to generate the .pub property used below\n // the result can be dumped\n keyPair.getPublic(true, 'hex');\n return addHexPrefix(sanitizeBytes((keyPair as any).pub.getX().toString(16), 2));\n}\n\n/**\n * Takes a public key and casts it into `elliptic` KeyPair format.\n *\n * @param publicKey - public key which should get casted to a KeyPair\n * @returns keyPair with public key only, which can be used to verify signatures, but cant sign anything\n */\nexport function getKeyPairFromPublicKey(publicKey: BigNumberish): KeyPair {\n const publicKeyBn = toBN(publicKey);\n return ec.keyFromPublic(removeHexPrefix(toHex(publicKeyBn)), 'hex');\n}\n\n/**\n * Signs a message using the provided key.\n *\n * @param keyPair should be an KeyPair with a valid private key.\n * @returns an Signature.\n */\nexport function sign(keyPair: KeyPair, msgHash: string): Signature {\n const msgHashBN = toBN(addHexPrefix(msgHash));\n // Verify message hash has valid length.\n assertInRange(msgHashBN, ZERO, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'msgHash');\n const msgSignature = keyPair.sign(fixMessage(msgHash));\n const { r, s } = msgSignature;\n const w = s.invm((ec as any).n);\n // Verify signature has valid length.\n assertInRange(r, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'r');\n assertInRange(s, ONE, toBN(addHexPrefix(EC_ORDER)), 's');\n assertInRange(w, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'w');\n return [r.toString(), s.toString()];\n}\n\nfunction chunkArray(arr: any[], n: number): any[][] {\n return Array(Math.ceil(arr.length / n))\n .fill('')\n .map((_, i) => arr.slice(i * n, i * n + n));\n}\n\n/**\n * Verifies a message using the provided key.\n *\n * @param keyPair should be an KeyPair with a valid public key.\n * @param sig should be an Signature.\n * @returns true if the verification succeeds.\n */\nexport function verify(keyPair: KeyPair | KeyPair[], msgHash: string, sig: Signature): boolean {\n const keyPairArray = Array.isArray(keyPair) ? keyPair : [keyPair];\n const msgHashBN = toBN(addHexPrefix(msgHash));\n assert(sig.length % 2 === 0, 'Signature must be an array of length dividable by 2');\n assertInRange(msgHashBN, ZERO, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'msgHash');\n assert(keyPairArray.length === sig.length / 2, 'Signature and keyPair length must be equal');\n\n return chunkArray(sig, 2).every(([r, s], i) => {\n const rBN = toBN(r);\n const sBN = toBN(s);\n const w = sBN.invm((ec as any).n);\n assertInRange(rBN, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'r');\n assertInRange(sBN, ONE, toBN(addHexPrefix(EC_ORDER)), 's');\n assertInRange(w, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'w');\n return ec.verify(fixMessage(msgHash), { r: rBN, s: sBN }, keyPairArray[i]) ?? false;\n });\n}\n","import Json from 'json-bigint';\n\nconst json = (alwaysParseAsBig: boolean) => {\n return Json({\n alwaysParseAsBig,\n useNativeBigInt: true,\n protoAction: 'preserve',\n constructorAction: 'preserve',\n });\n};\n\nexport const { parse, stringify } = json(false);\nexport const { parse: parseAlwaysAsBig, stringify: stringifyAlwaysAsBig } = json(true);\n\nexport default { parse, stringify };\n","import BN from 'bn.js';\nimport { gzip } from 'pako';\n\nimport { Calldata, CompressedProgram, Program, RawArgs, Signature } from '../types';\nimport { genKeyPair, getStarkKey } from './ellipticCurve';\nimport { addHexPrefix, btoaUniversal } from './encode';\nimport { stringify } from './json';\nimport { BigNumberish, toBN } from './number';\n\n/**\n * Function to compress compiled cairo program\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/services/api/gateway/transaction.py#L54-L58)\n * @param jsonProgram - json file representing the compiled cairo program\n * @returns Compressed cairo program\n */\nexport function compressProgram(jsonProgram: Program | string): CompressedProgram {\n const stringified = typeof jsonProgram === 'string' ? jsonProgram : stringify(jsonProgram);\n const compressedProgram = gzip(stringified);\n return btoaUniversal(compressedProgram);\n}\n\nexport function randomAddress(): string {\n const randomKeyPair = genKeyPair();\n return getStarkKey(randomKeyPair);\n}\n\nexport function makeAddress(input: string): string {\n return addHexPrefix(input).toLowerCase();\n}\n\nexport function formatSignature(sig?: Signature): string[] {\n if (!sig) return [];\n try {\n return sig.map((x) => toBN(x)).map((x) => x.toString());\n } catch (e) {\n return [];\n }\n}\n\nexport function compileCalldata(args: RawArgs): Calldata {\n return Object.values(args).flatMap((value) => {\n if (Array.isArray(value))\n return [toBN(value.length).toString(), ...value.map((x) => toBN(x).toString())];\n if (typeof value === 'object' && 'type' in value)\n return Object.entries(value)\n .filter(([k]) => k !== 'type')\n .map(([, v]) => toBN(v).toString());\n return toBN(value).toString();\n });\n}\n\nexport function estimatedFeeToMaxFee(estimatedFee: BigNumberish, overhead: number = 0.5): BN {\n // BN can only handle Integers, so we need to do all calulations with integers\n const overHeadPercent = Math.round((1 + overhead) * 100);\n return toBN(estimatedFee).mul(toBN(overHeadPercent)).div(toBN(100));\n}\n","import { CompiledContract, ContractClass, RawCalldata } from '../types';\nimport { parse } from './json';\nimport { isHex, toBN, toHex } from './number';\nimport { compressProgram } from './stark';\n\nexport function wait(delay: number) {\n return new Promise((res) => {\n setTimeout(res, delay);\n });\n}\n\nexport function parseCalldata(calldata: RawCalldata = []) {\n return calldata.map((data) => {\n if (typeof data === 'string' && isHex(data as string)) {\n return data;\n }\n return toHex(toBN(data));\n });\n}\n\nexport function parseContract(contract: CompiledContract | string) {\n const parsedContract =\n typeof contract === 'string' ? (parse(contract) as CompiledContract) : contract;\n return {\n ...parsedContract,\n program: compressProgram(parsedContract.program),\n } as ContractClass;\n}\n","/**\n * Map RPC Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\nimport {\n CallContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionResponse,\n RPC,\n} from '../../types';\nimport { toBN } from '../number';\nimport { ResponseParser } from '.';\n\ntype RpcGetBlockResponse = RPC.GetBlockWithTxHashesResponse & {\n [key: string]: any;\n};\n\ntype GetTransactionByHashResponse = RPC.GetTransactionByHashResponse & {\n [key: string]: any;\n};\n\nexport class RPCResponseParser\n implements\n Omit<\n ResponseParser,\n | 'parseDeclareContractResponse'\n | 'parseDeployContractResponse'\n | 'parseInvokeFunctionResponse'\n | 'parseGetTransactionReceiptResponse'\n >\n{\n public parseGetBlockResponse(res: RpcGetBlockResponse): GetBlockResponse {\n return {\n timestamp: res.timestamp,\n block_hash: res.block_hash,\n block_number: res.block_number,\n new_root: res.new_root,\n parent_hash: res.parent_hash,\n status: res.status,\n transactions: res.transactions,\n };\n }\n\n public parseGetTransactionResponse(res: GetTransactionByHashResponse): GetTransactionResponse {\n return {\n calldata: res.calldata || [],\n contract_address: res.contract_address,\n max_fee: res.max_fee,\n nonce: res.nonce,\n signature: res.signature || [],\n transaction_hash: res.transaction_hash,\n version: res.version,\n };\n }\n\n public parseFeeEstimateResponse(res: RPC.EstimateFeeResponse): EstimateFeeResponse {\n return {\n overall_fee: toBN(res.overall_fee),\n gas_consumed: toBN(res.gas_consumed),\n gas_price: toBN(res.gas_price),\n };\n }\n\n public parseCallContractResponse(res: Array<string>): CallContractResponse {\n return {\n result: res,\n };\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { CustomError } from 'ts-custom-error';\n\nexport class LibraryError extends CustomError {}\n\nexport class GatewayError extends LibraryError {\n constructor(message: string, public errorCode: string) {\n super(message);\n }\n}\n\nexport class HttpError extends LibraryError {\n constructor(message: string, public errorCode: number) {\n super(message);\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { BN } from 'bn.js';\n\nimport type { BlockNumber } from '../types';\nimport { BigNumberish, isHex, toBN, toHex } from '../utils/number';\n\n/**\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L148-L153)\n *\n * @param hashValue\n * @param hashField\n */\nexport function formatHash(hashValue: BigNumberish): string {\n if (typeof hashValue === 'string') return hashValue;\n return toHex(toBN(hashValue));\n}\n\n/**\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L156-L161)\n * @param txHash\n * @param txId\n */\nexport function txIdentifier(txHash?: BigNumberish, txId?: BigNumberish): string {\n if (!txHash) {\n return `transactionId=${JSON.stringify(txId)}`;\n }\n const hashString = formatHash(txHash);\n\n return `transactionHash=${hashString}`;\n}\n\n// hex string and BN are detected as block hashes\n// decimal string and number are detected as block numbers\n// null appends nothing to the request url\n\nexport type BlockIdentifier = BlockNumber | BigNumberish;\nexport const validBlockTags = ['latest', 'pending'];\n\nexport class Block {\n hash: BlockIdentifier = null;\n\n number: BlockIdentifier = null;\n\n tag: BlockIdentifier = null;\n\n private setIdentifier(__identifier: BlockIdentifier) {\n if (typeof __identifier === 'string' && isHex(__identifier)) {\n this.hash = __identifier;\n } else if (BN.isBN(__identifier)) {\n this.hash = toHex(__identifier);\n } else if (typeof __identifier === 'number') {\n this.number = __identifier;\n } else if (typeof __identifier === 'string' && validBlockTags.includes(__identifier)) {\n this.tag = __identifier;\n } else {\n // default\n this.tag = 'pending';\n }\n }\n\n constructor(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n // TODO: fix any\n get queryIdentifier(): any {\n if (this.number !== null) {\n return `blockNumber=${this.number}`;\n }\n\n if (this.hash !== null) {\n return `blockHash=${this.hash}`;\n }\n\n return `blockNumber=${this.tag}`;\n }\n\n // TODO: fix any\n get identifier(): any {\n if (this.number !== null) {\n return { block_number: this.number };\n }\n\n if (this.hash !== null) {\n return { block_hash: this.hash };\n }\n\n return this.tag;\n }\n\n set identifier(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n valueOf = () => this.number;\n\n toString = () => this.hash;\n}\n","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n RPC,\n TransactionSimulationResponse,\n} from '../types';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelectorFromName } from '../utils/hash';\nimport { stringify } from '../utils/json';\nimport {\n BigNumberish,\n bigNumberishArrayToHexadecimalStringArray,\n toBN,\n toHex,\n} from '../utils/number';\nimport { parseCalldata, wait } from '../utils/provider';\nimport { RPCResponseParser } from '../utils/responseParser/rpc';\nimport { LibraryError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { Block, BlockIdentifier } from './utils';\n\nexport type RpcProviderOptions = {\n nodeUrl: string;\n retries?: number;\n headers?: object;\n blockIdentifier?: BlockIdentifier;\n};\n\n// Default Pathfinder disabled pending block https://github.com/eqlabs/pathfinder/blob/main/README.md\n// Note that pending support is disabled by default and must be enabled by setting poll-pending=true in the configuration options.\nconst defaultOptions = {\n headers: { 'Content-Type': 'application/json' },\n blockIdentifier: 'latest',\n retries: 200,\n};\n\nexport class RpcProvider implements ProviderInterface {\n public nodeUrl: string;\n\n public chainId!: StarknetChainId;\n\n public headers: object;\n\n private responseParser = new RPCResponseParser();\n\n private retries: number;\n\n private blockIdentifier: BlockIdentifier;\n\n constructor(optionsOrProvider: RpcProviderOptions) {\n const { nodeUrl, retries, headers, blockIdentifier } = optionsOrProvider;\n this.nodeUrl = nodeUrl;\n this.retries = retries || defaultOptions.retries;\n this.headers = { ...defaultOptions.headers, ...headers };\n this.blockIdentifier = blockIdentifier || defaultOptions.blockIdentifier;\n\n this.getChainId().then((chainId) => {\n this.chainId = chainId;\n });\n }\n\n public fetch(method: any, params: any): Promise<any> {\n return fetch(this.nodeUrl, {\n method: 'POST',\n body: stringify({ method, jsonrpc: '2.0', params, id: 0 }),\n headers: this.headers as Record<string, string>,\n });\n }\n\n protected errorHandler(error: any) {\n if (error) {\n const { code, message } = error;\n throw new LibraryError(`${code}: ${message}`);\n }\n }\n\n protected async fetchEndpoint<T extends keyof RPC.Methods>(\n method: T,\n params?: RPC.Methods[T]['params']\n ): Promise<RPC.Methods[T]['result']> {\n try {\n const rawResult = await this.fetch(method, params);\n const { error, result } = await rawResult.json();\n this.errorHandler(error);\n return result as RPC.Methods[T]['result'];\n } catch (error: any) {\n this.errorHandler(error?.response?.data);\n throw error;\n }\n }\n\n // Methods from Interface\n public async getChainId(): Promise<any> {\n return this.fetchEndpoint('starknet_chainId');\n }\n\n // Methods from Interface\n public async getBlock(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<GetBlockResponse> {\n return this.getBlockWithTxHashes(blockIdentifier).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getBlockHashAndNumber(): Promise<RPC.BlockHashAndNumber> {\n return this.fetchEndpoint('starknet_blockHashAndNumber');\n }\n\n public async getBlockWithTxHashes(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.GetBlockWithTxHashesResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxHashes', { block_id });\n }\n\n public async getBlockWithTxs(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.GetBlockWithTxs> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxs', { block_id });\n }\n\n public async getClassHashAt(\n contractAddress: RPC.ContractAddress,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.Felt> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassHashAt', {\n block_id,\n contract_address: contractAddress,\n });\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.Nonce> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getNonce', {\n contract_address: contractAddress,\n block_id,\n });\n }\n\n public async getPendingTransactions(): Promise<RPC.PendingTransactions> {\n return this.fetchEndpoint('starknet_pendingTransactions');\n }\n\n public async getProtocolVersion(): Promise<Error> {\n throw new Error('Pathfinder does not implement this rpc 0.1.0 method');\n }\n\n public async getStateUpdate(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.StateUpdate> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStateUpdate', { block_id });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<BigNumberish> {\n const parsedKey = toHex(toBN(key));\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStorageAt', {\n contract_address: contractAddress,\n key: parsedKey,\n block_id,\n });\n }\n\n // Methods from Interface\n public async getTransaction(txHash: string): Promise<GetTransactionResponse> {\n return this.getTransactionByHash(txHash).then(this.responseParser.parseGetTransactionResponse);\n }\n\n public async getTransactionByHash(txHash: string): Promise<RPC.GetTransactionByHashResponse> {\n return this.fetchEndpoint('starknet_getTransactionByHash', { transaction_hash: txHash });\n }\n\n public async getTransactionByBlockIdAndIndex(\n blockIdentifier: BlockIdentifier,\n index: number\n ): Promise<RPC.GetTransactionByBlockIdAndIndex> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getTransactionByBlockIdAndIndex', { block_id, index });\n }\n\n public async getTransactionReceipt(txHash: string): Promise<RPC.TransactionReceipt> {\n return this.fetchEndpoint('starknet_getTransactionReceipt', { transaction_hash: txHash });\n }\n\n public async getClassByHash(classHash: RPC.Felt): Promise<RPC.ContractClass> {\n return this.getClass(classHash);\n }\n\n public async getClass(\n classHash: RPC.Felt,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.ContractClass> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClass', { class_hash: classHash, block_id });\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.ContractClass> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassAt', {\n block_id,\n contract_address: contractAddress,\n });\n }\n\n public async getCode(\n _contractAddress: string,\n _blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n throw new Error('RPC does not implement getCode function');\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'INVOKE',\n sender_address: invocation.contractAddress,\n calldata: parseCalldata(invocation.calldata),\n signature: bigNumberishArrayToHexadecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocationDetails?.version || 0)),\n nonce: toHex(toBN(invocationDetails.nonce)),\n max_fee: toHex(toBN(invocationDetails?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n // TODO: Revisit after Pathfinder release with JSON-RPC v0.2.1 RPC Spec\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'DECLARE',\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi, // rpc 2.0\n },\n sender_address: senderAddress,\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'DEPLOY_ACCOUNT',\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(toBN(classHash)),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getEstimateFeeBulk(\n _invocations: InvocationBulk,\n _blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponseBulk> {\n throw new Error('RPC does not implement getInvokeEstimateFeeBulk function');\n }\n\n // TODO: Revisit after Pathfinder release with JSON-RPC v0.2.1 RPC Spec\n public async declareContract(\n { contractDefinition, signature, senderAddress }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.fetchEndpoint('starknet_addDeclareTransaction', {\n declare_transaction: {\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi, // rpc 2.0\n },\n type: 'DECLARE',\n version: toHex(toBN(details.version || 0)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n sender_address: senderAddress,\n nonce: toHex(toBN(details.nonce)),\n },\n });\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.fetchEndpoint('starknet_addDeployAccountTransaction', {\n deploy_account_transaction: {\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(toBN(classHash)),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n type: 'DEPLOY_ACCOUNT',\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n nonce: toHex(toBN(details.nonce)),\n },\n });\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('starknet_addInvokeTransaction', {\n invoke_transaction: {\n sender_address: functionInvocation.contractAddress,\n calldata: parseCalldata(functionInvocation.calldata),\n type: 'INVOKE',\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 1)),\n signature: bigNumberishArrayToHexadecimalStringArray(functionInvocation.signature || []),\n nonce: toHex(toBN(details.nonce)),\n },\n });\n }\n\n // Methods from Interface\n public async callContract(\n call: Call,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<CallContractResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n const result = await this.fetchEndpoint('starknet_call', {\n request: {\n contract_address: call.contractAddress,\n entry_point_selector: getSelectorFromName(call.entrypoint),\n calldata: parseCalldata(call.calldata),\n },\n block_id,\n });\n\n return this.responseParser.parseCallContractResponse(result);\n }\n\n public async traceTransaction(transactionHash: RPC.TransactionHash): Promise<RPC.Trace> {\n return this.fetchEndpoint('starknet_traceTransaction', { transaction_hash: transactionHash });\n }\n\n public async traceBlockTransactions(blockHash: RPC.BlockHash): Promise<RPC.Traces> {\n return this.fetchEndpoint('starknet_traceBlockTransactions', { block_hash: blockHash });\n }\n\n public async waitForTransaction(\n txHash: string,\n retryInterval: number = 8000,\n successStates = ['ACCEPTED_ON_L1', 'ACCEPTED_ON_L2', 'PENDING']\n ) {\n const errorStates = ['REJECTED', 'NOT_RECEIVED'];\n let { retries } = this;\n let onchain = false;\n let txReceipt: any = {};\n\n while (!onchain) {\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n try {\n // eslint-disable-next-line no-await-in-loop\n txReceipt = await this.getTransactionReceipt(txHash);\n\n if (!('status' in txReceipt)) {\n const error = new Error('pending transaction');\n throw error;\n }\n\n if (txReceipt.status && successStates.includes(txReceipt.status)) {\n onchain = true;\n } else if (txReceipt.status && errorStates.includes(txReceipt.status)) {\n const message = txReceipt.status;\n const error = new Error(message) as Error & { response: any };\n error.response = txReceipt;\n throw error;\n }\n } catch (error: unknown) {\n if (error instanceof Error && errorStates.includes(error.message)) {\n throw error;\n }\n\n if (retries === 0) {\n throw new Error(`waitForTransaction timed-out with retries ${this.retries}`);\n }\n }\n\n retries -= 1;\n }\n\n await wait(retryInterval);\n return txReceipt;\n }\n\n /**\n * Gets the transaction count from a block.\n *\n *\n * @param blockIdentifier\n * @returns Number of transactions\n */\n public async getTransactionCount(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<RPC.GetTransactionCountResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockTransactionCount', { block_id });\n }\n\n /**\n * Gets the latest block number\n *\n *\n * @returns Number of the latest block\n */\n public async getBlockNumber(): Promise<RPC.GetBlockNumberResponse> {\n return this.fetchEndpoint('starknet_blockNumber');\n }\n\n /**\n * Gets syncing status of the node\n *\n *\n * @returns Object with the stats data\n */\n public async getSyncingStats(): Promise<RPC.GetSyncingStatsResponse> {\n return this.fetchEndpoint('starknet_syncing');\n }\n\n /**\n * Gets all the events filtered\n *\n *\n * @returns events and the pagination of the events\n */\n public async getEvents(eventFilter: RPC.EventFilter): Promise<RPC.GetEventsResponse> {\n return this.fetchEndpoint('starknet_getEvents', { filter: eventFilter });\n }\n\n public async getSimulateTransaction(\n _invocation: Invocation,\n _invocationDetails: InvocationsDetailsWithNonce,\n _blockIdentifier?: BlockIdentifier\n ): Promise<TransactionSimulationResponse> {\n throw new Error('RPC does not implement simulateTransaction function');\n }\n}\n","import urljoin from 'url-join';\n\nimport { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n CallL1Handler,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetContractAddressesResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n GetTransactionStatusResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Sequencer,\n TransactionSimulationResponse,\n TransactionTraceResponse,\n} from '../types';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelector, getSelectorFromName } from '../utils/hash';\nimport { parse, parseAlwaysAsBig, stringify } from '../utils/json';\nimport {\n BigNumberish,\n bigNumberishArrayToDecimalStringArray,\n getDecimalString,\n getHexString,\n getHexStringArray,\n toBN,\n toHex,\n} from '../utils/number';\nimport { parseContract, wait } from '../utils/provider';\nimport { SequencerAPIResponseParser } from '../utils/responseParser/sequencer';\nimport { randomAddress } from '../utils/stark';\nimport { buildUrl } from '../utils/url';\nimport { GatewayError, HttpError, LibraryError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { Block, BlockIdentifier } from './utils';\n\ntype NetworkName = 'mainnet-alpha' | 'goerli-alpha' | 'goerli-alpha-2';\n\nexport type SequencerProviderOptions = {\n headers?: object;\n blockIdentifier?: BlockIdentifier;\n} & (\n | {\n network: NetworkName | StarknetChainId;\n chainId?: StarknetChainId;\n }\n | {\n baseUrl: string;\n feederGatewayUrl?: string;\n gatewayUrl?: string;\n chainId?: StarknetChainId;\n }\n);\n\nfunction isEmptyQueryObject(obj?: Record<any, any>): obj is undefined {\n return (\n obj === undefined ||\n Object.keys(obj).length === 0 ||\n (Object.keys(obj).length === 1 &&\n Object.entries(obj).every(([k, v]) => k === 'blockIdentifier' && v === null))\n );\n}\n\nconst defaultOptions = {\n network: 'goerli-alpha-2' as NetworkName,\n blockIdentifier: 'pending',\n};\n\nexport class SequencerProvider implements ProviderInterface {\n public baseUrl: string;\n\n public feederGatewayUrl: string;\n\n public gatewayUrl: string;\n\n public chainId: StarknetChainId;\n\n public headers: object | undefined;\n\n private responseParser = new SequencerAPIResponseParser();\n\n private blockIdentifier: BlockIdentifier;\n\n constructor(optionsOrProvider: SequencerProviderOptions = defaultOptions) {\n if ('network' in optionsOrProvider) {\n this.baseUrl = SequencerProvider.getNetworkFromName(optionsOrProvider.network);\n this.feederGatewayUrl = buildUrl(this.baseUrl, 'feeder_gateway');\n this.gatewayUrl = buildUrl(this.baseUrl, 'gateway');\n } else {\n this.baseUrl = optionsOrProvider.baseUrl;\n this.feederGatewayUrl = buildUrl(\n this.baseUrl,\n 'feeder_gateway',\n optionsOrProvider.feederGatewayUrl\n );\n this.gatewayUrl = buildUrl(this.baseUrl, 'gateway', optionsOrProvider.gatewayUrl);\n }\n this.chainId =\n optionsOrProvider?.chainId ?? SequencerProvider.getChainIdFromBaseUrl(this.baseUrl);\n this.headers = optionsOrProvider.headers;\n this.blockIdentifier = optionsOrProvider?.blockIdentifier || defaultOptions.blockIdentifier;\n }\n\n protected static getNetworkFromName(name: NetworkName | StarknetChainId) {\n switch (name) {\n case 'mainnet-alpha' || StarknetChainId.MAINNET:\n return 'https://alpha-mainnet.starknet.io';\n case 'goerli-alpha' || StarknetChainId.TESTNET:\n return 'https://alpha4.starknet.io';\n case 'goerli-alpha-2' || StarknetChainId.TESTNET2:\n return 'https://alpha4-2.starknet.io';\n default:\n return 'https://alpha4.starknet.io';\n }\n }\n\n protected static getChainIdFromBaseUrl(baseUrl: string): StarknetChainId {\n try {\n const url = new URL(baseUrl);\n if (url.host.includes('mainnet.starknet.io')) {\n return StarknetChainId.MAINNET;\n }\n if (url.host.includes('alpha4-2.starknet.io')) {\n return StarknetChainId.TESTNET2;\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Could not parse baseUrl: ${baseUrl}`);\n }\n return StarknetChainId.TESTNET;\n }\n\n private getFetchUrl(endpoint: keyof Sequencer.Endpoints) {\n const gatewayUrlEndpoints = ['add_transaction'];\n\n return gatewayUrlEndpoints.includes(endpoint) ? this.gatewayUrl : this.feederGatewayUrl;\n }\n\n private getFetchMethod(endpoint: keyof Sequencer.Endpoints) {\n const postMethodEndpoints = [\n 'add_transaction',\n 'call_contract',\n 'estimate_fee',\n 'estimate_message_fee',\n 'estimate_fee_bulk',\n 'simulate_transaction',\n ];\n\n return postMethodEndpoints.includes(endpoint) ? 'POST' : 'GET';\n }\n\n private getQueryString(query?: Record<string, any>): string {\n if (isEmptyQueryObject(query)) {\n return '';\n }\n const queryString = Object.entries(query)\n .map(([key, value]) => {\n if (key === 'blockIdentifier') {\n const block = new Block(value);\n return `${block.queryIdentifier}`;\n }\n return `${key}=${value}`;\n })\n .join('&');\n\n return `?${queryString}`;\n }\n\n private getHeaders(method: 'POST' | 'GET'): object | undefined {\n if (method === 'POST') {\n return {\n 'Content-Type': 'application/json',\n ...this.headers,\n };\n }\n return this.headers;\n }\n\n // typesafe fetch\n protected async fetchEndpoint<T extends keyof Sequencer.Endpoints>(\n endpoint: T,\n // typescript type magic to create a nice fitting function interface\n ...[query, request]: Sequencer.Endpoints[T]['QUERY'] extends never\n ? Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [] // when no query and no request is needed, we can omit the query and request parameters\n : [undefined, Sequencer.Endpoints[T]['REQUEST']]\n : Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [Sequencer.Endpoints[T]['QUERY']] // when no request is needed, we can omit the request parameter\n : [Sequencer.Endpoints[T]['QUERY'], Sequencer.Endpoints[T]['REQUEST']] // when both query and request are needed, we cant omit anything\n ): Promise<Sequencer.Endpoints[T]['RESPONSE']> {\n const baseUrl = this.getFetchUrl(endpoint);\n const method = this.getFetchMethod(endpoint);\n const queryString = this.getQueryString(query);\n const headers = this.getHeaders(method);\n const url = urljoin(baseUrl, endpoint, queryString);\n\n try {\n const res = await fetch(url, {\n method,\n body: stringify(request),\n headers: headers as Record<string, string>,\n });\n const textResponse = await res.text();\n if (!res.ok) {\n // This will allow user to handle contract errors\n let responseBody: any;\n try {\n responseBody = parse(textResponse);\n } catch {\n // if error parsing fails, return an http error\n throw new HttpError(res.statusText, res.status);\n }\n\n const errorCode = responseBody.code || ((responseBody as any)?.status_code as string); // starknet-devnet uses status_code instead of code; They need to fix that\n throw new GatewayError(responseBody.message, errorCode); // Caught locally, and re-thrown for the user\n }\n\n if (endpoint === 'estimate_fee') {\n return parseAlwaysAsBig(textResponse, (_, v) => {\n if (v && typeof v === 'bigint') {\n return toBN(v.toString());\n }\n return v;\n });\n }\n return parse(textResponse) as Sequencer.Endpoints[T]['RESPONSE'];\n } catch (err) {\n // rethrow custom errors\n if (err instanceof GatewayError || err instanceof HttpError) {\n throw err;\n }\n if (err instanceof Error) {\n throw Error(`Could not ${method} from endpoint \\`${url}\\`: ${err.message}`);\n }\n throw err;\n }\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return Promise.resolve(this.chainId);\n }\n\n public async callContract(\n { contractAddress, entrypoint: entryPointSelector, calldata = [] }: Call,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<CallContractResponse> {\n return this.fetchEndpoint(\n 'call_contract',\n { blockIdentifier },\n {\n signature: [],\n contract_address: contractAddress,\n entry_point_selector: getSelectorFromName(entryPointSelector),\n calldata,\n }\n ).then(this.responseParser.parseCallContractResponse);\n }\n\n public async getBlock(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<GetBlockResponse> {\n return this.fetchEndpoint('get_block', { blockIdentifier }).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<BigNumberish> {\n return this.fetchEndpoint('get_nonce', { contractAddress, blockIdentifier });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<BigNumberish> {\n const parsedKey = toBN(key).toString(10);\n return this.fetchEndpoint('get_storage_at', {\n blockIdentifier,\n contractAddress,\n key: parsedKey,\n });\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction', { transactionHash: txHashHex }).then((result) => {\n // throw for no matching transaction to unify behavior with RPC and avoid parsing errors\n if (Object.values(result).length === 1) throw new LibraryError(result.status);\n return this.responseParser.parseGetTransactionResponse(result);\n });\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_receipt', { transactionHash: txHashHex }).then(\n this.responseParser.parseGetTransactionReceiptResponse\n );\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<ContractClass> {\n return this.fetchEndpoint('get_full_contract', { blockIdentifier, contractAddress }).then(\n parseContract\n );\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<string> {\n return this.fetchEndpoint('get_class_hash_at', { blockIdentifier, contractAddress });\n }\n\n public async getClassByHash(classHash: string): Promise<ContractClass> {\n return this.fetchEndpoint('get_class_by_hash', { classHash }).then(parseContract);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'INVOKE_FUNCTION',\n contract_address: functionInvocation.contractAddress,\n calldata: bigNumberishArrayToDecimalStringArray(functionInvocation.calldata ?? []),\n signature: bigNumberishArrayToDecimalStringArray(functionInvocation.signature ?? []),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 1)),\n }).then(this.responseParser.parseInvokeFunctionResponse);\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DEPLOY_ACCOUNT',\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata ?? []),\n class_hash: toHex(toBN(classHash)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n }).then(this.responseParser.parseDeployContractResponse);\n }\n\n public async declareContract(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DECLARE',\n contract_class: contractDefinition,\n nonce: toHex(toBN(details.nonce)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n sender_address: senderAddress,\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 1)),\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'INVOKE_FUNCTION',\n contract_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n signature: bigNumberishArrayToDecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocationDetails?.version || 1)),\n nonce: toHex(toBN(invocationDetails.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'DECLARE',\n sender_address: senderAddress,\n contract_class: contractDefinition,\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 1)),\n nonce: toHex(toBN(details.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, addressSalt, constructorCalldata, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'DEPLOY_ACCOUNT',\n class_hash: toHex(toBN(classHash)),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata || []),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getEstimateFeeBulk(\n invocations: InvocationBulk,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponseBulk> {\n const params: Sequencer.EstimateFeeRequestBulk = invocations.map((invocation) => {\n let res;\n if (invocation.type === 'INVOKE_FUNCTION') {\n res = {\n type: invocation.type,\n contract_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n };\n } else if (invocation.type === 'DECLARE') {\n res = {\n type: invocation.type,\n sender_address: invocation.senderAddress,\n contract_class: invocation.contractDefinition,\n };\n } else {\n res = {\n type: invocation.type,\n class_hash: toHex(toBN(invocation.classHash)),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(\n invocation.constructorCalldata || []\n ),\n contract_address_salt: toHex(toBN(invocation.addressSalt || 0)),\n };\n }\n return {\n ...res,\n signature: bigNumberishArrayToDecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocation?.version || 1)),\n nonce: toHex(toBN(invocation.nonce)),\n };\n });\n\n return this.fetchEndpoint('estimate_fee_bulk', { blockIdentifier }, params).then(\n this.responseParser.parseFeeEstimateBulkResponse\n );\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.GetCodeResponse> {\n return this.fetchEndpoint('get_code', { contractAddress, blockIdentifier });\n }\n\n public async waitForTransaction(\n txHash: BigNumberish,\n retryInterval: number = 8000,\n successStates = ['ACCEPTED_ON_L1', 'ACCEPTED_ON_L2', 'PENDING']\n ) {\n const errorStates = ['REJECTED', 'NOT_RECEIVED'];\n let onchain = false;\n let res;\n\n while (!onchain) {\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n // eslint-disable-next-line no-await-in-loop\n res = await this.getTransactionStatus(txHash);\n\n if (successStates.includes(res.tx_status)) {\n onchain = true;\n } else if (errorStates.includes(res.tx_status)) {\n const message = res.tx_failure_reason\n ? `${res.tx_status}: ${res.tx_failure_reason.code}\\n${res.tx_failure_reason.error_message}`\n : res.tx_status;\n const error = new Error(message) as Error & { response: GetTransactionStatusResponse };\n error.response = res;\n throw error;\n }\n }\n const txReceipt = await this.getTransactionReceipt(txHash);\n return txReceipt;\n }\n\n /**\n * Gets the status of a transaction.\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L48-L52)\n *\n * @param txHash\n * @returns the transaction status object { block_number, tx_status: NOT_RECEIVED | RECEIVED | PENDING | REJECTED | ACCEPTED_ONCHAIN }\n */\n public async getTransactionStatus(txHash: BigNumberish): Promise<GetTransactionStatusResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_status', { transactionHash: txHashHex });\n }\n\n /**\n * Gets the smart contract address on the goerli testnet.\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L13-L15)\n * @returns starknet smart contract addresses\n */\n public async getContractAddresses(): Promise<GetContractAddressesResponse> {\n return this.fetchEndpoint('get_contract_addresses');\n }\n\n /**\n * Gets the transaction trace from a tx id.\n *\n * @param txHash\n * @returns the transaction trace\n */\n public async getTransactionTrace(txHash: BigNumberish): Promise<TransactionTraceResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_trace', { transactionHash: txHashHex });\n }\n\n public async estimateMessageFee(\n { from_address, to_address, entry_point_selector, payload }: CallL1Handler,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.EstimateFeeResponse> {\n const validCallL1Handler = {\n from_address: getDecimalString(from_address),\n to_address: getHexString(to_address),\n entry_point_selector: getSelector(entry_point_selector),\n payload: getHexStringArray(payload),\n };\n\n return this.fetchEndpoint('estimate_message_fee', { blockIdentifier }, validCallL1Handler);\n }\n\n public async getSimulateTransaction(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<TransactionSimulationResponse> {\n return this.fetchEndpoint(\n 'simulate_transaction',\n { blockIdentifier },\n {\n type: 'INVOKE_FUNCTION',\n contract_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n signature: bigNumberishArrayToDecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocationDetails?.version || 1)),\n nonce: toHex(toBN(invocationDetails.nonce)),\n }\n ).then(this.responseParser.parseFeeSimulateTransactionResponse);\n }\n}\n","import {\n CallContractResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n} from '../../types';\n\nexport abstract class ResponseParser {\n abstract parseGetBlockResponse(res: any): GetBlockResponse;\n\n abstract parseGetTransactionResponse(res: any): GetTransactionResponse;\n\n abstract parseGetTransactionReceiptResponse(res: any): GetTransactionReceiptResponse;\n\n abstract parseFeeEstimateResponse(res: any): EstimateFeeResponse;\n\n abstract parseCallContractResponse(res: any): CallContractResponse;\n\n abstract parseInvokeFunctionResponse(res: any): InvokeFunctionResponse;\n\n abstract parseDeployContractResponse(res: any): DeployContractResponse;\n\n abstract parseDeclareContractResponse(res: any): DeclareContractResponse;\n}\n","/**\n * Map Sequencer Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\nimport {\n CallContractResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n Sequencer,\n TransactionSimulationResponse,\n} from '../../types';\nimport { toBN } from '../number';\nimport { ResponseParser } from '.';\n\nexport class SequencerAPIResponseParser extends ResponseParser {\n public parseGetBlockResponse(res: Sequencer.GetBlockResponse): GetBlockResponse {\n return {\n ...res,\n new_root: res.state_root,\n parent_hash: res.parent_block_hash,\n transactions: Object.values(res.transactions)\n .map((value) => 'transaction_hash' in value && value.transaction_hash)\n .filter(Boolean) as Array<string>,\n };\n }\n\n public parseGetTransactionResponse(\n res: Sequencer.GetTransactionResponse\n ): GetTransactionResponse {\n return {\n ...res,\n calldata: 'calldata' in res.transaction ? (res.transaction.calldata as Array<string>) : [],\n contract_address:\n 'contract_address' in res.transaction ? res.transaction.contract_address : undefined,\n contract_class:\n 'contract_class' in res.transaction ? (res.transaction.contract_class as any) : undefined,\n entry_point_selector:\n 'entry_point_selector' in res.transaction\n ? res.transaction.entry_point_selector\n : undefined,\n max_fee: 'max_fee' in res.transaction ? (res.transaction.max_fee as string) : undefined,\n nonce: res.transaction.nonce as string,\n sender_address:\n 'sender_address' in res.transaction\n ? (res.transaction.sender_address as string)\n : undefined,\n signature: 'signature' in res.transaction ? res.transaction.signature : undefined,\n transaction_hash:\n 'transaction_hash' in res.transaction ? res.transaction.transaction_hash : undefined,\n version: 'version' in res.transaction ? (res.transaction.version as string) : undefined,\n };\n }\n\n public parseGetTransactionReceiptResponse(\n res: Sequencer.TransactionReceiptResponse\n ): GetTransactionReceiptResponse {\n return {\n transaction_hash: res.transaction_hash,\n status: res.status,\n messages_sent: res.l2_to_l1_messages as any, // TODO: parse\n events: res.events as any,\n ...('block_hash' in res && { block_hash: res.block_hash }),\n ...('block_number' in res && { block_number: res.block_number }),\n ...('actual_fee' in res && { actual_fee: res.actual_fee }),\n ...('transaction_index' in res && { transaction_index: res.transaction_index }),\n ...('execution_resources' in res && { execution_resources: res.execution_resources }),\n ...('l1_to_l2_consumed_message' in res && {\n // eslint-disable-next-line @typescript-eslint/dot-notation\n l1_to_l2_consumed_message: res['l1_to_l2_consumed_message'],\n }),\n ...('transaction_failure_reason' in res && {\n transaction_failure_reason: res.transaction_failure_reason,\n }),\n };\n }\n\n public parseFeeEstimateResponse(res: Sequencer.EstimateFeeResponse): EstimateFeeResponse {\n if ('overall_fee' in res) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBN(res.gas_usage),\n gas_price: toBN(res.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBN(res.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBN(res.amount),\n };\n }\n\n public parseFeeEstimateBulkResponse(\n res: Sequencer.EstimateFeeResponseBulk\n ): EstimateFeeResponseBulk {\n return [].concat(res as []).map((item: Sequencer.EstimateFeeResponse) => {\n if ('overall_fee' in item) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBN(item.gas_usage),\n gas_price: toBN(item.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBN(item.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBN(item.amount),\n };\n });\n }\n\n public parseFeeSimulateTransactionResponse(\n res: Sequencer.TransactionSimulationResponse\n ): TransactionSimulationResponse {\n if ('overall_fee' in res.fee_estimation) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBN(res.fee_estimation.gas_usage),\n gas_price: toBN(res.fee_estimation.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n trace: res.trace,\n fee_estimation: {\n ...gasInfo,\n overall_fee: toBN(res.fee_estimation.overall_fee),\n },\n };\n }\n\n return {\n trace: res.trace,\n fee_estimation: {\n overall_fee: toBN(res.fee_estimation.amount),\n },\n };\n }\n\n public parseCallContractResponse(res: Sequencer.CallContractResponse): CallContractResponse {\n return {\n result: res.result,\n };\n }\n\n public parseInvokeFunctionResponse(\n res: Sequencer.AddTransactionResponse\n ): InvokeFunctionResponse {\n return {\n transaction_hash: res.transaction_hash,\n };\n }\n\n public parseDeployContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeployContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n contract_address: res.address as string,\n };\n }\n\n public parseDeclareContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeclareContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n class_hash: res.class_hash as string,\n };\n }\n}\n","import urljoin from 'url-join';\n\n/**\n * Inspired from https://github.com/segmentio/is-url\n */\n\n/**\n * RegExps.\n * A URL must match #1 and then at least one of #2/#3.\n * Use two levels of REs to avoid REDOS.\n */\nconst protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\n\nconst localhostDomainRE = /^localhost[:?\\d]*(?:[^:?\\d]\\S*)?$/;\nconst nonLocalhostDomainRE = /^[^\\s.]+\\.\\S{2,}$/;\n\n/**\n * Loosely validate a URL `string`.\n * @param {String} s\n * @return {Boolean}\n */\nexport function isUrl(s?: string): boolean {\n if (!s) {\n return false;\n }\n\n if (typeof s !== 'string') {\n return false;\n }\n\n const match = s.match(protocolAndDomainRE);\n if (!match) {\n return false;\n }\n\n const everythingAfterProtocol = match[1];\n if (!everythingAfterProtocol) {\n return false;\n }\n\n if (\n localhostDomainRE.test(everythingAfterProtocol) ||\n nonLocalhostDomainRE.test(everythingAfterProtocol)\n ) {\n return true;\n }\n\n return false;\n}\n\nexport function buildUrl(baseUrl: string, defaultPath: string, urlOrPath?: string) {\n return isUrl(urlOrPath) ? urlOrPath! : urljoin(baseUrl, urlOrPath ?? defaultPath);\n}\n","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Status,\n TransactionSimulationResponse,\n} from '../types';\nimport { BigNumberish } from '../utils/number';\nimport { ProviderInterface } from './interface';\nimport { RpcProvider, RpcProviderOptions } from './rpc';\nimport { SequencerProvider, SequencerProviderOptions } from './sequencer';\nimport { BlockIdentifier } from './utils';\n\nexport interface ProviderOptions {\n sequencer?: SequencerProviderOptions;\n rpc?: RpcProviderOptions;\n}\n\nexport class Provider implements ProviderInterface {\n private provider!: ProviderInterface;\n\n constructor(providerOrOptions?: ProviderOptions | ProviderInterface) {\n if (providerOrOptions instanceof Provider) {\n // providerOrOptions is Provider\n this.provider = providerOrOptions.provider;\n } else if (\n providerOrOptions instanceof RpcProvider ||\n providerOrOptions instanceof SequencerProvider\n ) {\n // providerOrOptions is SequencerProvider or RpcProvider\n this.provider = <ProviderInterface>providerOrOptions;\n } else if (providerOrOptions && 'rpc' in providerOrOptions) {\n // providerOrOptions is rpc option\n this.provider = new RpcProvider(<RpcProviderOptions>providerOrOptions.rpc);\n } else if (providerOrOptions && 'sequencer' in providerOrOptions) {\n // providerOrOptions is sequencer option\n this.provider = new SequencerProvider(<SequencerProviderOptions>providerOrOptions.sequencer);\n } else {\n // providerOrOptions is none, create SequencerProvider as default\n this.provider = new SequencerProvider();\n }\n }\n\n public get chainId(): StarknetChainId {\n return this.provider.chainId;\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return this.provider.getChainId();\n }\n\n public async getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse> {\n return this.provider.getBlock(blockIdentifier);\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClass> {\n return this.provider.getClassAt(contractAddress, blockIdentifier);\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier\n ): Promise<string> {\n return this.provider.getClassHashAt(contractAddress, blockIdentifier);\n }\n\n public getClassByHash(classHash: string): Promise<ContractClass> {\n return this.provider.getClassByHash(classHash);\n }\n\n public async getEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.provider.getEstimateFee(invocationWithTxType, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.provider.getInvokeEstimateFee(\n invocationWithTxType,\n invocationDetails,\n blockIdentifier\n );\n }\n\n public async getEstimateFeeBulk(\n invocations: InvocationBulk,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponseBulk> {\n return this.provider.getEstimateFeeBulk(invocations, blockIdentifier);\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish> {\n return this.provider.getNonceForAddress(contractAddress, blockIdentifier);\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish> {\n return this.provider.getStorageAt(contractAddress, key, blockIdentifier);\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n return this.provider.getTransaction(txHash);\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n return this.provider.getTransactionReceipt(txHash);\n }\n\n public async callContract(\n request: Call,\n blockIdentifier?: BlockIdentifier\n ): Promise<CallContractResponse> {\n return this.provider.callContract(request, blockIdentifier);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.provider.invokeFunction(functionInvocation, details);\n }\n\n public async deployAccountContract(\n payload: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.provider.deployAccountContract(payload, details);\n }\n\n public async declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.provider.declareContract(transaction, details);\n }\n\n public async getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeclareEstimateFee(transaction, details, blockIdentifier);\n }\n\n public getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeployAccountEstimateFee(transaction, details, blockIdentifier);\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n return this.provider.getCode(contractAddress, blockIdentifier);\n }\n\n public async waitForTransaction(\n txHash: BigNumberish,\n retryInterval?: number,\n successStates?: Array<Status>\n ): Promise<GetTransactionReceiptResponse> {\n return this.provider.waitForTransaction(txHash, retryInterval, successStates);\n }\n\n public async getSimulateTransaction(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<TransactionSimulationResponse> {\n return this.provider.getSimulateTransaction(invocation, invocationDetails, blockIdentifier);\n }\n}\n","import { StarknetChainId } from '../constants';\nimport type {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Status,\n TransactionSimulationResponse,\n} from '../types';\nimport type { BigNumberish } from '../utils/number';\nimport { BlockIdentifier } from './utils';\n\nexport abstract class ProviderInterface {\n public abstract chainId: StarknetChainId;\n\n /**\n * Gets the Starknet chain Id\n *\n * @returns the chain Id\n */\n public abstract getChainId(): Promise<StarknetChainId>;\n\n /**\n * Calls a function on the StarkNet contract.\n *\n * @param call transaction to be called\n * @param blockIdentifier block identifier\n * @returns the result of the function on the smart contract.\n */\n public abstract callContract(\n call: Call,\n blockIdentifier?: BlockIdentifier\n ): Promise<CallContractResponse>;\n\n /**\n * Gets the block information\n *\n * @param blockIdentifier block identifier\n * @returns the block object\n */\n public abstract getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse>;\n\n /**\n * @deprecated The method should not be used\n */\n public abstract getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse>;\n\n /**\n * Gets the contract class of the deployed contract.\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Contract class of compiled contract\n */\n public abstract getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClass>;\n\n /**\n * Returns the class hash deployed under the given address.\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Class hash\n */\n public abstract getClassHashAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<string>;\n\n /**\n * Returns the contract class deployed under the given class hash.\n *\n * @param classHash - class hash\n * @returns Contract class of compiled contract\n */\n public abstract getClassByHash(classHash: string): Promise<ContractClass>;\n\n /**\n * Gets the nonce of a contract with respect to a specific block\n *\n * @param contractAddress - contract address\n * @returns the hex nonce\n */\n public abstract getNonceForAddress(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish>;\n\n /**\n * Gets the contract's storage variable at a specific key.\n *\n * @param contractAddress\n * @param key - from getStorageVarAddress('<STORAGE_VARIABLE_NAME>') (WIP)\n * @param blockIdentifier - block identifier\n * @returns the value of the storage variable\n */\n public abstract getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish>;\n\n /**\n * Gets the transaction information from a tx id.\n *\n * @param txHash\n * @returns the transaction object { transaction_id, status, transaction, block_number?, block_number?, transaction_index?, transaction_failure_reason? }\n */\n public abstract getTransaction(transactionHash: BigNumberish): Promise<GetTransactionResponse>;\n\n /**\n * Gets the transaction receipt from a tx hash.\n *\n * @param txHash\n * @returns the transaction receipt object\n */\n public abstract getTransactionReceipt(\n transactionHash: BigNumberish\n ): Promise<GetTransactionReceiptResponse>;\n\n /**\n * Deploys a given compiled Account contract (json) to starknet\n *\n * @param payload payload to be deployed containing:\n * - compiled contract code\n * - constructor calldata\n * - address salt\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccountContract(\n payload: DeployAccountContractPayload,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse>;\n\n /**\n * Invokes a function on starknet\n * @deprecated This method wont be supported as soon as fees are mandatory. Should not be used outside of Account class\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * - maxFee - optional maxFee\n * @returns response from addTransaction\n */\n public abstract invokeFunction(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * @param transaction transaction payload to be deployed containing:\n * - compiled contract code\n * - sender address\n * - signature\n * @param details Invocation Details containing:\n * - nonce\n * - optional version\n * - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n * @deprecated Please use getInvokeEstimateFee or getDeclareEstimateFee instead. Should not be used outside of Account class\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param blockIdentifier - block identifier\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @returns the estimated fee\n */\n public abstract getEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param blockIdentifier - block identifier\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @returns the estimated fee\n */\n public abstract getInvokeEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DECLARE transaction\n *\n * @param transaction transaction payload to be declared containing:\n * - compiled contract code\n * - sender address\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DEPLOY_ACCOUNT transaction\n *\n * @param transaction transaction payload to be deployed containing:\n * - classHash\n * - constructorCalldata\n * - addressSalt\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a list of INVOKE transaction\n *\n * @param invocations the array of invocation and invocation details object containing:\n * - contractAddress - the address of the account\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * - nonce - optional nonce\n * - version - optional version\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getEstimateFeeBulk(\n invocations: InvocationBulk,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponseBulk>;\n\n /**\n * Wait for the transaction to be accepted\n * @param txHash - transaction hash\n * @param retryInterval - retry interval\n * @return GetTransactionReceiptResponse\n */\n public abstract waitForTransaction(\n txHash: BigNumberish,\n retryInterval?: number,\n successStates?: Array<Status>\n ): Promise<GetTransactionReceiptResponse>;\n\n /**\n * Simulates the transaction and returns the transaction trace and estimated fee.\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @param blockIdentifier - block identifier\n * @returns the transaction trace and estimated fee\n */\n public abstract getSimulateTransaction(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier\n ): Promise<TransactionSimulationResponse>;\n}\n","import { Provider } from './default';\n\nexport * from './default';\nexport * from './errors';\nexport * from './sequencer';\nexport * from './interface';\nexport * from './rpc';\n\nexport const defaultProvider = new Provider();\n","import BN from 'bn.js';\nimport assert from 'minimalistic-assert';\n\nimport { Abi, AbiEntry, Calldata, FunctionAbi, ParsedStruct, StructAbi } from '../types';\nimport { BigNumberish, toFelt } from './number';\n\nexport class CheckCallData {\n abi: Abi;\n\n protected readonly structs: { [name: string]: StructAbi };\n\n constructor(abi: Abi) {\n this.abi = abi;\n this.structs = abi\n .filter((abiEntry) => abiEntry.type === 'struct')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n }\n\n /**\n * Parse the calldata by using input fields from the abi for that method\n *\n * @param args - arguments passed the the method\n * @param inputs - list of inputs(fields) that are in the abi\n * @return {Calldata} - parsed arguments in format that contract is expecting\n */\n public compileCalldata(args: Array<any>, inputs: AbiEntry[]): Calldata {\n const argsIterator = args[Symbol.iterator]();\n return inputs.reduce((acc, input) => {\n if (/_len$/.test(input.name)) {\n return acc;\n }\n const parsedData = this.parseCalldataField(argsIterator, input);\n if (Array.isArray(parsedData)) {\n acc.push(...parsedData);\n } else {\n acc.push(parsedData);\n }\n return acc;\n }, [] as Calldata);\n }\n\n /**\n * Validates if all arguments that are passed to the method are corresponding to the ones in the abi\n *\n * @param type - type of the method\n * @param method - name of the method\n * @param args - arguments that are passed to the method\n */\n public validateMethodAndArgs(\n type: 'INVOKE' | 'CALL' | 'DEPLOY',\n method: string,\n args: Array<any> = []\n ) {\n // ensure provided method exists\n if (type !== 'DEPLOY') {\n const invocableFunctionNames = this.abi\n .filter((abi) => {\n if (abi.type !== 'function') return false;\n const isView = abi.stateMutability === 'view';\n return type === 'INVOKE' ? !isView : isView;\n })\n .map((abi) => abi.name);\n assert(\n invocableFunctionNames.includes(method),\n `${type === 'INVOKE' ? 'invocable' : 'viewable'} method not found in abi`\n );\n }\n\n // ensure args match abi type\n const methodAbi = this.abi.find((abi) =>\n type === 'DEPLOY'\n ? abi.name === method && abi.type === method\n : abi.name === method && abi.type === 'function'\n ) as FunctionAbi;\n let argPosition = 0;\n methodAbi.inputs.forEach((input) => {\n if (/_len$/.test(input.name)) {\n return;\n }\n if (input.type === 'felt') {\n assert(\n typeof args[argPosition] === 'string' ||\n typeof args[argPosition] === 'number' ||\n args[argPosition] instanceof BN,\n `arg ${input.name} should be a felt (string, number, BigNumber)`\n );\n argPosition += 1;\n } else if (input.type in this.structs && typeof args[argPosition] === 'object') {\n if (Array.isArray(args[argPosition])) {\n const structMembersLength = this.calculateStructMembers(input.type);\n assert(\n args[argPosition].length === structMembersLength,\n `arg should be of length ${structMembersLength}`\n );\n } else {\n this.structs[input.type].members.forEach(({ name }) => {\n assert(\n Object.keys(args[argPosition]).includes(name),\n `arg should have a property ${name}`\n );\n });\n }\n argPosition += 1;\n } else {\n assert(Array.isArray(args[argPosition]), `arg ${input.name} should be an Array`);\n if (input.type === 'felt*') {\n args[argPosition].forEach((felt: BigNumberish) => {\n assert(\n typeof felt === 'string' || typeof felt === 'number' || felt instanceof BN,\n `arg ${input.name} should be an array of string, number or BigNumber`\n );\n });\n argPosition += 1;\n } else if (/\\(felt/.test(input.type)) {\n const tupleLength = input.type.split(',').length;\n assert(\n args[argPosition].length === tupleLength,\n `arg ${input.name} should have ${tupleLength} elements in tuple`\n );\n args[argPosition].forEach((felt: BigNumberish) => {\n assert(\n typeof felt === 'string' || typeof felt === 'number' || felt instanceof BN,\n `arg ${input.name} should be an array of string, number or BigNumber`\n );\n });\n argPosition += 1;\n } else {\n const arrayType = input.type.replace('*', '');\n args[argPosition].forEach((struct: any) => {\n this.structs[arrayType].members.forEach(({ name }) => {\n if (Array.isArray(struct)) {\n const structMembersLength = this.calculateStructMembers(arrayType);\n assert(\n struct.length === structMembersLength,\n `arg should be of length ${structMembersLength}`\n );\n } else {\n assert(\n Object.keys(struct).includes(name),\n `arg ${input.name} should be an array of ${arrayType}`\n );\n }\n });\n });\n argPosition += 1;\n }\n }\n });\n }\n\n /**\n * Parse one field of the calldata by using input field from the abi for that method\n *\n * @param args - value of the field\n * @param input - input(field) information from the abi that will be used to parse the data\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\n protected parseCalldataField(argsIterator: Iterator<any>, input: AbiEntry): string | string[] {\n const { name, type } = input;\n const { value } = argsIterator.next();\n\n const parsedCalldata: string[] = [];\n switch (true) {\n case /\\*/.test(type):\n if (Array.isArray(value)) {\n parsedCalldata.push(toFelt(value.length));\n return (value as (BigNumberish | ParsedStruct)[]).reduce((acc, el) => {\n if (/felt/.test(type)) {\n acc.push(toFelt(el as BigNumberish));\n } else {\n acc.push(...this.parseCalldataValue(el, type.replace('*', '')));\n }\n return acc;\n }, parsedCalldata);\n }\n throw Error(`Expected ${name} to be array`);\n case type in this.structs:\n return this.parseCalldataValue(value as ParsedStruct | BigNumberish[], type);\n case /\\(felt/.test(type):\n if (Array.isArray(value)) {\n return value.map((el) => toFelt(el as BigNumberish));\n }\n throw Error(`Expected ${name} to be array`);\n default:\n return toFelt(value as BigNumberish);\n }\n }\n\n /**\n * Deep parse of the object that has been passed to the method\n *\n * @param element - element that needs to be parsed\n * @param type - name of the method\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\n\n protected parseCalldataValue(\n element: ParsedStruct | BigNumberish | BigNumberish[],\n type: string\n ): string | string[] {\n if (element === undefined) {\n throw Error('Missing element in calldata');\n }\n if (Array.isArray(element)) {\n const structMemberNum = this.calculateStructMembers(type);\n if (element.length !== structMemberNum) {\n throw Error('Missing element in calldata');\n }\n return element.map((el) => toFelt(el));\n }\n // checking if the passed element is struct or element in struct\n if (this.structs[type] && this.structs[type].members.length) {\n // going through all the members of the struct and parsing the value\n return this.structs[type].members.reduce((acc, member: AbiEntry) => {\n // if the member of the struct is another struct this will return array of the felts if not it will be single felt\n // TODO: refactor types so member name can be used as keyof ParsedStruct\n /* @ts-ignore */\n const parsedData = this.parseCalldataValue(element[member.name], member.type);\n if (typeof parsedData === 'string') {\n acc.push(parsedData);\n } else {\n acc.push(...parsedData);\n }\n return acc;\n }, [] as string[]);\n }\n return toFelt(element as BigNumberish);\n }\n\n /**\n * Deep parse of the object that has been passed to the method\n *\n * @param struct - struct that needs to be calculated\n * @return {number} - number of members for the given struct\n */\n private calculateStructMembers(struct: string): number {\n return this.structs[struct].members.reduce((acc, member) => {\n if (member.type === 'felt') {\n return acc + 1;\n }\n return acc + this.calculateStructMembers(member.type);\n }, 0);\n }\n}\n","import { AccountInterface } from '../account';\nimport { ProviderInterface } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport {\n Abi,\n AsyncContractFunction,\n ContractFunction,\n Invocation,\n InvokeFunctionResponse,\n Overrides,\n Result,\n} from '../types';\n\nexport type CallOptions = {\n blockIdentifier?: BlockIdentifier;\n};\n\nexport abstract class ContractInterface {\n public abstract abi: Abi;\n\n public abstract address: string;\n\n public abstract providerOrAccount: ProviderInterface | AccountInterface;\n\n public abstract deployTransactionHash?: string;\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n /**\n * Saves the address of the contract deployed on network that will be used for interaction\n *\n * @param address - address of the contract\n */\n public abstract attach(address: string): void;\n\n /**\n * Attaches to new Provider or Account\n *\n * @param providerOrAccount - new Provider or Account to attach to\n */\n public abstract connect(providerOrAccount: ProviderInterface | AccountInterface): void;\n\n /**\n * Resolves when contract is deployed on the network or when no deployment transaction is found\n *\n * @returns Promise that resolves when contract is deployed on the network or when no deployment transaction is found\n * @throws When deployment fails\n */\n public abstract deployed(): Promise<ContractInterface>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @param options optional blockIdentifier\n * @returns Result of the call as an array with key value pars\n */\n public abstract call(method: string, args?: Array<any>, options?: CallOptions): Promise<Result>;\n\n /**\n * Invokes a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the invoke\n * @param options\n * @returns Add Transaction Response\n */\n public abstract invoke(\n method: string,\n args?: Array<any>,\n options?: Overrides\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Estimates a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @param options optional blockIdentifier\n */\n public abstract estimate(\n method: string,\n args?: Array<any>,\n options?: {\n blockIdentifier?: BlockIdentifier;\n }\n ): Promise<any>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @returns Invocation object\n */\n public abstract populate(method: string, args?: Array<any>): Invocation;\n}\n","import assert from 'minimalistic-assert';\n\nimport { AccountInterface } from '../account';\nimport { Abi, CompiledContract, FunctionAbi } from '../types';\nimport { CheckCallData } from '../utils/calldata';\nimport { Contract } from './default';\n\nexport class ContractFactory {\n abi: Abi;\n\n compiledContract: CompiledContract;\n\n classHash: string;\n\n account: AccountInterface;\n\n private checkCalldata: CheckCallData;\n\n constructor(\n compiledContract: CompiledContract,\n classHash: string,\n account: AccountInterface,\n abi: Abi = compiledContract.abi // abi can be different from the deployed contract ie for proxy contracts\n ) {\n this.abi = abi;\n this.compiledContract = compiledContract;\n this.account = account;\n this.classHash = classHash;\n this.checkCalldata = new CheckCallData(abi);\n }\n\n /**\n * Deploys contract and returns new instance of the Contract\n *\n * @param args - Array of the constructor arguments for deployment\n * @param addressSalt (optional) - Address Salt for deployment\n * @returns deployed Contract\n */\n public async deploy(args: Array<any> = [], addressSalt?: string | undefined): Promise<Contract> {\n this.checkCalldata.validateMethodAndArgs('DEPLOY', 'constructor', args);\n const { inputs } = this.abi.find((abi) => abi.type === 'constructor') as FunctionAbi;\n\n // compile calldata\n const constructorCalldata = this.checkCalldata.compileCalldata(args, inputs);\n\n const {\n deploy: { contract_address, transaction_hash },\n } = await this.account.declareDeploy({\n contract: this.compiledContract,\n classHash: this.classHash,\n constructorCalldata,\n salt: addressSalt,\n });\n assert(Boolean(contract_address), 'Deployment of the contract failed');\n\n const contractInstance = new Contract(\n this.compiledContract.abi,\n contract_address!,\n this.account\n );\n contractInstance.deployTransactionHash = transaction_hash;\n\n return contractInstance;\n }\n\n /**\n * Attaches to new Provider or Account\n *\n * @param account - new Provider or Account to attach to\n * @returns ContractFactory\n */\n connect(account: AccountInterface): ContractFactory {\n this.account = account;\n return this;\n }\n\n /**\n * Attaches current abi and provider or account to the new address\n *\n * @param address - Contract address\n * @returns Contract\n */\n attach(address: string): Contract {\n return new Contract(this.abi, address, this.account);\n }\n\n // ethers.js' getDeployTransaction cant be supported as it requires the account or signer to return a signed transaction which is not possible with the current implementation\n}\n","import { BN } from 'bn.js';\n\nimport { UDC, ZERO } from '../constants';\nimport { ProviderInterface, ProviderOptions } from '../provider';\nimport { Provider } from '../provider/default';\nimport { BlockIdentifier } from '../provider/utils';\nimport { Signer, SignerInterface } from '../signer';\nimport {\n Abi,\n AllowArray,\n Call,\n DeclareContractPayload,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeclareDeployContractPayload,\n DeclareDeployUDCResponse,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractResponse,\n DeployContractUDCResponse,\n EstimateFee,\n EstimateFeeAction,\n EstimateFeeDetails,\n Invocation,\n InvocationsDetails,\n InvocationsSignerDetails,\n InvokeFunctionResponse,\n KeyPair,\n MultiDeployContractResponse,\n Signature,\n TransactionBulk,\n UniversalDeployerContractPayload,\n} from '../types';\nimport { EstimateFeeBulk, TransactionSimulation } from '../types/account';\nimport { parseUDCEvent } from '../utils/events';\nimport {\n calculateContractAddressFromHash,\n feeTransactionVersion,\n pedersen,\n transactionVersion,\n} from '../utils/hash';\nimport { BigNumberish, hexToDecimalString, toBN, toCairoBool } from '../utils/number';\nimport { parseContract } from '../utils/provider';\nimport { compileCalldata, estimatedFeeToMaxFee, randomAddress } from '../utils/stark';\nimport { getStarknetIdContract, useDecoded, useEncoded } from '../utils/starknetId';\nimport { fromCallsToExecuteCalldata } from '../utils/transaction';\nimport { TypedData, getMessageHash } from '../utils/typedData';\nimport { AccountInterface } from './interface';\n\nexport class Account extends Provider implements AccountInterface {\n public signer: SignerInterface;\n\n public address: string;\n\n constructor(\n providerOrOptions: ProviderOptions | ProviderInterface,\n address: string,\n keyPairOrSigner: KeyPair | SignerInterface\n ) {\n super(providerOrOptions);\n this.address = address.toLowerCase();\n this.signer =\n 'getPubKey' in keyPairOrSigner ? keyPairOrSigner : new Signer(keyPairOrSigner as KeyPair);\n }\n\n public async getNonce(blockIdentifier?: BlockIdentifier): Promise<BigNumberish> {\n return super.getNonceForAddress(this.address, blockIdentifier);\n }\n\n public async getStarkName(StarknetIdContract?: string): Promise<string | Error> {\n const chainId = await this.getChainId();\n const contract = StarknetIdContract ?? getStarknetIdContract(chainId);\n\n try {\n const hexDomain = await this.callContract({\n contractAddress: contract,\n entrypoint: 'address_to_domain',\n calldata: compileCalldata({\n address: this.address,\n }),\n });\n const decimalDomain = hexDomain.result\n .map((element) => new BN(hexToDecimalString(element)))\n .slice(1);\n\n const stringDomain = useDecoded(decimalDomain);\n\n return stringDomain;\n } catch {\n return Error('Could not get stark name');\n }\n }\n\n public async getAddressFromStarkName(\n name: string,\n StarknetIdContract?: string\n ): Promise<string | Error> {\n const chainId = await this.getChainId();\n const contract = StarknetIdContract ?? getStarknetIdContract(chainId);\n\n try {\n const addressData = await this.callContract({\n contractAddress: contract,\n entrypoint: 'domain_to_address',\n calldata: compileCalldata({\n domain: [useEncoded(name.replace('.stark', '')).toString(10)],\n }),\n });\n\n return addressData.result[0];\n } catch {\n return Error('Could not get address from stark name');\n }\n }\n\n public async estimateFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails | undefined\n ): Promise<EstimateFee> {\n return this.estimateInvokeFee(calls, estimateFeeDetails);\n }\n\n public async estimateInvokeFee(\n calls: AllowArray<Call>,\n { nonce: providedNonce, blockIdentifier }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee: ZERO,\n version,\n chainId,\n };\n\n const invocation = await this.buildInvocation(transactions, signerDetails);\n const response = await super.getInvokeEstimateFee(\n { ...invocation },\n { version, nonce },\n blockIdentifier\n );\n\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeclareFee(\n { classHash, contract }: DeclareContractPayload,\n { blockIdentifier, nonce: providedNonce }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const payload = await this.buildDeclarePayload(\n { classHash, contract },\n { nonce, chainId, version, walletAddress: this.address, maxFee: ZERO }\n );\n\n const response = await super.getDeclareEstimateFee(\n { ...payload },\n { version, nonce },\n blockIdentifier\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateAccountDeployFee(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { blockIdentifier }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = '0x0';\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const payload = await this.buildAccountDeployPayload(\n { classHash, addressSalt, constructorCalldata, contractAddress: providedContractAddress },\n { nonce, chainId, version, walletAddress: this.address, maxFee: ZERO }\n );\n\n const response = await super.getDeployAccountEstimateFee(\n { ...payload },\n { version, nonce },\n blockIdentifier\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeployFee(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n transactionsDetail?: InvocationsDetails | undefined\n ): Promise<EstimateFee> {\n const calls = this.buildUDCContractPayload(payload);\n return this.estimateInvokeFee(calls, transactionsDetail);\n }\n\n public async estimateFeeBulk(\n transactions: TransactionBulk,\n { nonce: providedNonce, blockIdentifier }: EstimateFeeDetails = {}\n ): Promise<EstimateFeeBulk> {\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const params: any = await Promise.all(\n [].concat(transactions as []).map(async (transaction: any, index: number) => {\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce: toBN(Number(nonce) + index),\n maxFee: ZERO,\n version,\n chainId,\n };\n\n const txPayload = transaction.payload;\n\n let res;\n if (typeof transaction === 'object' && transaction.type === 'INVOKE_FUNCTION') {\n const invocation = await this.buildInvocation(\n Array.isArray(txPayload) ? txPayload : [txPayload],\n signerDetails\n );\n res = {\n type: 'INVOKE_FUNCTION',\n ...invocation,\n version,\n nonce: toBN(Number(nonce) + index),\n blockIdentifier,\n };\n } else if (typeof transaction === 'object' && transaction.type === 'DECLARE') {\n const declareContractPayload = await this.buildDeclarePayload(txPayload, signerDetails);\n res = {\n type: 'DECLARE',\n ...declareContractPayload,\n version,\n nonce: toBN(Number(nonce) + index),\n blockIdentifier,\n };\n } else if (typeof transaction === 'object' && transaction.type === 'DEPLOY_ACCOUNT') {\n const payload = await this.buildAccountDeployPayload(txPayload, signerDetails);\n res = {\n type: 'DEPLOY_ACCOUNT',\n ...payload,\n version,\n nonce,\n blockIdentifier,\n };\n } else if (typeof transaction === 'object' && transaction.type === 'DEPLOY') {\n const calls = this.buildUDCContractPayload(txPayload);\n const invocation = await this.buildInvocation(calls, signerDetails);\n res = {\n type: 'INVOKE_FUNCTION',\n ...invocation,\n version,\n nonce: toBN(Number(nonce) + index),\n blockIdentifier,\n };\n }\n return res;\n })\n );\n\n const response = await super.getEstimateFeeBulk(params, blockIdentifier);\n\n return [].concat(response as []).map((elem: any) => {\n const suggestedMaxFee = estimatedFeeToMaxFee(elem.overall_fee);\n return {\n ...elem,\n suggestedMaxFee,\n };\n });\n }\n\n public async buildInvocation(\n call: Array<Call>,\n signerDetails: InvocationsSignerDetails\n ): Promise<Invocation> {\n const calldata = fromCallsToExecuteCalldata(call);\n const signature = await this.signer.signTransaction(call, signerDetails);\n\n return {\n contractAddress: this.address,\n calldata,\n signature,\n };\n }\n\n public async execute(\n calls: AllowArray<Call>,\n abis: Abi[] | undefined = undefined,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<InvokeFunctionResponse> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee({ type: 'INVOKE', payload: calls }, transactionsDetail));\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee,\n version,\n chainId,\n };\n\n const signature = await this.signer.signTransaction(transactions, signerDetails, abis);\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n\n return this.invokeFunction(\n { contractAddress: this.address, calldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async declare(\n { classHash, contract }: DeclareContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeclareContractResponse> {\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n { type: 'DECLARE', payload: { classHash, contract } },\n transactionsDetail\n ));\n\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n senderAddress: this.address,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n const contractDefinition = parseContract(contract);\n\n return this.declareContract(\n { contractDefinition, senderAddress: this.address, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async deploy(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<MultiDeployContractResponse> {\n const params = [].concat(payload as []).map((it) => {\n const {\n classHash,\n salt,\n unique = true,\n constructorCalldata = [],\n } = it as UniversalDeployerContractPayload;\n\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n const deploySalt = salt ?? randomAddress();\n\n return {\n call: {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n deploySalt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n },\n address: calculateContractAddressFromHash(\n unique ? pedersen([this.address, deploySalt]) : deploySalt,\n classHash,\n compiledConstructorCallData,\n unique ? UDC.ADDRESS : 0\n ),\n };\n });\n\n const calls = params.map((it) => it.call);\n const addresses = params.map((it) => it.address);\n const invokeResponse = await this.execute(calls, undefined, details);\n\n return {\n ...invokeResponse,\n contract_address: addresses,\n };\n }\n\n public async deployContract(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<DeployContractUDCResponse> {\n const deployTx = await this.deploy(payload, details);\n const txReceipt = await this.waitForTransaction(deployTx.transaction_hash, undefined, [\n 'ACCEPTED_ON_L2',\n ]);\n return parseUDCEvent(txReceipt);\n }\n\n public async declareDeploy(\n payload: DeclareDeployContractPayload,\n details?: InvocationsDetails | undefined\n ): Promise<DeclareDeployUDCResponse> {\n const { classHash, contract, constructorCalldata, salt, unique } = payload;\n const { transaction_hash } = await this.declare({ contract, classHash }, details);\n const declare = await this.waitForTransaction(transaction_hash, undefined, ['ACCEPTED_ON_L2']);\n const deploy = await this.deployContract(\n { classHash, salt, unique, constructorCalldata },\n details\n );\n return { declare: { ...declare, class_hash: classHash }, deploy };\n }\n\n public async deployAccount(\n {\n classHash,\n constructorCalldata = [],\n addressSalt = 0,\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeployContractResponse> {\n const nonce = '0x0';\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, constructorCalldata, 0);\n\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n {\n type: 'DEPLOY_ACCOUNT',\n payload: { classHash, constructorCalldata, addressSalt, contractAddress },\n },\n transactionsDetail\n ));\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n constructorCalldata,\n contractAddress,\n addressSalt,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return this.deployAccountContract(\n { classHash, addressSalt, constructorCalldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async signMessage(typedData: TypedData): Promise<Signature> {\n return this.signer.signMessage(typedData, this.address);\n }\n\n public async hashMessage(typedData: TypedData): Promise<string> {\n return getMessageHash(typedData, this.address);\n }\n\n public async verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean> {\n try {\n await this.callContract({\n contractAddress: this.address,\n entrypoint: 'isValidSignature',\n calldata: compileCalldata({\n hash: toBN(hash).toString(),\n signature: signature.map((x) => toBN(x).toString()),\n }),\n });\n return true;\n } catch {\n return false;\n }\n }\n\n public async verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean> {\n const hash = await this.hashMessage(typedData);\n return this.verifyMessageHash(hash, signature);\n }\n\n public async getSuggestedMaxFee(\n { type, payload }: EstimateFeeAction,\n details: EstimateFeeDetails\n ) {\n let feeEstimate: EstimateFee;\n\n switch (type) {\n case 'INVOKE':\n feeEstimate = await this.estimateInvokeFee(payload, details);\n break;\n\n case 'DECLARE':\n feeEstimate = await this.estimateDeclareFee(payload, details);\n break;\n\n case 'DEPLOY_ACCOUNT':\n feeEstimate = await this.estimateAccountDeployFee(payload, details);\n break;\n\n case 'DEPLOY':\n feeEstimate = await this.estimateDeployFee(payload, details);\n break;\n\n default:\n feeEstimate = { suggestedMaxFee: ZERO, overall_fee: ZERO };\n break;\n }\n\n return feeEstimate.suggestedMaxFee.toString();\n }\n\n public async buildDeclarePayload(\n { classHash, contract }: DeclareContractPayload,\n { nonce, chainId, version, walletAddress, maxFee }: InvocationsSignerDetails\n ): Promise<DeclareContractTransaction> {\n const contractDefinition = parseContract(contract);\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n senderAddress: walletAddress,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return {\n senderAddress: walletAddress,\n signature,\n contractDefinition,\n };\n }\n\n public async buildAccountDeployPayload(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { nonce, chainId, version, maxFee }: InvocationsSignerDetails\n ): Promise<DeployAccountContractTransaction> {\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, constructorCalldata, 0);\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n contractAddress,\n chainId,\n maxFee,\n version,\n nonce,\n addressSalt,\n constructorCalldata,\n });\n\n return {\n classHash,\n addressSalt,\n constructorCalldata,\n signature,\n };\n }\n\n public buildUDCContractPayload(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[]\n ): Call[] {\n const calls = [].concat(payload as []).map((it) => {\n const {\n classHash,\n salt = '0',\n unique = true,\n constructorCalldata = [],\n } = it as UniversalDeployerContractPayload;\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n\n return {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n salt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n };\n });\n return calls;\n }\n\n public async simulateTransaction(\n calls: AllowArray<Call>,\n { nonce: providedNonce, blockIdentifier }: EstimateFeeDetails = {}\n ): Promise<TransactionSimulation> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee: ZERO,\n version,\n chainId,\n };\n\n const invocation = await this.buildInvocation(transactions, signerDetails);\n const response = await super.getSimulateTransaction(\n invocation,\n { version, nonce },\n blockIdentifier\n );\n\n const suggestedMaxFee = estimatedFeeToMaxFee(response.fee_estimation.overall_fee);\n\n return {\n ...response,\n fee_estimation: {\n ...response.fee_estimation,\n suggestedMaxFee,\n },\n };\n }\n}\n","import {\n Abi,\n Call,\n DeclareSignerDetails,\n DeployAccountSignerDetails,\n InvocationsSignerDetails,\n Signature,\n} from '../types';\nimport { TypedData } from '../utils/typedData';\n\nexport abstract class SignerInterface {\n /**\n * Method to get the public key of the signer\n *\n * @returns public key of signer as hex string with 0x prefix\n */\n public abstract getPubKey(): Promise<string>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param typedData - JSON object to be signed\n * @param accountAddress - account\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData, accountAddress: string): Promise<Signature>;\n\n /**\n * Signs a transaction with the starknet private key and returns the signature\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns signature\n */\n public abstract signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature>;\n\n /**\n * Signs a DEPLOY_ACCOUNT transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - contractAddress - the computed address of the contract\n * - constructorCalldata - calldata to be passed in deploy constructor\n * - addressSalt - contract address salt\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeployAccountTransaction(\n transaction: DeployAccountSignerDetails\n ): Promise<Signature>;\n\n /**\n * Signs a DECLARE transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - classHash - computed class hash. Will be replaced by ContractClass in future once class hash is present in CompiledContract\n * - senderAddress - the address of the sender\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeclareTransaction(transaction: DeclareSignerDetails): Promise<Signature>;\n}\n","import { Call, ParsedStruct } from '../types';\nimport { getSelectorFromName } from './hash';\nimport { BigNumberish, bigNumberishArrayToDecimalStringArray, toBN } from './number';\n\n/**\n * Transforms a list of Calls, each with their own calldata, into\n * two arrays: one with the entrypoints, and one with the concatenated calldata.\n * @param calls\n * @returns\n */\nexport const transformCallsToMulticallArrays = (calls: Call[]) => {\n const callArray: ParsedStruct[] = [];\n const calldata: BigNumberish[] = [];\n calls.forEach((call) => {\n const data = call.calldata || [];\n callArray.push({\n to: toBN(call.contractAddress).toString(10),\n selector: toBN(getSelectorFromName(call.entrypoint)).toString(10),\n data_offset: calldata.length.toString(),\n data_len: data.length.toString(),\n });\n calldata.push(...data);\n });\n return {\n callArray,\n calldata: bigNumberishArrayToDecimalStringArray(calldata),\n };\n};\n\n/**\n * Transforms a list of calls in the full flattened calldata expected\n * by the __execute__ protocol.\n * @param calls\n * @returns\n */\nexport const fromCallsToExecuteCalldata = (calls: Call[]): string[] => {\n const { callArray, calldata } = transformCallsToMulticallArrays(calls);\n return [\n callArray.length.toString(),\n ...callArray\n .map(\n ({ to, selector, data_offset, data_len }) =>\n [to, selector, data_offset, data_len] as string[]\n )\n .flat(),\n calldata.length.toString(),\n ...calldata,\n ];\n};\n\nexport const fromCallsToExecuteCalldataWithNonce = (\n calls: Call[],\n nonce: BigNumberish\n): string[] => {\n return [...fromCallsToExecuteCalldata(calls), toBN(nonce).toString()];\n};\n","import { computeHashOnElements, getSelectorFromName } from '../hash';\nimport { MerkleTree } from '../merkle';\nimport { BigNumberish, isHex, toBN, toHex } from '../number';\nimport { encodeShortString } from '../shortString';\nimport { StarkNetMerkleType, StarkNetType, TypedData } from './types';\nimport { validateTypedData } from './utils';\n\nexport * from './types';\n\nfunction getHex(value: BigNumberish): string {\n try {\n return toHex(toBN(value));\n } catch (e) {\n if (typeof value === 'string') {\n return toHex(toBN(encodeShortString(value)));\n }\n throw new Error(`Invalid BigNumberish: ${value}`);\n }\n}\n\nexport function prepareSelector(selector: string): string {\n return isHex(selector) ? selector : getSelectorFromName(selector);\n}\n\nexport function isMerkleTreeType(type: StarkNetType): type is StarkNetMerkleType {\n return type.type === 'merkletree';\n}\n\ninterface Context {\n parent?: string;\n key?: string;\n}\n\n/**\n * Get the dependencies of a struct type. If a struct has the same dependency multiple times, it's only included once\n * in the resulting array.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {string[]} [dependencies]\n * @return {string[]}\n */\nexport const getDependencies = (\n types: TypedData['types'],\n type: string,\n dependencies: string[] = []\n): string[] => {\n // Include pointers (struct arrays)\n if (type[type.length - 1] === '*') {\n // eslint-disable-next-line no-param-reassign\n type = type.slice(0, -1);\n }\n\n if (dependencies.includes(type)) {\n return dependencies;\n }\n\n if (!types[type]) {\n return dependencies;\n }\n\n return [\n type,\n ...types[type].reduce<string[]>(\n (previous, t) => [\n ...previous,\n ...getDependencies(types, t.type, previous).filter(\n (dependency) => !previous.includes(dependency)\n ),\n ],\n []\n ),\n ];\n};\n\nfunction getMerkleTreeType(types: TypedData['types'], ctx: Context) {\n if (ctx.parent && ctx.key) {\n const parentType = types[ctx.parent];\n const merkleType = parentType.find((t) => t.name === ctx.key)!;\n const isMerkleTree = isMerkleTreeType(merkleType);\n if (!isMerkleTree) {\n throw new Error(`${ctx.key} is not a merkle tree`);\n }\n if (merkleType.contains.endsWith('*')) {\n throw new Error(`Merkle tree contain property must not be an array but was given ${ctx.key}`);\n }\n return merkleType.contains;\n }\n return 'raw';\n}\n\n/**\n * Encode a type to a string. All dependant types are alphabetically sorted.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @return {string}\n */\nexport const encodeType = (types: TypedData['types'], type: string): string => {\n const [primary, ...dependencies] = getDependencies(types, type);\n const newTypes = !primary ? [] : [primary, ...dependencies.sort()];\n\n return newTypes\n .map((dependency) => {\n return `${dependency}(${types[dependency].map((t) => `${t.name}:${t.type}`)})`;\n })\n .join('');\n};\n\n/**\n * Get a type string as hash.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @return {string}\n */\nexport const getTypeHash = (types: TypedData['types'], type: string): string => {\n return getSelectorFromName(encodeType(types, type));\n};\n\n/**\n * Encodes a single value to an ABI serialisable string, number or Buffer. Returns the data as tuple, which consists of\n * an array of ABI compatible types, and an array of corresponding values.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {any} data\n * @returns {[string, string]}\n */\nexport const encodeValue = (\n types: TypedData['types'],\n type: string,\n data: unknown,\n ctx: Context = {}\n): [string, string] => {\n if (types[type]) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return [type, getStructHash(types, type, data as Record<string, unknown>)];\n }\n\n if (\n Object.keys(types)\n .map((x) => `${x}*`)\n .includes(type)\n ) {\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return getStructHash(types, type.slice(0, -1), struct as Record<string, unknown>);\n });\n return [type, computeHashOnElements(structHashes)];\n }\n\n if (type === 'merkletree') {\n const merkleTreeType = getMerkleTreeType(types, ctx);\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return encodeValue(types, merkleTreeType, struct as Record<string, unknown>)[1];\n });\n const { root } = new MerkleTree(structHashes as string[]);\n return ['felt', root];\n }\n\n if (type === 'felt*') {\n return ['felt*', computeHashOnElements(data as string[])];\n }\n\n if (type === 'selector') {\n return ['felt', prepareSelector(data as string)];\n }\n\n return [type, getHex(data as string)];\n};\n\n/**\n * Encode the data to an ABI encoded Buffer. The data should be a key -> value object with all the required values. All\n * dependant types are automatically encoded.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {Record<string, any>} data\n */\nexport const encodeData = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n const [returnTypes, values] = types[type].reduce<[string[], string[]]>(\n ([ts, vs], field) => {\n if (data[field.name] === undefined || data[field.name] === null) {\n throw new Error(`Cannot encode data: missing data for '${field.name}'`);\n }\n\n const value = data[field.name];\n const [t, encodedValue] = encodeValue(types, field.type, value, {\n parent: type,\n key: field.name,\n });\n\n return [\n [...ts, t],\n [...vs, encodedValue],\n ];\n },\n [['felt'], [getTypeHash(types, type)]]\n );\n\n return [returnTypes, values];\n};\n\n/**\n * Get encoded data as a hash. The data should be a key -> value object with all the required values. All dependant\n * types are automatically encoded.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {Record<string, any>} data\n * @return {Buffer}\n */\nexport const getStructHash = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n return computeHashOnElements(encodeData(types, type, data)[1]);\n};\n\n/**\n * Get the EIP-191 encoded message to sign, from the typedData object.\n *\n * @param {TypedData} typedData\n * @param {BigNumberish} account\n * @return {string}\n */\nexport const getMessageHash = (typedData: TypedData, account: BigNumberish): string => {\n if (!validateTypedData(typedData)) {\n throw new Error('Typed data does not match JSON schema');\n }\n\n const message = [\n encodeShortString('StarkNet Message'),\n getStructHash(typedData.types, 'StarkNetDomain', typedData.domain),\n account,\n getStructHash(typedData.types, typedData.primaryType, typedData.message),\n ];\n\n return computeHashOnElements(message);\n};\n","import { pedersen } from './hash';\nimport { toBN } from './number';\n\nexport class MerkleTree {\n public leaves: string[];\n\n public branches: string[][] = [];\n\n public root: string;\n\n constructor(leafHashes: string[]) {\n this.leaves = leafHashes;\n this.root = this.build(leafHashes);\n }\n\n private build(leaves: string[]): string {\n if (leaves.length === 1) {\n return leaves[0];\n }\n if (leaves.length !== this.leaves.length) {\n this.branches.push(leaves);\n }\n const newLeaves = [];\n for (let i = 0; i < leaves.length; i += 2) {\n if (i + 1 === leaves.length) {\n newLeaves.push(MerkleTree.hash(leaves[i], '0x0'));\n } else {\n newLeaves.push(MerkleTree.hash(leaves[i], leaves[i + 1]));\n }\n }\n return this.build(newLeaves);\n }\n\n static hash(a: string, b: string) {\n const [aSorted, bSorted] = [toBN(a), toBN(b)].sort((x: any, y: any) => (x.gte(y) ? 1 : -1));\n return pedersen([aSorted, bSorted]);\n }\n\n public getProof(leaf: string, branch = this.leaves, hashPath: string[] = []): string[] {\n const index = branch.indexOf(leaf);\n if (index === -1) {\n throw new Error('leaf not found');\n }\n if (branch.length === 1) {\n return hashPath;\n }\n const isLeft = index % 2 === 0;\n const neededBranch = (isLeft ? branch[index + 1] : branch[index - 1]) ?? '0x0';\n const newHashPath = [...hashPath, neededBranch];\n const currentBranchLevelIndex =\n this.leaves.length === branch.length\n ? -1\n : this.branches.findIndex((b) => b.length === branch.length);\n const nextBranch = this.branches[currentBranchLevelIndex + 1] ?? [this.root];\n return this.getProof(\n MerkleTree.hash(isLeft ? leaf : neededBranch, isLeft ? neededBranch : leaf),\n nextBranch,\n newHashPath\n );\n }\n}\n\nexport function proofMerklePath(root: string, leaf: string, path: string[]): boolean {\n if (path.length === 0) {\n return root === leaf;\n }\n const [next, ...rest] = path;\n return proofMerklePath(root, MerkleTree.hash(leaf, next), rest);\n}\n","import { addHexPrefix, removeHexPrefix } from './encode';\n\nexport function isASCII(str: string) {\n // eslint-disable-next-line no-control-regex\n return /^[\\x00-\\x7F]*$/.test(str);\n}\n\n// function to check if string has less or equal 31 characters\nexport function isShortString(str: string) {\n return str.length <= 31;\n}\n\nexport function encodeShortString(str: string) {\n if (!isASCII(str)) throw new Error(`${str} is not an ASCII string`);\n if (!isShortString(str)) throw new Error(`${str} is too long`);\n return addHexPrefix(str.replace(/./g, (char) => char.charCodeAt(0).toString(16)));\n}\n\nexport function decodeShortString(str: string) {\n return removeHexPrefix(str).replace(/.{2}/g, (hex) => String.fromCharCode(parseInt(hex, 16)));\n}\n","import { TypedData } from './types';\n\n/**\n * Validates that `data` matches the EIP-712 JSON schema.\n *\n * @param {any} data\n * @return {boolean}\n */\nexport const validateTypedData = (data: unknown): data is TypedData => {\n const typedData = data as TypedData;\n\n // Validate that the data matches the EIP-712 JSON schema\n const valid = Boolean(typedData.types && typedData.primaryType && typedData.message);\n\n return valid;\n};\n","import {\n Abi,\n Call,\n DeclareSignerDetails,\n DeployAccountSignerDetails,\n InvocationsSignerDetails,\n KeyPair,\n Signature,\n} from '../types';\nimport { genKeyPair, getStarkKey, sign } from '../utils/ellipticCurve';\nimport {\n calculateDeclareTransactionHash,\n calculateDeployAccountTransactionHash,\n calculateTransactionHash,\n} from '../utils/hash';\nimport { fromCallsToExecuteCalldata } from '../utils/transaction';\nimport { TypedData, getMessageHash } from '../utils/typedData';\nimport { SignerInterface } from './interface';\n\nexport class Signer implements SignerInterface {\n protected keyPair: KeyPair;\n\n constructor(keyPair: KeyPair = genKeyPair()) {\n this.keyPair = keyPair;\n }\n\n public async getPubKey(): Promise<string> {\n return getStarkKey(this.keyPair);\n }\n\n public async signMessage(typedData: TypedData, accountAddress: string): Promise<Signature> {\n const msgHash = getMessageHash(typedData, accountAddress);\n return sign(this.keyPair, msgHash);\n }\n\n public async signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature> {\n if (abis && abis.length !== transactions.length) {\n throw new Error('ABI must be provided for each transaction or no transaction');\n }\n // now use abi to display decoded data somewhere, but as this signer is headless, we can't do that\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n\n const msgHash = calculateTransactionHash(\n transactionsDetail.walletAddress,\n transactionsDetail.version,\n calldata,\n transactionsDetail.maxFee,\n transactionsDetail.chainId,\n transactionsDetail.nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n\n public async signDeployAccountTransaction({\n classHash,\n contractAddress,\n constructorCalldata,\n addressSalt,\n maxFee,\n version,\n chainId,\n nonce,\n }: DeployAccountSignerDetails) {\n const msgHash = calculateDeployAccountTransactionHash(\n contractAddress,\n classHash,\n constructorCalldata,\n addressSalt,\n version,\n maxFee,\n chainId,\n nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n\n public async signDeclareTransaction(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n { classHash, senderAddress, chainId, maxFee, version, nonce }: DeclareSignerDetails\n ) {\n const msgHash = calculateDeclareTransactionHash(\n classHash,\n senderAddress,\n version,\n maxFee,\n chainId,\n nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n}\n","import { UDC } from '../constants';\nimport { InvokeTransactionReceiptResponse } from '../types/provider';\nimport { cleanHex } from './number';\n\n/**\n * Parse Transaction Receipt Event from UDC invoke transaction and\n * create DeployContractResponse compatibile response with adition of UDC Event data\n *\n * @param txReceipt\n * @returns DeployContractResponse | UDC Event Response data\n */\nexport function parseUDCEvent(txReceipt: InvokeTransactionReceiptResponse) {\n if (!txReceipt.events) {\n throw new Error('UDC emited event is empty');\n }\n const event = txReceipt.events.find(\n (it) => cleanHex(it.from_address) === cleanHex(UDC.ADDRESS)\n ) || {\n data: [],\n };\n return {\n transaction_hash: txReceipt.transaction_hash,\n contract_address: event.data[0],\n address: event.data[0],\n deployer: event.data[1],\n unique: event.data[2],\n classHash: event.data[3],\n calldata_len: event.data[4],\n calldata: event.data.slice(5, 5 + parseInt(event.data[4], 16)),\n salt: event.data[event.data.length - 1],\n };\n}\n","/* eslint-disable no-param-reassign */\nimport BN from 'bn.js';\n\nimport { StarknetChainId } from '../constants';\n\nconst basicAlphabet = 'abcdefghijklmnopqrstuvwxyz0123456789-';\nconst basicSizePlusOne = new BN(basicAlphabet.length + 1);\nconst bigAlphabet = '这来';\nconst basicAlphabetSize = new BN(basicAlphabet.length);\nconst bigAlphabetSize = new BN(bigAlphabet.length);\nconst bigAlphabetSizePlusOne = new BN(bigAlphabet.length + 1);\n\nfunction extractStars(str: string): [string, number] {\n let k = 0;\n while (str.endsWith(bigAlphabet[bigAlphabet.length - 1])) {\n str = str.substring(0, str.length - 1);\n k += 1;\n }\n return [str, k];\n}\n\nexport function useDecoded(encoded: BN[]): string {\n let decoded = '';\n\n encoded.forEach((subdomain) => {\n while (!subdomain.isZero()) {\n const code = subdomain.mod(basicSizePlusOne).toNumber();\n subdomain = subdomain.div(basicSizePlusOne);\n if (code === basicAlphabet.length) {\n const nextSubdomain = subdomain.div(bigAlphabetSizePlusOne);\n if (nextSubdomain.isZero()) {\n const code2 = subdomain.mod(bigAlphabetSizePlusOne).toNumber();\n subdomain = nextSubdomain;\n if (code2 === 0) decoded += basicAlphabet[0];\n else decoded += bigAlphabet[code2 - 1];\n } else {\n const code2 = subdomain.mod(bigAlphabetSize).toNumber();\n decoded += bigAlphabet[code2];\n subdomain = subdomain.div(bigAlphabetSize);\n }\n } else decoded += basicAlphabet[code];\n }\n\n const [str, k] = extractStars(decoded);\n if (k)\n decoded =\n str +\n (k % 2 === 0\n ? bigAlphabet[bigAlphabet.length - 1].repeat(k / 2 - 1) +\n bigAlphabet[0] +\n basicAlphabet[1]\n : bigAlphabet[bigAlphabet.length - 1].repeat((k - 1) / 2 + 1));\n decoded += '.';\n });\n return decoded.concat('stark');\n}\n\nexport function useEncoded(decoded: string): BN {\n let encoded = new BN(0);\n let multiplier = new BN(1);\n\n if (decoded.endsWith(bigAlphabet[0] + basicAlphabet[1])) {\n const [str, k] = extractStars(decoded.substring(0, decoded.length - 2));\n decoded = str + bigAlphabet[bigAlphabet.length - 1].repeat(2 * (k + 1));\n } else {\n const [str, k] = extractStars(decoded);\n if (k) decoded = str + bigAlphabet[bigAlphabet.length - 1].repeat(1 + 2 * (k - 1));\n }\n\n for (let i = 0; i < decoded.length; i += 1) {\n const char = decoded[i];\n const index = basicAlphabet.indexOf(char);\n const bnIndex = new BN(basicAlphabet.indexOf(char));\n\n if (index !== -1) {\n // add encoded + multiplier * index\n if (i === decoded.length - 1 && decoded[i] === basicAlphabet[0]) {\n encoded = encoded.add(multiplier.mul(basicAlphabetSize));\n multiplier = multiplier.mul(basicSizePlusOne);\n // add 0\n multiplier = multiplier.mul(basicSizePlusOne);\n } else {\n encoded = encoded.add(multiplier.mul(bnIndex));\n multiplier = multiplier.mul(basicSizePlusOne);\n }\n } else if (bigAlphabet.indexOf(char) !== -1) {\n // add encoded + multiplier * (basicAlphabetSize)\n encoded = encoded.add(multiplier.mul(basicAlphabetSize));\n multiplier = multiplier.mul(basicSizePlusOne);\n // add encoded + multiplier * index\n const newid = (i === decoded.length - 1 ? 1 : 0) + bigAlphabet.indexOf(char);\n encoded = encoded.add(multiplier.mul(new BN(newid)));\n multiplier = multiplier.mul(bigAlphabetSize);\n }\n }\n\n return encoded;\n}\n\nexport function getStarknetIdContract(chainId: StarknetChainId): string {\n const starknetIdMainnetContract =\n '0x6ac597f8116f886fa1c97a23fa4e08299975ecaf6b598873ca6792b9bbfb678';\n const starknetIdTestnetContract =\n '0x05cf267a0af6101667013fc6bd3f6c11116a14cda9b8c4b1198520d59f900b17';\n\n switch (chainId) {\n case StarknetChainId.MAINNET:\n return starknetIdMainnetContract;\n\n case StarknetChainId.TESTNET:\n return starknetIdTestnetContract;\n\n default:\n throw new Error('Starknet.id is not yet deployed on this network');\n }\n}\n","import { ProviderInterface } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport { SignerInterface } from '../signer';\nimport {\n Abi,\n AllowArray,\n Call,\n DeclareContractPayload,\n DeclareContractResponse,\n DeclareDeployContractPayload,\n DeclareDeployUDCResponse,\n DeployAccountContractPayload,\n DeployContractResponse,\n DeployContractUDCResponse,\n EstimateFeeAction,\n EstimateFeeDetails,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n InvocationsDetails,\n InvokeFunctionResponse,\n MultiDeployContractResponse,\n Signature,\n TransactionBulk,\n TransactionSimulation,\n UniversalDeployerContractPayload,\n} from '../types';\nimport { BigNumberish } from '../utils/number';\nimport { TypedData } from '../utils/typedData/types';\n\nexport abstract class AccountInterface extends ProviderInterface {\n public abstract address: string;\n\n public abstract signer: SignerInterface;\n\n /**\n * @deprecated Use estimateInvokeFee or estimateDeclareFee instead\n * Estimate Fee for executing an INVOKE transaction on starknet\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract estimateFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing an INVOKE transaction on starknet\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract estimateInvokeFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DECLARE transaction on starknet\n *\n * @param contractPayload the payload object containing:\n * - contract - the compiled contract to be declared\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n *\n * @returns response from estimate_fee\n */\n public abstract estimateDeclareFee(\n contractPayload: DeclareContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DEPLOY_ACCOUNT transaction on starknet\n *\n * @param contractPayload -\n * - contract - the compiled contract to be deployed\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n * @param estimateFeeDetails -\n * - optional blockIdentifier\n * - constant nonce = 0\n * @returns response from estimate_fee\n */\n public abstract estimateAccountDeployFee(\n contractPayload: DeployAccountContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a UDC DEPLOY transaction on starknet\n * This is different from the normal DEPLOY transaction as it goes through the Universal Deployer Contract (UDC)\n \n * @param deployContractPayload containing\n * - classHash: computed class hash of compiled contract\n * - salt: address salt\n * - unique: bool if true ensure unique salt\n * - calldata: constructor calldata\n * \n * @param transactionsDetail Invocation Details containing:\n * - optional nonce\n * - optional version\n * - optional maxFee\n */\n public abstract estimateDeployFee(\n deployContractPayload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n transactionsDetail?: InvocationsDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a list of transactions on starknet\n * Contract must be deployed for fee estimation to be possible\n *\n * @param transactions array of transaction object containing :\n * - type - the type of transaction : 'DECLARE' | 'DEPLOY' | 'INVOKE_FUNCTION' | 'DEPLOY_ACCOUNT'\n * - payload - the payload of the transaction\n *\n * @returns response from estimate_fee\n */\n public abstract estimateFeeBulk(\n transactions: TransactionBulk,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponseBulk>;\n\n /**\n * Invoke execute function in account contract\n *\n * @param transactions the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n public abstract execute(\n transactions: AllowArray<Call>,\n abis?: Abi[],\n transactionsDetail?: InvocationsDetails\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - contract: compiled contract code\n - classHash: computed class hash of compiled contract\n * @param transactionsDetail Invocation Details containing:\n - optional nonce\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declare(\n contractPayload: DeclareContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeclareContractResponse>;\n\n /**\n * Deploys a declared contract to starknet - using Universal Deployer Contract (UDC)\n * support multicall\n *\n * @param payload -\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details -\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - contract_address[]\n * - transaction_hash\n */\n public abstract deploy(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<MultiDeployContractResponse>;\n\n /**\n * Simplify deploy simulating old DeployContract with same response + UDC specific response\n * Internal wait for L2 transaction, support multicall\n *\n * @param payload -\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details -\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - contract_address\n * - transaction_hash\n * - address\n * - deployer\n * - unique\n * - classHash\n * - calldata_len\n * - calldata\n * - salt\n */\n public abstract deployContract(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<DeployContractUDCResponse>;\n\n /**\n * Declares and Deploy a given compiled contract (json) to starknet using UDC\n * Internal wait for L2 transaction, do not support multicall\n *\n * @param containing\n * - contract: compiled contract code\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - declare\n * - transaction_hash\n * - deploy\n * - contract_address\n * - transaction_hash\n * - address\n * - deployer\n * - unique\n * - classHash\n * - calldata_len\n * - calldata\n * - salt\n */\n public abstract declareDeploy(\n payload: DeclareDeployContractPayload,\n details?: InvocationsDetails | undefined\n ): Promise<DeclareDeployUDCResponse>;\n\n /**\n * Deploy the account on Starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - classHash: computed class hash of compiled contract\n - optional constructor calldata\n - optional address salt \n - optional contractAddress\n * @param transactionsDetail Invocation Details containing:\n - constant nonce = 0\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccount(\n contractPayload: DeployAccountContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeployContractResponse>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData): Promise<Signature>;\n\n /**\n * Hash a JSON object with pederson hash and return the hash\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be hashed\n * @returns the hash of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract hashMessage(typedData: TypedData): Promise<string>;\n\n /**\n * Verify a signature of a JSON object\n *\n * @param typedData - JSON object to be verified\n * @param signature - signature of the JSON object\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the JSON object is not a valid JSON or the signature is not a valid signature\n */\n public abstract verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean>;\n\n /**\n * Verify a signature of a given hash\n * @warning This method is not recommended, use verifyMessage instead\n *\n * @param hash - hash to be verified\n * @param signature - signature of the hash\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the signature is not a valid signature\n */\n public abstract verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean>;\n\n /**\n * Gets the nonce of the account with respect to a specific block\n *\n * @param {BlockIdentifier} blockIdentifier - optional blockIdentifier. Defaults to 'pending'\n * @returns nonce of the account\n */\n public abstract getNonce(blockIdentifier?: BlockIdentifier): Promise<BigNumberish>;\n\n /**\n * Gets Suggested Max Fee based on the transaction type\n *\n * @param {EstimateFeeAction} estimateFeeAction\n * @param {EstimateFeeDetails} details\n * @returns suggestedMaxFee\n */\n public abstract getSuggestedMaxFee(\n estimateFeeAction: EstimateFeeAction,\n details: EstimateFeeDetails\n ): Promise<BigNumberish>;\n\n /**\n * Simulates the transaction and returns the transaction trace and estimated fee.\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract simulateTransaction(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<TransactionSimulation>;\n}\n","import { addHexPrefix } from './encode';\nimport { BigNumberish, toBN } from './number';\n\n// Represents an integer in the range [0, 2^256).\nexport interface Uint256 {\n // The low 128 bits of the value.\n low: BigNumberish;\n // The high 128 bits of the value.\n high: BigNumberish;\n}\n\n// function to convert Uint256 to BN\nexport function uint256ToBN(uint256: Uint256) {\n return toBN(uint256.high).shln(128).add(toBN(uint256.low));\n}\n\nexport const UINT_128_MAX = toBN(1).shln(128).sub(toBN(1));\nexport const UINT_256_MAX = toBN(1).shln(256).sub(toBN(1));\n// function to check if BN is smaller or equal 2**256-1\nexport function isUint256(bn: BigNumberish): boolean {\n return toBN(bn).lte(UINT_256_MAX);\n}\n\n// function to convert BN to Uint256\nexport function bnToUint256(bignumber: BigNumberish): Uint256 {\n const bn = toBN(bignumber);\n if (!isUint256(bn)) throw new Error('Number is too large');\n return {\n low: addHexPrefix(bn.maskn(128).toString(16)),\n high: addHexPrefix(bn.shrn(128).toString(16)),\n };\n}\n","/* eslint-disable no-bitwise */\nimport { arrayify } from '@ethersproject/bytes';\n\nimport { MASK_251, ZERO } from '../constants';\nimport { addHexPrefix, removeHexPrefix } from './encode';\nimport { keccakBn } from './hash';\nimport { BigNumberish, assertInRange, toBN, toHex } from './number';\n\nexport function addAddressPadding(address: BigNumberish): string {\n return addHexPrefix(removeHexPrefix(toHex(toBN(address))).padStart(64, '0'));\n}\n\nexport function validateAndParseAddress(address: BigNumberish): string {\n assertInRange(address, ZERO, MASK_251, 'Starknet Address');\n\n const result = addAddressPadding(address);\n\n if (!result.match(/^(0x)?[0-9a-fA-F]{64}$/)) {\n throw new Error('Invalid Address Format');\n }\n\n return result;\n}\n\n// from https://github.com/ethers-io/ethers.js/blob/fc1e006575d59792fa97b4efb9ea2f8cca1944cf/packages/address/src.ts/index.ts#L12\nexport function getChecksumAddress(address: BigNumberish): string {\n const chars = removeHexPrefix(validateAndParseAddress(address)).toLowerCase().split('');\n const hashed = arrayify(keccakBn(address), { hexPad: 'left' }); // in case the hash is 251 bits (63 chars) we need to pad it to 64 chars without changing the number value (\"left\")\n\n for (let i = 0; i < chars.length; i += 2) {\n if (hashed[i >> 1] >> 4 >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n\n return addHexPrefix(chars.join(''));\n}\n\nexport function validateChecksumAddress(address: string): boolean {\n return getChecksumAddress(address) === address;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,IAAAA,8BAAmB;;;ACDnB,8BAA4B;AAE5B,IAAO,wBAAS,OAAO,WAAW,eAAe,OAAO,SACrD,OAAO,WAAW,eAAe,OAAO,SACzC,wBAAAC;;;ACJF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,oBAA0B;AAC1B,mBAA2B;AAC3B,IAAAC,8BAAmB;;;ACJnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAe;AACf,iCAAmB;;;ACDnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,IAAM,aAAa,OAAO,WAAW;AAE5C,IAAM,cAAc;AAEb,SAAS,oBAAoB,OAA4B;AAC9D,SAAO,IAAI,WAAW,KAAK,EAAE,OAAO,CAAC,MAAM,SAAS,OAAO,OAAO,aAAa,IAAI,GAAG,EAAE;AAC1F;AAEO,SAAS,cAAc,GAAwB;AACpD,SAAO,aAAa,KAAK,oBAAoB,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,SAAS,QAAQ;AACrF;AAEO,SAAS,QAAQ,QAAoB;AAC1C,SAAO,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AACxE;AAOO,SAAS,gBAAgB,KAAqB;AACnD,SAAO,IAAI,QAAQ,OAAO,EAAE;AAC9B;AAEO,SAAS,aAAa,KAAqB;AAChD,SAAO,KAAK,gBAAgB,GAAG;AACjC;AAEA,SAAS,UAAU,KAAa,QAAgB,MAAe,UAAU,aAAqB;AAC5F,QAAM,OAAO,SAAS,IAAI;AAC1B,MAAI,SAAS;AACb,MAAI,OAAO,GAAG;AACZ,UAAM,MAAM,QAAQ,OAAO,IAAI;AAC/B,aAAS,OAAO,MAAM,MAAM,MAAM;AAAA,EACpC;AACA,SAAO;AACT;AAEO,SAAS,QAAQ,KAAa,QAAgB,UAAU,aAAqB;AAClF,SAAO,UAAU,KAAK,QAAQ,MAAM,OAAO;AAC7C;AAEO,SAAS,eAAe,QAAgB,WAAW,GAAW;AACnE,QAAM,YAAY,SAAS;AAC3B,SAAO,aAAc,SAAS,aAAa,WAAY,WAAW,WAAW;AAC/E;AAEO,SAAS,cAAc,KAAa,WAAW,GAAG,UAAU,aAAqB;AACtF,SAAO,QAAQ,KAAK,eAAe,IAAI,QAAQ,QAAQ,GAAG,OAAO;AACnE;AAEO,SAAS,YAAY,KAAqB;AAC/C,QAAM,gBAAgB,GAAG;AACzB,QAAM,cAAc,KAAK,CAAC;AAC1B,MAAI,KAAK;AACP,UAAM,aAAa,GAAG;AAAA,EACxB;AACA,SAAO;AACT;AAGO,SAAS,YAAY,KAAyB;AACnD,SAAO,IAAI,YAAY,EAAE,OAAO,GAAG;AACrC;;;AD1DO,SAAS,MAAM,KAAsB;AAC1C,SAAO,iBAAiB,KAAK,GAAG;AAClC;AAEO,SAAS,KAAK,QAAsB,MAAuB;AAChE,MAAI,OAAO,WAAW,UAAU;AAE9B,aAAS,OAAO,YAAY;AAAA,EAC9B;AACA,MAAI,OAAO,WAAW,YAAY,MAAM,MAAM,KAAK,CAAC;AAClD,WAAO,IAAI,UAAAC,QAAG,gBAAgB,MAAM,GAAG,KAAK;AAC9C,SAAO,IAAI,UAAAA,QAAG,QAAQ,IAAI;AAC5B;AAEO,SAAS,MAAM,QAAoB;AACxC,SAAO,aAAa,OAAO,SAAS,KAAK,CAAC;AAC5C;AAEO,SAAS,mBAAmB,KAAqB;AACtD,SAAO,KAAK,KAAK,IAAI,QAAQ,OAAO,EAAE,GAAG,EAAE,SAAS;AACtD;AAEO,SAAS,OAAO,KAA2B;AAChD,MAAI,UAAAA,QAAG,KAAK,GAAG,GAAG;AAChB,WAAO,IAAI,SAAS;AAAA,EACtB;AACA,SAAO,KAAK,GAAG,EAAE,SAAS;AAC5B;AAMO,IAAM,WAAW,CAAC,QAAgB,IAAI,YAAY,EAAE,QAAQ,WAAW,IAAI;AAQ3E,SAAS,cACd,OACA,YACA,YACA,YAAY,IACZ;AACA,QAAM,gBAAgB,cAAc,KAAK,mBAAmB,WAAW;AACvE,QAAM,UAAU,KAAK,KAAK;AAC1B,iCAAAC;AAAA,IACE,QAAQ,IAAI,KAAK,UAAU,CAAC,KAAK,QAAQ,GAAG,KAAK,UAAU,CAAC;AAAA,IAC5D,yBAAyB;AAAA,EAC3B;AACF;AAEO,SAAS,sCAAsC,aAAuC;AAC3F,SAAO,YAAY,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;AACpD;AAEO,SAAS,0CAA0C,aAAuC;AAC/F,SAAO,YAAY,IAAI,CAAC,MAAM,MAAM,KAAK,CAAC,CAAC,CAAC;AAC9C;AAEO,IAAM,sBAAsB,CAAC,UAAkB,QAAQ,KAAK,KAAK;AACjE,IAAM,cAAc,CAAC,UAAkB,MAAM,KAAK,KAAK,CAAC;AAExD,SAAS,iBAAiB,OAAe;AAC9C,MAAI,MAAM,KAAK,GAAG;AAChB,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACA,MAAI,oBAAoB,KAAK,GAAG;AAC9B,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,GAAG,oDAAoD;AACzE;AAEO,SAAS,aAAa,OAAe;AAC1C,MAAI,MAAM,KAAK,GAAG;AAChB,WAAO;AAAA,EACT;AACA,MAAI,oBAAoB,KAAK,GAAG;AAC9B,WAAO,YAAY,KAAK;AAAA,EAC1B;AACA,QAAM,IAAI,MAAM,GAAG,oDAAoD;AACzE;AAEO,SAAS,kBAAkB,OAAsB;AACtD,SAAO,MAAM,IAAI,CAAC,OAAO,aAAa,EAAE,CAAC;AAC3C;AAEO,IAAM,cAAc,CAAC,WAA4B,CAAC,OAAO,SAAS;;;AD7FlE,IAAM,OAAO,KAAK,CAAC;AACnB,IAAM,MAAM,KAAK,CAAC;AAClB,IAAM,MAAM,KAAK,CAAC;AAClB,IAAM,WAAW,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG;AAC3C,IAAM,WAAW,IAAI,IAAI,KAAK,GAAG,CAAC;AAElC,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,cAAW;AAHD,SAAAA;AAAA,GAAA;AAKL,IAAK,wBAAL,kBAAKC,2BAAL;AACL,EAAAA,uBAAA,aAAU;AACV,EAAAA,uBAAA,YAAS;AACT,EAAAA,uBAAA,oBAAiB;AACjB,EAAAA,uBAAA,YAAS;AACT,EAAAA,uBAAA,gBAAa;AALH,SAAAA;AAAA,GAAA;AAQL,IAAM,MAAM;AAAA,EACjB,SAAS;AAAA,EACT,YAAY;AACd;AAMO,IAAM,cAAc;AACpB,IAAM,YAAY;AAClB,IAAM,aAAa;AACnB,IAAM,WAAW;AACjB,IAAM,QAAQ;AACd,IAAM,OAAO;AACb,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AAAA,EAC7B;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EAC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","names":["import_minimalistic_assert","isomorphicFetch","import_minimalistic_assert","BN","assert","StarknetChainId","TransactionHashPrefix","import_minimalistic_assert","elliptic","hashJS","assert","assert","Json","import_bn","import_url_join","urljoin","defaultOptions","urljoin","import_bn","import_minimalistic_assert","assert","BN","assert","import_minimalistic_assert","assert","import_bn","import_bn","BN"]}
|