@dorafactory/maci-sdk 0.1.3-pre.21 → 0.1.3-pre.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +5 -2
- package/dist/index.js +965 -44
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +954 -52
- package/dist/index.mjs.map +1 -1
- package/dist/libs/account/crypto.d.ts +1 -0
- package/dist/libs/account/index.d.ts +35 -0
- package/dist/libs/account/keypair.d.ts +21 -0
- package/dist/libs/account/util.d.ts +25 -0
- package/dist/libs/crypto/adapter.d.ts +6 -0
- package/dist/libs/crypto/curve.d.ts +3 -0
- package/dist/libs/crypto/index.d.ts +3 -0
- package/dist/libs/crypto/keys.d.ts +8 -1
- package/dist/libs/crypto/rerandomize.d.ts +12 -0
- package/dist/libs/crypto/sign.d.ts +1 -1
- package/dist/libs/cryptography/index.d.ts +0 -0
- package/dist/libs/cryptography/keypair.d.ts +30 -0
- package/dist/libs/cryptography/mnemonics.d.ts +27 -0
- package/dist/libs/cryptography/publickey.d.ts +23 -0
- package/dist/libs/cryptography/signature-scheme.d.ts +1 -0
- package/dist/libs/keypairs/eddsa-poseidon/index.d.ts +2 -0
- package/dist/libs/keypairs/eddsa-poseidon/keypair.d.ts +187 -0
- package/dist/libs/keypairs/eddsa-poseidon/publickey.d.ts +48 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/utils/account.d.ts +2 -0
- package/dist/utils/base64.d.ts +6 -0
- package/dist/utils/bech32.d.ts +2 -0
- package/dist/utils/decode-address.d.ts +10 -0
- package/dist/utils/fetch.d.ts +1 -0
- package/dist/utils/hex.d.ts +6 -0
- package/dist/utils/index.d.ts +5 -24
- package/dist/utils/validate-address.d.ts +24 -0
- package/dist/voter.d.ts +161 -0
- package/package.json +13 -61
- package/src/index.ts +7 -13
- package/src/libs/account/crypto.ts +7 -0
- package/src/libs/account/index.ts +70 -0
- package/src/libs/account/keypair.ts +29 -0
- package/src/libs/account/util.ts +55 -0
- package/src/libs/crypto/adapter.ts +41 -0
- package/src/libs/crypto/babyjub.ts +4 -7
- package/src/libs/crypto/constants.ts +2 -5
- package/src/libs/crypto/curve.ts +55 -0
- package/src/libs/crypto/hashing.ts +4 -6
- package/src/libs/crypto/index.ts +3 -0
- package/src/libs/crypto/keys.ts +15 -48
- package/src/libs/crypto/rerandomize.ts +77 -0
- package/src/libs/crypto/sign.ts +8 -17
- package/src/libs/crypto/tree.ts +1 -3
- package/src/libs/cryptography/index.ts +0 -0
- package/src/libs/cryptography/keypair.ts +44 -0
- package/src/libs/cryptography/mnemonics.ts +47 -0
- package/src/libs/cryptography/publickey.ts +44 -0
- package/src/libs/cryptography/signature-scheme.ts +1 -0
- package/src/libs/keypairs/eddsa-poseidon/index.ts +6 -0
- package/src/libs/keypairs/eddsa-poseidon/keypair.ts +452 -0
- package/src/libs/keypairs/eddsa-poseidon/publickey.ts +149 -0
- package/src/types/index.ts +16 -0
- package/src/types/lib.d.ts +7 -0
- package/src/utils/account.ts +5 -0
- package/src/utils/base64.ts +28 -0
- package/src/utils/bech32.ts +29 -0
- package/src/utils/decode-address.ts +35 -0
- package/src/utils/fetch.ts +28 -0
- package/src/utils/hex.ts +23 -0
- package/src/utils/index.ts +16 -79
- package/src/utils/validate-address.ts +82 -0
- package/src/voter.ts +430 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/libs/errors/index.ts","../src/libs/http/http.ts","../src/libs/errors/types.ts","../src/libs/query/account.ts","../src/libs/const.ts","../src/libs/query/circuit.ts","../src/utils/index.ts","../src/libs/crypto/keys.ts","../src/libs/crypto/bigintUtils.ts","../src/libs/crypto/hashing.ts","../src/libs/crypto/constants.ts","../src/libs/crypto/tree.ts","../src/libs/crypto/babyjub.ts","../src/libs/crypto/sign.ts","../src/libs/query/operator.ts","../src/libs/query/round.ts","../src/libs/query/transaction.ts","../src/libs/query/proof.ts","../src/libs/query/event.ts","../src/libs/indexer/indexer.ts","../src/libs/contract/config.ts","../src/libs/contract/ts/Maci.client.ts","../src/libs/contract/ts/AMaci.client.ts","../src/libs/contract/ts/Registry.client.ts","../src/libs/contract/ts/OracleMaci.client.ts","../src/libs/contract/ts/Saas.client.ts","../src/libs/contract/ts/ApiMaci.client.ts","../src/libs/contract/ts/ApiSaas.client.ts","../src/types/index.ts","../src/libs/contract/vars.ts","../src/libs/contract/utils.ts","../src/libs/contract/contract.ts","../src/libs/oracle-certificate/oracle-certificate.ts","../src/libs/maci/maci.ts","../src/maci.ts"],"sourcesContent":["// Core\nexport { MaciClient } from './maci';\nexport { Http } from './libs/http';\n\n// Query Types\nexport {\n Round,\n UserAccount,\n Circuit,\n Operator,\n Proof,\n Transaction,\n} from './libs/query';\n\n// Crypto\nexport * from './libs/crypto';\n\n// Types\nexport * from './types';\nexport type * from './types';\n\n// Constants\nexport { circuits, getDefaultParams, type NetworkConfig } from './libs/const';\n\n// Utils\nexport {\n stringizing,\n destringizing,\n bigInt2Buffer,\n} from './libs/crypto/bigintUtils';\nexport { isValidAddress } from './utils';\nexport { getAMaciRoundCircuitFee } from './libs/contract/utils';\n","export class BaseError extends Error {\n constructor(\n message: string,\n public code: number,\n public type: string\n ) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\nexport class HttpError extends BaseError {\n constructor(message: string, code: number) {\n super(message, code, 'ERROR_HTTP');\n }\n}\n\nexport class GraphQLError extends BaseError {\n constructor(message: string) {\n super(message, 400, 'ERROR_GRAPHQL');\n }\n}\n\nexport class ValidationError extends BaseError {\n constructor(message: string) {\n super(message, 400, 'ERROR_VALIDATION');\n }\n}\n\nexport class NotFoundError extends BaseError {\n constructor(message: string) {\n super(message, 404, 'ERROR_NOT_FOUND');\n }\n}\n\nexport class ParseError extends BaseError {\n constructor(message: string) {\n super(message, 500, 'ERROR_PARSE');\n }\n}\n\nexport type ErrorType =\n | BaseError\n | Error\n | HttpError\n | NotFoundError\n | ValidationError\n | ParseError\n | GraphQLError;\n\nexport function handleError(error: ErrorType) {\n if (!(error instanceof Error)) {\n return {\n code: 500,\n error: {\n message: 'Unknown error occurred',\n type: `ERROR_UNKNOWN`,\n },\n };\n }\n\n switch (true) {\n case error instanceof HttpError:\n return {\n code: (error as HttpError).code,\n error: {\n message: error.message,\n type: 'ERROR_HTTP',\n },\n };\n\n case error instanceof GraphQLError:\n return {\n code: 400,\n error: {\n message: error.message,\n type: 'ERROR_GRAPHQL',\n },\n };\n\n case error instanceof ValidationError:\n return {\n code: 400,\n error: {\n message: error.message,\n type: 'ERROR_VALIDATION',\n },\n };\n\n case error instanceof NotFoundError:\n return {\n code: 404,\n error: {\n message: error.message,\n type: 'ERROR_NOT_FOUND',\n },\n };\n\n case error instanceof ParseError:\n return {\n code: 500,\n error: {\n message: error.message,\n type: 'ERROR_PARSE',\n },\n };\n\n case error instanceof BaseError:\n return {\n code: (error as BaseError).code,\n error: {\n message: error.message,\n type: (error as BaseError).type,\n },\n };\n\n default:\n return {\n code: 500,\n error: {\n message: error.message || 'Internal server error',\n type: 'ERROR_UNKNOWN',\n },\n };\n }\n}\n","import { BaseError, HttpError, GraphQLError, ParseError } from '../errors';\n\nexport type FetchOptions = RequestInit & {\n next?: {\n revalidate?: boolean | number;\n };\n};\n\nexport class Http {\n private apiEndpoint: string;\n private restEndpoint: string;\n private defaultOptions?: FetchOptions;\n\n constructor(\n apiEndpoint: string,\n restEndpoint: string,\n private customFetch?: typeof fetch,\n defaultOptions?: FetchOptions\n ) {\n this.apiEndpoint = apiEndpoint;\n this.restEndpoint = restEndpoint;\n this.defaultOptions = defaultOptions;\n }\n\n private getFetch() {\n return this.customFetch || fetch;\n }\n\n async fetch(url: string, options?: any): Promise<Response> {\n try {\n const fetchFn = this.getFetch();\n const response = await fetchFn(url, {\n ...this.defaultOptions,\n ...options,\n });\n\n if (!response.ok) {\n throw new HttpError(\n `HTTP error! status: ${response.status}`,\n response.status\n );\n }\n\n return response;\n } catch (error) {\n if (error instanceof HttpError) {\n throw error;\n }\n throw new HttpError(`Failed to fetch: ${(error as Error).message}`, 500);\n }\n }\n\n async fetchGraphql<T>(\n query: string,\n after: string,\n limit: number | null = 10\n ): Promise<T> {\n try {\n const isFirstPage = after === 'first';\n const fetchFn = this.getFetch();\n\n const response = await fetchFn(this.apiEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify({\n query,\n variables: { limit, after: isFirstPage ? undefined : after },\n }),\n ...this.defaultOptions,\n });\n\n if (!response.ok) {\n const errorData = await response.json();\n\n if (errorData.errors?.[0]?.message?.includes('Syntax Error')) {\n throw new GraphQLError(\n `GraphQL syntax error: ${errorData.errors[0].message}`\n );\n }\n\n if (errorData.errors?.length > 0) {\n throw new GraphQLError(\n errorData.errors[0].message || 'Unknown GraphQL error'\n );\n }\n\n throw new HttpError(\n `HTTP error: ${JSON.stringify(errorData)}`,\n response.status\n );\n }\n\n const data = await response.json();\n\n if (data.errors) {\n throw new GraphQLError(\n data.errors[0]?.message || 'GraphQL query failed'\n );\n }\n\n return data;\n } catch (error) {\n if (error instanceof BaseError) {\n throw error;\n }\n if (error instanceof SyntaxError) {\n throw new ParseError('Failed to parse JSON response');\n }\n throw new HttpError(\n `Failed to fetch GraphQL: ${(error as Error).message}`,\n 500\n );\n }\n }\n\n async fetchRest(path: string, options?: any): Promise<any> {\n try {\n const fetchFn = this.getFetch();\n const response = await fetchFn(`${this.restEndpoint}${path}`, {\n ...this.defaultOptions,\n ...options,\n });\n\n if (!response.ok) {\n throw new HttpError(\n `HTTP error! status: ${response.status}`,\n response.status\n );\n }\n\n try {\n return await response.json();\n } catch (error) {\n throw new ParseError('Failed to parse JSON response');\n }\n } catch (error) {\n if (error instanceof BaseError) {\n throw error;\n }\n throw new HttpError(\n `Failed to fetch REST: ${(error as Error).message}`,\n 500\n );\n }\n }\n\n async fetchAllGraphqlPages<T>(query: string, variables: any): Promise<T[]> {\n let hasNextPage = true;\n let offset = 0;\n const limit = 100; // Adjust the limit as needed\n const allData: T[] = [];\n\n while (hasNextPage) {\n const response = await this.fetch(this.apiEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify({\n query,\n variables: { ...variables, limit, offset },\n }),\n }).then((res) => res.json());\n\n const key = Object.keys(response.data)[0];\n\n const { nodes, pageInfo } = response.data[key];\n allData.push(...nodes);\n hasNextPage = pageInfo.hasNextPage;\n offset += limit;\n }\n\n return allData;\n }\n}\n","export const ERROR = {\n ERROR_ADDRESS_NOT_FOUND: 'ERROR_ADDRESS_NOT_FOUND',\n ERROR_CIRCUIT_NOT_FOUND: 'ERROR_CIRCUIT_NOT_FOUND',\n ERROR_OPERATOR_INVALID_ADDRESS: 'ERROR_OPERATOR_INVALID_ADDRESS',\n ERROR_OPERATOR_NOT_FOUND: 'ERROR_OPERATOR_NOT_FOUND',\n ERROR_OPERATOR_DELAY_HISTORY_NOT_FOUND:\n 'ERROR_OPERATOR_DELAY_HISTORY_NOT_FOUND',\n ERROR_QUERY_MISS_RATE_FAILED: 'ERROR_QUERY_MISS_RATE_FAILED',\n ERROR_OPERATORS_NOT_FOUND: 'ERROR_OPERATORS_NOT_FOUND',\n ERROR_PROOF_NOT_FOUND: 'ERROR_PROOF_NOT_FOUND',\n ERROR_ROUND_INVALID_ADDRESS: 'ERROR_ROUND_INVALID_ADDRESS',\n ERROR_ROUND_INVALID_STATUS: 'ERROR_ROUND_INVALID_STATUS',\n ERROR_ROUND_NOT_FOUND: 'ERROR_ROUND_NOT_FOUND',\n ERROR_ROUNDS_NOT_FOUND: 'ERROR_ROUNDS_NOT_FOUND',\n ERROR_TRANSACTION_NOT_FOUND: 'ERROR_TRANSACTION_NOT_FOUND',\n ERROR_TRANSACTIONS_NOT_FOUND: 'ERROR_TRANSACTIONS_NOT_FOUND',\n ERROR_SIGN_UP_EVENTS_NOT_FOUND: 'ERROR_SIGN_UP_EVENTS_NOT_FOUND',\n ERROR_INVALID_FIELDS: 'ERROR_INVALID_FIELDS',\n ERROR_CLAIM_INFOS_NOT_FOUND: 'ERROR_CLAIM_INFOS_NOT_FOUND',\n} as const;\n","import { Http } from '../http';\nimport { BalanceResponse } from '../../types';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class UserAccount {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async balanceOf(address: string): Promise<BalanceResponse> {\n try {\n const path = `/cosmos/bank/v1beta1/balances/${address}/by_denom?denom=peaka`;\n const data = await this.http.fetchRest(path);\n\n if (data['code'] === undefined) {\n const response: BalanceResponse = {\n code: 200,\n data: {\n balance: data['balance']['amount'],\n },\n };\n return response;\n } else {\n return {\n code: 404,\n error: {\n message: 'Address not found',\n type: ERROR.ERROR_ADDRESS_NOT_FOUND,\n },\n };\n }\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import type { CircuitType } from '../types';\n\nexport const circuits: Record<string, CircuitType> = {\n 'maci-1p1v': {\n maciType: 'MACI',\n circuitType: '1p1v',\n displayName: 'MACI-1p1v',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/maci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n 'maci-qv': {\n maciType: 'MACI',\n circuitType: 'QV',\n displayName: 'MACI-QV',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/maci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n 'amaci-1p1v': {\n maciType: 'aMACI',\n circuitType: '1p1v',\n displayName: 'aMACI-1p1v',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/amaci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n 'amaci-qv': {\n maciType: 'aMACI',\n circuitType: 'QV',\n displayName: 'aMACI-QV',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/amaci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n};\n\nexport const validator_operator_set = {\n doravaloper12yk434ut3un4wx0rult2aww89rsrel8nhmp387: {\n operator_address: '',\n account_address: 'dora12yk434ut3un4wx0rult2aww89rsrel8nydy83p',\n allocation: '22571615985356796592128',\n allocation_dora: 22571.615985356795,\n moniker: '𝐥𝐞𝐬𝐧𝐢𝐤 | 𝐔𝐓𝐒𝐀',\n program_voting_power: 0.06432895760166438,\n tokens: '200731587709257889972292',\n },\n doravaloper15frh0nn3v4yp3vv6sk4pn6jg9l8rt82f7uqfk5: {\n operator_address: '',\n account_address: 'dora15frh0nn3v4yp3vv6sk4pn6jg9l8rt82fd29lqt',\n allocation: '33745159209325474873344',\n allocation_dora: 33745.15920932547,\n moniker: 'NomadValidator',\n program_voting_power: 0.09617348254756773,\n tokens: '300099000000000000000000',\n },\n doravaloper1ddewp74vd2w8jhth2p0uazmc8ajgtcuf3ntqgn: {\n operator_address: '',\n account_address: 'dora1ddewp74vd2w8jhth2p0uazmc8ajgtcufz9wk7v',\n allocation: '40789397021635754590208',\n allocation_dora: 40789.397021635756,\n moniker: 'polkachu.com',\n program_voting_power: 0.11624951413777938,\n tokens: '362744095556470434789338',\n },\n doravaloper1gh8j89jtc2vx6d3y4ehllcdlvluwa49w6xmjsm: {\n operator_address: '',\n account_address: 'dora1gh8j89jtc2vx6d3y4ehllcdlvluwa49wfs7yxy',\n allocation: '33743029941764137943040',\n allocation_dora: 33743.029941764136,\n moniker: 'ITRocket',\n program_voting_power: 0.09616741414897524,\n tokens: '300080064215405665352721',\n },\n doravaloper1j8ru7p8zctup6grfwuga6ndrjj7v88wzn407x7: {\n operator_address: '',\n account_address: 'dora1j8ru7p8zctup6grfwuga6ndrjj7v88wzqr2gsp',\n allocation: '22646525272055477174272',\n allocation_dora: 22646.525272055478,\n moniker: 'StakeUs',\n program_voting_power: 0.06454244857772638,\n tokens: '201397763319500000000000',\n },\n doravaloper1l5zz0kkjt2n7nllsrymy96mc2v2gehda0zc85s: {\n operator_address: '',\n account_address: 'dora1l5zz0kkjt2n7nllsrymy96mc2v2gehdau5a3z0',\n allocation: '22622846742220005965824',\n allocation_dora: 22622.846742220005,\n moniker: 'BlackNodes',\n program_voting_power: 0.06447496492290769,\n tokens: '201187187838702364379121',\n },\n doravaloper1m9v3txhhtadjxpv09gwjhhs344qsxgfscwxjkg: {\n operator_address: '',\n account_address: 'dora1m9v3txhhtadjxpv09gwjhhs344qsxgfstcryqh',\n allocation: '22549006983854435598336',\n allocation_dora: 22549.006983854437,\n moniker: '👋 79anvi 🍀',\n program_voting_power: 0.06426452209558432,\n tokens: '200530523648490887200824',\n },\n doravaloper1tu8006g60t62zwgwf5knkaujv0uzhp2a6wh94h: {\n operator_address: '',\n account_address: 'dora1tu8006g60t62zwgwf5knkaujv0uzhp2afcjnrg',\n allocation: '39369183740744815345664',\n allocation_dora: 39369.18374074482,\n moniker: 'Citadel.one',\n program_voting_power: 0.11220191559671686,\n tokens: '350114000000000000000000',\n },\n doravaloper1x5z0tkafrgyeuqkrwfjr933vghjxchqnqlhcdw: {\n operator_address: '',\n account_address: 'dora1x5z0tkafrgyeuqkrwfjr933vghjxchqnnfjwm3',\n allocation: '22611521290904268701696',\n allocation_dora: 22611.521290904268,\n moniker: '1ce',\n program_voting_power: 0.064442687460896,\n tokens: '201086469492900000000000',\n },\n doravaloper1z6kfew2nhuh02szc2hdecw4fqey2d32auucvux: {\n operator_address: '',\n account_address: 'dora1z6kfew2nhuh02szc2hdecw4fqey2d32a02a62e',\n allocation: '45246951843662957379584',\n allocation_dora: 45246.95184366296,\n moniker: 'Nodes.Guru',\n program_voting_power: 0.12895351616135226,\n tokens: '402385566389000000000006',\n },\n doravaloper1zzne8ufazycklx4j6mgc987t8ykd6wxu63223v: {\n operator_address: '',\n account_address: 'dora1zzne8ufazycklx4j6mgc987t8ykd6wxu63223v',\n allocation: '44982761968475888943104',\n allocation_dora: 44982.76196847589,\n moniker: 'ZKV',\n program_voting_power: 0.12820057674882976,\n tokens: '400036100000000000000000',\n },\n};\n\nexport interface NetworkConfig {\n network: string;\n chainId: string;\n rpcEndpoint: string;\n restEndpoint: string;\n apiEndpoint: string;\n certificateApiEndpoint: string;\n registryAddress: string;\n saasAddress: string;\n apiSaasAddress: string;\n maciCodeId: number;\n oracleCodeId: number;\n oracleWhitelistBackendPubkey: string;\n oracleFeegrantOperator: string;\n oracleCodeIds: string[];\n}\n\nexport function getDefaultParams(\n network: 'mainnet' | 'testnet' = 'mainnet'\n): NetworkConfig {\n switch (network) {\n case 'mainnet':\n return {\n network: 'mainnet',\n chainId: 'vota-ash',\n rpcEndpoint: 'https://vota-rpc.dorafactory.org',\n restEndpoint: 'https://vota-rest.dorafactory.org',\n apiEndpoint: 'https://vota-api.dorafactory.org',\n certificateApiEndpoint:\n 'https://vota-certificate-api.dorafactory.org/api/v1',\n registryAddress:\n 'dora1smg5qp5trjdkcekdjssqpjehdjf6n4cjss0clyvqcud3t3u3948s8rmgg4',\n saasAddress:\n 'dora1ksxvvve2nsw5uyvg7y6lnnxcqxadjepc78z0qa8enm5zhayxaqgqpsewf8',\n apiSaasAddress:\n 'dora1ksxvvve2nsw5uyvg7y6lnnxcqxadjepc78z0qa8enm5zhayxaqgqpsewf8',\n maciCodeId: 106,\n // oracleCodeId: 116,// 9-4-3-625\n oracleCodeId: 119, // 6-3-3-125\n oracleWhitelistBackendPubkey:\n 'A61YtCv2ibMZmDeM02nEElil8wlHx1tLKogBk5dPgf/Q',\n oracleFeegrantOperator: 'dora16s9tljk8dy9ae335yvyzlm8gvkypx9228q8pq8',\n oracleCodeIds: ['101', '116', '117', '119'],\n };\n case 'testnet':\n return {\n network: 'testnet',\n chainId: 'vota-testnet',\n rpcEndpoint: 'https://vota-testnet-rpc.dorafactory.org',\n restEndpoint: 'https://vota-testnet-rest.dorafactory.org',\n apiEndpoint: 'https://vota-testnet-api.dorafactory.org',\n certificateApiEndpoint:\n 'https://vota-testnet-certificate-api.dorafactory.org/api/v1',\n registryAddress:\n 'dora13c8aecstyxrhax9znvvh5zey89edrmd2k5va57pxvpe3fxtfsfeqlhsjnd',\n saasAddress:\n 'dora1dgnszrwnwxgr5djprrr6w4q45z8s3ghsew869g6tlp4ruqah39nqnemjya',\n apiSaasAddress:\n 'dora16xj2yrh3snq8f2qvma9uzjd5m2qgvzaqjcqmeuweh73t29c4rhusxm9hq6',\n maciCodeId: 134,\n // oracleCodeId: 113, // 9-4-3-625\n oracleCodeId: 123, // 6-3-3-125\n oracleWhitelistBackendPubkey:\n 'AoYo/zENN/JquagPdG0/NMbWBBYxOM8BVN677mBXJKJQ',\n oracleFeegrantOperator: 'dora1xp0twdzsdeq4qg3c64v66552deax8zmvq4zw78',\n oracleCodeIds: ['102', '105', '108', '110', '113', '115', '123'],\n };\n }\n}\n","import { Http } from '../../libs';\nimport {\n CircuitResponse,\n CircuitsCountGraphqlResponse,\n CircuitType,\n CircuitsResponse,\n} from '../../types';\nimport { circuits } from '../const';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Circuit {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getCircuitByName(name: string): Promise<CircuitResponse> {\n try {\n const circuitName = name;\n const circuitData: CircuitType = circuits[circuitName];\n\n if (circuitData === undefined) {\n return {\n code: 404,\n error: {\n message: `Circuit ${circuitName} not found`,\n type: ERROR.ERROR_CIRCUIT_NOT_FOUND,\n },\n };\n }\n\n const CIRCUIT_ROUNDS_COUNT_QUERY = `\n query {\n rounds(filter: { circuitName: { equalTo: \"${circuitData.displayName}\" } }) {\n totalCount\n }\n }\n `;\n const circuitRoundsCountResponse =\n await this.http.fetchGraphql<CircuitsCountGraphqlResponse>(\n CIRCUIT_ROUNDS_COUNT_QUERY,\n ''\n );\n\n circuitData.roundCount =\n circuitRoundsCountResponse.data.rounds.totalCount;\n\n const response: CircuitResponse = {\n code: 200,\n data: {\n circuit: circuitData,\n },\n };\n\n return response;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getCircuits(): Promise<CircuitsResponse> {\n try {\n const circuitsArray: CircuitType[] = Object.values(circuits).sort(\n (a, b) => a.displayName.localeCompare(b.displayName)\n );\n\n const circuitsWithRoundCount = await Promise.all(\n circuitsArray.map(async (circuit) => {\n const CIRCUIT_ROUNDS_COUNT_QUERY = `\n query {\n rounds(filter: { circuitName: { equalTo: \"${circuit.displayName}\" } }) {\n totalCount\n }\n }\n `;\n const circuitRoundsCountResponse: CircuitsCountGraphqlResponse =\n await this.http.fetchGraphql(CIRCUIT_ROUNDS_COUNT_QUERY, '');\n return {\n ...circuit,\n roundCount: circuitRoundsCountResponse.data.rounds.totalCount,\n };\n })\n );\n\n const response: CircuitsResponse = {\n code: 200,\n data: {\n circuits: circuitsWithRoundCount,\n },\n };\n\n return response;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import { decode } from 'bech32';\nimport { packPubKey, PubKey } from 'src/libs/crypto';\n\nfunction verifyIsBech32(address: string): Error | undefined {\n try {\n decode(address);\n } catch (error) {\n return error instanceof Error ? error : new Error('Unknown error');\n }\n\n return undefined;\n}\n\nexport function isValidAddress(address: string): boolean {\n // An address is valid if it starts with `dora` and is Bech32 format.\n return address.startsWith('dora') && verifyIsBech32(address) === undefined;\n}\n\n/**\n * Converts a hexadecimal string to a decimal string.\n * @param hexString - The hexadecimal string to convert.\n * @returns The decimal string representation of the input.\n */\nexport function hexToDecimalString(hexString: string) {\n const decimalString = BigInt('0x' + hexString).toString(10);\n return decimalString;\n}\n\n/**\n * Converts a hexadecimal string to a BigInt.\n * @param hexString - The hexadecimal string to convert.\n * @returns The BigInt representation of the input.\n */\nexport function hexToBigInt(hexString: string) {\n return BigInt('0x' + hexString);\n}\n\nfunction padWithZerosIfNeeded(inputString: string) {\n if (inputString.length === 64) {\n return inputString;\n } else if (inputString.length < 64) {\n const zerosToAdd = 64 - inputString.length;\n const zeroPadding = '0'.repeat(zerosToAdd);\n return zeroPadding + inputString;\n }\n throw new Error('Invalid input string length');\n}\n\n/**\n * Parses a public key string into its x and y coordinates.\n * @param publickKey - The public key string to parse (128 characters long).\n * @returns An object containing the x and y coordinates as decimal strings.\n */\nexport function decompressPublicKey(compressedPubkey: string) {\n const x = compressedPubkey.slice(0, 64);\n const y = compressedPubkey.slice(64);\n\n return {\n x: hexToDecimalString(x),\n y: hexToDecimalString(y),\n };\n}\n\nexport function compressPublicKey(decompressedPubkey: any[]) {\n const x = decompressedPubkey[0];\n const y = decompressedPubkey[1];\n const compressedPubkey =\n padWithZerosIfNeeded(x.toString(16)) + padWithZerosIfNeeded(y.toString(16));\n return compressedPubkey;\n}\n\nexport function transformPubkey(oldPubkey: string) {\n const x = oldPubkey.slice(0, 64);\n const y = oldPubkey.slice(64);\n\n const pubkey: PubKey = [hexToBigInt(x), hexToBigInt(y)];\n console.log(pubkey);\n console.log([hexToDecimalString(x), hexToDecimalString(y)]);\n const packedPubkey = packPubKey(pubkey);\n return packedPubkey;\n}\n","import CryptoJS from 'crypto-js';\nimport { bigInt2Buffer, stringizing } from './bigintUtils';\nimport { poseidonEncrypt } from '@zk-kit/poseidon-cipher';\nimport * as BabyJub from '@zk-kit/baby-jubjub';\nimport { Point } from '@zk-kit/baby-jubjub';\nimport {\n derivePublicKey,\n signMessage,\n deriveSecretScalar,\n} from '@zk-kit/eddsa-poseidon';\n\nimport { solidityPackedSha256 } from 'ethers';\n\nimport { mulPointEscalar } from '@zk-kit/baby-jubjub';\nimport { packPublicKey, unpackPublicKey } from '@zk-kit/eddsa-poseidon';\n\nimport { EcdhSharedKey, Keypair, PrivKey, PubKey } from './types';\nimport { poseidon } from './hashing';\nimport { Tree } from './tree';\nimport { genRandomBabyJubValue } from './babyjub';\n\nconst SNARK_FIELD_SIZE =\n 21888242871839275222246405745257275088548364400416034343698204186575808495617n;\n\n/**\n * Generate a private key\n * @returns A random seed for a private key.\n */\nexport const genPrivKey = (): bigint =>\n BigInt(`0x${CryptoJS.lib.WordArray.random(32).toString(CryptoJS.enc.Hex)}`);\n\n/**\n * Generate a random value\n * @returns A BabyJub-compatible salt.\n */\nexport const genRandomSalt = (): bigint => genRandomBabyJubValue();\n\n/**\n * An internal function which formats a random private key to be compatible\n * with the BabyJub curve. This is the format which should be passed into the\n * PubKey and other circuits.\n * @param privKey A private key generated using genPrivKey()\n * @returns A BabyJub-compatible private key.\n */\nexport const formatPrivKeyForBabyJub = (privKey: PrivKey): bigint =>\n BigInt(deriveSecretScalar(bigInt2Buffer(privKey)));\n\n/**\n * Losslessly reduces the size of the representation of a public key\n * @param pubKey The public key to pack\n * @returns A packed public key\n */\nexport const packPubKey = (pubKey: PubKey): bigint =>\n BigInt(packPublicKey(pubKey));\n\n/**\n * Restores the original PubKey from its packed representation\n * @param packed The value to unpack\n * @returns The unpacked public key\n */\nexport const unpackPubKey = (packed: bigint): PubKey => {\n const pubKey = unpackPublicKey(packed);\n return pubKey.map((x) => BigInt(x)) as PubKey;\n};\n\n/**\n * @param privKey A private key generated using genPrivKey()\n * @returns A public key associated with the private key\n */\nexport const genPubKey = (privKey: PrivKey): PubKey => {\n const key = derivePublicKey(bigInt2Buffer(privKey));\n return [BigInt(key[0]), BigInt(key[1])];\n};\n\n/**\n * Generates a keypair.\n * @returns a keypair\n */\nexport const genKeypair = (pkey?: PrivKey): Keypair => {\n const privKey = pkey ? pkey % SNARK_FIELD_SIZE : genPrivKey();\n const pubKey = genPubKey(privKey);\n const formatedPrivKey = formatPrivKeyForBabyJub(privKey);\n\n const keypair: Keypair = { privKey, pubKey, formatedPrivKey };\n\n return keypair;\n};\n\n/**\n * Generates an Elliptic-Curve Diffie–Hellman (ECDH) shared key given a private\n * key and a public key.\n * @param privKey A private key generated using genPrivKey()\n * @param pubKey A public key generated using genPubKey()\n * @returns The ECDH shared key.\n */\nexport const genEcdhSharedKey = (\n privKey: PrivKey,\n pubKey: PubKey\n): EcdhSharedKey =>\n mulPointEscalar(pubKey as Point<bigint>, formatPrivKeyForBabyJub(privKey));\n\nexport const genMessageFactory =\n (\n stateIdx: number,\n signPriKey: PrivKey,\n signPubKey: PubKey,\n coordPubKey: PubKey\n ) =>\n (\n encPriKey: PrivKey,\n nonce: number,\n voIdx: number,\n newVotes: number,\n isLastCmd: boolean,\n salt?: bigint\n ): bigint[] => {\n if (!salt) {\n // uint56\n salt = BigInt(\n `0x${CryptoJS.lib.WordArray.random(7).toString(CryptoJS.enc.Hex)}`\n );\n }\n\n const packaged =\n BigInt(nonce) +\n (BigInt(stateIdx) << 32n) +\n (BigInt(voIdx) << 64n) +\n (BigInt(newVotes) << 96n) +\n (BigInt(salt) << 192n);\n\n let newPubKey = [...signPubKey];\n if (isLastCmd) {\n newPubKey = [0n, 0n];\n }\n\n const hash = poseidon([packaged, ...newPubKey]);\n const signature = signMessage(bigInt2Buffer(signPriKey), hash);\n\n const command = [packaged, ...newPubKey, ...signature.R8, signature.S];\n\n const message = poseidonEncrypt(\n command,\n genEcdhSharedKey(encPriKey, coordPubKey),\n 0n\n );\n\n return message;\n };\n\n// Batch generate encrypted commands.\n// output format just like (with commands 1 ~ N):\n// [\n// [msg_N, msg_N-1, ... msg_3, msg_2, msg_1],\n// [pubkey_N, pubkey_N-1, ... pubkey_3, pubkey_2, pubkey_1]\n// ]\n// and change the public key at command_N\nexport const batchGenMessage = (\n stateIdx: number,\n keypair: Keypair,\n coordPubKey: PubKey,\n plan: [number, number][]\n) => {\n const genMessage = genMessageFactory(\n stateIdx,\n BigInt(keypair.privKey),\n keypair.pubKey,\n coordPubKey\n );\n\n const payload = [];\n for (let i = plan.length - 1; i >= 0; i--) {\n const p = plan[i];\n const encAccount = genKeypair();\n const msg = genMessage(\n BigInt(encAccount.privKey),\n i + 1,\n p[0],\n p[1],\n i === plan.length - 1\n );\n\n payload.push({\n msg,\n encPubkeys: encAccount.pubKey,\n });\n }\n\n return payload;\n};\n\nexport const privateKeyFromTxt = (txt: string) => {\n if (typeof txt !== 'string') {\n return;\n }\n const key = txt.split('\\n')[1] || '';\n if (key.length !== 512) {\n return;\n }\n const keys = key.match(/[0-9a-f]{128}/g);\n if (!keys || keys.length !== 4) {\n return;\n }\n const priKey = poseidon(keys.map((k) => BigInt('0x' + k)));\n return genKeypair(priKey % SNARK_FIELD_SIZE);\n};\n\nconst rerandomize = (\n pubKey: bigint[],\n ciphertext: { c1: bigint[]; c2: bigint[] },\n randomVal = genRandomSalt()\n) => {\n const d1 = BabyJub.addPoint(\n BabyJub.mulPointEscalar(BabyJub.Base8, randomVal),\n ciphertext.c1 as Point<bigint>\n );\n\n const d2 = BabyJub.addPoint(\n BabyJub.mulPointEscalar(pubKey as Point<bigint>, randomVal),\n ciphertext.c2 as Point<bigint>\n );\n\n return {\n d1,\n d2,\n } as { d1: bigint[]; d2: bigint[] };\n};\n\nexport const genAddKeyInput = (\n depth: number,\n {\n coordPubKey,\n oldKey,\n deactivates,\n }: {\n coordPubKey: PubKey;\n oldKey: Keypair;\n deactivates: bigint[][];\n }\n) => {\n const sharedKeyHash = poseidon(genEcdhSharedKey(oldKey.privKey, coordPubKey));\n\n const randomVal = genRandomSalt();\n const deactivateIdx = deactivates.findIndex((d) => d[4] === sharedKeyHash);\n if (deactivateIdx < 0) {\n return null;\n }\n\n const deactivateLeaf = deactivates[deactivateIdx];\n\n const c1 = [deactivateLeaf[0], deactivateLeaf[1]];\n const c2 = [deactivateLeaf[2], deactivateLeaf[3]];\n\n const { d1, d2 } = rerandomize(coordPubKey, { c1, c2 }, randomVal);\n\n const nullifier = poseidon([\n BigInt(oldKey.formatedPrivKey),\n 1444992409218394441042n,\n ]);\n\n const tree = new Tree(5, depth, 0n);\n const leaves = deactivates.map((d) => poseidon(d));\n tree.initLeaves(leaves);\n\n const deactivateRoot = tree.root;\n const deactivateLeafPathElements = tree.pathElementOf(deactivateIdx);\n\n const inputHash =\n BigInt(\n solidityPackedSha256(\n new Array(7).fill('uint256'),\n stringizing([\n deactivateRoot,\n poseidon(coordPubKey),\n nullifier,\n d1[0],\n d1[1],\n d2[0],\n d2[1],\n ]) as string[]\n )\n ) % SNARK_FIELD_SIZE;\n\n const input = {\n inputHash,\n coordPubKey,\n deactivateRoot,\n deactivateIndex: deactivateIdx,\n deactivateLeaf: poseidon(deactivateLeaf),\n c1,\n c2,\n randomVal,\n d1,\n d2,\n deactivateLeafPathElements,\n nullifier,\n oldPrivateKey: oldKey.formatedPrivKey,\n };\n\n return input;\n};\n\n// LIB\nfunction randomUint256() {\n const buffer = [];\n for (let i = 0; i < 64; i++) {\n buffer.push(\n Math.floor(Math.random() * 256)\n .toString(16)\n .padStart(2, '0')\n );\n }\n return buffer.join('');\n}\n\nexport const genRandomKey = () => {\n const key = [\n randomUint256(),\n randomUint256(),\n randomUint256(),\n randomUint256(),\n ].join('');\n return ['-----BEGIN MACI KEY-----', key, '-----END MACI KEY-----'].join('\\n');\n};\n","type MixedData<T> = T | Array<MixedData<T>> | { [key: string]: MixedData<T> };\n\nexport const stringizing = (\n o: MixedData<bigint>,\n path: MixedData<bigint>[] = []\n): MixedData<string> => {\n if (path.includes(o)) {\n throw new Error('loop nesting!');\n }\n const newPath = [...path, o];\n\n if (Array.isArray(o)) {\n return o.map((item) => stringizing(item, newPath));\n } else if (typeof o === 'object') {\n const output: { [key: string]: MixedData<string> } = {};\n for (const key in o) {\n output[key] = stringizing(o[key], newPath);\n }\n return output;\n } else {\n return o.toString();\n }\n};\n\nexport const bigInt2Buffer = (i: bigint) => {\n let hex = i.toString(16);\n if (hex.length % 2 === 1) {\n hex = '0' + hex;\n }\n return Buffer.from(hex, 'hex');\n};\n\nexport const buffer2Bigint = (buffer: Buffer | Uint8Array): bigint => {\n const buf = Buffer.isBuffer(buffer) ? buffer : Buffer.from(buffer);\n const hex = buf.toString('hex');\n return BigInt('0x' + hex);\n};\n\nexport const destringizing = (\n o: MixedData<string>,\n path: MixedData<string>[] = []\n): MixedData<bigint> => {\n if (path.includes(o)) {\n throw new Error('loop nesting!');\n }\n const newPath = [...path, o];\n\n if (Array.isArray(o)) {\n return o.map((item) => destringizing(item, newPath));\n } else if (typeof o === 'object' && o !== null) {\n const output: { [key: string]: MixedData<bigint> } = {};\n for (const key in o) {\n output[key] = destringizing(o[key], newPath);\n }\n return output;\n } else {\n return BigInt(o);\n }\n};\n","import { poseidonPerm } from '@zk-kit/poseidon-cipher';\nimport { solidityPackedSha256 } from 'ethers';\n\nimport assert from 'assert';\n\nimport type { Plaintext, PoseidonFuncs } from './types';\n\nimport { SNARK_FIELD_SIZE } from './constants';\n\n/**\n * Hash an array of uint256 values the same way that the EVM does.\n * @param input - the array of values to hash\n * @returns a EVM compatible sha256 hash\n */\nexport const sha256Hash = (input: bigint[]): bigint => {\n const types: string[] = [];\n\n input.forEach(() => {\n types.push('uint256');\n });\n\n return (\n BigInt(\n solidityPackedSha256(\n types,\n input.map((x) => x.toString())\n )\n ) % SNARK_FIELD_SIZE\n );\n};\n\n/**\n * Generate the poseidon hash of the inputs provided\n * @param inputs The inputs to hash\n * @returns the hash of the inputs\n */\nexport const poseidon = (inputs: bigint[]): bigint =>\n poseidonPerm([BigInt(0), ...inputs.map((x) => BigInt(x))])[0];\n\n/**\n * Hash up to 2 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT3 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 2);\n return poseidon(inputs);\n};\n\n/**\n * Hash up to 3 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT4 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 3);\n return poseidon(inputs);\n};\n\n/**\n * Hash up to 4 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT5 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 4);\n return poseidon(inputs);\n};\n\n/**\n * Hash up to 5 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT6 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 5);\n return poseidon(inputs);\n};\n\n/**\n * Hash two BigInts with the Poseidon hash function\n * @param left The left-hand element to hash\n * @param right The right-hand element to hash\n * @returns The hash of the two elements\n */\nexport const hashLeftRight = (left: bigint, right: bigint): bigint =>\n poseidonT3([left, right]);\n\n// hash functions\nconst funcs: PoseidonFuncs = {\n 2: poseidonT3,\n 3: poseidonT4,\n 4: poseidonT5,\n 5: poseidonT6,\n};\n\n/**\n * Hash up to N elements\n * @param numElements The number of elements to hash\n * @param elements The elements to hash\n * @returns The hash of the elements\n */\nexport const hashN = (numElements: number, elements: Plaintext): bigint => {\n const elementLength = elements.length;\n\n if (elements.length > numElements) {\n throw new TypeError(\n `the length of the elements array should be at most ${numElements}; got ${elements.length}`\n );\n }\n const elementsPadded = elements.slice();\n\n if (elementLength < numElements) {\n for (let i = elementLength; i < numElements; i += 1) {\n elementsPadded.push(BigInt(0));\n }\n }\n\n return funcs[numElements](elementsPadded);\n};\n\n// hash functions\nexport const hashLeanIMT = (a: bigint, b: bigint): bigint => hashN(2, [a, b]);\nexport const hash2 = (elements: Plaintext): bigint => hashN(2, elements);\nexport const hash3 = (elements: Plaintext): bigint => hashN(3, elements);\nexport const hash4 = (elements: Plaintext): bigint => hashN(4, elements);\nexport const hash5 = (elements: Plaintext): bigint => hashN(5, elements);\n\n/**\n * A convenience function to use Poseidon to hash a Plaintext with\n * no more than 13 elements\n * @param elements The elements to hash\n * @returns The hash of the elements\n */\nexport const hash12 = (elements: Plaintext): bigint => {\n const max = 12;\n const elementLength = elements.length;\n\n if (elementLength > max) {\n throw new TypeError(\n `the length of the elements array should be at most ${max}; got ${elements.length}`\n );\n }\n\n const elementsPadded = elements.slice();\n\n if (elementLength < max) {\n for (let i = elementLength; i < max; i += 1) {\n elementsPadded.push(BigInt(0));\n }\n }\n\n return poseidonT5([\n poseidonT6(elementsPadded.slice(0, 5)),\n poseidonT6(elementsPadded.slice(5, 10)),\n elementsPadded[10],\n elementsPadded[11],\n ]);\n};\n\n/**\n * Hash a single BigInt with the Poseidon hash function\n * @param preImage The element to hash\n * @returns The hash of the element\n */\nexport const hashOne = (preImage: bigint): bigint =>\n poseidonT3([preImage, BigInt(0)]);\n","import { r } from '@zk-kit/baby-jubjub';\nimport { keccak256, toUtf8Bytes } from 'ethers';\n\nimport assert from 'assert';\n\nexport const SNARK_FIELD_SIZE = r;\n\n// A nothing-up-my-sleeve zero value\n// Should be equal to 8370432830353022751713833565135785980866757267633941821328460903436894336785\nexport const NOTHING_UP_MY_SLEEVE =\n BigInt(keccak256(toUtf8Bytes('Maci'))) % SNARK_FIELD_SIZE;\n\nassert(\n NOTHING_UP_MY_SLEEVE ===\n BigInt(\n '8370432830353022751713833565135785980866757267633941821328460903436894336785'\n )\n);\n\nexport const PAD_KEY_HASH = BigInt(\n '1309255631273308531193241901289907343161346846555918942743921933037802809814'\n);\n","import { poseidon } from './hashing';\n\nexport class Tree {\n public readonly DEPTH: number;\n public readonly HEIGHT: number;\n public readonly DEGREE: number;\n public readonly LEAVES_COUNT: number;\n public readonly LEAVES_IDX_0: number;\n public readonly NODES_COUNT: number;\n\n protected nodes: bigint[] = [];\n protected zeros: bigint[] = [];\n\n constructor(degree: number, depth: number, zero: bigint) {\n this.DEPTH = depth;\n this.HEIGHT = depth + 1;\n this.DEGREE = degree;\n\n this.LEAVES_COUNT = degree ** depth;\n this.LEAVES_IDX_0 = (degree ** depth - 1) / (degree - 1);\n this.NODES_COUNT = (degree ** (depth + 1) - 1) / (degree - 1);\n\n this.initZero(zero);\n this.initNodes();\n }\n\n get root() {\n return this.nodes[0];\n }\n\n initZero(zero: bigint) {\n const zeros = new Array(this.HEIGHT);\n zeros[0] = zero;\n for (let i = 1; i < zeros.length; i++) {\n const children = new Array(this.DEGREE).fill(zeros[i - 1]);\n zeros[i] = poseidon(children);\n }\n this.zeros = zeros;\n }\n\n initNodes() {\n const DEGREE = this.DEGREE;\n\n const nodes = new Array(this.NODES_COUNT);\n\n for (let d = this.DEPTH; d >= 0; d--) {\n const size = DEGREE ** d;\n const idx0 = (DEGREE ** d - 1) / (DEGREE - 1);\n const zero = this.zeros[this.DEPTH - d];\n for (let i = 0; i < size; i++) {\n nodes[idx0 + i] = zero;\n }\n }\n\n this.nodes = nodes;\n }\n\n initLeaves(leaves: bigint[]) {\n const DEGREE = this.DEGREE;\n for (let i = 0; i < leaves.length; i++) {\n if (i >= this.LEAVES_COUNT) {\n console.error('OVERFLOW');\n break;\n }\n this.nodes[this.LEAVES_IDX_0 + i] = BigInt(leaves[i]);\n }\n\n for (let d = this.DEPTH - 1; d >= 0; d--) {\n const size = DEGREE ** d;\n const idx0 = (DEGREE ** d - 1) / (DEGREE - 1);\n for (let i = 0; i < size / DEGREE; i++) {\n const start = (idx0 + i) * DEGREE + 1;\n const children = this.nodes.slice(start, start + DEGREE);\n this.nodes[idx0 + i] = poseidon(children);\n }\n }\n }\n\n leaf(leafIdx: number) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n const nodeIdx = this.LEAVES_IDX_0 + leafIdx;\n return this.nodes[nodeIdx];\n }\n\n leaves() {\n return this.nodes.slice(this.LEAVES_IDX_0);\n }\n\n updateLeaf(leafIdx: number, leaf: bigint) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n const nodeIdx = this.LEAVES_IDX_0 + leafIdx;\n this.nodes[nodeIdx] = leaf;\n\n this._update(nodeIdx);\n }\n\n pathIdxOf(leafIdx: number) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n let idx = this.LEAVES_IDX_0 + leafIdx;\n const pathIdx: bigint[] = [];\n\n for (let i = 0; i < this.DEPTH; i++) {\n const parentIdx = Math.floor((idx - 1) / this.DEGREE);\n const childrenIdx0 = parentIdx * this.DEGREE + 1;\n\n pathIdx.push(BigInt(idx - childrenIdx0));\n\n idx = parentIdx;\n }\n\n return pathIdx;\n }\n\n pathElementOf(leafIdx: number) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n let idx = this.LEAVES_IDX_0 + leafIdx;\n const pathElement: bigint[][] = [];\n\n for (let h = 0; h < this.DEPTH; h++) {\n const parentIdx = Math.floor((idx - 1) / this.DEGREE);\n const childrenIdx0 = parentIdx * this.DEGREE + 1;\n\n const el: bigint[] = [];\n for (let i = childrenIdx0; i < childrenIdx0 + this.DEGREE; i++) {\n if (i === idx) continue;\n el.push(this.nodes[i]);\n }\n\n pathElement.push(el);\n\n idx = parentIdx;\n }\n\n return pathElement;\n }\n\n subTree(length: number) {\n const subTree = new Tree(this.DEGREE, this.DEPTH, this.zeros[0]);\n const nodes = [...this.nodes];\n\n const DEGREE = this.DEGREE;\n let tail = length;\n for (let d = this.DEPTH; d >= 0; d--) {\n const size = DEGREE ** d;\n const idx0 = (DEGREE ** d - 1) / (DEGREE - 1);\n const zero = this.zeros[this.DEPTH - d];\n for (let i = tail; i < size; i++) {\n nodes[idx0 + i] = zero;\n }\n tail = Math.ceil(tail / DEGREE);\n }\n\n subTree.nodes = nodes;\n subTree._update(this.LEAVES_IDX_0 + length - 1);\n\n return subTree;\n }\n\n protected _update(nodeIdx: number) {\n let idx = nodeIdx;\n while (idx > 0) {\n const parentIdx = Math.floor((idx - 1) / this.DEGREE);\n const childrenIdx0 = parentIdx * this.DEGREE + 1;\n this.nodes[parentIdx] = poseidon(\n this.nodes.slice(childrenIdx0, childrenIdx0 + 5)\n );\n\n idx = parentIdx;\n }\n }\n}\n","import assert from 'assert';\nimport CryptoJS from 'crypto-js';\n\nimport type { PrivKey } from './types';\n\nimport { SNARK_FIELD_SIZE } from './constants';\n\n/**\n * @notice A class representing a point on the first group (G1)\n * of the Jubjub curve\n */\nexport class G1Point {\n x: bigint;\n\n y: bigint;\n\n /**\n * Create a new instance of G1Point\n * @param x the x coordinate\n * @param y the y coordinate\n */\n constructor(x: bigint, y: bigint) {\n assert(x < SNARK_FIELD_SIZE && x >= 0, 'G1Point x out of range');\n assert(y < SNARK_FIELD_SIZE && y >= 0, 'G1Point y out of range');\n this.x = x;\n this.y = y;\n }\n\n /**\n * Check whether two points are equal\n * @param pt the point to compare with\n * @returns whether they are equal or not\n */\n equals(pt: G1Point): boolean {\n return this.x === pt.x && this.y === pt.y;\n }\n\n /**\n * Return the point as a contract param in the form of an object\n * @returns the point as a contract param\n */\n asContractParam(): { x: string; y: string } {\n return {\n x: this.x.toString(),\n y: this.y.toString(),\n };\n }\n}\n\n/**\n * @notice A class representing a point on the second group (G2)\n * of the Jubjub curve. This is usually an extension field of the\n * base field of the curve.\n */\nexport class G2Point {\n x: bigint[];\n\n y: bigint[];\n\n /**\n * Create a new instance of G2Point\n * @param x the x coordinate\n * @param y the y coordinate\n */\n constructor(x: bigint[], y: bigint[]) {\n this.checkPointsRange(x, 'x');\n this.checkPointsRange(y, 'y');\n\n this.x = x;\n this.y = y;\n }\n\n /**\n * Check whether two points are equal\n * @param pt the point to compare with\n * @returns whether they are equal or not\n */\n equals(pt: G2Point): boolean {\n return (\n this.x[0] === pt.x[0] &&\n this.x[1] === pt.x[1] &&\n this.y[0] === pt.y[0] &&\n this.y[1] === pt.y[1]\n );\n }\n\n /**\n * Return the point as a contract param in the form of an object\n * @returns the point as a contract param\n */\n asContractParam(): { x: string[]; y: string[] } {\n return {\n x: this.x.map((n) => n.toString()),\n y: this.y.map((n) => n.toString()),\n };\n }\n\n /**\n * Check whether the points are in range\n * @param x the x coordinate\n * @param type the type of the coordinate\n */\n private checkPointsRange(x: bigint[], type: 'x' | 'y') {\n assert(\n x.every((n) => n < SNARK_FIELD_SIZE && n >= 0),\n `G2Point ${type} out of range`\n );\n }\n}\n\n// /**\n// * Returns a BabyJub-compatible random value. We create it by first generating\n// * a random value (initially 256 bits large) modulo the snark field size as\n// * described in EIP197. This results in a key size of roughly 253 bits and no\n// * more than 254 bits. To prevent modulo bias, we then use this efficient\n// * algorithm:\n// * http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/lib/libc/crypt/arc4random_uniform.c\n// * @returns A BabyJub-compatible random value.\n// */\n// export const genRandomBabyJubValue = (): bigint => {\n// // Prevent modulo bias\n// // const lim = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000')\n// // const min = (lim - SNARK_FIELD_SIZE) % SNARK_FIELD_SIZE\n// const min = BigInt(\n// '6350874878119819312338956282401532410528162663560392320966563075034087161851'\n// );\n\n// let privKey: PrivKey = SNARK_FIELD_SIZE;\n\n// do {\n// const rand = BigInt(\n// `0x${CryptoJS.lib.WordArray.random(32).toString(CryptoJS.enc.Hex)}`\n// );\n\n// if (rand >= min) {\n// privKey = rand % SNARK_FIELD_SIZE;\n// }\n// } while (privKey >= SNARK_FIELD_SIZE);\n// privKey =\n// return privKey;\n// };\n\nexport const genRandomBabyJubValue = () => {\n // Prevent modulo bias\n //const lim = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000')\n //const min = (lim - SNARK_FIELD_SIZE) % SNARK_FIELD_SIZE\n const min =\n 6350874878119819312338956282401532410528162663560392320966563075034087161851n;\n\n let rand;\n while (true) {\n rand = BigInt(\n `0x${CryptoJS.lib.WordArray.random(32).toString(CryptoJS.enc.Hex)}`\n );\n\n if (rand >= min) {\n break;\n }\n }\n\n // const privKey = rand % SNARK_FIELD_SIZE;\n const privKey = rand % 2n ** 253n;\n return privKey;\n};\n","import {\n OfflineSigner,\n OfflineDirectSigner,\n isOfflineDirectSigner,\n} from '@cosmjs/proto-signing';\nimport { StdSignDoc } from '@cosmjs/amino';\nimport { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx';\nimport { getDefaultParams } from '../const';\nimport { genKeypair } from './keys';\nimport { SignResult } from './types';\n\nexport async function signMessage(\n signer: OfflineSigner,\n address: string,\n message: string,\n network: 'mainnet' | 'testnet'\n): Promise<SignResult> {\n const accounts = await signer.getAccounts();\n const account = accounts.find((acc) => acc.address === address);\n const chainId = getDefaultParams(network).chainId;\n\n if (!account) {\n throw new Error(`Address ${address} not found in wallet`);\n }\n\n if (isOfflineDirectSigner(signer)) {\n // Direct\n const signDoc: SignDoc = {\n bodyBytes: new TextEncoder().encode(message),\n authInfoBytes: new Uint8Array(),\n chainId,\n accountNumber: BigInt(0),\n };\n\n const { signature } = await signer.signDirect(address, signDoc);\n\n return {\n signature: signature.signature,\n pubkey: account.pubkey,\n };\n } else {\n // Amino\n const signDoc: StdSignDoc = {\n chain_id: chainId,\n account_number: '0',\n sequence: '0',\n fee: {\n gas: '0',\n amount: [],\n },\n msgs: [],\n memo: message,\n };\n\n const { signature } = await signer.signAmino(address, signDoc);\n\n return {\n signature: signature.signature,\n pubkey: account.pubkey,\n };\n }\n}\n\nexport async function genKeypairFromSignature(signature: string) {\n const sign = BigInt('0x' + Buffer.from(signature, 'base64').toString('hex'));\n\n return genKeypair(sign);\n}\n\nexport async function genKeypairFromSign({\n signer,\n address,\n network,\n}: {\n signer: OfflineSigner;\n address?: string;\n network: 'mainnet' | 'testnet';\n}) {\n if (!address) {\n [{ address }] = await signer.getAccounts();\n }\n\n const sig = await signMessage(\n signer,\n address,\n 'Generate_MACI_Private_Key',\n network\n );\n\n return genKeypairFromSignature(sig.signature);\n}\n","import { ERROR } from '../errors/types';\nimport { Http } from '../../libs';\nimport {\n OperatorsGraphqlResponse,\n RoundsCountGraphqlResponse,\n OperatorResponse,\n OperatorsResponse,\n OperatorDelayOperationsResponse,\n OperatorDelayOperationsGraphqlResponse,\n MissRateResponse,\n MissRateType,\n TransactionsGraphqlResponse,\n RoundsGraphqlResponse,\n} from '../../types';\nimport { isValidAddress } from '../../utils';\nimport { handleError, ErrorType } from '../errors';\n\nexport class Operator {\n public http: Http;\n public amaciRegistryContract: string;\n\n constructor(http: Http, amaciRegistryContract: string) {\n this.http = http;\n this.amaciRegistryContract = amaciRegistryContract;\n }\n\n async getOperatorByAddress(address: string): Promise<OperatorResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid operator address format',\n type: ERROR.ERROR_OPERATOR_INVALID_ADDRESS,\n },\n };\n }\n\n const OPERATORS_QUERY = `query {\n operators(filter: { operatorAddress: { equalTo: \"${address}\" } }) {\n edges {\n node {\n id\n validatorAddress\n operatorAddress\n coordinatorPubkeyX\n coordinatorPubkeyY\n identity\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<OperatorsGraphqlResponse>(\n OPERATORS_QUERY,\n ''\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.operators ||\n !response.data.operators.edges ||\n response.data.operators.edges.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No operator found for address ${address}`,\n type: ERROR.ERROR_OPERATOR_NOT_FOUND,\n },\n };\n }\n\n const operatorResponse = response.data.operators.edges[0].node;\n\n if (\n operatorResponse.operatorAddress === '' ||\n operatorResponse.coordinatorPubkeyX === ''\n ) {\n operatorResponse.activeRoundsCount = 0;\n operatorResponse.completedRoundsCount = 0;\n } else {\n const ROUNDS_QUERY = `query {\n activeRoundsCount: rounds(filter: {\n period: {notEqualTo: \"Ended\"},\n operator: {equalTo: \"${operatorResponse.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n completedRoundsCount: rounds(filter: {\n period: {equalTo: \"Ended\"},\n operator: {equalTo: \"${operatorResponse.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n }`;\n\n const roundsCount =\n await this.http.fetchGraphql<RoundsCountGraphqlResponse>(\n ROUNDS_QUERY,\n ''\n );\n operatorResponse.activeRoundsCount =\n roundsCount.data.activeRoundsCount.totalCount;\n operatorResponse.completedRoundsCount =\n roundsCount.data.completedRoundsCount.totalCount;\n }\n\n operatorResponse.logoUrl = '';\n operatorResponse.moniker = '';\n const identity = response.data.operators.edges[0].node.identity;\n\n const keybaseUrl = `https://keybase.io/_/api/1.0/user/lookup.json?key_suffix=${identity}`;\n const keybaseResponse = await this.http.fetch(keybaseUrl);\n const keybaseData = await keybaseResponse.json();\n\n if (keybaseData.status.code === 0) {\n if (keybaseData.them[0]?.pictures?.primary?.url) {\n operatorResponse.logoUrl = keybaseData.them[0].pictures.primary.url;\n }\n if (keybaseData.them[0]?.basics?.username_cased) {\n operatorResponse.moniker = keybaseData.them[0].profile.full_name;\n }\n }\n const operator: OperatorResponse = {\n code: 200,\n data: {\n operator: operatorResponse,\n },\n };\n return operator;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getOperatorDelayOperationsByAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<OperatorDelayOperationsResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid operator address format',\n type: ERROR.ERROR_OPERATOR_INVALID_ADDRESS,\n },\n };\n }\n\n const OPERATORS_QUERY = `query ($limit: Int, $after: Cursor) {\n operatorDelayOperations(first: $limit, after: $after, filter: {operatorAddress: {equalTo: \"${address}\"}}, orderBy: [TIMESTAMP_DESC]) {\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n blockHeight\n delayProcessDmsgCount\n delayDuration\n delayReason\n delayType\n id\n nodeId\n operatorAddress\n timestamp\n roundAddress\n }\n }\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<OperatorDelayOperationsGraphqlResponse>(\n OPERATORS_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.operatorDelayOperations ||\n !response.data.operatorDelayOperations.edges ||\n response.data.operatorDelayOperations.edges.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No operatorDelayOperations found for address ${address}`,\n type: ERROR.ERROR_OPERATOR_DELAY_HISTORY_NOT_FOUND,\n },\n };\n }\n const operator: OperatorDelayOperationsResponse = {\n code: 200,\n data: response.data,\n };\n return operator;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getOperators(\n after: string,\n limit?: number\n ): Promise<OperatorsResponse> {\n try {\n const OPERATORS_QUERY = `query ($limit: Int, $after: Cursor) {\n operators(first: $limit, after: $after) {\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n validatorAddress\n operatorAddress\n coordinatorPubkeyX\n coordinatorPubkeyY\n identity\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<OperatorsGraphqlResponse>(\n OPERATORS_QUERY,\n after,\n limit\n );\n if (\n !response ||\n !response.data ||\n !response.data.operators ||\n !response.data.operators.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No operators found',\n type: ERROR.ERROR_OPERATORS_NOT_FOUND,\n },\n };\n }\n const operatorsWithRounds = await Promise.all(\n response.data.operators.edges.map(async (edge) => {\n const operator = edge.node;\n if (\n operator.operatorAddress === '' ||\n operator.coordinatorPubkeyX === ''\n ) {\n operator.activeRoundsCount = 0;\n operator.completedRoundsCount = 0;\n return operator;\n }\n const ROUNDS_QUERY = `query {\n activeRoundsCount: rounds(filter: {\n period: {notEqualTo: \"Ended\"},\n operator: {equalTo: \"${operator.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n completedRoundsCount: rounds(filter: {\n period: {equalTo: \"Ended\"},\n operator: {equalTo: \"${operator.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n }`;\n\n const roundsCount =\n await this.http.fetchGraphql<RoundsCountGraphqlResponse>(\n ROUNDS_QUERY,\n ''\n );\n operator.activeRoundsCount =\n roundsCount.data.activeRoundsCount.totalCount;\n operator.completedRoundsCount =\n roundsCount.data.completedRoundsCount.totalCount;\n\n return operator;\n })\n );\n\n response.data.operators.edges = operatorsWithRounds.map(\n (operator, index) => ({\n cursor: response.data.operators.edges[index].cursor,\n node: operator,\n })\n );\n\n await Promise.all(\n response.data.operators.edges.map(async (edge) => {\n const operator = edge.node;\n const identity = operator.identity;\n operator.logoUrl = '';\n operator.moniker = '';\n\n // try {\n const keybaseUrl = `https://keybase.io/_/api/1.0/user/lookup.json?key_suffix=${identity}`;\n const keybaseResponse = await this.http.fetch(keybaseUrl);\n const keybaseData = await keybaseResponse.json();\n\n if (keybaseData.status.code === 0) {\n if (keybaseData.them[0]?.pictures?.primary?.url) {\n operator.logoUrl = keybaseData.them[0].pictures.primary.url;\n }\n if (keybaseData.them[0]?.basics?.username_cased) {\n operator.moniker = keybaseData.them[0].profile.full_name;\n }\n }\n // } catch (error) {\n // console.error('Error fetching keybase data:', error);\n // }\n return operator;\n })\n );\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async queryMissRate(\n address: string,\n durationDay: number\n ): Promise<MissRateResponse> {\n try {\n const now = new Date();\n const startTime = new Date(\n now.getTime() - durationDay * 24 * 60 * 60 * 1000\n );\n const startTimestamp = Math.floor(startTime.getTime() / 1000);\n const endNanosTimestamp = Math.floor(startTime.getTime() * 1000000);\n const txTimestamp = Math.floor(startTime.getTime());\n\n const QUERY = `query ($limit: Int, $after: Cursor) {\n operatorDelayOperations(\n first: $limit,\n after: $after,\n filter: {\n operatorAddress: {equalTo: \"${address}\"},\n timestamp: { greaterThanOrEqualTo: \"${startTimestamp}\" }\n },\n orderBy: [TIMESTAMP_DESC]\n ) {\n edges {\n node {\n blockHeight\n delayProcessDmsgCount\n delayDuration\n delayReason\n delayType\n id\n nodeId\n operatorAddress\n timestamp\n roundAddress\n }\n }\n }\n }`;\n\n const ROUNDS_QUERY = `query ($limit: Int, $after: Cursor) {\n rounds(first: $limit, after: $after, \n filter: {\n operator: {equalTo: \"${address}\"},\n votingEnd: { greaterThanOrEqualTo: \"${endNanosTimestamp}\" }\n },\n orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n cursor\n }\n }\n }\n `;\n\n const roundsResponse =\n await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUNDS_QUERY,\n '',\n 9999\n );\n const roundContractAddresses =\n roundsResponse?.data?.rounds?.edges?.map(\n (edge) => edge.node.contractAddress\n ) || [];\n\n const TRANSACTIONS_QUERY = `query transactions($limit: Int, $after: Cursor) {\n transactions(first: $limit, after: $after, \n filter: {\n timestamp: { greaterThanOrEqualTo: \"${txTimestamp}\" },\n type: { equalTo: \"op:procDeactivate\" },\n contractAddress: { in: ${JSON.stringify(roundContractAddresses)} }\n },\n orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }\n }\n }`;\n\n const [delayResponse, transactionsResponse] = await Promise.all([\n this.http.fetchGraphql<OperatorDelayOperationsGraphqlResponse>(\n QUERY,\n '',\n 9999\n ),\n this.http.fetchGraphql<TransactionsGraphqlResponse>(\n TRANSACTIONS_QUERY,\n '',\n 9999\n ),\n ]);\n\n const dailyStats = new Map<string, MissRateType>();\n\n const endDate = new Date();\n for (let i = 0; i < durationDay; i++) {\n const date = new Date(endDate.getTime() - i * 24 * 60 * 60 * 1000)\n .toISOString()\n .split('T')[0];\n dailyStats.set(date, {\n delayCount: 0,\n deactivateDelay: {\n count: 0,\n dmsgCount: 0,\n },\n tallyDelay: {\n count: 0,\n },\n totalDelayDuration: 0,\n avgDelayDuration: 0,\n tallyCount: 0,\n deactivateCount: 0,\n missRate: 0,\n });\n }\n\n delayResponse.data.operatorDelayOperations.edges.forEach(({ node }) => {\n const date = new Date(parseInt(node.timestamp) * 1000)\n .toISOString()\n .split('T')[0];\n\n if (dailyStats.has(date)) {\n const stats = dailyStats.get(date)!;\n stats.delayCount++;\n stats.totalDelayDuration += parseInt(node.delayDuration);\n if (node.delayType === 'deactivate_delay') {\n stats.deactivateDelay.count++;\n stats.deactivateDelay.dmsgCount += node.delayProcessDmsgCount;\n } else if (node.delayType === 'tally_delay') {\n stats.tallyDelay.count++;\n }\n }\n });\n\n if (roundsResponse?.data?.rounds?.edges) {\n roundsResponse.data.rounds.edges.forEach(({ node }) => {\n const date = new Date(parseInt(node.votingEnd) / 1000000)\n .toISOString()\n .split('T')[0];\n if (dailyStats.has(date)) {\n const stats = dailyStats.get(date)!;\n stats.tallyCount++;\n }\n });\n }\n\n if (transactionsResponse?.data?.transactions?.edges) {\n transactionsResponse.data.transactions.edges.forEach(({ node }) => {\n const date = new Date(parseInt(node.timestamp))\n .toISOString()\n .split('T')[0];\n if (dailyStats.has(date)) {\n const stats = dailyStats.get(date)!;\n stats.deactivateCount++;\n }\n });\n }\n\n return {\n code: 200,\n data: {\n missRate: Array.from(dailyStats.entries())\n .map(([date, stats]) => ({\n date,\n delayCount: stats.delayCount,\n deactivateDelay: stats.deactivateDelay,\n tallyDelay: stats.tallyDelay,\n totalDelayDuration: stats.totalDelayDuration,\n avgDelayDuration:\n stats.delayCount > 0\n ? stats.totalDelayDuration / stats.delayCount\n : 0,\n tallyCount: stats.tallyCount,\n deactivateCount: stats.deactivateCount,\n missRate:\n stats.deactivateCount + stats.tallyCount > 0\n ? parseFloat(\n (\n (stats.deactivateDelay.count + stats.tallyDelay.count) /\n (stats.deactivateCount + stats.tallyCount)\n ).toFixed(2)\n )\n : 0,\n }))\n .sort((a, b) => b.date.localeCompare(a.date)),\n },\n };\n } catch (error) {\n return {\n code: 404,\n error: {\n message: 'Query miss rate failed',\n type: ERROR.ERROR_QUERY_MISS_RATE_FAILED,\n },\n };\n }\n }\n}\n","import {\n RoundsResponse,\n RoundResponse,\n RoundGraphqlResponse,\n RoundsGraphqlResponse,\n SelectiveRoundResponse,\n SelectiveRoundGraphqlResponse,\n} from '../../types';\nimport { Http } from '../../libs';\nimport { isValidAddress } from '../../utils';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Round {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getRoundById(address: string): Promise<RoundResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const ROUND_QUERY = `query {\n round(id: \"${address}\") {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n identity\n }\n }`;\n\n const response = await this.http.fetchGraphql<RoundGraphqlResponse>(\n ROUND_QUERY,\n ''\n );\n\n if (!response || !response.data || !response.data.round) {\n return {\n code: 404,\n error: {\n message: `No round data found for address ${address}`,\n type: ERROR.ERROR_ROUND_NOT_FOUND,\n },\n };\n }\n\n response.data.round.operatorLogoUrl = '';\n response.data.round.operatorMoniker = '';\n\n const identity = response.data.round.identity;\n // try {\n const keybaseUrl = `https://keybase.io/_/api/1.0/user/lookup.json?key_suffix=${identity}`;\n const keybaseResponse = await this.http.fetch(keybaseUrl);\n const keybaseData = await keybaseResponse.json();\n\n if (keybaseData.status.code === 0) {\n if (keybaseData.them[0]?.pictures?.primary?.url) {\n response.data.round.operatorLogoUrl =\n keybaseData.them[0].pictures.primary.url;\n }\n if (keybaseData.them[0]?.basics?.username_cased) {\n response.data.round.operatorMoniker =\n keybaseData.them[0].profile.full_name;\n }\n }\n // } catch (error) {\n // console.error('Error fetching keybase data:', error);\n // }\n\n const results = JSON.parse(response.data.round.results);\n const votes = results.map((r: string) => ({\n v: Number(r.slice(0, -24)),\n v2: Number(r.slice(-24)),\n }));\n const totalVotes = votes.reduce(\n (s: { v: number; v2: number }, c: { v: number; v2: number }) => ({\n v: s.v + c.v,\n v2: s.v2 + c.v2,\n }),\n { v: 0, v2: 0 }\n );\n const resultsList = votes.map((v: { v: number; v2: number }) => ({\n v: totalVotes.v === 0 ? '0.0' : ((v.v / totalVotes.v) * 100).toFixed(3),\n v2:\n totalVotes.v2 === 0\n ? '0.0'\n : ((v.v2 / totalVotes.v2) * 100).toFixed(3),\n }));\n response.data.round.resultsList = resultsList;\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n /**\n * Get round information with selective fields\n * @param address Round address\n * @param fields Array of fields to return, returns all fields if empty\n * @returns Round information response\n */\n async getRoundWithFields(\n address: string,\n fields?: string[]\n ): Promise<SelectiveRoundResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const defaultFields = [\n 'id',\n 'blockHeight',\n 'txHash',\n 'caller',\n 'admin',\n 'operator',\n 'contractAddress',\n 'circuitName',\n 'timestamp',\n 'votingStart',\n 'votingEnd',\n 'status',\n 'period',\n 'actionType',\n 'roundTitle',\n 'roundDescription',\n 'roundLink',\n 'coordinatorPubkeyX',\n 'coordinatorPubkeyY',\n 'voteOptionMap',\n 'results',\n 'allResult',\n 'gasStationEnable',\n 'totalGrant',\n 'baseGrant',\n 'totalBond',\n 'circuitType',\n 'circuitPower',\n 'certificationSystem',\n 'codeId',\n 'maciType',\n 'voiceCreditAmount',\n 'preDeactivateRoot',\n 'identity',\n // 'funds',\n ];\n\n if (fields && fields.length > 0) {\n const invalidFields = fields.filter(\n (field) => !defaultFields.includes(field)\n );\n if (invalidFields.length > 0) {\n return {\n code: 400,\n error: {\n message: `Invalid fields: ${invalidFields.join(', ')}`,\n type: ERROR.ERROR_INVALID_FIELDS,\n },\n };\n }\n }\n\n const selectedFields =\n fields && fields.length > 0 ? fields : defaultFields;\n\n const fieldString = selectedFields.join('\\n ');\n\n const ROUND_QUERY = `query {\n round(id: \"${address}\") {\n ${fieldString}\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<SelectiveRoundGraphqlResponse>(\n ROUND_QUERY,\n ''\n );\n\n if (!response || !response.data || !response.data.round) {\n return {\n code: 404,\n error: {\n message: `No round data found for address ${address}`,\n type: ERROR.ERROR_ROUND_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRounds(after: string, limit?: number): Promise<RoundsResponse> {\n try {\n const ROUND_HISTORY_QUERY = `query ($limit: Int, $after: Cursor) {\n rounds(first: $limit, after: $after, orderBy: [TIMESTAMP_DESC]){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n cursor\n }\n }\n }\n `;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No rounds data found',\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRoundsByCircuitName(\n circuitName: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n try {\n const ROUND_HISTORY_QUERY = `query ($limit: Int, $after: Cursor) {\n rounds(first: $limit, after: $after, filter:{\n circuitName:{\n equalTo: \"${circuitName}\"\n }\n }, orderBy: [TIMESTAMP_DESC]){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n }\n }\n }\n `;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: `No rounds data found for circuit name ${circuitName}`,\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRoundsByStatus(\n status: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n let filterCondition = '';\n\n switch (status) {\n case 'Created':\n filterCondition = `\n or: [\n { votingStart: { equalTo: \"0\" } },\n { and: [\n { votingStart: { notEqualTo: \"0\" } },\n { votingStart: { greaterThan: \"${currentTime.toString()}\" } }\n ] }\n ]\n `;\n break;\n case 'Ongoing':\n filterCondition = `\n or: [\n { votingStart: { equalTo: \"0\" }},\n { votingStart: { lessThanOrEqualTo: \"${currentTime.toString()}\" }, votingEnd: { greaterThan: \"${currentTime.toString()}\" } }\n ]\n `;\n break;\n case 'Tallying':\n filterCondition = `\n and: [\n { status: { notEqualTo: \"Closed\" } },\n { votingEnd: { lessThan: \"${currentTime.toString()}\" } },\n { votingEnd: { notEqualTo: \"0\" } }\n ]\n `;\n break;\n case 'Closed':\n filterCondition = `status: { equalTo: \"Closed\" }`;\n break;\n default:\n return {\n code: 400,\n error: {\n message: `Invalid status: ${status}`,\n type: ERROR.ERROR_ROUND_INVALID_STATUS,\n },\n };\n }\n\n const ROUND_HISTORY_QUERY = `query ($limit: Int!, $after: Cursor) {\n rounds(first: $limit, after: $after, filter: { ${filterCondition} }, orderBy: [TIMESTAMP_DESC]) {\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: `No rounds data found for status ${status}`,\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRoundsByOperator(\n operator: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n try {\n if (!isValidAddress(operator)) {\n return {\n code: 400,\n error: {\n message: 'Invalid operator address format',\n type: ERROR.ERROR_OPERATOR_INVALID_ADDRESS,\n },\n };\n }\n\n const ROUND_HISTORY_QUERY = `query ($limit: Int!, $after: Cursor) {\n rounds(first: $limit, after: $after, filter:{\n operator:{\n equalTo: \"${operator}\"\n }\n }, orderBy: [TIMESTAMP_DESC]){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: `No rounds data found for operator ${operator}`,\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import {\n TransactionsResponse,\n TransactionResponse,\n TransactionGraphqlResponse,\n TransactionsGraphqlResponse,\n} from '../../types';\nimport { Http } from '../../libs';\nimport { isValidAddress } from '../../utils';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Transaction {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getTransactionByHash(txHash: string): Promise<TransactionResponse> {\n try {\n const TRANSACTION_QUERY = `query {\n transaction(id: \"${txHash}\") {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }`;\n\n const response = await this.http.fetchGraphql<TransactionGraphqlResponse>(\n TRANSACTION_QUERY,\n ''\n );\n\n if (!response || !response.data || !response.data.transaction) {\n return {\n code: 404,\n error: {\n message: `No transaction found for txHash ${txHash}`,\n type: ERROR.ERROR_TRANSACTION_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getTransactions(\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n try {\n const TRANSACTION_HISTORY_QUERY = `query transactions($limit: Int, $after: Cursor) {\n transactions(first: $limit, after: $after, orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<TransactionsGraphqlResponse>(\n TRANSACTION_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.transactions ||\n !response.data.transactions.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No transactions data found',\n type: ERROR.ERROR_TRANSACTIONS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getTransactionsByContractAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const TRANSACTION_HISTORY_QUERY = `query transactions($limit: Int!, $after: Cursor) {\n transactions(first: $limit, after: $after, filter:{\n contractAddress:{\n equalTo: \"${address}\"\n }\n }, orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<TransactionsGraphqlResponse>(\n TRANSACTION_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.transactions ||\n !response.data.transactions.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No transactions data found',\n type: ERROR.ERROR_TRANSACTIONS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import { Http } from '../../libs';\nimport { isValidAddress } from '../../utils';\nimport { ProofResponse, ProofGraphqlResponse } from '../../types';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Proof {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getProofByContractAddress(address: string): Promise<ProofResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const PROOF_QUERY = `query HomePage {\n proofData(first: 100, filter:{\n contractAddress:{\n equalTo: \"${address}\"\n }\n } ,orderBy: [TIMESTAMP_DESC]\n ){\n nodes {\n id\n blockHeight\n txHash\n contractAddress\n timestamp\n actionType\n commitment\n proof\n }\n }\n }\n `;\n\n const response = await this.http.fetchGraphql<ProofGraphqlResponse>(\n PROOF_QUERY,\n ''\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.proofData ||\n !response.data.proofData.nodes ||\n response.data.proofData.nodes.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No proof found for round address ${address}`,\n type: ERROR.ERROR_PROOF_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import { Http } from '../../libs';\nimport {\n DeactivateMessage,\n SignUpEventsGraphqlResponse,\n SignUpEventsResponse,\n} from '../../types';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Event {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getSignUpEventByPubKey(\n contractAddress: string,\n pubKey: bigint[]\n ): Promise<SignUpEventsResponse> {\n try {\n const STATE_IDX_BY_PUB_KEY_QUERY = `\nquery signUpEvents($limit: Int, $after: Cursor) {\n\tsignUpEvents(\n first: $limit, after: $after,\n\t\tfilter: {\n\t\t\tcontractAddress: {\n\t\t\t\tequalTo: \"${contractAddress}\"\n\t\t\t}\n\t\t\tpubKey: {\n\t\t\t\tequalTo: \"${pubKey.map((n) => `\\\\\"${n}\\\\\"`).join(',')}\"\n\t\t\t}\n\t\t}) {\n\t\tnodes {\n\t\t\tid\n\t\t\tblockHeight\n\t\t\ttxHash\n\t\t\tcontractAddress\n\t\t\ttimestamp\n\t\t\tpubKey\n\t\t\tstateIdx\n\t\t\tbalance\n\t\t}\n\t}\n}\n `;\n\n const response =\n await this.http.fetchGraphql<SignUpEventsGraphqlResponse>(\n STATE_IDX_BY_PUB_KEY_QUERY,\n ''\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.signUpEvents ||\n !response.data.signUpEvents.nodes ||\n response.data.signUpEvents.nodes.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No signUpEvents found for pubKey ${pubKey\n .map((n) => `\"${n}\"`)\n .join(',')}`,\n type: ERROR.ERROR_SIGN_UP_EVENTS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: {\n signUpEvents: response.data.signUpEvents.nodes,\n },\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async fetchAllDeactivateLogs(contractAddress: string) {\n const DEACTIVATE_MESSAGE_QUERY = `query ($limit: Int, $offset: Int) {\n deactivateMessages(\n first: $limit,\n offset: $offset,\n orderBy: [BLOCK_HEIGHT_ASC],\n filter: {\n maciContractAddress: { \n equalTo: \"${contractAddress}\" \n },\n }\n ) {\n\t totalCount\n\t pageInfo {\n endCursor\n hasNextPage\n\t }\n nodes {\n id\n blockHeight\n timestamp\n txHash\n deactivateMessage\n maciContractAddress\n maciOperator\n }\n }\n}`;\n const ds = await this.http.fetchAllGraphqlPages<DeactivateMessage>(\n DEACTIVATE_MESSAGE_QUERY,\n {}\n );\n\n return ds.reduce(\n (s, c) => [...s, ...JSON.parse(c.deactivateMessage)],\n [] as string[][]\n );\n }\n}\n","import {\n BalanceResponse,\n RoundResponse,\n RoundsResponse,\n OperatorResponse,\n OperatorsResponse,\n CircuitResponse,\n TransactionResponse,\n TransactionsResponse,\n CircuitsResponse,\n ProofResponse,\n SignUpEventsResponse,\n OperatorDelayOperationsResponse,\n MissRateResponse,\n SelectiveRoundResponse,\n DeactivateMessage,\n} from '../../types';\nimport { IndexerParams } from './types';\nimport { Http } from '../http';\nimport {\n Round,\n UserAccount,\n Circuit,\n Operator,\n Proof,\n Transaction,\n Event,\n} from '../query';\n\n/**\n * @class Indexer\n * @description This class is used to interact with Maci Indexer.\n */\nexport class Indexer {\n public restEndpoint: string;\n public apiEndpoint: string;\n public registryAddress: string;\n\n public http: Http;\n public round: Round;\n public account: UserAccount;\n public circuit: Circuit;\n public operator: Operator;\n public proof: Proof;\n public transaction: Transaction;\n public event: Event;\n\n /**\n * @constructor\n * @param {IndexerParams} params - The parameters for the Maci Indexer instance.\n */\n constructor({\n restEndpoint,\n apiEndpoint,\n registryAddress,\n http,\n }: IndexerParams) {\n this.http = http;\n\n this.restEndpoint = restEndpoint;\n this.apiEndpoint = apiEndpoint;\n this.registryAddress = registryAddress;\n\n this.round = new Round(this.http);\n this.account = new UserAccount(this.http);\n this.circuit = new Circuit(this.http);\n this.operator = new Operator(this.http, this.registryAddress);\n this.proof = new Proof(this.http);\n this.transaction = new Transaction(this.http);\n this.event = new Event(this.http);\n }\n\n /**\n * @method balanceOf\n * @description Get the balance of a specific address.\n * @param {string} address - The address to check the balance for.\n * @returns {Promise<BalanceResponse>} The balance response.\n */\n async balanceOf(address: string): Promise<BalanceResponse> {\n return await this.account.balanceOf(address);\n }\n\n /**\n * @method getRoundById\n * @description Get a round by its ID.\n * @param {string} id - The ID of the round.\n * @returns {Promise<RoundResponse>} The round response.\n */\n async getRoundById(id: string): Promise<RoundResponse> {\n return await this.round.getRoundById(id);\n }\n\n /**\n * @method getRoundWithFields\n * @description Get a round by its address with selective fields.\n * @param {string} address - The address of the round.\n * @param {string[]} [fields] - The fields to retrieve.\n * @returns {Promise<SelectiveRoundResponse>} The round response.\n */\n async getRoundWithFields(\n address: string,\n fields?: string[]\n ): Promise<SelectiveRoundResponse> {\n return await this.round.getRoundWithFields(address, fields);\n }\n\n /**\n * @method getRounds\n * @description Get multiple rounds.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRounds(after: string, limit?: number): Promise<RoundsResponse> {\n return await this.round.getRounds(after, limit);\n }\n\n /**\n * @method getRoundsByStatus\n * @description Get rounds by their status.\n * @param {string} status - The status of the rounds to retrieve.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByStatus(\n status: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.round.getRoundsByStatus(status, after, limit);\n }\n\n /**\n * @method getRoundsByCircuitName\n * @description Get rounds by their circuit name.\n * @param {string} name - The name of the circuit.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByCircuitName(\n name: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.round.getRoundsByCircuitName(name, after, limit);\n }\n\n /**\n * @method getRoundsByOperator\n * @description Get rounds by their operator address.\n * @param {string} address - The address of the operator.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByOperator(\n address: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.round.getRoundsByOperator(address, after, limit);\n }\n\n /**\n * @method getOperatorByAddress\n * @description Get an operator by their address.\n * @param {string} address - The address of the operator.\n * @returns {Promise<OperatorResponse>} The operator response.\n */\n async getOperatorByAddress(address: string): Promise<OperatorResponse> {\n return await this.operator.getOperatorByAddress(address);\n }\n\n async getOperatorDelayOperationsByAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<OperatorDelayOperationsResponse> {\n return await this.operator.getOperatorDelayOperationsByAddress(\n address,\n after,\n limit\n );\n }\n\n async queryMissRate(\n address: string,\n durationDay: number\n ): Promise<MissRateResponse> {\n return await this.operator.queryMissRate(address, durationDay);\n }\n\n /**\n * @method getOperators\n * @description Get multiple operators.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of operators to retrieve.\n * @returns {Promise<OperatorsResponse>} The operators response.\n */\n async getOperators(\n after: string,\n limit?: number\n ): Promise<OperatorsResponse> {\n return await this.operator.getOperators(after, limit);\n }\n\n /**\n * @method getCircuitByName\n * @description Get a circuit by its name.\n * @param {string} name - The name of the circuit.\n * @returns {Promise<CircuitResponse>} The circuit response.\n */\n async getCircuitByName(name: string): Promise<CircuitResponse> {\n return await this.circuit.getCircuitByName(name);\n }\n\n /**\n * @method getCircuits\n * @description Get all available circuits.\n * @returns {Promise<CircuitsResponse>} The circuits response.\n */\n async getCircuits(): Promise<CircuitsResponse> {\n return await this.circuit.getCircuits();\n }\n\n /**\n * @method getTransactionByHash\n * @description Get a transaction by its hash.\n * @param {string} hash - The hash of the transaction.\n * @returns {Promise<TransactionResponse>} The transaction response.\n */\n async getTransactionByHash(hash: string): Promise<TransactionResponse> {\n return await this.transaction.getTransactionByHash(hash);\n }\n\n /**\n * @method getTransactions\n * @description Get multiple transactions.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of transactions to retrieve.\n * @returns {Promise<TransactionsResponse>} The transactions response.\n */\n async getTransactions(\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n return await this.transaction.getTransactions(after, limit);\n }\n\n /**\n * @method getTransactionsByContractAddress\n * @description Get transactions by contract address.\n * @param {string} address - The contract address.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of transactions to retrieve.\n * @returns {Promise<TransactionsResponse>} The transactions response.\n */\n async getTransactionsByContractAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n return await this.transaction.getTransactionsByContractAddress(\n address,\n after,\n limit\n );\n }\n\n /**\n * @method getProofByContractAddress\n * @description Get proof data by contract address.\n * @param {string} address - The contract address.\n * @returns {Promise<ProofResponse>} The proof response.\n */\n async getProofByContractAddress(address: string): Promise<ProofResponse> {\n return await this.proof.getProofByContractAddress(address);\n }\n\n /**\n * @method getStateIdxByPubKey\n * @description Get the state index of a specific public key.\n * @param {string} contractAddress - The contract address.\n * @param {bigint[]} pubKey - The public key.\n * @returns {Promise<SignUpEventsResponse>} The sign up events response.\n */\n async getSignUpEventByPubKey(\n contractAddress: string,\n pubKey: bigint[]\n ): Promise<SignUpEventsResponse> {\n return await this.event.getSignUpEventByPubKey(contractAddress, pubKey);\n }\n\n async fetchAllDeactivateLogs(\n contractAddress: string\n ): Promise<DeactivateMessage[]> {\n return await this.event.fetchAllDeactivateLogs(contractAddress);\n }\n}\n","import { Secp256k1HdWallet } from '@cosmjs/launchpad';\nimport { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n GasPrice,\n SigningStargateClient,\n SigningStargateClientOptions,\n} from '@cosmjs/stargate';\nimport { SigningCosmWasmClient } from '@cosmjs/cosmwasm-stargate';\nimport { MaciClient } from './ts/Maci.client';\nimport { AMaciClient } from './ts/AMaci.client';\nimport { RegistryClient } from './ts/Registry.client';\nimport { OracleMaciClient } from './ts/OracleMaci.client';\nimport { SaasClient } from './ts/Saas.client';\nimport { ApiMaciClient } from './ts/ApiMaci.client';\nimport { ApiSaasClient } from './ts/ApiSaas.client';\n\nconst defaultSigningClientOptions: SigningStargateClientOptions = {\n broadcastPollIntervalMs: 8_000,\n broadcastTimeoutMs: 150_000, // 2min30s for the tx to be confirmed\n gasPrice: GasPrice.fromString('10000000000peaka'),\n};\n\nexport async function createMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new MaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createAMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new AMaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createApiMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new ApiMaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createRegistryClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new RegistryClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createSaasClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new SaasClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createApiSaasClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new ApiSaasClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createOracleMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new OracleMaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createContractClientByWallet(\n rpcEndpoint: string,\n wallet: OfflineSigner\n) {\n const client = await SigningCosmWasmClient.connectWithSigner(\n rpcEndpoint,\n wallet,\n {\n ...defaultSigningClientOptions,\n }\n );\n return client;\n}\n\nexport async function getSignerClientByWallet(\n rpcEndpoint: string,\n wallet: OfflineSigner\n) {\n const signingStargateClient = await SigningStargateClient.connectWithSigner(\n rpcEndpoint,\n wallet,\n {\n ...defaultSigningClientOptions,\n }\n );\n return signingStargateClient;\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Uint256,\n Timestamp,\n Uint64,\n InstantiateMsg,\n PubKey,\n Groth16VKeyType,\n MaciParameters,\n PlonkVKeyType,\n QuinaryTreeRoot,\n RoundInfo,\n VotingTime,\n Whitelist,\n WhitelistConfig,\n ExecuteMsg,\n Uint128,\n MessageData,\n Groth16ProofType,\n PlonkProofType,\n QueryMsg,\n Addr,\n PeriodStatus,\n Period,\n Boolean,\n ArrayOfString,\n} from './Maci.types';\nexport interface MaciReadOnlyInterface {\n contractAddress: string;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({ address }: { address: Addr }) => Promise<Uint256>;\n getVoiceCreditBalance: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n whiteList: () => Promise<Whitelist>;\n isWhiteList: ({ sender }: { sender: string }) => Promise<Boolean>;\n whiteBalanceOf: ({ sender }: { sender: string }) => Promise<Uint256>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n}\nexport class MaciQueryClient implements MaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.whiteList = this.whiteList.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.whiteBalanceOf = this.whiteBalanceOf.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n }\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {},\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {},\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {},\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {},\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {},\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {},\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {},\n });\n };\n getResult = async ({ index }: { index: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index,\n },\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {},\n });\n };\n getStateIdxInc = async ({ address }: { address: Addr }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address,\n },\n });\n };\n getVoiceCreditBalance = async ({\n index,\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index,\n },\n });\n };\n whiteList = async (): Promise<Whitelist> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_list: {},\n });\n };\n isWhiteList = async ({ sender }: { sender: string }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n sender,\n },\n });\n };\n whiteBalanceOf = async ({ sender }: { sender: string }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_balance_of: {\n sender,\n },\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {},\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {},\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {},\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {},\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {},\n });\n };\n}\nexport interface MaciInterface extends MaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setParams: (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setWhitelists: (\n {\n whitelists,\n }: {\n whitelists: Whitelist;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n signUp: (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startProcessPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processMessage: (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopProcessingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processTally: (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopTallyingPeriod: (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grant: (\n {\n maxAmount,\n }: {\n maxAmount: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n revoke: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n bond: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class MaciClient extends MaciQueryClient implements MaciInterface {\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setParams = this.setParams.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setWhitelists = this.setWhitelists.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.startVotingPeriod = this.startVotingPeriod.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.stopVotingPeriod = this.stopVotingPeriod.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.grant = this.grant.bind(this);\n this.revoke = this.revoke.bind(this);\n this.bond = this.bond.bind(this);\n this.withdraw = this.withdraw.bind(this);\n }\n setParams = async (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_params: {\n int_state_tree_depth: intStateTreeDepth,\n message_batch_size: messageBatchSize,\n state_tree_depth: stateTreeDepth,\n vote_option_tree_depth: voteOptionTreeDepth,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setWhitelists = async (\n {\n whitelists,\n }: {\n whitelists: Whitelist;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_whitelists: {\n whitelists,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n signUp = async (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n sign_up: {\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startProcessPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_process_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n stopVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n publishMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processMessage = async (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopProcessingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_processing_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n processTally = async (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopTallyingPeriod = async (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_tallying_period: {\n results,\n salt,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grant = async (\n {\n maxAmount,\n }: {\n maxAmount: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n grant: {\n max_amount: maxAmount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n revoke = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n revoke: {},\n },\n fee,\n memo,\n _funds\n );\n };\n bond = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n bond: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Addr,\n Uint256,\n Timestamp,\n Uint64,\n InstantiateMsg,\n PubKey,\n MaciParameters,\n RoundInfo,\n VotingTime,\n WhitelistBase,\n WhitelistBaseConfig,\n ExecuteMsg,\n MessageData,\n Groth16ProofType,\n QueryMsg,\n Boolean,\n DelayType,\n DelayRecords,\n DelayRecord,\n PeriodStatus,\n Period,\n TallyDelayInfo,\n NullableString,\n NullableUint256,\n Uint128,\n ArrayOfString,\n Whitelist,\n WhitelistConfig,\n} from './AMaci.types';\nexport interface AMaciReadOnlyInterface {\n contractAddress: string;\n admin: () => Promise<Addr>;\n operator: () => Promise<Addr>;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getDMsgChainLength: () => Promise<Uint256>;\n getProcessedDMsgCount: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({ address }: { address: Addr }) => Promise<Uint256>;\n getVoiceCreditBalance: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getVoiceCreditAmount: () => Promise<Uint256>;\n whiteList: () => Promise<Whitelist>;\n canSignUp: ({ sender }: { sender: Addr }) => Promise<Boolean>;\n isWhiteList: ({ sender }: { sender: Addr }) => Promise<Boolean>;\n isRegister: ({ sender }: { sender: Addr }) => Promise<Boolean>;\n signuped: ({ pubkeyX }: { pubkeyX: Uint256 }) => Promise<Uint256>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n queryPreDeactivateRoot: () => Promise<Uint256>;\n queryPreDeactivateCoordinatorHash: () => Promise<NullableUint256>;\n getDelayRecords: () => Promise<DelayRecords>;\n getTallyDelay: () => Promise<TallyDelayInfo>;\n queryOracleWhitelistConfig: () => Promise<NullableString>;\n canSignUpWithOracle: ({\n certificate,\n pubkey,\n }: {\n certificate: string;\n pubkey: PubKey;\n }) => Promise<Boolean>;\n whiteBalanceOf: ({\n certificate,\n pubkey,\n }: {\n certificate: string;\n pubkey: PubKey;\n }) => Promise<Uint256>;\n}\nexport class AMaciQueryClient implements AMaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.admin = this.admin.bind(this);\n this.operator = this.operator.bind(this);\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getDMsgChainLength = this.getDMsgChainLength.bind(this);\n this.getProcessedDMsgCount = this.getProcessedDMsgCount.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.getVoiceCreditAmount = this.getVoiceCreditAmount.bind(this);\n this.whiteList = this.whiteList.bind(this);\n this.canSignUp = this.canSignUp.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.isRegister = this.isRegister.bind(this);\n this.signuped = this.signuped.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n this.queryPreDeactivateRoot = this.queryPreDeactivateRoot.bind(this);\n this.queryPreDeactivateCoordinatorHash =\n this.queryPreDeactivateCoordinatorHash.bind(this);\n this.getDelayRecords = this.getDelayRecords.bind(this);\n this.getTallyDelay = this.getTallyDelay.bind(this);\n this.queryOracleWhitelistConfig =\n this.queryOracleWhitelistConfig.bind(this);\n this.canSignUpWithOracle = this.canSignUpWithOracle.bind(this);\n this.whiteBalanceOf = this.whiteBalanceOf.bind(this);\n }\n admin = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n admin: {},\n });\n };\n operator = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operator: {},\n });\n };\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {},\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {},\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {},\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {},\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {},\n });\n };\n getDMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_d_msg_chain_length: {},\n });\n };\n getProcessedDMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_d_msg_count: {},\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {},\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {},\n });\n };\n getResult = async ({ index }: { index: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index,\n },\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {},\n });\n };\n getStateIdxInc = async ({ address }: { address: Addr }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address,\n },\n });\n };\n getVoiceCreditBalance = async ({\n index,\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index,\n },\n });\n };\n getVoiceCreditAmount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_amount: {},\n });\n };\n whiteList = async (): Promise<Whitelist> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_list: {},\n });\n };\n canSignUp = async ({ sender }: { sender: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n can_sign_up: {\n sender,\n },\n });\n };\n isWhiteList = async ({ sender }: { sender: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n sender,\n },\n });\n };\n isRegister = async ({ sender }: { sender: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_register: {\n sender,\n },\n });\n };\n signuped = async ({ pubkeyX }: { pubkeyX: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n signuped: {\n pubkey_x: pubkeyX,\n },\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {},\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {},\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {},\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {},\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {},\n });\n };\n queryPreDeactivateRoot = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_pre_deactivate_root: {},\n });\n };\n queryPreDeactivateCoordinatorHash = async (): Promise<NullableUint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_pre_deactivate_coordinator_hash: {},\n });\n };\n getDelayRecords = async (): Promise<DelayRecords> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_delay_records: {},\n });\n };\n getTallyDelay = async (): Promise<TallyDelayInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_tally_delay: {},\n });\n };\n queryOracleWhitelistConfig = async (): Promise<NullableString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_oracle_whitelist_config: {},\n });\n };\n canSignUpWithOracle = async ({\n certificate,\n pubkey,\n }: {\n certificate: string;\n pubkey: PubKey;\n }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n can_sign_up_with_oracle: {\n certificate,\n pubkey,\n },\n });\n };\n whiteBalanceOf = async ({\n certificate,\n pubkey,\n }: {\n certificate: string;\n pubkey: PubKey;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_balance_of: {\n certificate,\n pubkey,\n },\n });\n };\n}\nexport interface AMaciInterface extends AMaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setRoundInfo: (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setWhitelists: (\n {\n whitelists,\n }: {\n whitelists: WhitelistBase;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n signUp: (\n {\n certificate,\n pubkey,\n }: {\n certificate?: string;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startProcessPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishDeactivateMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processDeactivateMessage: (\n {\n groth16Proof,\n newDeactivateCommitment,\n newDeactivateRoot,\n size,\n }: {\n groth16Proof: Groth16ProofType;\n newDeactivateCommitment: Uint256;\n newDeactivateRoot: Uint256;\n size: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n addNewKey: (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n preAddNewKey: (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processMessage: (\n {\n groth16Proof,\n newStateCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newStateCommitment: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopProcessingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processTally: (\n {\n groth16Proof,\n newTallyCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newTallyCommitment: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopTallyingPeriod: (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n claim: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class AMaciClient extends AMaciQueryClient implements AMaciInterface {\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setWhitelists = this.setWhitelists.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.publishDeactivateMessage = this.publishDeactivateMessage.bind(this);\n this.processDeactivateMessage = this.processDeactivateMessage.bind(this);\n this.addNewKey = this.addNewKey.bind(this);\n this.preAddNewKey = this.preAddNewKey.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.claim = this.claim.bind(this);\n }\n setRoundInfo = async (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setWhitelists = async (\n {\n whitelists,\n }: {\n whitelists: WhitelistBase;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_whitelists: {\n whitelists,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n signUp = async (\n {\n certificate,\n pubkey,\n }: {\n certificate?: string;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n sign_up: {\n certificate,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startProcessPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_process_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n publishDeactivateMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_deactivate_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processDeactivateMessage = async (\n {\n groth16Proof,\n newDeactivateCommitment,\n newDeactivateRoot,\n size,\n }: {\n groth16Proof: Groth16ProofType;\n newDeactivateCommitment: Uint256;\n newDeactivateRoot: Uint256;\n size: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_deactivate_message: {\n groth16_proof: groth16Proof,\n new_deactivate_commitment: newDeactivateCommitment,\n new_deactivate_root: newDeactivateRoot,\n size,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n addNewKey = async (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n add_new_key: {\n d,\n groth16_proof: groth16Proof,\n nullifier,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n preAddNewKey = async (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n pre_add_new_key: {\n d,\n groth16_proof: groth16Proof,\n nullifier,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n publishMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processMessage = async (\n {\n groth16Proof,\n newStateCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newStateCommitment: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopProcessingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_processing_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n processTally = async (\n {\n groth16Proof,\n newTallyCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newTallyCommitment: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopTallyingPeriod = async (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_tallying_period: {\n results,\n salt,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n claim = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n claim: {},\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Addr,\n InstantiateMsg,\n ExecuteMsg,\n Uint256,\n Timestamp,\n Uint64,\n Decimal,\n PubKey,\n RoundInfo,\n VotingTime,\n WhitelistBase,\n WhitelistBaseConfig,\n ValidatorSet,\n CircuitChargeConfig,\n QueryMsg,\n AdminResponse,\n String,\n Boolean,\n} from './Registry.types';\nexport interface RegistryReadOnlyInterface {\n contractAddress: string;\n admin: () => Promise<AdminResponse>;\n operator: () => Promise<Addr>;\n isMaciOperator: ({ address }: { address: Addr }) => Promise<Boolean>;\n isValidator: ({ address }: { address: Addr }) => Promise<Boolean>;\n getValidators: () => Promise<ValidatorSet>;\n getValidatorOperator: ({ address }: { address: Addr }) => Promise<Addr>;\n getMaciOperatorPubkey: ({ address }: { address: Addr }) => Promise<PubKey>;\n getMaciOperatorIdentity: ({ address }: { address: Addr }) => Promise<String>;\n getCircuitChargeConfig: () => Promise<CircuitChargeConfig>;\n}\nexport class RegistryQueryClient implements RegistryReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.admin = this.admin.bind(this);\n this.operator = this.operator.bind(this);\n this.isMaciOperator = this.isMaciOperator.bind(this);\n this.isValidator = this.isValidator.bind(this);\n this.getValidators = this.getValidators.bind(this);\n this.getValidatorOperator = this.getValidatorOperator.bind(this);\n this.getMaciOperatorPubkey = this.getMaciOperatorPubkey.bind(this);\n this.getMaciOperatorIdentity = this.getMaciOperatorIdentity.bind(this);\n this.getCircuitChargeConfig = this.getCircuitChargeConfig.bind(this);\n }\n admin = async (): Promise<AdminResponse> => {\n return this.client.queryContractSmart(this.contractAddress, {\n admin: {},\n });\n };\n operator = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operator: {},\n });\n };\n isMaciOperator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_maci_operator: {\n address,\n },\n });\n };\n isValidator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_validator: {\n address,\n },\n });\n };\n getValidators = async (): Promise<ValidatorSet> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_validators: {},\n });\n };\n getValidatorOperator = async ({\n address,\n }: {\n address: Addr;\n }): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_validator_operator: {\n address,\n },\n });\n };\n getMaciOperatorPubkey = async ({\n address,\n }: {\n address: Addr;\n }): Promise<PubKey> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_maci_operator_pubkey: {\n address,\n },\n });\n };\n getMaciOperatorIdentity = async ({\n address,\n }: {\n address: Addr;\n }): Promise<String> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_maci_operator_identity: {\n address,\n },\n });\n };\n getCircuitChargeConfig = async (): Promise<CircuitChargeConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_circuit_charge_config: {},\n });\n };\n}\nexport interface RegistryInterface extends RegistryReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setMaciOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setMaciOperatorPubkey: (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setMaciOperatorIdentity: (\n {\n identity,\n }: {\n identity: string;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n createRound: (\n {\n certificationSystem,\n circuitType,\n maxVoter,\n operator,\n oracleWhitelistPubkey,\n preDeactivateCoordinator,\n preDeactivateRoot,\n roundInfo,\n voiceCreditAmount,\n voteOptionMap,\n votingTime,\n whitelist,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n maxVoter: Uint256;\n operator: Addr;\n oracleWhitelistPubkey?: string;\n preDeactivateCoordinator?: PubKey;\n preDeactivateRoot: Uint256;\n roundInfo: RoundInfo;\n voiceCreditAmount: Uint256;\n voteOptionMap: string[];\n votingTime: VotingTime;\n whitelist?: WhitelistBase;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setValidators: (\n {\n addresses,\n }: {\n addresses: ValidatorSet;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n removeValidator: (\n {\n address,\n }: {\n address: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n updateAmaciCodeId: (\n {\n amaciCodeId,\n }: {\n amaciCodeId: number;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n changeOperator: (\n {\n address,\n }: {\n address: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n changeChargeConfig: (\n {\n config,\n }: {\n config: CircuitChargeConfig;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class RegistryClient\n extends RegistryQueryClient\n implements RegistryInterface\n{\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setMaciOperator = this.setMaciOperator.bind(this);\n this.setMaciOperatorPubkey = this.setMaciOperatorPubkey.bind(this);\n this.setMaciOperatorIdentity = this.setMaciOperatorIdentity.bind(this);\n this.createRound = this.createRound.bind(this);\n this.setValidators = this.setValidators.bind(this);\n this.removeValidator = this.removeValidator.bind(this);\n this.updateAmaciCodeId = this.updateAmaciCodeId.bind(this);\n this.changeOperator = this.changeOperator.bind(this);\n this.changeChargeConfig = this.changeChargeConfig.bind(this);\n }\n setMaciOperator = async (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_maci_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setMaciOperatorPubkey = async (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_maci_operator_pubkey: {\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setMaciOperatorIdentity = async (\n {\n identity,\n }: {\n identity: string;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_maci_operator_identity: {\n identity,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n createRound = async (\n {\n certificationSystem,\n circuitType,\n maxVoter,\n operator,\n oracleWhitelistPubkey,\n preDeactivateCoordinator,\n preDeactivateRoot,\n roundInfo,\n voiceCreditAmount,\n voteOptionMap,\n votingTime,\n whitelist,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n maxVoter: Uint256;\n operator: Addr;\n oracleWhitelistPubkey?: string;\n preDeactivateCoordinator?: PubKey;\n preDeactivateRoot: Uint256;\n roundInfo: RoundInfo;\n voiceCreditAmount: Uint256;\n voteOptionMap: string[];\n votingTime: VotingTime;\n whitelist?: WhitelistBase;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n create_round: {\n certification_system: certificationSystem,\n circuit_type: circuitType,\n max_voter: maxVoter,\n operator,\n oracle_whitelist_pubkey: oracleWhitelistPubkey,\n pre_deactivate_coordinator: preDeactivateCoordinator,\n pre_deactivate_root: preDeactivateRoot,\n round_info: roundInfo,\n voice_credit_amount: voiceCreditAmount,\n vote_option_map: voteOptionMap,\n voting_time: votingTime,\n whitelist,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setValidators = async (\n {\n addresses,\n }: {\n addresses: ValidatorSet;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_validators: {\n addresses,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n removeValidator = async (\n {\n address,\n }: {\n address: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n remove_validator: {\n address,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n updateAmaciCodeId = async (\n {\n amaciCodeId,\n }: {\n amaciCodeId: number;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_amaci_code_id: {\n amaci_code_id: amaciCodeId,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n changeOperator = async (\n {\n address,\n }: {\n address: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n change_operator: {\n address,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n changeChargeConfig = async (\n {\n config,\n }: {\n config: CircuitChargeConfig;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n change_charge_config: {\n config,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Uint256,\n Addr,\n Timestamp,\n Uint64,\n VotingPowerMode,\n InstantiateMsg,\n PubKey,\n Groth16VKeyType,\n MaciParameters,\n PlonkVKeyType,\n QuinaryTreeRoot,\n RoundInfo,\n VotingTime,\n VotingPowerArgs,\n ExecuteMsg,\n Uint128,\n MessageData,\n Groth16ProofType,\n PlonkProofType,\n QueryMsg,\n PeriodStatus,\n Period,\n GrantConfig,\n Boolean,\n Binary,\n OracleWhitelistConfig,\n ArrayOfString,\n WhitelistConfig,\n} from './OracleMaci.types';\nexport interface OracleMaciReadOnlyInterface {\n contractAddress: string;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({ address }: { address: Addr }) => Promise<Uint256>;\n getVoiceCreditBalance: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n isWhiteList: ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }) => Promise<Boolean>;\n whiteBalanceOf: ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }) => Promise<Uint256>;\n whiteInfo: ({ sender }: { sender: string }) => Promise<WhitelistConfig>;\n grantInfo: ({ grantee }: { grantee: string }) => Promise<GrantConfig>;\n maxWhitelistNum: () => Promise<Uint128>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n queryOracleWhitelistConfig: () => Promise<OracleWhitelistConfig>;\n}\nexport class OracleMaciQueryClient implements OracleMaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.whiteBalanceOf = this.whiteBalanceOf.bind(this);\n this.whiteInfo = this.whiteInfo.bind(this);\n this.grantInfo = this.grantInfo.bind(this);\n this.maxWhitelistNum = this.maxWhitelistNum.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n this.queryOracleWhitelistConfig =\n this.queryOracleWhitelistConfig.bind(this);\n }\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {},\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {},\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {},\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {},\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {},\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {},\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {},\n });\n };\n getResult = async ({ index }: { index: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index,\n },\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {},\n });\n };\n getStateIdxInc = async ({ address }: { address: Addr }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address,\n },\n });\n };\n getVoiceCreditBalance = async ({\n index,\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index,\n },\n });\n };\n isWhiteList = async ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n amount,\n certificate,\n sender,\n },\n });\n };\n whiteBalanceOf = async ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_balance_of: {\n amount,\n certificate,\n sender,\n },\n });\n };\n whiteInfo = async ({\n sender,\n }: {\n sender: string;\n }): Promise<WhitelistConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_info: {\n sender,\n },\n });\n };\n grantInfo = async ({\n grantee,\n }: {\n grantee: string;\n }): Promise<GrantConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n grant_info: {\n grantee,\n },\n });\n };\n maxWhitelistNum = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_whitelist_num: {},\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {},\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {},\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {},\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {},\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {},\n });\n };\n queryOracleWhitelistConfig = async (): Promise<OracleWhitelistConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_oracle_whitelist_config: {},\n });\n };\n}\nexport interface OracleMaciInterface extends OracleMaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setParams: (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n signUp: (\n {\n amount,\n certificate,\n pubkey,\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startProcessPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processMessage: (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopProcessingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processTally: (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopTallyingPeriod: (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grant: (\n {\n baseAmount,\n grantee,\n }: {\n baseAmount: Uint128;\n grantee: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n revoke: (\n {\n grantee,\n }: {\n grantee: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n bond: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class OracleMaciClient\n extends OracleMaciQueryClient\n implements OracleMaciInterface\n{\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setParams = this.setParams.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.startVotingPeriod = this.startVotingPeriod.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.stopVotingPeriod = this.stopVotingPeriod.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.grant = this.grant.bind(this);\n this.revoke = this.revoke.bind(this);\n this.bond = this.bond.bind(this);\n this.withdraw = this.withdraw.bind(this);\n }\n setParams = async (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_params: {\n int_state_tree_depth: intStateTreeDepth,\n message_batch_size: messageBatchSize,\n state_tree_depth: stateTreeDepth,\n vote_option_tree_depth: voteOptionTreeDepth,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n signUp = async (\n {\n amount,\n certificate,\n pubkey,\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n sign_up: {\n amount,\n certificate,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startProcessPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_process_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n stopVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n publishMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processMessage = async (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopProcessingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_processing_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n processTally = async (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopTallyingPeriod = async (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_tallying_period: {\n results,\n salt,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grant = async (\n {\n baseAmount,\n grantee,\n }: {\n baseAmount: Uint128;\n grantee: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n grant: {\n base_amount: baseAmount,\n grantee,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n revoke = async (\n {\n grantee,\n }: {\n grantee: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n revoke: {\n grantee,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n bond = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n bond: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Addr,\n InstantiateMsg,\n ExecuteMsg,\n Uint128,\n Uint256,\n Timestamp,\n Uint64,\n PubKey,\n RoundInfo,\n QueryMsg,\n Config,\n Boolean,\n NullableMaciContractInfo,\n MaciContractInfo,\n ArrayOfMaciContractInfo,\n ArrayOfOperatorInfo,\n OperatorInfo,\n} from './Saas.types';\nexport interface SaasReadOnlyInterface {\n contractAddress: string;\n config: () => Promise<Config>;\n operators: () => Promise<ArrayOfOperatorInfo>;\n isOperator: ({ address }: { address: Addr }) => Promise<Boolean>;\n balance: () => Promise<Uint128>;\n maciContracts: ({\n limit,\n startAfter,\n }: {\n limit?: number;\n startAfter?: number;\n }) => Promise<ArrayOfMaciContractInfo>;\n operatorMaciContracts: ({\n limit,\n operator,\n startAfter,\n }: {\n limit?: number;\n operator: Addr;\n startAfter?: number;\n }) => Promise<ArrayOfMaciContractInfo>;\n maciContract: ({\n contractId,\n }: {\n contractId: number;\n }) => Promise<NullableMaciContractInfo>;\n oracleMaciCodeId: () => Promise<Uint64>;\n}\nexport class SaasQueryClient implements SaasReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.config = this.config.bind(this);\n this.operators = this.operators.bind(this);\n this.isOperator = this.isOperator.bind(this);\n this.balance = this.balance.bind(this);\n this.maciContracts = this.maciContracts.bind(this);\n this.operatorMaciContracts = this.operatorMaciContracts.bind(this);\n this.maciContract = this.maciContract.bind(this);\n this.oracleMaciCodeId = this.oracleMaciCodeId.bind(this);\n }\n config = async (): Promise<Config> => {\n return this.client.queryContractSmart(this.contractAddress, {\n config: {},\n });\n };\n operators = async (): Promise<ArrayOfOperatorInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operators: {},\n });\n };\n isOperator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_operator: {\n address,\n },\n });\n };\n balance = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n balance: {},\n });\n };\n maciContracts = async ({\n limit,\n startAfter,\n }: {\n limit?: number;\n startAfter?: number;\n }): Promise<ArrayOfMaciContractInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n maci_contracts: {\n limit,\n start_after: startAfter,\n },\n });\n };\n operatorMaciContracts = async ({\n limit,\n operator,\n startAfter,\n }: {\n limit?: number;\n operator: Addr;\n startAfter?: number;\n }): Promise<ArrayOfMaciContractInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operator_maci_contracts: {\n limit,\n operator,\n start_after: startAfter,\n },\n });\n };\n maciContract = async ({\n contractId,\n }: {\n contractId: number;\n }): Promise<NullableMaciContractInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n maci_contract: {\n contract_id: contractId,\n },\n });\n };\n oracleMaciCodeId = async (): Promise<Uint64> => {\n return this.client.queryContractSmart(this.contractAddress, {\n oracle_maci_code_id: {},\n });\n };\n}\nexport interface SaasInterface extends SaasReadOnlyInterface {\n contractAddress: string;\n sender: string;\n updateConfig: (\n {\n admin,\n denom,\n registryContract,\n }: {\n admin?: Addr;\n denom?: string;\n registryContract?: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n addOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n removeOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n deposit: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n recipient,\n }: {\n amount: Uint128;\n recipient?: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n updateOracleMaciCodeId: (\n {\n codeId,\n }: {\n codeId: number;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n createOracleMaciRound: (\n {\n certificationSystem,\n circuitType,\n coordinator,\n endTime,\n maxVoters,\n roundInfo,\n startTime,\n voteOptionMap,\n whitelistBackendPubkey,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n coordinator: PubKey;\n endTime: Timestamp;\n maxVoters: number;\n roundInfo: RoundInfo;\n startTime: Timestamp;\n voteOptionMap: string[];\n whitelistBackendPubkey: string;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n contractAddr,\n roundInfo,\n }: {\n contractAddr: string;\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n contractAddr,\n voteOptionMap,\n }: {\n contractAddr: string;\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grantToVoter: (\n {\n baseAmount,\n contractAddr,\n grantee,\n }: {\n baseAmount: Uint128;\n contractAddr: string;\n grantee: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class SaasClient extends SaasQueryClient implements SaasInterface {\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.updateConfig = this.updateConfig.bind(this);\n this.addOperator = this.addOperator.bind(this);\n this.removeOperator = this.removeOperator.bind(this);\n this.deposit = this.deposit.bind(this);\n this.withdraw = this.withdraw.bind(this);\n this.updateOracleMaciCodeId = this.updateOracleMaciCodeId.bind(this);\n this.createOracleMaciRound = this.createOracleMaciRound.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.grantToVoter = this.grantToVoter.bind(this);\n }\n updateConfig = async (\n {\n admin,\n denom,\n registryContract,\n }: {\n admin?: Addr;\n denom?: string;\n registryContract?: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_config: {\n admin,\n denom,\n registry_contract: registryContract,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n addOperator = async (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n add_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n removeOperator = async (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n remove_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n deposit = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n deposit: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n recipient,\n }: {\n amount: Uint128;\n recipient?: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n recipient,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n updateOracleMaciCodeId = async (\n {\n codeId,\n }: {\n codeId: number;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_oracle_maci_code_id: {\n code_id: codeId,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n createOracleMaciRound = async (\n {\n certificationSystem,\n circuitType,\n coordinator,\n endTime,\n maxVoters,\n roundInfo,\n startTime,\n voteOptionMap,\n whitelistBackendPubkey,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n coordinator: PubKey;\n endTime: Timestamp;\n maxVoters: number;\n roundInfo: RoundInfo;\n startTime: Timestamp;\n voteOptionMap: string[];\n whitelistBackendPubkey: string;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n create_oracle_maci_round: {\n certification_system: certificationSystem,\n circuit_type: circuitType,\n coordinator,\n end_time: endTime,\n max_voters: maxVoters.toString(),\n round_info: roundInfo,\n start_time: startTime,\n vote_option_map: voteOptionMap,\n whitelist_backend_pubkey: whitelistBackendPubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n contractAddr,\n roundInfo,\n }: {\n contractAddr: string;\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n contract_addr: contractAddr,\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n contractAddr,\n voteOptionMap,\n }: {\n contractAddr: string;\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n contract_addr: contractAddr,\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grantToVoter = async (\n {\n baseAmount,\n contractAddr,\n grantee,\n }: {\n baseAmount: Uint128;\n contractAddr: string;\n grantee: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n grant_to_voter: {\n base_amount: baseAmount,\n contract_addr: contractAddr,\n grantee,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n* This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n* and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n*/\n\nimport { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from \"@cosmjs/cosmwasm-stargate\";\nimport { Coin, StdFee } from \"@cosmjs/amino\";\nimport { Uint256, Timestamp, Uint64, VotingPowerMode, InstantiateMsg, PubKey, RoundInfo, VotingTime, VotingPowerArgs, ExecuteMsg, Uint128, MessageData, Groth16ProofType, PlonkProofType, QueryMsg, Addr, PeriodStatus, Period, Boolean, Binary, OracleWhitelistConfig, ArrayOfString, WhitelistConfig } from \"./ApiMaci.types\";\nexport interface ApiMaciReadOnlyInterface {\n contractAddress: string;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({\n index\n }: {\n index: Uint256;\n }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({\n address\n }: {\n address: Addr;\n }) => Promise<Uint256>;\n getVoiceCreditBalance: ({\n index\n }: {\n index: Uint256;\n }) => Promise<Uint256>;\n isWhiteList: ({\n amount,\n certificate,\n pubkey\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n }) => Promise<Boolean>;\n whiteBalanceOf: ({\n amount,\n certificate,\n pubkey\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n }) => Promise<Uint256>;\n whiteInfo: ({\n pubkey\n }: {\n pubkey: PubKey;\n }) => Promise<WhitelistConfig>;\n maxWhitelistNum: () => Promise<Uint128>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n queryOracleWhitelistConfig: () => Promise<OracleWhitelistConfig>;\n}\nexport class ApiMaciQueryClient implements ApiMaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.whiteBalanceOf = this.whiteBalanceOf.bind(this);\n this.whiteInfo = this.whiteInfo.bind(this);\n this.maxWhitelistNum = this.maxWhitelistNum.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n this.queryOracleWhitelistConfig = this.queryOracleWhitelistConfig.bind(this);\n }\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {}\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {}\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {}\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {}\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {}\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {}\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {}\n });\n };\n getResult = async ({\n index\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index\n }\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {}\n });\n };\n getStateIdxInc = async ({\n address\n }: {\n address: Addr;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address\n }\n });\n };\n getVoiceCreditBalance = async ({\n index\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index\n }\n });\n };\n isWhiteList = async ({\n amount,\n certificate,\n pubkey\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n amount,\n certificate,\n pubkey\n }\n });\n };\n whiteBalanceOf = async ({\n amount,\n certificate,\n pubkey\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_balance_of: {\n amount,\n certificate,\n pubkey\n }\n });\n };\n whiteInfo = async ({\n pubkey\n }: {\n pubkey: PubKey;\n }): Promise<WhitelistConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_info: {\n pubkey\n }\n });\n };\n maxWhitelistNum = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_whitelist_num: {}\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {}\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {}\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {}\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {}\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {}\n });\n };\n queryOracleWhitelistConfig = async (): Promise<OracleWhitelistConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_oracle_whitelist_config: {}\n });\n };\n}\nexport interface ApiMaciInterface extends ApiMaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setRoundInfo: ({\n roundInfo\n }: {\n roundInfo: RoundInfo;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n setVoteOptionsMap: ({\n voteOptionMap\n }: {\n voteOptionMap: string[];\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n signUp: ({\n amount,\n certificate,\n pubkey\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n startProcessPeriod: (fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n publishMessage: ({\n encPubKey,\n message\n }: {\n encPubKey: PubKey;\n message: MessageData;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n processMessage: ({\n groth16Proof,\n newStateCommitment,\n plonkProof\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n stopProcessingPeriod: (fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n processTally: ({\n groth16Proof,\n newTallyCommitment,\n plonkProof\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n stopTallyingPeriod: ({\n results,\n salt\n }: {\n results: Uint256[];\n salt: Uint256;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n bond: (fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n withdraw: ({\n amount\n }: {\n amount?: Uint128;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n}\nexport class ApiMaciClient extends ApiMaciQueryClient implements ApiMaciInterface {\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(client: SigningCosmWasmClient, sender: string, contractAddress: string) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.bond = this.bond.bind(this);\n this.withdraw = this.withdraw.bind(this);\n }\n setRoundInfo = async ({\n roundInfo\n }: {\n roundInfo: RoundInfo;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n set_round_info: {\n round_info: roundInfo\n }\n }, fee, memo, _funds);\n };\n setVoteOptionsMap = async ({\n voteOptionMap\n }: {\n voteOptionMap: string[];\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n set_vote_options_map: {\n vote_option_map: voteOptionMap\n }\n }, fee, memo, _funds);\n };\n signUp = async ({\n amount,\n certificate,\n pubkey\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n sign_up: {\n amount,\n certificate,\n pubkey\n }\n }, fee, memo, _funds);\n };\n startProcessPeriod = async (fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n start_process_period: {}\n }, fee, memo, _funds);\n };\n publishMessage = async ({\n encPubKey,\n message\n }: {\n encPubKey: PubKey;\n message: MessageData;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n publish_message: {\n enc_pub_key: encPubKey,\n message\n }\n }, fee, memo, _funds);\n };\n processMessage = async ({\n groth16Proof,\n newStateCommitment,\n plonkProof\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n plonk_proof: plonkProof\n }\n }, fee, memo, _funds);\n };\n stopProcessingPeriod = async (fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n stop_processing_period: {}\n }, fee, memo, _funds);\n };\n processTally = async ({\n groth16Proof,\n newTallyCommitment,\n plonkProof\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n plonk_proof: plonkProof\n }\n }, fee, memo, _funds);\n };\n stopTallyingPeriod = async ({\n results,\n salt\n }: {\n results: Uint256[];\n salt: Uint256;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n stop_tallying_period: {\n results,\n salt\n }\n }, fee, memo, _funds);\n };\n bond = async (fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n bond: {}\n }, fee, memo, _funds);\n };\n withdraw = async ({\n amount\n }: {\n amount?: Uint128;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n withdraw: {\n amount\n }\n }, fee, memo, _funds);\n };\n}","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Addr,\n InstantiateMsg,\n ExecuteMsg,\n Uint128,\n Uint256,\n Timestamp,\n Uint64,\n PubKey,\n RoundInfo,\n VotingTime,\n WhitelistBase,\n WhitelistBaseConfig,\n QueryMsg,\n Config,\n Boolean,\n ArrayOfOperatorInfo,\n OperatorInfo,\n} from './ApiSaas.types';\nexport interface ApiSaasReadOnlyInterface {\n contractAddress: string;\n config: () => Promise<Config>;\n operators: () => Promise<ArrayOfOperatorInfo>;\n isOperator: ({ address }: { address: Addr }) => Promise<Boolean>;\n balance: () => Promise<Uint128>;\n maciCodeId: () => Promise<Uint64>;\n treasuryManager: () => Promise<Addr>;\n}\nexport class ApiSaasQueryClient implements ApiSaasReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.config = this.config.bind(this);\n this.operators = this.operators.bind(this);\n this.isOperator = this.isOperator.bind(this);\n this.balance = this.balance.bind(this);\n this.maciCodeId = this.maciCodeId.bind(this);\n this.treasuryManager = this.treasuryManager.bind(this);\n }\n config = async (): Promise<Config> => {\n return this.client.queryContractSmart(this.contractAddress, {\n config: {},\n });\n };\n operators = async (): Promise<ArrayOfOperatorInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operators: {},\n });\n };\n isOperator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_operator: {\n address,\n },\n });\n };\n balance = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n balance: {},\n });\n };\n maciCodeId = async (): Promise<Uint64> => {\n return this.client.queryContractSmart(this.contractAddress, {\n maci_code_id: {},\n });\n };\n treasuryManager = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n treasury_manager: {},\n });\n };\n}\nexport interface ApiSaasInterface extends ApiSaasReadOnlyInterface {\n contractAddress: string;\n sender: string;\n updateConfig: (\n {\n admin,\n denom,\n }: {\n admin?: Addr;\n denom?: string;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n updateMaciCodeId: (\n {\n codeId,\n }: {\n codeId: number;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n updateAmaciRegistryContract: (\n {\n registryContract,\n }: {\n registryContract: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n addOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n removeOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n deposit: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n recipient,\n }: {\n amount: Uint128;\n recipient?: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n createMaciRound: (\n {\n certificationSystem,\n circuitType,\n coordinator,\n endTime,\n maxVoters,\n roundInfo,\n startTime,\n voteOptionMap,\n whitelistBackendPubkey,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n coordinator: PubKey;\n endTime: Timestamp;\n maxVoters: number;\n roundInfo: RoundInfo;\n startTime: Timestamp;\n voteOptionMap: string[];\n whitelistBackendPubkey: string;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n createAmaciRound: (\n {\n certificationSystem,\n circuitType,\n maxVoter,\n operator,\n oracleWhitelistPubkey,\n preDeactivateCoordinator,\n preDeactivateRoot,\n roundInfo,\n voiceCreditAmount,\n voteOptionMap,\n votingTime,\n whitelist,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n maxVoter: Uint256;\n operator: Addr;\n oracleWhitelistPubkey?: string;\n preDeactivateCoordinator?: PubKey;\n preDeactivateRoot: Uint256;\n roundInfo: RoundInfo;\n voiceCreditAmount: Uint256;\n voteOptionMap: string[];\n votingTime: VotingTime;\n whitelist?: WhitelistBase;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n contractAddr,\n roundInfo,\n }: {\n contractAddr: string;\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n contractAddr,\n voteOptionMap,\n }: {\n contractAddr: string;\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class ApiSaasClient\n extends ApiSaasQueryClient\n implements ApiSaasInterface\n{\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.updateConfig = this.updateConfig.bind(this);\n this.updateMaciCodeId = this.updateMaciCodeId.bind(this);\n this.updateAmaciRegistryContract =\n this.updateAmaciRegistryContract.bind(this);\n this.addOperator = this.addOperator.bind(this);\n this.removeOperator = this.removeOperator.bind(this);\n this.deposit = this.deposit.bind(this);\n this.withdraw = this.withdraw.bind(this);\n this.createMaciRound = this.createMaciRound.bind(this);\n this.createAmaciRound = this.createAmaciRound.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n }\n updateConfig = async (\n {\n admin,\n denom,\n }: {\n admin?: Addr;\n denom?: string;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_config: {\n admin,\n denom,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n updateMaciCodeId = async (\n {\n codeId,\n }: {\n codeId: number;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_maci_code_id: {\n code_id: codeId,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n updateAmaciRegistryContract = async (\n {\n registryContract,\n }: {\n registryContract: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_amaci_registry_contract: {\n registry_contract: registryContract,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n addOperator = async (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n add_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n removeOperator = async (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n remove_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n deposit = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n deposit: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n recipient,\n }: {\n amount: Uint128;\n recipient?: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n recipient,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n createMaciRound = async (\n {\n certificationSystem,\n circuitType,\n coordinator,\n endTime,\n maxVoters,\n roundInfo,\n startTime,\n voteOptionMap,\n whitelistBackendPubkey,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n coordinator: PubKey;\n endTime: Timestamp;\n maxVoters: number;\n roundInfo: RoundInfo;\n startTime: Timestamp;\n voteOptionMap: string[];\n whitelistBackendPubkey: string;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n create_maci_round: {\n certification_system: certificationSystem,\n circuit_type: circuitType,\n coordinator,\n end_time: endTime,\n max_voters: maxVoters.toString(),\n round_info: roundInfo,\n start_time: startTime,\n vote_option_map: voteOptionMap,\n whitelist_backend_pubkey: whitelistBackendPubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n createAmaciRound = async (\n {\n certificationSystem,\n circuitType,\n maxVoter,\n operator,\n oracleWhitelistPubkey,\n preDeactivateCoordinator,\n preDeactivateRoot,\n roundInfo,\n voiceCreditAmount,\n voteOptionMap,\n votingTime,\n whitelist,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n maxVoter: Uint256;\n operator: Addr;\n oracleWhitelistPubkey?: string;\n preDeactivateCoordinator?: PubKey;\n preDeactivateRoot: Uint256;\n roundInfo: RoundInfo;\n voiceCreditAmount: Uint256;\n voteOptionMap: string[];\n votingTime: VotingTime;\n whitelist?: WhitelistBase;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n create_amaci_round: {\n certification_system: certificationSystem,\n circuit_type: circuitType,\n max_voter: maxVoter,\n operator,\n oracle_whitelist_pubkey: oracleWhitelistPubkey,\n pre_deactivate_coordinator: preDeactivateCoordinator,\n pre_deactivate_root: preDeactivateRoot,\n round_info: roundInfo,\n voice_credit_amount: voiceCreditAmount,\n vote_option_map: voteOptionMap,\n voting_time: votingTime,\n whitelist,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n contractAddr,\n roundInfo,\n }: {\n contractAddr: string;\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n contract_addr: contractAddr,\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n contractAddr,\n voteOptionMap,\n }: {\n contractAddr: string;\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n contract_addr: contractAddr,\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport { Keypair } from '../libs/crypto';\nimport { FetchOptions } from '../libs/http/http';\nexport type * from '../libs/contract/types';\nexport type * from '../libs/crypto/types';\n\nexport enum MaciCircuitType {\n IP1V = '0',\n QV = '1',\n}\n\nexport enum MaciCertSystemType {\n GROTH16 = 'groth16',\n PLONK = 'plonk',\n}\n\nexport enum MaciRoundType {\n MACI = '0',\n AMACI = '1',\n ORACLE_MACI = '2',\n}\n\nexport type CertificateEcosystem = 'cosmoshub' | 'doravota';\n\nexport type ClientParams = {\n signer?: OfflineSigner;\n network: 'mainnet' | 'testnet';\n rpcEndpoint?: string;\n restEndpoint?: string;\n apiEndpoint?: string;\n certificateApiEndpoint?: string;\n registryAddress?: string;\n saasAddress?: string;\n apiSaasAddress?: string;\n maciCodeId?: number;\n oracleCodeId?: number;\n customFetch?: typeof fetch;\n defaultOptions?: FetchOptions;\n feegrantOperator?: string;\n whitelistBackendPubkey?: string;\n maciKeypair?: Keypair;\n secretKey?: string;\n mnemonic?: string;\n};\n\nexport type ContractParams = {\n network: 'mainnet' | 'testnet';\n rpcEndpoint: string;\n registryAddress: string;\n saasAddress: string;\n apiSaasAddress: string;\n maciCodeId: number;\n oracleCodeId: number;\n whitelistBackendPubkey: string;\n feegrantOperator: string;\n};\n\nexport type TransactionType = {\n id: string;\n blockHeight: string;\n txHash: string;\n timestamp: string;\n type: string;\n status: string;\n circuitName: string;\n fee: string;\n gasUsed: string;\n gasWanted: string;\n caller: string;\n contractAddress: string;\n};\n\nexport type RoundType = {\n id: string;\n blockHeight: string;\n txHash: string;\n caller: string;\n admin: string;\n operator: string;\n contractAddress: string;\n circuitName: string;\n timestamp: string;\n votingStart: string;\n votingEnd: string;\n status: string;\n period: string;\n actionType: string;\n roundTitle: string;\n roundDescription: string;\n roundLink: string;\n coordinatorPubkeyX: string;\n coordinatorPubkeyY: string;\n voteOptionMap: string;\n results: string;\n allResult: string;\n gasStationEnable: boolean;\n totalGrant: string;\n baseGrant: string;\n totalBond: string;\n circuitType: string;\n circuitPower: string;\n certificationSystem: string;\n codeId: string;\n maciType: string;\n voiceCreditAmount: string;\n preDeactivateRoot: string;\n identity: string;\n // funds: string;\n operatorLogoUrl?: string;\n operatorMoniker?: string;\n resultsList?: {\n v: number;\n v2: number;\n }[];\n};\n\nexport type SelectiveRoundType = Partial<RoundType>;\n\nexport type ProofType = {\n nodes: {\n id: string;\n blockHeight: string;\n txHash: string;\n contractAddress: string;\n timestamp: string;\n actionType: string;\n commitment: string;\n proof: string;\n }[];\n};\n\nexport type OperatorDelayType = {\n blockHeight: string;\n delayProcessDmsgCount: number;\n delayDuration: string;\n delayReason: string;\n delayType: string;\n id: string;\n nodeId: string;\n operatorAddress: string;\n timestamp: string;\n roundAddress: string;\n};\n\nexport type OperatorType = {\n id: string;\n validatorAddress: string;\n operatorAddress: string;\n coordinatorPubkeyX: string;\n coordinatorPubkeyY: string;\n identity: string;\n logoUrl: string;\n moniker: string;\n activeRoundsCount: number;\n completedRoundsCount: number;\n};\n\nexport type CircuitType = {\n maciType: string;\n circuitType: string;\n displayName: string;\n repoUrl: string;\n zipUrl: string;\n roundCount?: number;\n};\n\nexport type SignUpEventType = {\n id: string;\n blockHeight: string;\n txHash: string;\n contractAddress: string;\n timestamp: string;\n pubKey: string;\n stateIdx: number;\n balance: string;\n};\n\nexport type CircuitsCountGraphqlResponse = {\n data: {\n rounds: {\n totalCount: number;\n };\n };\n};\n\nexport type ErrorResponse = {\n code: number;\n error: {\n message: string;\n type: string;\n };\n};\n\nexport type SuccessResponse<T> = {\n code: 200;\n data: T;\n};\n\nexport type CircuitResponse =\n | SuccessResponse<{\n circuit: CircuitType;\n }>\n | ErrorResponse;\n\nexport type CircuitsResponse =\n | SuccessResponse<{\n circuits: CircuitType[];\n }>\n | ErrorResponse;\n\nexport type BalanceResponse =\n | SuccessResponse<{\n balance: string;\n }>\n | ErrorResponse;\n\nexport type OperatorResponse =\n | SuccessResponse<{\n operator: OperatorType;\n }>\n | ErrorResponse;\n\nexport type MissRateResponse =\n | SuccessResponse<{\n missRate: (MissRateType & {\n date: string;\n })[];\n }>\n | ErrorResponse;\n\n// export type ClaimableResponse =\n// | SuccessResponse<{\n// claimable: ClaimableType;\n// }>\n// | ErrorResponse;\n\nexport type OperatorDelayOperationsResponse =\n | SuccessResponse<{\n operatorDelayOperations: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorDelayType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type OperatorsResponse =\n | SuccessResponse<{\n operators: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type OperatorsGraphqlResponse = {\n data: {\n operators: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type RoundsCountGraphqlResponse = {\n data: {\n activeRoundsCount: {\n totalCount: number;\n };\n completedRoundsCount: {\n totalCount: number;\n };\n };\n};\n\nexport type VoteCountGraphqlResponse = {\n data: {\n signupsCount: {\n totalCount: number;\n };\n messagesCount: {\n totalCount: number;\n };\n };\n};\n\nexport type OperatorDelayOperationsGraphqlResponse = {\n data: {\n operatorDelayOperations: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorDelayType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type TransactionGraphqlResponse = {\n data: {\n transaction: TransactionType;\n };\n};\n\nexport type TransactionResponse =\n | SuccessResponse<{\n transaction: TransactionType;\n }>\n | ErrorResponse;\n\nexport type TransactionsGraphqlResponse = {\n data: {\n transactions: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: TransactionType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type TransactionsResponse =\n | SuccessResponse<{\n transactions: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: TransactionType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type RoundResponse =\n | SuccessResponse<{\n round: RoundType;\n }>\n | ErrorResponse;\n\nexport type SelectiveRoundResponse =\n | SuccessResponse<{\n round: SelectiveRoundType;\n }>\n | ErrorResponse;\n\nexport type RoundsResponse =\n | SuccessResponse<{\n rounds: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: RoundType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type RoundGraphqlResponse = {\n data: {\n round: RoundType;\n };\n};\n\n/**\n * GraphQL response type for selective round fields\n */\nexport type SelectiveRoundGraphqlResponse = {\n data: {\n round: SelectiveRoundType;\n };\n};\n\nexport type RoundsGraphqlResponse = {\n data: {\n rounds: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: RoundType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type ProofResponse =\n | SuccessResponse<{\n proofData: ProofType;\n }>\n | ErrorResponse;\n\nexport type ProofGraphqlResponse = {\n data: {\n proofData: ProofType;\n };\n};\n\nexport type SignUpEventsResponse =\n | SuccessResponse<{\n signUpEvents: SignUpEventType[];\n }>\n | ErrorResponse;\n\nexport type SignUpEventsGraphqlResponse = {\n data: {\n signUpEvents: {\n nodes: SignUpEventType[];\n };\n };\n};\n\nexport type MissRateType = {\n delayCount: number;\n deactivateDelay: {\n count: number;\n dmsgCount: number;\n };\n tallyDelay: {\n count: number;\n };\n totalDelayDuration: number;\n avgDelayDuration: number;\n tallyCount: number;\n deactivateCount: number;\n missRate: number;\n};\n\nexport type DeactivateMessage = {\n id: string;\n blockHeight: string;\n timestamp: string;\n txHash: string;\n deactivateMessage: string; // '[[\"0\", \"1\", \"2\", \"3\", \"4\"]]'\n maciContractAddress: string;\n maciOperator: string;\n};\n","import { GasPrice } from '@cosmjs/stargate';\n\ntype Groth16VkeyType = {\n vk_alpha1: string;\n vk_beta_2: string;\n vk_gamma_2: string;\n vk_delta_2: string;\n vk_ic0: string;\n vk_ic1: string;\n};\n\ntype CircuitInfoType = {\n [key: string]: {\n parameter: {\n state_tree_depth: string;\n int_state_tree_depth: string;\n vote_option_tree_depth: string;\n message_batch_size: string;\n };\n groth16: {\n process_vkey?: Groth16VkeyType;\n tally_vkey?: Groth16VkeyType;\n process_1p1v_vkey?: Groth16VkeyType;\n tally_1p1v_vkey?: Groth16VkeyType;\n process_qv_vkey?: Groth16VkeyType;\n tally_qv_vkey?: Groth16VkeyType;\n };\n plonk?: {\n process_vkey: {\n n: number;\n num_inputs: number;\n selector_commitments: string[];\n next_step_selector_commitments: string[];\n permutation_commitments: string[];\n non_residues: string[];\n g2_elements: string[];\n };\n tally_vkey: {\n n: number;\n num_inputs: number;\n selector_commitments: string[];\n next_step_selector_commitments: string[];\n permutation_commitments: string[];\n non_residues: string[];\n g2_elements: string[];\n };\n };\n };\n};\n\nexport const CIRCUIT_INFO: CircuitInfoType = {\n '2-1-1-5': {\n parameter: {\n state_tree_depth: '2',\n int_state_tree_depth: '1',\n vote_option_tree_depth: '1',\n message_batch_size: '5',\n },\n groth16: {\n process_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '2178a9c3805dd82071b2b28bb4c0ffc8178cad913c8c990b98b4863284dc3a5d175c0be554fc060c27c551e5e32effef015b918a0f5a2dc1b92909b8272719301c521d5f6542db5ea4775a42d32159c356a696599c1a3df011ec00559ae1c2b60d860f7e6513a7d20feaeaca401863e35a0f691dd7d30ce06d07946840de1ec8',\n vk_ic0:\n '19126a54a9b6d0d415f892c246485cb2889487cf9c4a8cd88dab5e1140e1d0630d1d76ef4652df8887c9dc557aa57f25e221db7e5b2e4cf618a362bece107f5c',\n vk_ic1:\n '0632e625fefc7172e8aec1070c4d32b90b6c482f6f3806773a4c55a03877c2d716cfd935eb3e3883f580c93f56adbf3a253ce3c208c52fb784f9d8fec139c617',\n },\n tally_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '2e9fad39728c543c5213599111e1a44b01720c999a6785e8136c3e3b3bf8e07e248e1933d477969ca6e27cb7a74bca18cac7e3bbdf9371be5c54fe151f6376a30955609ec69b89329322a2f435b706ca248d1312c7513853a50ef37ed0f7826c25a5c57bf07789d89e538bc24017cf2722811f21480b0bb8030ed0028ecb7cd8',\n vk_ic0:\n '1bc1a1a3444256469c07cd6f4d1cfd9f7c9ddce596a306e0af077ca9e9c0fe9602db2a9aecef76a9dc4c19bf88c0099b04fc75410cc9004f0966440825e3790a',\n vk_ic1:\n '05b8b475f2bfedba4fa04ab1972006da9764c2c3e6fb65d6dd0aac938fd298112a560e13770b06a3f709a49fddf016331ea205fa125026993f6666eff69f4def',\n },\n },\n plonk: {\n process_vkey: {\n n: 1048575,\n num_inputs: 1,\n selector_commitments: [\n '29b0f4a90bea69583a8fca1e74d23adf739d605af605a0e0971fac548df976fb2e10a42dfca2325684c1bca5fabbf9d7022fc8b997ea478f1052dd8808d99e44',\n '119002055b6c2f98314ef408e4a917a6678f114ca991185749289f171f61efc32b3a931c700271b82d22c2073af9b7fffcb7bfa644ea09102d9ef8482410a991',\n '10c5f32870d26f8e26d2eaae2705557b18210b2355677172e1bef5fe684120891f8317185390ddbb22ecb922d37e03c3cc524c84f65c8045f2324b0f164cfbdb',\n '115a5f9af5d438d3261cfa31b7050b931b7d22647f628a43af41a41dcd44cb8d2e99368eb15cdc6d1f16faf9db0db4825613d6893c776aef456705bdc76eb728',\n '1a61cc5f0fbe92fbc8c9bd58928ce467f63e4771e4d517966afbaf220ea069a91cec3231c370be07fee8d9ec01660d054c549b034715855ffa652ad5b67ced86',\n '19e0d095a343115f6e7ad7ae1f51e375cd648fb35451cb2d5a8cf3bafbb25d0525efdc2cc5b5600ee0ae954dca3bf67c8277d470161fe23b4be7a5bcdf641e68',\n ],\n next_step_selector_commitments: [\n '246ce82e01ed312e81492f132da2ee16bc13cc0024fbcc668de30173ad59067f0f072a892451cc495f5d9b8b99c8dc29be1d42d3004aed45fd5b2cd32a420016',\n ],\n permutation_commitments: [\n '19c4143f41738480adc5ae49922d31b8a5afaa1d25ced5c20b869c0e1ccad91920c267c53d33907318cd194ba2ea08a85f250779765ba4121f7a0edfe1afe22b',\n '114bda14aa702a0815e3f91318a08a2798244420fd6675c8fc3cc2b0232298890d2eb3c1f27a83f4a3be777524d6cc65aa435e0a472fae8d1158e0a6ded685d0',\n '289f0b046968d2c095d05350e43996756fc85d2deb0e267a069615f0889a249413bdbe6f09edb4db956b8f3fc4488c4681cd52469dc0d419dab99a65b88309f7',\n '16dd74a2089960aac0d68309d5e81c6b45c29fafe4d42c922c06eb633ed48d551d347d1f43ee9b137772eefc43a6dcdf5ac35ee1615bc8f7c243bce071c410a9',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n tally_vkey: {\n n: 524287,\n num_inputs: 1,\n selector_commitments: [\n '18c2bb75c8ed53a5d15a56cc91c56f14c832419994ce7187c7c98b5e622cac0808b773f05e09822d8d267646198a78359ea2aa6fbaeb01317142f99fd11da6c0',\n '181499098243a5968f5490b7759aa15f0f769f24f3f4219b69f96913cf4fb23c1cd7b3f109196d7577390fd2e6d3930a71b0559aff756f3ca43eef66ce7333f4',\n '07ba2bdd452503fb16b56ea2940e95a98118c9dd120ae192680fe2b80bdb26f10ac6cdc7cb12b581a8c64d45b5af3d253c4282405eed3fd4d091ae05aac45cb6',\n '1caf01f1775eeafa78a11202e926ee92be997ce040f9c6fbce161348a40aeda70d9f15738cccf538083784e566ceef651d000223ae810c980e2d5d98b91b4665',\n '2c377c69cae1d591af413da2fd986ef3dca595d0c5817ee4932b92169d37c52d1218ce63dde705ebd1dc66d9b62daca287e4fdf6800b69204e5b78bfe84365a1',\n '175dd4ff280e39f0e080c181f853845e40c4b91709a93e4398d24befc9cf556903675361817e031e86bd896ff1dd7bc1cc31ca920a101499db0c58d77f0730ec',\n ],\n next_step_selector_commitments: [\n '12d76999d26137d433f7119ab34f3fc63cfedb9172052cfb34acfc3cdc570f511aba802ebe92b87f913496314b938cf526078280a68826c90b686b90420c7742',\n ],\n permutation_commitments: [\n '167b05c0132399e7126e8d16efb224b1c6729942048fc7e730fd1451116e0a6e05acaf2a6d2c88cc25610474b651c8cdcb7e8e14e59ddfad819123e888c4b1b6',\n '25aed62de4b701dc645e076543e2553c306010f2776c74edae55ea5253d9540403d042c4cb699cc04b2bb63d3c3edc0c85b049a84dc2fd44369f957d81363563',\n '0e77fb0b0e84da1d955da3d66dbb8fa3988f22e999a34bc4ac537a0f9187ac40156f8d7cb6d005fd85a0178d794f941b4e84832fd389a37c2a78112dac09b758',\n '051d3d906d457eaa9eff77a296dfa1760fd9ea379eec60487be38de91545ca2c1fcf457d6ac31afee10951245b0cc1e2c7674596f65955d189d48b6938fb3594',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n },\n },\n '4-2-2-25': {\n parameter: {\n state_tree_depth: '4',\n int_state_tree_depth: '2',\n vote_option_tree_depth: '2',\n message_batch_size: '25',\n },\n groth16: {\n process_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '0d0fe390b9dd4d1d0f486787b6ea96765cbeaa8f00310fecc3429673c5866c081a27998596ba296f66f3f7b5e2450d1ce1bcc535c133b2e8b577ba07dc1ccb4c1895f7afb9b3168a6d628c9173157cd56ca51948cc66c129a25f80e3b665e4b12c9c50f0cc0d070978ed2fb8ce15956d67c5dc6c07c7f45f1facfb5522d7b656',\n vk_ic0:\n '0ff2b22774da5c0ba94db4d759827b8c962aaf44db2649eb10407de02a40463a26497581d6d0979ad7f9057f26e048109158b0872700e2ad8447ffc9b4bf146b',\n vk_ic1:\n '0a47be101a59d20641e1369c0b2b9fb839cd35ecbfbeac3866df43723b70c78d17e96303c417743d93b7726805b736f364d305036b50e4ad1b885fc41284daf5',\n },\n tally_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '08e44e0876bd574d8a3411e374884eb61da7292ca52903fa96553c37311b66ce0f2f529e59b1d37e55794a575d0f87548ca0d03331c19689bc203a68c1c4bae20e9fd25a7bffaa9b7409e694a48bc0d57f42df164d4a01bd5deecffedd2d3a3125eff290efb93eaf9c578cc7ee9d00406137607b9602de02424ff413ac948690',\n vk_ic0:\n '295c8e84b4b6b8de44b24f80eb5cae1df65e4877c4af8da2dbadfbfc3586dc790661b9e636f2c2a83028d11cbb7c753675481b65a5dfe32fff7a558231b3c9ef',\n vk_ic1:\n '299cfb28054cde0470bd7ff280349089350226d1ca154dcf6544b2680bf3bea925026e6644668273d6066ef6766c2f561c3607c523fbbd1379c5002376ef69c3',\n },\n },\n plonk: {\n process_vkey: {\n n: 2097151,\n num_inputs: 1,\n selector_commitments: [\n '126cbf10e0b68a56d45614be16c5bb48bd1374478e17b9fe1a78b726ea70f9b21f3cd20fd178d89e5923c422ef050ccc7134fbd76c9efdbb90f677ee41e01edb',\n '12813166f206c95eddd998a40d8d2e54e29dd393f543e3583a7999b18d674832024cdd935540bd3b96207ec0609c6718ad8b14e2ef315594454c57d606494485',\n '05da9eea3ee7151355067ced11a8e8ff57a56c758493afc9cbb6cfbacfc42e7b08993dfa25c85f20aeb7f64e87fe56ac8066cf6b8479dc96294e302ef5d55372',\n '2e446e540bacde7daea23c93a67bc6b1424b7c16b33fd2cee251b0d093cd78300030b8e340f01f320639d60b77724e58fc8a2d778b7b2a5df2c953ce34debeea',\n '1cf8c75b18071ede19d196b46a8776efc29ac514458a698d9f2e50b7bc692f6e06f7ff96897240eca31058fe330e8cbcd911324b79a3a34d03340a3cfed85fd5',\n '17101fb5c293438a695075b221219679e278e4bd147239c9fc69081b19cacefe218eb895f1456ca81e29731967588aee4b0758ea51aa28e5fefc81fed4a11513',\n ],\n next_step_selector_commitments: [\n '0cebff4fe8cd70325f986088a1e17ae129a025481137bd80aef9c1f1c2e52f1e265a4ccae1ed89cb2fba527165f007898e70f988311ee4e4e87e41376cfeed03',\n ],\n permutation_commitments: [\n '025b5db167721133693f0b6d9d7cfadce68ad15365ef1605dda4a6c809edeea61927b27ca11713fc683c88f6330e9621837b05e5db74d5994d1cf04bc3d529b3',\n '1fac93999f33b145613901846e6403d7f4237d582b51ccc4fb5c70038284c6e21cc804cc3cf7170b96da74fcbb30c81cd8c3405a629327c657025db7332f169a',\n '0b6d7d383de73dbfc16f2c0f3af763135ff05a12ec937548008cfee944c195f902336a68a50f62f595953e44401e872fb41abb66a733684b079ffe550d09c233',\n '225a1f5e92d105d3be026ae68904826f89b786faad75a846ef966ed714568bba28d1388786fde71dea206cdef16faa7a589e90863e6245d271e3f154c75c5531',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n tally_vkey: {\n n: 1048575,\n num_inputs: 1,\n selector_commitments: [\n '1588fb667b3f0e4d0970b8208e4b6b4c729c4926b936f8d877017cf42d07ca15069643791d98abcd6b7d0b0546e7560ab9011e069f2ee48ede581fc72d8b5e04',\n '09c5480b103c44a81850ffd9a61ec21f7db41bc89996d8df075c3e029290eb5b083cb2b184d95c0761e585547be33250c8939929b87fdc39775ccea17d51b481',\n '278e239bcac0a945a17572a6d61ba59f705746e6893a10a44841933a8c8310e712e4ee913af9b77c8fdcdc365316aa9f1b8dc081eb99ad80265768ec9f484beb',\n '12532585ea307c5559b18a4d01db59b544a88088f61a5b5ed0431393e6f675af1309bf0dcaa7a552849e5f28d0300c8c61b18393fb638aed3b7d70e27bb91c35',\n '172e7ecb8e485aaee801fd78b8fd7c0b862baef65e39e6832cffa2170b6f981928d86ab5887e8c3210e34e03cada468bd501f60ec3a8fa35b4c7067d6fb8c6ae',\n '0c27211d046735fc681228b8366be2c8cf9a256cbd03dcd4af65152e94f95a6f1af151a5311b195b0f4acffeec4952cc52edbb7045aab61bbd3be9cd322ab99e',\n ],\n next_step_selector_commitments: [\n '25ee15301d562e6c630946b3fbe36b9fbd8dfbd44ddf70cc825fb1fa1ebd966229081f6b9297da671c69064e10b8f5dd0f69b69d1bf79122c6197f119087ebe1',\n ],\n permutation_commitments: [\n '194849a6ec5cb37e09d20801d387abbab04e453f630c5fbbf5c4819c5569480c0c8bf0ce2b4955cc4c891840da1d9e99feb81e8d43251dffbe4d6167639b9f9b',\n '17717d2638632d406b3c8aa69550c8aeed1b79def3ab55e9d0c4bdf21cc339ad07d3bd3a331145fc96f34c85469a34a8c93b53b7aa36bb5a94c31e3b4d47713e',\n '277b0c99b63c79bb9ed2f677c3987cf00acb293933dfced82b5afcb8bf0c34570d3187ce5c7e892582ddda4322cf7c50d41105fe98503fb60e41f4a08da5916d',\n '0489f6dec0f27a8c21d147ebb9781b68b4b73db065a6017924c543f6d9fadbe922d24c0946bd8b19df7659810296d063b557cdf7aba510b11e08fbf2e9d37931',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n },\n },\n '6-3-3-125': {\n parameter: {\n state_tree_depth: '6',\n int_state_tree_depth: '3',\n vote_option_tree_depth: '3',\n message_batch_size: '125',\n },\n groth16: {\n process_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '057f25675851ef5a79a6d8706a43a6cd8e494cfb12c241ede46991d9174cf30605b081ff44f3ede774dab68ea9324c12308c13cb09cbb129adf94401b9134f5b16137d952fd32ab2d4243ebff4cb15d17206948ef17909ea8606886a8109bdad082f7d27e1cbf98925f055b39d1c89f9bcc4f6d92fdb920934ff5e37ba4d9b49',\n vk_ic0:\n '27c937c032a18a320566e934448a0ffceea7050492a509c45a3bcb7e8ff8905d20789ada31729a833a4f595ff9f49f88adb66f2ab987de15a15deccb0e785bf4',\n vk_ic1:\n '0ed2cefc103a2234dbc6bbd8634812d65332218b7589f4079b2c08eb5a4f5f63113a7f3cb53797a7f5819d7de7e3f0b2197d1c34790685a4a59af4314810420b',\n },\n tally_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '2065e91c00fcc5cbc3d974cf52e24de972bdb1b4d8ded629dec20b5c904c3fa327ffe02402094795ff4d02588c8268fcad738f69eb4c732a0c98b485035e1f4913ede11b074ff143a929673e581a547717c58ce01af87d9d8b28f65f506093a61013e367b93e6782129362065840a0af9b77d7d9659a84577176e64a918d8d4c',\n vk_ic0:\n '11db4a022aab89a265f06ff62aa18c74b21e913a8b23e7fce9cb46f76d1c4d9f2a7475b1eeb7be0a0dc457e6d52536ba351b621b63a7d77da75d4e773048537e',\n vk_ic1:\n '0f298d235d0822ad281386abdf511853529af4c864b0cd54140facebfc1356a3059cd6d0d4b27b39e5683548fe12025e2a6b2e2724c2ca87d2008ef932ed3801',\n },\n },\n plonk: {\n process_vkey: {\n n: 8388607,\n num_inputs: 1,\n selector_commitments: [\n '216533ab27390f98812429524326ac08736d636d2891fb81446796cc1771a3230642f49db115acc15a186a1013f91a08efcd05640eb137d700276e80fd05bc90',\n '11747f6f378e26dbdacff464ce7eb6a8869750d0fa7e508e263ac77b582c1e9b24ba3d208650b0c28943915c563cc94cc3f98cdb5fd8adc4f4d3e2a60eda3302',\n '09239eb768d8d47b91c7e08e2ec6a374571964ed16be293cdc35e112393c4fd1182a0794be7f1441418664e9f718b67ed392a7da3e2868375bcf629131bb2680',\n '2020f7db24940bbf38d097ea5d7ef7253e38b154d7eb0ff1782ea18ce215dd7b0e8475197b071b118adc6418b7b7fb42fea19b6272d1bb460cc47deacb299ec7',\n '298923db1618185064bbab5df30ee03a3c9cbc7ce8f096d76cbd2a5ab3df86cd05bbedb938e6e0ff35cce23609458aff8081cdf3163655672074d1b18b0007bd',\n '0effaabe8c6e8a076aedd36d10f2926f9871f552d93e22bfbe69e3c828a546fa2d0cd163b49a6de219ac2c048a8459ae448047748ba078b9d5d07b290c946b08',\n ],\n next_step_selector_commitments: [\n '13e3d7299e30e6142699469d620df721eca35bbb807a8f4298f165260fdc24f823e7bd9bcb6506a094a5ebef44434c62e4bcb5d3dd7e092c49d5cb80b8ae0757',\n ],\n permutation_commitments: [\n '03d94ab8fdc681523a8eec10f1ce5552937c268d1d970f9e75ee8657cd4c12a81e03476f83ef5c14db2f4d931b833a3b65b8d5689b37cc7f183914c90d3d065d',\n '1b9c6ef20e68355c535bda6ff04a8a61d7552a594bb8e88d69a6f8840ddab04d2884824cc356d0d90cc278c247fc531de62efca4b19ed1be6f071144474d2037',\n '1ff82de8312481e1591d2d1c2698fa3944b3f0afa0dd702be8a1a944a5a8997323ffbd0ab39a2e13608a8e76803c33ffda7317bb7101e335ce5552ed62dcd09d',\n '2cb2bbdd51d22b79957b0401ecb6fe089f05426ba092b1205fa92f39b36cc5fc0c36c3934e47b7d407d4cda0c78c2b3fb23162cb0d295e8a8cce1a274956c34a',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n tally_vkey: {\n n: 8388607,\n num_inputs: 1,\n selector_commitments: [\n '258d101f9499e81c0d0da8986c659ef33da19d4955a142e56b4854d1327c902c1996baecd81432717a9cbf92ccf651e4217a788c1a2ed855f749480f8ce8203c',\n '1892a17c9c01389e3149b0663069a1ad4fd3c8e2db5ce99795b781c47b55acf9001cf5f0b4c1d088fa2058ca19cd2f1e9559ebe059897bb0aadcb540ce5f468a',\n '09912d6eaa4a22802451135d9a221ebf97c2ce8ad5bbb2942d5a860482e8e4202573995072c4b014cd0e9d09a1fd53ee7d602070b404288a7fd0d97b57d8f07d',\n '0c62ef7ad01b05b2c01fca6188de269d63d725348a07a99bbc50f24c1518aa871fdc61bbf42399433a0917c919dcfe9e851b206e1c37dec0908f69ad89bb1f8e',\n '07d181c1026ef4a6732bff3dffbc5ae0e3746e4860f478c6c2e8e258df2ed7671efe073fb31cf5a61c0eedceccb5e968220b9ff7e2b055b11d7c456a57fe7ac9',\n '1bbd7ad96893df675c811e5a2be184e2e3bc9af0ce30a7b26e53a916a10a777a01ffa70dbe585201ac09778429c04c71229392608095d220c7d82631a0caedd6',\n ],\n next_step_selector_commitments: [\n '2ae6c5c98d4c384e8e645d85a4ca362de4c4e75efe3c79d5bcbd126a9e305b831618df99300c7327f1eac6a498c8feac6013d4ba09b7ea046340f99b0598a832',\n ],\n permutation_commitments: [\n '2458c5fb474ab3e7ae9c6b82cc432a111954d8be5e7e9b4fc58c14e1aed77f3207426dbe08272aa69ba8b73809f27f9ff083641b5c3c896c386a74bbed3083dd',\n '0879ac4885674b1af0ab67c7b505bce6234f32a0335bdfd229023fea5f303ece0973ba8abc9ade8edcfb68c7d4b8b98272c7bf33eff841fec78d21c0c2e82aa6',\n '07b74f37fcbcb2d9962a529fbc254d54925aeb1be1a49517affeb3571ef3e31e3033f7900ff5bb5759cbb98b64ca7f42967278c328d00e60c042aa65f2178ded',\n '203c948fdc386e7bfbdc37363ab489e9ce3264f4ccd23c33dd8f2337fb9007a621cabf740aa26e522dcb7af6c0de9f93cbc69595b29b02e75c2f3507e97664ec',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n },\n },\n '9-4-3-625': {\n parameter: {\n state_tree_depth: '9',\n int_state_tree_depth: '4',\n message_batch_size: '625',\n vote_option_tree_depth: '3',\n },\n groth16: {\n process_1p1v_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '1195be678487bbc8c0ae726c0985a5caf6f75e3f8327926926c4f89e498ad733043e46e10b506d194b27275f402bc3fb208a2f5be69662e7c9898d1c0ece4f04',\n vk_ic1:\n '10c34362189a7ee44b1c5e57755d7e0d672dba552e614d5cd9a53081bee2333425879fa4e4a9e3fff287824cce35f94725ca0edb60a4ffcbf50becb2fd96cb0b',\n },\n tally_1p1v_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '2ec191d51bd4ac7cd65cb3dd2decfa4e56c4f167bbc40e2c9e1ca728f9bc5b0e2ed1c82319dc554aea5ff2ca05d6f4d4d61e8f059a8c05d4b4faabae5128a437',\n vk_ic1:\n '2f19db8f03b6b5896abc6989273371b14833356f45c12685e57bc292eccc53570cb629e551df179f73b9f3391946bad29739af8b808c80b0f057af45aea59849',\n },\n process_qv_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '1832600210a459fe61d971081d4baa1a1add23f87c8a8dc4042cd5cf6c6fdf8e3018489aec30d9deb26629e05965a3a7e038be58ce10c854cb7e1071f2708aad',\n vk_ic1:\n '0274a24117a799333754d646e35f37292e7ca9984fb8781211504b158d69d2c422aa99651ca207c77084988b16ef363664b9cf36071f7131dcc10b98ea27d7f6',\n },\n tally_qv_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '2ec191d51bd4ac7cd65cb3dd2decfa4e56c4f167bbc40e2c9e1ca728f9bc5b0e2ed1c82319dc554aea5ff2ca05d6f4d4d61e8f059a8c05d4b4faabae5128a437',\n vk_ic1:\n '2f19db8f03b6b5896abc6989273371b14833356f45c12685e57bc292eccc53570cb629e551df179f73b9f3391946bad29739af8b808c80b0f057af45aea59849',\n },\n },\n },\n};\n\nexport const MACI_TYPE = {\n 'maci-1p1v': '0',\n 'maci-qv': '1',\n};\n\nexport const AMACI_TYPE = {\n 'amaci-1p1v': '0',\n 'amaci-qv': '1',\n};\n\nexport const PROOF_SYSTEM = {\n groth16: '0',\n plonk: '1',\n};\n\nexport const QTR_LIB = {\n zeros: [\n '0',\n '14655542659562014735865511769057053982292279840403315552050801315682099828156',\n '19261153649140605024552417994922546473530072875902678653210025980873274131905',\n '21526503558325068664033192388586640128492121680588893182274749683522508994597',\n '20017764101928005973906869479218555869286328459998999367935018992260318153770',\n '16998355316577652097112514691750893516081130026395813155204269482715045879598',\n '2612442706402737973181840577010736087708621987282725873936541279764292204086',\n '17716535433480122581515618850811568065658392066947958324371350481921422579201',\n '17437916409890180001398333108882255895598851862997171508841759030332444017770',\n ],\n};\n","import {\n MaciCertSystemType,\n MaciCircuitType,\n MaciRoundType,\n} from '../../types';\nimport { CIRCUIT_INFO } from './vars';\n\nexport function getCircuitType(circuitType: MaciCircuitType) {\n let maciVoteType = null;\n switch (circuitType) {\n case MaciCircuitType.IP1V:\n maciVoteType = '0';\n break;\n case MaciCircuitType.QV:\n maciVoteType = '1';\n break;\n default:\n throw new Error(\n `Invalid circuit type ${circuitType}, only support 1P1V and QV`\n );\n }\n return maciVoteType;\n}\n\nexport function getContractParams(\n type: MaciRoundType,\n circuitType: MaciCircuitType,\n proofSystem: MaciCertSystemType,\n maxVoter: number,\n maxOption: number\n) {\n let parameters: {\n state_tree_depth: string;\n int_state_tree_depth: string;\n vote_option_tree_depth: string;\n message_batch_size: string;\n };\n let groth16ProcessVkey = null;\n let groth16TallyVkey = null;\n let plonkProcessVkey = null;\n let plonkTallyVkey = null;\n let maciVoteType = null;\n let maciCertSystem = null;\n\n switch (circuitType) {\n case MaciCircuitType.IP1V:\n maciVoteType = '0';\n break;\n case MaciCircuitType.QV:\n maciVoteType = '1';\n break;\n default:\n throw new Error(\n `Invalid circuit type ${circuitType}, only support 1P1V and QV`\n );\n }\n\n switch (proofSystem) {\n case MaciCertSystemType.GROTH16:\n maciCertSystem = '0';\n break;\n case MaciCertSystemType.PLONK:\n maciCertSystem = '1';\n break;\n default:\n throw new Error(\n `Invalid proof system ${proofSystem}, only support GROTH16 and PLONK`\n );\n }\n\n if (maxVoter <= 25 && maxOption <= 5) {\n // state_tree_depth: 2\n // vote_option_tree_depth: 1\n parameters = CIRCUIT_INFO['2-1-1-5'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n groth16ProcessVkey = CIRCUIT_INFO['2-1-1-5']['groth16'].process_vkey;\n groth16TallyVkey = CIRCUIT_INFO['2-1-1-5']['groth16'].tally_vkey;\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n plonkProcessVkey = CIRCUIT_INFO['2-1-1-5']['plonk']?.process_vkey;\n plonkTallyVkey = CIRCUIT_INFO['2-1-1-5']['plonk']?.tally_vkey;\n }\n } else if (maxVoter <= 625 && maxOption <= 25) {\n // state_tree_depth: 4\n // vote_option_tree_depth: 2\n parameters = CIRCUIT_INFO['4-2-2-25'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n groth16ProcessVkey = CIRCUIT_INFO['4-2-2-25']['groth16'].process_vkey;\n groth16TallyVkey = CIRCUIT_INFO['4-2-2-25']['groth16'].tally_vkey;\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n plonkProcessVkey = CIRCUIT_INFO['4-2-2-25']['plonk']?.process_vkey;\n plonkTallyVkey = CIRCUIT_INFO['4-2-2-25']['plonk']?.tally_vkey;\n }\n } else if (maxVoter <= 15625 && maxOption <= 125) {\n // state_tree_depth: 6\n // vote_option_tree_depth: 3\n parameters = CIRCUIT_INFO['6-3-3-125'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n groth16ProcessVkey = CIRCUIT_INFO['6-3-3-125']['groth16'].process_vkey;\n groth16TallyVkey = CIRCUIT_INFO['6-3-3-125']['groth16'].tally_vkey;\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n plonkProcessVkey = CIRCUIT_INFO['6-3-3-125']['plonk']?.process_vkey;\n plonkTallyVkey = CIRCUIT_INFO['6-3-3-125']['plonk']?.tally_vkey;\n }\n } else if (maxVoter <= 1953125 && maxOption <= 125) {\n // state_tree_depth: 9\n // vote_option_tree_depth: 3\n parameters = CIRCUIT_INFO['9-4-3-625'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n if (circuitType === MaciCircuitType.IP1V) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_1p1v_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_1p1v_vkey;\n } else if (circuitType === MaciCircuitType.QV) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_qv_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_qv_vkey;\n }\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n throw new Error('PLONK is not supported for MACI-9');\n }\n } else {\n throw new Error('Number of voters or options is too large.');\n }\n switch (type) {\n case MaciRoundType.MACI:\n return {\n parameters,\n groth16ProcessVkey,\n groth16TallyVkey,\n plonkProcessVkey,\n plonkTallyVkey,\n maciVoteType,\n maciCertSystem,\n };\n case MaciRoundType.AMACI:\n return {\n // parameters,\n // groth16ProcessVkey,\n // groth16TallyVkey,\n // plonkProcessVkey,\n // plonkTallyVkey,\n };\n case MaciRoundType.ORACLE_MACI:\n if (circuitType === MaciCircuitType.IP1V) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_1p1v_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_1p1v_vkey;\n } else if (circuitType === MaciCircuitType.QV) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_qv_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_qv_vkey;\n }\n return {\n parameters: CIRCUIT_INFO['9-4-3-625'].parameter,\n groth16ProcessVkey,\n groth16TallyVkey,\n plonkProcessVkey: null,\n plonkTallyVkey: null,\n maciVoteType,\n maciCertSystem: '0',\n };\n }\n}\n\nexport function getAMaciRoundCircuitFee(\n network: 'mainnet' | 'testnet',\n maxVoter: number,\n maxOption: number\n) {\n let requiredFee = {\n denom: 'peaka',\n amount: '0',\n };\n if (maxVoter <= 25 && maxOption <= 5) {\n // state_tree_depth: 2\n // vote_option_tree_depth: 1\n if (network === 'mainnet') {\n requiredFee.amount = '20000000000000000000';\n } else {\n requiredFee.amount = '20000000000000000000';\n }\n } else if (maxVoter <= 625 && maxOption <= 25) {\n // state_tree_depth: 4\n // vote_option_tree_depth: 2\n if (network === 'mainnet') {\n requiredFee.amount = '750000000000000000000';\n } else {\n requiredFee.amount = '750000000000000000000';\n }\n } else {\n throw new Error('Number of voters or options is too large.');\n }\n\n return requiredFee;\n}\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport { ContractParams } from '../../types';\nimport {\n createAMaciClientBy,\n createApiMaciClientBy,\n createApiSaasClientBy,\n createContractClientByWallet,\n createMaciClientBy,\n createOracleMaciClientBy,\n createRegistryClientBy,\n createSaasClientBy,\n} from './config';\nimport {\n CreateAMaciRoundParams,\n CreateMaciRoundParams,\n CreateOracleMaciRoundParams,\n CreateSaasOracleMaciRoundParams,\n CreateApiSaasAmaciRoundParams,\n} from './types';\nimport { getAMaciRoundCircuitFee, getContractParams } from './utils';\nimport { QTR_LIB } from './vars';\nimport { MaciRoundType, MaciCertSystemType } from '../../types';\nimport { unpackPubKey } from '../crypto';\nimport { StdFee, GasPrice, calculateFee } from '@cosmjs/stargate';\n\nexport const prefix = 'dora';\n\nexport class Contract {\n public network: 'mainnet' | 'testnet';\n public rpcEndpoint: string;\n public registryAddress: string;\n public saasAddress: string;\n public apiSaasAddress: string;\n public maciCodeId: number;\n public oracleCodeId: number;\n public feegrantOperator: string;\n public whitelistBackendPubkey: string;\n\n constructor({\n network,\n rpcEndpoint,\n registryAddress,\n saasAddress,\n apiSaasAddress,\n maciCodeId,\n oracleCodeId,\n feegrantOperator,\n whitelistBackendPubkey,\n }: ContractParams) {\n this.network = network;\n this.rpcEndpoint = rpcEndpoint;\n this.registryAddress = registryAddress;\n this.saasAddress = saasAddress;\n this.apiSaasAddress = apiSaasAddress;\n this.maciCodeId = maciCodeId;\n this.oracleCodeId = oracleCodeId;\n this.feegrantOperator = feegrantOperator;\n this.whitelistBackendPubkey = whitelistBackendPubkey;\n }\n\n async createAMaciRound({\n signer,\n startVoting,\n endVoting,\n operator,\n whitelist,\n title,\n description,\n link,\n maxVoter,\n voteOptionMap,\n voiceCreditAmount,\n circuitType,\n preDeactivateRoot,\n preDeactivateCoordinator,\n oracleWhitelistPubkey,\n fee = 'auto',\n }: CreateAMaciRoundParams & { signer: OfflineSigner }) {\n const start_time = (startVoting.getTime() * 10 ** 6).toString();\n const end_time = (endVoting.getTime() * 10 ** 6).toString();\n const client = await createRegistryClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.registryAddress,\n });\n\n const requiredFee = getAMaciRoundCircuitFee(\n this.network,\n maxVoter,\n voteOptionMap.length\n );\n\n preDeactivateRoot = preDeactivateRoot || '0';\n\n // Convert preDeactivateCoordinator to {x, y} format if provided\n let preDeactivateCoordinatorPubKey: { x: string; y: string } | undefined =\n undefined;\n if (preDeactivateCoordinator !== undefined) {\n let coordinatorX: bigint;\n let coordinatorY: bigint;\n\n if (typeof preDeactivateCoordinator === 'bigint') {\n // If it's a packed bigint, unpack it\n [coordinatorX, coordinatorY] = unpackPubKey(preDeactivateCoordinator);\n } else {\n // If it's already a PubKey array [x, y]\n [coordinatorX, coordinatorY] = preDeactivateCoordinator;\n }\n\n preDeactivateCoordinatorPubKey = {\n x: coordinatorX.toString(),\n y: coordinatorY.toString(),\n };\n }\n\n const res = await client.createRound(\n {\n operator,\n preDeactivateRoot,\n preDeactivateCoordinator: preDeactivateCoordinatorPubKey,\n voiceCreditAmount,\n whitelist,\n roundInfo: {\n title,\n description: description || '',\n link: link || '',\n },\n votingTime: {\n start_time,\n end_time,\n },\n maxVoter: maxVoter.toString(),\n voteOptionMap,\n certificationSystem: '0',\n circuitType,\n oracleWhitelistPubkey,\n },\n fee,\n undefined,\n [requiredFee]\n );\n let contractAddress = '';\n res.events.map((event) => {\n if (event.type === 'wasm') {\n let actionEvent = event.attributes.find(\n (attr) => attr.key === 'action'\n )!;\n if (actionEvent.value === 'created_round') {\n contractAddress = event.attributes\n .find((attr) => attr.key === 'round_addr')!\n .value.toString();\n }\n }\n });\n return {\n ...res,\n contractAddress,\n };\n }\n\n async createMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n whitelist,\n title,\n description,\n link,\n maxVoter,\n maxOption,\n circuitType,\n certSystemType,\n fee = 'auto',\n }: CreateMaciRoundParams & { signer: OfflineSigner }) {\n const start_time = (startVoting.getTime() * 10 ** 6).toString();\n const end_time = (endVoting.getTime() * 10 ** 6).toString();\n const [{ address }] = await signer.getAccounts();\n const client = await createContractClientByWallet(this.rpcEndpoint, signer);\n const [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\n const {\n parameters,\n groth16ProcessVkey,\n groth16TallyVkey,\n plonkProcessVkey,\n plonkTallyVkey,\n maciVoteType,\n maciCertSystem,\n } = getContractParams(\n MaciRoundType.MACI,\n circuitType,\n certSystemType,\n maxVoter,\n maxOption\n );\n\n const instantiateResponse = await client.instantiate(\n address,\n this.maciCodeId,\n {\n round_info: { title, description: description || '', link: link || '' },\n voting_time: {\n start_time,\n end_time,\n },\n parameters,\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\n },\n groth16_process_vkey: groth16ProcessVkey,\n groth16_tally_vkey: groth16TallyVkey,\n plonk_process_vkey: plonkProcessVkey,\n plonk_tally_vkey: plonkTallyVkey,\n max_vote_options: maxOption.toString(),\n whitelist,\n circuit_type: maciVoteType,\n certification_system: maciCertSystem,\n qtr_lib: QTR_LIB,\n },\n `[MACI] ${title}`,\n fee\n );\n\n return instantiateResponse;\n }\n\n async createOracleMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n title,\n description,\n link,\n voteOptionMap,\n circuitType,\n whitelistEcosystem,\n whitelistSnapshotHeight,\n whitelistVotingPowerArgs,\n fee = 'auto',\n }: CreateOracleMaciRoundParams & { signer: OfflineSigner }) {\n const start_time = (startVoting.getTime() * 1_000_000).toString();\n const end_time = (endVoting.getTime() * 1_000_000).toString();\n const [{ address }] = await signer.getAccounts();\n const client = await createContractClientByWallet(this.rpcEndpoint, signer);\n const [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\n const { maciVoteType, maciCertSystem } = getContractParams(\n MaciRoundType.ORACLE_MACI,\n circuitType,\n MaciCertSystemType.GROTH16,\n 0,\n 0\n );\n\n const instantiateResponse = await client.instantiate(\n address,\n this.oracleCodeId,\n {\n round_info: { title, description: description || '', link: link || '' },\n voting_time: {\n start_time,\n end_time,\n },\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\n },\n vote_option_map: voteOptionMap,\n whitelist_backend_pubkey: this.whitelistBackendPubkey,\n whitelist_ecosystem: whitelistEcosystem,\n whitelist_snapshot_height: whitelistSnapshotHeight,\n whitelist_voting_power_args: whitelistVotingPowerArgs,\n circuit_type: maciVoteType,\n certification_system: maciCertSystem,\n feegrant_operator: this.feegrantOperator,\n },\n `[Oracle MACI] ${title}`,\n fee\n );\n\n return instantiateResponse;\n }\n\n async createSaasOracleMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n title,\n description,\n link,\n maxVoter,\n voteOptionMap,\n whitelistBackendPubkey,\n gasStation = false,\n fee = 1.8,\n }: CreateSaasOracleMaciRoundParams & { signer: OfflineSigner }) {\n const startTime = (startVoting.getTime() * 1_000_000).toString();\n const endTime = (endVoting.getTime() * 1_000_000).toString();\n\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n const [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\n\n const roundParams = {\n certificationSystem: '0',\n circuitType: '0',\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\n },\n maxVoters: maxVoter,\n roundInfo: {\n title,\n description: description || '',\n link: link || '',\n },\n startTime,\n endTime,\n voteOptionMap,\n whitelistBackendPubkey:\n whitelistBackendPubkey || this.whitelistBackendPubkey,\n };\n\n let createResponse;\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n create_oracle_maci_round: {\n certification_system: '0',\n circuit_type: '0',\n coordinator: roundParams.coordinator,\n max_voters: roundParams.maxVoters.toString(),\n round_info: roundParams.roundInfo,\n start_time: roundParams.startTime,\n end_time: roundParams.endTime,\n vote_option_map: roundParams.voteOptionMap,\n whitelist_backend_pubkey: roundParams.whitelistBackendPubkey,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n createResponse = await client.createOracleMaciRound(\n roundParams,\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n createResponse = await client.createOracleMaciRound(\n roundParams,\n grantFee\n );\n } else {\n createResponse = await client.createOracleMaciRound(roundParams, fee);\n }\n\n let contractAddress = '';\n createResponse.events.map((event) => {\n if (event.type === 'wasm') {\n let actionEvent = event.attributes.find(\n (attr) => attr.key === 'action'\n )!;\n if (actionEvent.value === 'created_oracle_maci_round') {\n contractAddress = event.attributes\n .find((attr) => attr.key === 'round_addr')!\n .value.toString();\n }\n }\n });\n return {\n ...createResponse,\n contractAddress,\n };\n }\n\n async setSaasOracleMaciRoundInfo({\n signer,\n contractAddress,\n title,\n description,\n link,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n title: string;\n description: string;\n link: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n const roundInfo = {\n title,\n description,\n link,\n };\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n set_round_info: {\n contract_addr: contractAddress,\n round_info: roundInfo,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n grantFee\n );\n }\n\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n fee\n );\n }\n\n async setSaasOracleMaciRoundVoteOptions({\n signer,\n contractAddress,\n voteOptionMap,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n voteOptionMap: string[];\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n set_vote_options_map: {\n contract_addr: contractAddress,\n vote_option_map: voteOptionMap,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n grantFee\n );\n }\n\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n fee\n );\n }\n\n async saasGrantToVoter({\n signer,\n baseAmount,\n contractAddress,\n grantee,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n baseAmount: string;\n contractAddress: string;\n grantee: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n grant_to_voter: {\n base_amount: baseAmount,\n contract_addr: contractAddress,\n grantee,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.grantToVoter(\n {\n baseAmount,\n contractAddr: contractAddress,\n grantee,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.grantToVoter(\n {\n baseAmount,\n contractAddr: contractAddress,\n grantee,\n },\n grantFee\n );\n }\n\n return client.grantToVoter(\n {\n baseAmount,\n contractAddr: contractAddress,\n grantee,\n },\n fee\n );\n }\n\n async addSaasOperator({\n signer,\n operator,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n operator: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n add_operator: {\n operator,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.addOperator({ operator }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.addOperator({ operator }, grantFee);\n }\n\n return client.addOperator({ operator }, fee);\n }\n\n async removeSaasOperator({\n signer,\n operator,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n operator: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n remove_operator: {\n operator,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.removeOperator({ operator }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.removeOperator({ operator }, grantFee);\n }\n\n return client.removeOperator({ operator }, fee);\n }\n\n async isSaasOperator({\n signer,\n operator,\n }: {\n signer: OfflineSigner;\n operator: string;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n return client.isOperator({ address: operator });\n }\n\n async depositSaas({\n signer,\n amount,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n amount: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n const funds = [\n {\n denom: 'peaka',\n amount: amount,\n },\n ];\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n deposit: {},\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n funds,\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.deposit(grantFee, undefined, funds);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.deposit(grantFee, undefined, funds);\n }\n\n return client.deposit(fee, undefined, funds);\n }\n\n async withdrawSaas({\n signer,\n amount,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n amount: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n withdraw: {\n amount,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.withdraw({ amount }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.withdraw({ amount }, grantFee);\n }\n\n return client.withdraw({ amount }, fee);\n }\n\n async queryRoundInfo({\n signer,\n roundAddress,\n }: {\n signer: OfflineSigner;\n roundAddress: string;\n }) {\n const client = await createMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: roundAddress,\n });\n const roundInfo = await client.getRoundInfo();\n return roundInfo;\n }\n\n async oracleMaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n const client = await createOracleMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n return client;\n }\n\n async registryClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createRegistryClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async maciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async amaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createAMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async apiMaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createApiMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async saasClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async apiSaasClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async contractClient({ signer }: { signer: OfflineSigner }) {\n return createContractClientByWallet(this.rpcEndpoint, signer);\n }\n\n async createApiSaasMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n title,\n description,\n link,\n maxVoter,\n voteOptionMap,\n whitelistBackendPubkey,\n gasStation = false,\n fee = 1.8,\n }: CreateSaasOracleMaciRoundParams & { signer: OfflineSigner }) {\n const startTime = (startVoting.getTime() * 1_000_000).toString();\n const endTime = (endVoting.getTime() * 1_000_000).toString();\n\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n const [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\n\n const roundParams = {\n certificationSystem: '0',\n circuitType: '0',\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\n },\n maxVoters: maxVoter,\n roundInfo: {\n title,\n description: description || '',\n link: link || '',\n },\n startTime,\n endTime,\n voteOptionMap,\n whitelistBackendPubkey:\n whitelistBackendPubkey || this.whitelistBackendPubkey,\n };\n\n let createResponse;\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n create_api_maci_round: {\n certification_system: '0',\n circuit_type: '0',\n coordinator: roundParams.coordinator,\n max_voters: roundParams.maxVoters.toString(),\n round_info: roundParams.roundInfo,\n start_time: roundParams.startTime,\n end_time: roundParams.endTime,\n vote_option_map: roundParams.voteOptionMap,\n whitelist_backend_pubkey: roundParams.whitelistBackendPubkey,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.apiSaasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.apiSaasAddress,\n };\n createResponse = await client.createMaciRound(roundParams, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.apiSaasAddress,\n };\n createResponse = await client.createMaciRound(roundParams, grantFee);\n } else {\n createResponse = await client.createMaciRound(roundParams, fee);\n }\n\n let contractAddress = '';\n createResponse.events.map((event) => {\n if (event.type === 'wasm') {\n let actionEvent = event.attributes.find(\n (attr) => attr.key === 'action'\n )!;\n if (actionEvent.value === 'created_maci_round') {\n contractAddress = event.attributes\n .find((attr) => attr.key === 'round_addr')!\n .value.toString();\n }\n }\n });\n return {\n ...createResponse,\n contractAddress,\n };\n }\n\n async setApiSaasMaciRoundInfo({\n signer,\n contractAddress,\n title,\n description,\n link,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n title: string;\n description: string;\n link: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n\n const roundInfo = {\n title,\n description,\n link,\n };\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n set_round_info: {\n contract_addr: contractAddress,\n round_info: roundInfo,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.apiSaasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.apiSaasAddress,\n };\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.apiSaasAddress,\n };\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n grantFee\n );\n }\n\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n fee\n );\n }\n\n async setApiSaasMaciRoundVoteOptions({\n signer,\n contractAddress,\n voteOptionMap,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n voteOptionMap: string[];\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n set_vote_options_map: {\n contract_addr: contractAddress,\n vote_option_map: voteOptionMap,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.apiSaasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.apiSaasAddress,\n };\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.apiSaasAddress,\n };\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n grantFee\n );\n }\n\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n fee\n );\n }\n\n async addApiSaasOperator({\n signer,\n operator,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n operator: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n add_operator: {\n operator,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.apiSaasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.apiSaasAddress,\n };\n return client.addOperator({ operator }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.apiSaasAddress,\n };\n return client.addOperator({ operator }, grantFee);\n }\n\n return client.addOperator({ operator }, fee);\n }\n\n async removeApiSaasOperator({\n signer,\n operator,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n operator: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n remove_operator: {\n operator,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.apiSaasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.apiSaasAddress,\n };\n return client.removeOperator({ operator }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.apiSaasAddress,\n };\n return client.removeOperator({ operator }, grantFee);\n }\n\n return client.removeOperator({ operator }, fee);\n }\n\n async isApiSaasOperator({\n signer,\n operator,\n }: {\n signer: OfflineSigner;\n operator: string;\n }) {\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n return client.isOperator({ address: operator });\n }\n\n async createApiSaasAmaciRound({\n signer,\n operator,\n startVoting,\n endVoting,\n title,\n description,\n link,\n maxVoter,\n voteOptionMap,\n whitelist,\n voiceCreditAmount,\n preDeactivateRoot,\n preDeactivateCoordinator,\n oracleWhitelistPubkey,\n circuitType,\n gasStation = false,\n fee = 1.8,\n }: CreateApiSaasAmaciRoundParams & { signer: OfflineSigner }) {\n const startTime = (startVoting.getTime() * 1_000_000).toString();\n const endTime = (endVoting.getTime() * 1_000_000).toString();\n\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n\n // Convert preDeactivateCoordinator to {x, y} format if provided\n let preDeactivateCoordinatorPubKey: { x: string; y: string } | undefined =\n undefined;\n if (preDeactivateCoordinator !== undefined) {\n let coordinatorX: bigint;\n let coordinatorY: bigint;\n\n if (typeof preDeactivateCoordinator === 'bigint') {\n // If it's a packed bigint, unpack it\n [coordinatorX, coordinatorY] = unpackPubKey(preDeactivateCoordinator);\n } else {\n // If it's already a PubKey array [x, y]\n [coordinatorX, coordinatorY] = preDeactivateCoordinator;\n }\n\n preDeactivateCoordinatorPubKey = {\n x: coordinatorX.toString(),\n y: coordinatorY.toString(),\n };\n }\n\n const roundParams = {\n certificationSystem: '0',\n circuitType: circuitType.toString(),\n maxVoter: maxVoter.toString(),\n operator,\n oracleWhitelistPubkey,\n preDeactivateRoot: preDeactivateRoot || '0',\n preDeactivateCoordinator: preDeactivateCoordinatorPubKey,\n roundInfo: {\n title,\n description: description || '',\n link: link || '',\n },\n voiceCreditAmount,\n voteOptionMap,\n votingTime: {\n start_time: startTime,\n end_time: endTime,\n },\n whitelist,\n };\n\n let createResponse;\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n create_amaci_round: {\n certification_system: '0',\n circuit_type: circuitType.toString(),\n max_voter: maxVoter.toString(),\n operator,\n oracle_whitelist_pubkey: oracleWhitelistPubkey,\n pre_deactivate_root: preDeactivateRoot || '0',\n pre_deactivate_coordinator: preDeactivateCoordinatorPubKey,\n round_info: roundParams.roundInfo,\n voice_credit_amount: voiceCreditAmount,\n vote_option_map: voteOptionMap,\n voting_time: roundParams.votingTime,\n whitelist,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.apiSaasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.apiSaasAddress,\n };\n createResponse = await client.createAmaciRound(roundParams, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.apiSaasAddress,\n };\n createResponse = await client.createAmaciRound(roundParams, grantFee);\n } else {\n createResponse = await client.createAmaciRound(roundParams, fee);\n }\n\n let contractAddress = '';\n createResponse.events.map((event) => {\n if (event.type === 'wasm') {\n let actionEvent = event.attributes.find(\n (attr) => attr.key === 'action'\n );\n if (actionEvent && actionEvent.value === 'created_round') {\n const roundAddrEvent = event.attributes.find(\n (attr) => attr.key === 'round_addr'\n );\n if (roundAddrEvent) {\n contractAddress = roundAddrEvent.value.toString();\n }\n }\n }\n });\n return {\n ...createResponse,\n contractAddress,\n };\n }\n}\n","import { Http } from '../http';\nimport {\n OracleCertificateParams,\n SignatureRequest,\n SignatureResponse,\n FeegrantAllowanceResponse,\n EcosystemsResponse,\n} from './types';\n\nexport class OracleCertificate {\n private certificateApiEndpoint: string;\n private http: Http;\n\n constructor({ certificateApiEndpoint, http }: OracleCertificateParams) {\n this.certificateApiEndpoint = certificateApiEndpoint;\n this.http = http;\n }\n\n async sign(data: SignatureRequest): Promise<SignatureResponse> {\n const response = await this.http.fetch(\n `${this.certificateApiEndpoint}/${data.ecosystem}/sign`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n address: data.address,\n height: data.height,\n contractAddress: data.contractAddress,\n }),\n }\n );\n const signatureData = await response.json();\n\n return signatureData;\n }\n\n async feegrantAllowance(\n granter: string,\n grantee: string\n ): Promise<FeegrantAllowanceResponse> {\n const response = await this.http.fetchRest(\n `/cosmos/feegrant/v1beta1/allowance/${granter}/${grantee}`\n );\n\n return {\n granter,\n grantee,\n spend_limit: response.allowance.allowance.allowance.spend_limit,\n };\n }\n\n async listEcosystems(): Promise<EcosystemsResponse> {\n const response = await this.http.fetch(\n `${this.certificateApiEndpoint}/list`,\n {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n }\n );\n const signatureData = await response.json();\n\n return signatureData;\n }\n}\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n Keypair,\n batchGenMessage,\n PubKey,\n stringizing,\n genAddKeyInput,\n} from '../crypto';\nimport { Contract } from '../contract';\nimport { Indexer } from '../indexer';\nimport { OracleCertificate } from '../oracle-certificate';\nimport {\n MsgExecuteContractEncodeObject,\n SigningCosmWasmClient,\n} from '@cosmjs/cosmwasm-stargate';\nimport { GasPrice, calculateFee, StdFee } from '@cosmjs/stargate';\nimport { MsgExecuteContract } from 'cosmjs-types/cosmwasm/wasm/v1/tx.js';\nimport { CertificateEcosystem, ErrorResponse, RoundType } from '../../types';\nimport { SignatureResponse } from '../oracle-certificate/types';\nimport { OracleWhitelistConfig } from '../contract/ts/OracleMaci.types';\nimport { getAMaciRoundCircuitFee } from '../contract/utils';\nimport { Groth16ProofType } from '../contract/ts/Maci.types';\n\nexport function isErrorResponse(response: unknown): response is ErrorResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'error' in response &&\n typeof (response as ErrorResponse).error === 'object' &&\n 'message' in (response as ErrorResponse).error\n );\n}\n\nexport class MACI {\n public network: 'mainnet' | 'testnet';\n public contract: Contract;\n public indexer: Indexer;\n public oracleCertificate: OracleCertificate;\n public maciKeypair: Keypair;\n constructor({\n contract,\n indexer,\n oracleCertificate,\n maciKeypair,\n }: {\n contract: Contract;\n indexer: Indexer;\n oracleCertificate: OracleCertificate;\n maciKeypair: Keypair;\n }) {\n this.network = contract.network;\n this.contract = contract;\n this.indexer = indexer;\n this.oracleCertificate = oracleCertificate;\n this.maciKeypair = maciKeypair;\n }\n\n async getStateIdxInc({\n signer,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const client = await this.contract.maciClient({\n signer,\n contractAddress,\n });\n\n const stateIdx = await client.getStateIdxInc({ address });\n return stateIdx;\n }\n\n async getVoiceCreditBalance({\n signer,\n stateIdx,\n contractAddress,\n }: {\n signer: OfflineSigner;\n stateIdx: number;\n contractAddress: string;\n }) {\n const client = await this.contract.maciClient({\n signer,\n contractAddress,\n });\n\n const voiceCredit = await client.getVoiceCreditBalance({\n index: stateIdx.toString(),\n });\n return voiceCredit;\n }\n\n async getStateIdxByPubKey({\n contractAddress,\n pubKey,\n }: {\n contractAddress: string;\n pubKey: bigint[];\n }) {\n const response = await this.indexer.getSignUpEventByPubKey(\n contractAddress,\n pubKey\n );\n\n if (isErrorResponse(response)) {\n return -1;\n }\n return response.data.signUpEvents[0].stateIdx;\n }\n\n async feegrantAllowance({\n address,\n contractAddress,\n }: {\n address: string;\n contractAddress: string;\n }) {\n try {\n const response = await this.oracleCertificate.feegrantAllowance(\n contractAddress,\n address\n );\n return response;\n } catch (error) {\n return {\n granter: contractAddress,\n grantee: address,\n spend_limit: [],\n };\n }\n }\n\n async hasFeegrant({\n address,\n contractAddress,\n }: {\n address: string;\n contractAddress: string;\n }): Promise<boolean> {\n try {\n const response = await this.oracleCertificate.feegrantAllowance(\n contractAddress,\n address\n );\n return response.spend_limit.length > 0;\n } catch (error) {\n return false;\n }\n }\n\n // only for maci and oracle maci, amaci will set the voice credit when deploy the contract\n async queryWhitelistBalanceOf({\n signer,\n address,\n contractAddress,\n certificate,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n certificate?: {\n signature: string;\n amount: string;\n };\n }): Promise<string> {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'maciType',\n 'voiceCreditAmount',\n ]);\n\n if (isErrorResponse(round)) {\n throw new Error(\n `Failed to get round info: ${round.error.type} ${round.error.message}`\n );\n }\n\n if (round.data.round.maciType === 'aMACI') {\n const isWhiteListed = await this.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n\n if (isWhiteListed) {\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'voiceCreditAmount',\n ]);\n\n if (!isErrorResponse(round)) {\n if (round.data.round.voiceCreditAmount) {\n return round.data.round.voiceCreditAmount;\n } else {\n return '0';\n }\n } else {\n throw new Error(\n `Failed to query amaci voice credit: ${round.error.type} ${round.error.message}`\n );\n }\n } else {\n return '0';\n }\n }\n\n if (certificate) {\n const client = await this.contract.oracleMaciClient({\n signer,\n contractAddress,\n });\n\n const balance = await client.whiteBalanceOf({\n amount: certificate.amount,\n certificate: certificate.signature,\n sender: address,\n });\n\n return balance;\n } else {\n const client = await this.contract.maciClient({\n signer,\n contractAddress,\n });\n\n const balance = await client.whiteBalanceOf({\n sender: address,\n });\n\n return balance;\n }\n }\n\n async isWhitelisted({\n signer,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n const isWhitelisted = await client.isWhiteList({\n sender: address,\n });\n\n return isWhitelisted;\n }\n\n async getOracleWhitelistConfig({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }): Promise<OracleWhitelistConfig> {\n const client = await this.contract.oracleMaciClient({\n signer,\n contractAddress,\n });\n\n const snapshotHeight = await client.queryOracleWhitelistConfig();\n return snapshotHeight;\n }\n\n async getRoundInfo({ contractAddress }: { contractAddress: string }) {\n const roundInfo = await this.indexer.getRoundWithFields(contractAddress);\n\n if (isErrorResponse(roundInfo)) {\n throw new Error(\n `Failed to get round info: ${roundInfo.error.type} ${roundInfo.error.message}`\n );\n }\n\n return roundInfo.data.round as RoundType;\n }\n\n async getRoundCircuitType({ contractAddress }: { contractAddress: string }) {\n const roundInfo = await this.getRoundInfo({ contractAddress });\n\n return roundInfo.circuitType; // 0: 1p1v, 1: qv\n }\n\n async queryRoundIsQv({ contractAddress }: { contractAddress: string }) {\n const circuitType = await this.getRoundCircuitType({ contractAddress });\n\n return circuitType === '1';\n }\n\n async queryRoundClaimable({\n contractAddress,\n }: {\n contractAddress: string;\n }): Promise<{\n claimable: boolean | null;\n balance: string | null;\n }> {\n try {\n const roundInfo = await this.getRoundInfo({ contractAddress });\n\n if (roundInfo.maciType !== 'aMACI') {\n return {\n claimable: null,\n balance: null,\n };\n }\n\n const votingEndTime = new Date(Number(roundInfo.votingEnd) / 10 ** 6);\n const currentTime = new Date();\n const threeDaysInMs = 3 * 24 * 60 * 60 * 1000;\n\n if (currentTime.getTime() - votingEndTime.getTime() <= threeDaysInMs) {\n return {\n claimable: null,\n balance: null,\n };\n }\n\n const roundBalance = await this.indexer.balanceOf(contractAddress);\n if (isErrorResponse(roundBalance)) {\n throw new Error(\n `Failed to query round balance: ${roundBalance.error.type} ${roundBalance.error.message}`\n );\n }\n\n if (\n roundBalance.data.balance &&\n roundBalance.data.balance !== '0' &&\n roundBalance.data.balance !== ''\n ) {\n return {\n claimable: true,\n balance: roundBalance.data.balance,\n };\n }\n\n return {\n claimable: false,\n balance: roundBalance.data.balance,\n };\n } catch (error) {\n console.error('Error in queryRoundClaimable:', error);\n return {\n claimable: null,\n balance: null,\n };\n }\n }\n\n async queryAMaciChargeFee({\n maxVoter,\n maxOption,\n }: {\n maxVoter: number;\n maxOption: number;\n }) {\n const fee = getAMaciRoundCircuitFee(this.network, maxVoter, maxOption);\n return fee;\n }\n\n async queryRoundGasStation({ contractAddress }: { contractAddress: string }) {\n const roundInfo = await this.getRoundInfo({ contractAddress });\n\n return roundInfo.gasStationEnable;\n }\n\n parseRoundStatus(\n votingStart: number,\n votingEnd: number,\n status: string,\n currentTime: Date\n ): string {\n const startTime = new Date(votingStart / 10 ** 6);\n const endTime = new Date(votingEnd / 10 ** 6);\n\n // Inherit logic from Maci Explorer\n if (Number(votingStart) === 0) {\n return 'Created';\n }\n\n if (Number(votingEnd) === 0) {\n if (startTime < currentTime) {\n return 'Ongoing';\n }\n } else {\n if (startTime < currentTime && currentTime < endTime) {\n return 'Ongoing';\n }\n if (currentTime > endTime) {\n if (status !== 'Closed') {\n return 'Tallying';\n }\n }\n }\n\n return status;\n }\n\n async queryRoundBalance({ contractAddress }: { contractAddress: string }) {\n const roundBalance = await this.indexer.balanceOf(contractAddress);\n if (isErrorResponse(roundBalance)) {\n throw new Error(\n `Failed to query round balance: ${roundBalance.error.type} ${roundBalance.error.message}`\n );\n }\n\n return roundBalance.data.balance;\n }\n\n async requestOracleCertificate({\n signer,\n ecosystem,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n ecosystem: CertificateEcosystem;\n address?: string;\n contractAddress: string;\n }): Promise<SignatureResponse> {\n const oracleWhitelistConfig = await this.getOracleWhitelistConfig({\n signer,\n contractAddress,\n });\n\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const signResponse = await this.oracleCertificate.sign({\n ecosystem,\n address,\n contractAddress,\n height: oracleWhitelistConfig.snapshot_height,\n });\n\n return signResponse;\n }\n\n async signup({\n signer,\n address,\n contractAddress,\n maciKeypair,\n oracleCertificate,\n gasStation = false,\n fee,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n maciKeypair?: Keypair;\n oracleCertificate?: {\n amount?: string;\n signature: string;\n };\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n // maciKeypair = await this.crypto.genKeypairFromSign(signer, address);\n }\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n // If oracleCertificate has data and amount has data, use signupOracle\n if (oracleCertificate && oracleCertificate.amount) {\n return await this.signupOracle({\n client,\n address,\n pubKey: maciKeypair.pubKey,\n contractAddress,\n oracleCertificate: {\n amount: oracleCertificate.amount,\n signature: oracleCertificate.signature,\n },\n gasStation,\n fee,\n });\n } else {\n // If oracleCertificate has data but amount is missing, or oracleCertificate is missing, use signupSimple\n return await this.signupSimple({\n client,\n address,\n pubKey: maciKeypair.pubKey,\n contractAddress,\n certificate: oracleCertificate?.signature,\n gasStation,\n fee,\n });\n }\n } catch (error) {\n throw Error(`Signup failed! ${error}`);\n }\n }\n\n async rawSignup({\n signer,\n address,\n contractAddress,\n pubKey,\n oracleCertificate,\n gasStation = false,\n granter,\n fee,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n pubKey: PubKey;\n oracleCertificate?: {\n amount?: string;\n signature: string;\n };\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n // If oracleCertificate has data and amount has data, use signupOracle\n if (oracleCertificate && oracleCertificate.amount) {\n return await this.signupOracle({\n client,\n address,\n pubKey,\n contractAddress,\n oracleCertificate: {\n amount: oracleCertificate.amount,\n signature: oracleCertificate.signature,\n },\n gasStation,\n granter,\n fee,\n });\n } else {\n // If oracleCertificate has data but amount is missing, or oracleCertificate is missing, use signupSimple\n return await this.signupSimple({\n client,\n address,\n pubKey,\n contractAddress,\n certificate: oracleCertificate?.signature,\n gasStation,\n granter,\n fee,\n });\n }\n } catch (error) {\n throw Error(`Signup failed! ${error}`);\n }\n }\n\n private async processVoteOptions({\n selectedOptions,\n contractAddress,\n voiceCreditBalance,\n }: {\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n contractAddress: string;\n voiceCreditBalance: string;\n }) {\n // Check for duplicate options\n const idxSet = new Set();\n for (const option of selectedOptions) {\n if (idxSet.has(option.idx)) {\n throw new Error(\n `Duplicate option index (${option.idx}) is not allowed`\n );\n }\n idxSet.add(option.idx);\n }\n\n // Filter and sort options\n const options = selectedOptions\n .filter((o) => !!o.vc)\n .sort((a, b) => a.idx - b.idx);\n\n // Calculate used voice credits\n const isQv = await this.queryRoundIsQv({ contractAddress });\n const usedVc = options.reduce((s, o) => s + (isQv ? o.vc * o.vc : o.vc), 0);\n\n if (Number(voiceCreditBalance) < usedVc) {\n throw new Error('Insufficient voice credit balance');\n }\n\n return options;\n }\n\n async vote({\n signer,\n address,\n contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciKeypair,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n operatorCoordPubKey: PubKey;\n maciKeypair?: Keypair;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n }\n\n const stateIdx = await this.getStateIdxByPubKey({\n contractAddress,\n pubKey: maciKeypair.pubKey,\n });\n\n if (stateIdx === -1) {\n throw new Error(\n 'State index is not set, Please signup or addNewKey first'\n );\n }\n\n try {\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'maciType',\n 'voiceCreditAmount',\n ]);\n\n if (isErrorResponse(round)) {\n throw new Error(\n `Failed to get round info: ${round.error.type} ${round.error.message}`\n );\n }\n\n let voiceCreditBalance;\n if (round.data.round.maciType === 'aMACI') {\n const isWhiteListed = await this.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n\n if (isWhiteListed) {\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'voiceCreditAmount',\n ]);\n\n if (!isErrorResponse(round)) {\n if (round.data.round.voiceCreditAmount) {\n voiceCreditBalance = round.data.round.voiceCreditAmount;\n } else {\n voiceCreditBalance = '0';\n }\n } else {\n throw new Error(\n `Failed to query amaci voice credit: ${round.error.type} ${round.error.message}`\n );\n }\n } else {\n voiceCreditBalance = '0';\n }\n } else {\n voiceCreditBalance = await this.getVoiceCreditBalance({\n signer,\n stateIdx,\n contractAddress,\n });\n }\n\n const options = await this.processVoteOptions({\n selectedOptions,\n contractAddress,\n voiceCreditBalance,\n });\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const plan = options.map((o) => {\n return [o.idx, o.vc] as [number, number];\n });\n\n const payload = batchGenMessage(\n stateIdx,\n maciKeypair,\n operatorCoordPubKey,\n plan\n );\n const client = await this.contract.contractClient({\n signer,\n });\n\n return await this.publishMessage({\n client,\n address,\n payload,\n contractAddress,\n gasStation,\n fee,\n });\n } catch (error) {\n throw Error(`Vote failed! ${error}`);\n }\n }\n\n async rawVote({\n signer,\n address,\n contractAddress,\n payload,\n gasStation = false,\n granter,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n payload: {\n msg: bigint[];\n encPubkeys: PubKey;\n }[];\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n return await this.publishMessage({\n client,\n address,\n payload,\n contractAddress,\n gasStation,\n granter,\n fee,\n });\n } catch (error) {\n throw Error(`Vote failed! ${error}`);\n }\n }\n\n async publishMessage({\n client,\n address,\n payload,\n contractAddress,\n gasStation,\n granter,\n fee = 1.8,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n payload: {\n msg: bigint[];\n encPubkeys: PubKey;\n }[];\n contractAddress: string;\n gasStation: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n const msgs: MsgExecuteContractEncodeObject[] = payload.map(\n ({ msg, encPubkeys }) => ({\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: MsgExecuteContract.fromPartial({\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(\n JSON.stringify(\n stringizing({\n publish_message: {\n enc_pub_key: {\n x: encPubkeys[0],\n y: encPubkeys[1],\n },\n message: {\n data: msg,\n },\n },\n })\n )\n ),\n }),\n })\n );\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(address, msgs, '');\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: granter || contractAddress,\n };\n return client.signAndBroadcast(address, msgs, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: granter || contractAddress,\n };\n return client.signAndBroadcast(address, msgs, grantFee);\n }\n\n return client.signAndBroadcast(address, msgs, fee);\n }\n\n async signupSimple({\n client,\n address,\n pubKey,\n contractAddress,\n certificate,\n gasStation,\n granter,\n fee = 1.8,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n pubKey: PubKey;\n contractAddress: string;\n certificate?: string;\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n const msg = {\n sign_up: {\n certificate,\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n },\n };\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: granter || contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: granter || contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n }\n\n return client.execute(address, contractAddress, msg, fee);\n }\n\n async signupOracle({\n client,\n address,\n pubKey,\n contractAddress,\n oracleCertificate,\n gasStation,\n granter,\n fee = 1.8,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n pubKey: PubKey;\n contractAddress: string;\n oracleCertificate: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n const msg = {\n sign_up: {\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n amount: oracleCertificate.amount,\n certificate: oracleCertificate.signature,\n },\n };\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: granter || contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: granter || contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n }\n\n return client.execute(address, contractAddress, msg, fee);\n }\n\n async deactivate({\n signer,\n address,\n maciKeypair,\n contractAddress,\n gasStation,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n address?: string;\n maciKeypair?: Keypair;\n contractAddress: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n address = address || (await signer.getAccounts())[0].address;\n\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n }\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n const stateIdx = await this.getStateIdxInc({\n signer,\n address,\n contractAddress,\n });\n\n const operatorCoordPubKey = await this.getRoundInfo({\n contractAddress,\n });\n\n const payload = batchGenMessage(\n Number(stateIdx),\n maciKeypair,\n [\n BigInt(operatorCoordPubKey.coordinatorPubkeyX),\n BigInt(operatorCoordPubKey.coordinatorPubkeyY),\n ],\n [[0, 0]]\n );\n\n const { msg, encPubkeys } = payload[0];\n\n const deactivateMsg = stringizing({\n publish_deactivate_message: {\n enc_pub_key: {\n x: encPubkeys[0],\n y: encPubkeys[1],\n },\n message: {\n data: msg,\n },\n },\n });\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(deactivateMsg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n deactivateMsg,\n grantFee\n );\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n deactivateMsg,\n grantFee\n );\n }\n\n return client.execute(address, contractAddress, deactivateMsg, fee);\n } catch (error) {\n throw Error(`Submit deactivate failed! ${error}`);\n }\n }\n\n async rawDeactivate({\n signer,\n address,\n contractAddress,\n payload,\n gasStation = false,\n granter,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n payload: {\n msg: bigint[];\n encPubkeys: PubKey;\n };\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n address = address || (await signer.getAccounts())[0].address;\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n // const payload = batchGenMessage(\n // Number(stateIdx),\n // maciKeypair,\n // [\n // BigInt(operatorCoordPubKey.coordinatorPubkeyX),\n // BigInt(operatorCoordPubKey.coordinatorPubkeyY),\n // ],\n // [[0, 0]]\n // );\n\n const { msg, encPubkeys } = payload;\n\n const deactivateMsg = stringizing({\n publish_deactivate_message: {\n enc_pub_key: {\n x: encPubkeys[0],\n y: encPubkeys[1],\n },\n message: {\n data: msg,\n },\n },\n });\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(deactivateMsg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: granter || contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n deactivateMsg,\n grantFee\n );\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: granter || contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n deactivateMsg,\n grantFee\n );\n }\n\n return client.execute(address, contractAddress, deactivateMsg, fee);\n } catch (error) {\n throw Error(`Submit deactivate failed! ${error}`);\n }\n }\n\n async fetchAllDeactivateLogs({\n contractAddress,\n }: {\n contractAddress: string;\n }) {\n const deactivates =\n await this.indexer.fetchAllDeactivateLogs(contractAddress);\n return deactivates;\n }\n\n async genAddKeyInput({\n maciKeypair,\n contractAddress,\n }: {\n maciKeypair: Keypair;\n contractAddress: string;\n }) {\n const deactivates = await this.fetchAllDeactivateLogs({\n contractAddress,\n });\n\n const roundInfo = await this.getRoundInfo({\n contractAddress,\n });\n\n const circuitPower = roundInfo.circuitPower;\n const stateTreeDepth = Number(circuitPower.split('-')[0]);\n const inputObj = genAddKeyInput(stateTreeDepth + 2, {\n coordPubKey: [\n BigInt(roundInfo.coordinatorPubkeyX),\n BigInt(roundInfo.coordinatorPubkeyY),\n ],\n oldKey: maciKeypair,\n deactivates: deactivates.map((d: any) => d.map(BigInt)),\n });\n return inputObj;\n\n // 1. generate proof\n\n // 2. compress proof to vote proof\n\n // 3. send addNewKey tx\n }\n\n async addNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newMaciKeypair,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newMaciKeypair: Keypair;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n return await client.addNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newMaciKeypair.pubKey[0].toString(),\n y: newMaciKeypair.pubKey[1].toString(),\n },\n },\n fee\n );\n }\n\n async rawAddNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newPubkey,\n gasStation = false,\n granter,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newPubkey: PubKey;\n gasStation?: boolean;\n granter?: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contract.contractClient({ signer });\n\n const msg = {\n add_new_key: {\n d,\n groth16_proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n };\n\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: granter || contractAddress,\n };\n\n return await client.addNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n grantFee\n );\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: granter || contractAddress,\n };\n\n return await client.addNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n grantFee\n );\n }\n\n return await client.addNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n fee\n );\n }\n\n async rawPreAddNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newPubkey,\n gasStation = false,\n granter,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newPubkey: PubKey;\n gasStation?: boolean;\n granter?: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contract.contractClient({ signer });\n\n const msg = {\n pre_add_new_key: {\n d,\n groth16_proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n };\n\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: granter || contractAddress,\n };\n\n return await client.preAddNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n grantFee\n );\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: granter || contractAddress,\n };\n\n return await client.preAddNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n grantFee\n );\n }\n\n return await client.preAddNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n fee\n );\n }\n\n async claimAMaciRound({\n signer,\n contractAddress,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n return client.claim(fee);\n }\n\n async getOracleCertificateConfig() {\n const ecosystems = await this.oracleCertificate.listEcosystems();\n return ecosystems;\n }\n\n /**\n * Batch grant with bond (for maci)\n * @param signer\n * @param contractAddress\n * @param address\n * @param amount\n * @returns\n */\n async batchGrantWithBond({\n signer,\n contractAddress,\n address,\n amount,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n amount: string;\n address?: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.contractClient({\n signer,\n });\n\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const msgs: MsgExecuteContractEncodeObject[] = [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: MsgExecuteContract.fromPartial({\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(\n JSON.stringify(\n stringizing({\n grant: {\n max_amount: BigInt('100000000000000000000000'),\n },\n })\n )\n ),\n }),\n },\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: MsgExecuteContract.fromPartial({\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(\n JSON.stringify(\n stringizing({\n bond: {},\n })\n )\n ),\n funds: [\n {\n denom: 'peaka',\n amount,\n },\n ],\n }),\n },\n ];\n\n try {\n const result = await client.signAndBroadcast(address, msgs, fee);\n return result;\n } catch (err) {\n throw err;\n }\n }\n\n /**\n * Batch revoke with withdraw (for maci)\n * @param client\n * @param contractAddress\n * @param address\n * @returns\n */\n async batchRevokeWithdraw({\n signer,\n contractAddress,\n address,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n address?: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.contractClient({\n signer,\n });\n\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const msgs: MsgExecuteContractEncodeObject[] = [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: MsgExecuteContract.fromPartial({\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(\n JSON.stringify(\n stringizing({\n withdraw: {},\n })\n )\n ),\n }),\n },\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: MsgExecuteContract.fromPartial({\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(\n JSON.stringify(\n stringizing({\n revoke: {},\n })\n )\n ),\n }),\n },\n ];\n\n try {\n const result = await client.signAndBroadcast(address, msgs, fee);\n return result;\n } catch (err) {\n throw err;\n }\n }\n}\n","import { ClientParams, CertificateEcosystem } from './types';\nimport { Http, Indexer, Contract, OracleCertificate, MACI } from './libs';\nimport { getDefaultParams } from './libs/const';\nimport {\n CreateAMaciRoundParams,\n CreateApiSaasAmaciRoundParams,\n CreateMaciRoundParams,\n CreateOracleMaciRoundParams,\n CreateSaasOracleMaciRoundParams,\n} from './libs/contract/types';\nimport { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n genKeypair,\n genKeypairFromSign,\n Keypair,\n packPubKey,\n PubKey,\n unpackPubKey,\n} from './libs/crypto';\nimport { OracleWhitelistConfig } from './libs/contract/ts/OracleMaci.types';\nimport { SignatureResponse } from './libs/oracle-certificate/types';\nimport { StdFee } from '@cosmjs/amino';\nimport { Groth16ProofType } from './libs/contract/ts/Maci.types';\nimport { isErrorResponse } from './libs/maci/maci';\n\n/**\n * @class MaciClient\n * @description This class is used to interact with Maci Client.\n */\nexport class MaciClient {\n public network: 'mainnet' | 'testnet';\n public rpcEndpoint: string;\n public restEndpoint: string;\n public apiEndpoint: string;\n public certificateApiEndpoint: string;\n\n public registryAddress: string;\n public saasAddress: string;\n public apiSaasAddress: string;\n public maciCodeId: number;\n public oracleCodeId: number;\n public feegrantOperator: string;\n public whitelistBackendPubkey: string;\n\n public http: Http;\n public indexer: Indexer;\n public contract: Contract;\n public oracleCertificate: OracleCertificate;\n public maci: MACI;\n public maciKeypair: Keypair;\n\n public signer?: OfflineSigner;\n\n /**\n * @constructor\n * @param {ClientParams} params - The parameters for the Maci Client instance.\n */\n constructor({\n signer,\n network,\n rpcEndpoint,\n restEndpoint,\n apiEndpoint,\n registryAddress,\n saasAddress,\n apiSaasAddress,\n maciCodeId,\n oracleCodeId,\n customFetch,\n defaultOptions,\n feegrantOperator,\n whitelistBackendPubkey,\n certificateApiEndpoint,\n maciKeypair,\n }: ClientParams) {\n this.signer = signer;\n this.network = network;\n const defaultParams = getDefaultParams(network);\n\n this.rpcEndpoint = rpcEndpoint || defaultParams.rpcEndpoint;\n this.restEndpoint = restEndpoint || defaultParams.restEndpoint;\n this.apiEndpoint = apiEndpoint || defaultParams.apiEndpoint;\n this.certificateApiEndpoint =\n certificateApiEndpoint || defaultParams.certificateApiEndpoint;\n this.registryAddress = registryAddress || defaultParams.registryAddress;\n this.saasAddress = saasAddress || defaultParams.saasAddress;\n this.apiSaasAddress = apiSaasAddress || defaultParams.apiSaasAddress;\n this.maciCodeId = maciCodeId || defaultParams.maciCodeId;\n this.oracleCodeId = oracleCodeId || defaultParams.oracleCodeId;\n this.feegrantOperator =\n feegrantOperator || defaultParams.oracleFeegrantOperator;\n this.whitelistBackendPubkey =\n whitelistBackendPubkey || defaultParams.oracleWhitelistBackendPubkey;\n this.maciKeypair = maciKeypair ?? genKeypair();\n\n this.http = new Http(\n this.apiEndpoint,\n this.restEndpoint,\n customFetch,\n defaultOptions\n );\n this.indexer = new Indexer({\n restEndpoint: this.restEndpoint,\n apiEndpoint: this.apiEndpoint,\n registryAddress: this.registryAddress,\n http: this.http,\n });\n this.contract = new Contract({\n network: this.network,\n rpcEndpoint: this.rpcEndpoint,\n registryAddress: this.registryAddress,\n saasAddress: this.saasAddress,\n apiSaasAddress: this.apiSaasAddress,\n maciCodeId: this.maciCodeId,\n oracleCodeId: this.oracleCodeId,\n feegrantOperator: this.feegrantOperator,\n whitelistBackendPubkey: this.whitelistBackendPubkey,\n });\n this.oracleCertificate = new OracleCertificate({\n certificateApiEndpoint: this.certificateApiEndpoint,\n http: this.http,\n });\n this.maci = new MACI({\n contract: this.contract,\n indexer: this.indexer,\n oracleCertificate: this.oracleCertificate,\n maciKeypair: this.maciKeypair,\n });\n }\n\n getSigner(signer?: OfflineSigner) {\n if (signer) {\n return signer;\n }\n if (this.signer) {\n return this.signer;\n }\n throw new Error('No signer provided, please provide a signer');\n }\n\n getMaciKeypair() {\n return this.maciKeypair;\n }\n\n getMaciPubkey() {\n return this.packMaciPubkey(this.maciKeypair.pubKey);\n }\n\n packMaciPubkey(pubkey?: PubKey) {\n return packPubKey(pubkey || this.maciKeypair.pubKey);\n }\n\n unpackMaciPubkey(pubkey: bigint | string) {\n return unpackPubKey(BigInt(pubkey));\n }\n\n async getAddress(signer?: OfflineSigner) {\n const [{ address }] = await this.getSigner(signer).getAccounts();\n return address;\n }\n\n async oracleMaciClient({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\n return await this.contract.oracleMaciClient({\n signer,\n contractAddress,\n });\n }\n\n async registryClient({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\n return await this.contract.registryClient({ signer, contractAddress });\n }\n\n async maciClient({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\n return await this.contract.maciClient({ signer, contractAddress });\n }\n\n async amaciClient({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\n return await this.contract.amaciClient({ signer, contractAddress });\n }\n\n async createAMaciRound(params: CreateAMaciRoundParams) {\n return await this.contract.createAMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createMaciRound(params: CreateMaciRoundParams) {\n return await this.contract.createMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createOracleMaciRound(params: CreateOracleMaciRoundParams) {\n return await this.contract.createOracleMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createSaasOracleMaciRound(params: CreateSaasOracleMaciRoundParams) {\n return await this.contract.createSaasOracleMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n async createApiSaasMaciRound(params: CreateSaasOracleMaciRoundParams) {\n return await this.contract.createApiSaasMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createApiSaasAmaciRound(params: CreateApiSaasAmaciRoundParams) {\n return await this.contract.createApiSaasAmaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async genKeypairFromSign({\n signer,\n address,\n }: {\n signer?: OfflineSigner;\n address?: string;\n } = {}) {\n return await genKeypairFromSign({\n signer: this.getSigner(signer),\n address,\n network: this.network,\n });\n }\n\n async getStateIdxInc({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n return await this.maci.getStateIdxInc({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n });\n }\n\n async getVoiceCreditBalance({\n signer,\n stateIdx,\n maciKeypair,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n stateIdx?: number;\n maciKeypair?: Keypair;\n contractAddress: string;\n }) {\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n }\n\n if (stateIdx === undefined) {\n stateIdx = await this.getStateIdxByPubKey({\n contractAddress,\n pubKey: maciKeypair.pubKey,\n });\n }\n\n return await this.maci.getVoiceCreditBalance({\n signer: this.getSigner(signer),\n stateIdx,\n contractAddress,\n });\n }\n\n async getStateIdxByPubKey({\n contractAddress,\n pubKey,\n }: {\n contractAddress: string;\n pubKey?: bigint[];\n }) {\n return await this.maci.getStateIdxByPubKey({\n contractAddress,\n pubKey: pubKey || this.maciKeypair.pubKey,\n });\n }\n\n async feegrantAllowance({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n address = await this.getAddress(signer);\n return await this.maci.feegrantAllowance({\n address,\n contractAddress,\n });\n }\n\n async hasFeegrant({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }): Promise<boolean> {\n if (address === undefined) {\n address = await this.getAddress(signer);\n }\n return await this.maci.hasFeegrant({\n address,\n contractAddress,\n });\n }\n\n async queryWhitelistBalanceOf({\n signer,\n address,\n contractAddress,\n certificate,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n certificate?: {\n signature: string;\n amount: string;\n };\n }): Promise<string> {\n signer = this.getSigner(signer);\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.queryWhitelistBalanceOf({\n signer,\n address,\n contractAddress,\n certificate,\n });\n }\n\n async isWhitelisted({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n }\n\n async getOracleWhitelistConfig({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }): Promise<OracleWhitelistConfig> {\n return await this.maci.getOracleWhitelistConfig({\n signer: this.getSigner(signer),\n contractAddress,\n });\n }\n\n async getRounds(after?: string, limit?: number) {\n const rounds = await this.indexer.getRounds(after || '', limit || 10);\n\n if (isErrorResponse(rounds)) {\n throw new Error(\n `Failed to get rounds: ${rounds.code} ${rounds.error.message}`\n );\n }\n\n return rounds;\n }\n\n async getRoundInfo({ contractAddress }: { contractAddress: string }) {\n return await this.maci.getRoundInfo({ contractAddress });\n }\n\n async getRoundCircuitType({ contractAddress }: { contractAddress: string }) {\n return await this.maci.getRoundCircuitType({ contractAddress });\n }\n\n async queryRoundIsQv({ contractAddress }: { contractAddress: string }) {\n return await this.maci.queryRoundIsQv({ contractAddress });\n }\n\n async queryRoundClaimable({\n contractAddress,\n }: {\n contractAddress: string;\n }): Promise<{\n claimable: boolean | null;\n balance: string | null;\n }> {\n return await this.maci.queryRoundClaimable({ contractAddress });\n }\n\n async queryAMaciChargeFee({\n maxVoter,\n maxOption,\n }: {\n maxVoter: number;\n maxOption: number;\n }) {\n return await this.maci.queryAMaciChargeFee({\n maxVoter,\n maxOption,\n });\n }\n\n async queryRoundGasStation({ contractAddress }: { contractAddress: string }) {\n return await this.maci.queryRoundGasStation({ contractAddress });\n }\n\n parseRoundStatus(\n votingStart: number,\n votingEnd: number,\n status: string,\n currentTime: Date\n ): string {\n return this.maci.parseRoundStatus(\n votingStart,\n votingEnd,\n status,\n currentTime\n );\n }\n\n async queryRoundBalance({ contractAddress }: { contractAddress: string }) {\n return await this.maci.queryRoundBalance({ contractAddress });\n }\n\n async requestOracleCertificate({\n signer,\n ecosystem,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n ecosystem: CertificateEcosystem;\n address?: string;\n contractAddress: string;\n }): Promise<SignatureResponse> {\n return await this.maci.requestOracleCertificate({\n signer: this.getSigner(signer),\n ecosystem,\n address,\n contractAddress,\n });\n }\n\n async signup({\n signer,\n address,\n contractAddress,\n maciKeypair,\n oracleCertificate,\n gasStation = false,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n maciKeypair?: Keypair;\n oracleCertificate?: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n fee?: StdFee;\n }) {\n return await this.maci.signup({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n maciKeypair,\n oracleCertificate,\n gasStation,\n fee,\n });\n }\n\n async vote({\n signer,\n address,\n contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciKeypair,\n gasStation = false,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n operatorCoordPubKey: PubKey;\n maciKeypair?: Keypair;\n gasStation?: boolean;\n }) {\n return await this.maci.vote({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciKeypair,\n gasStation,\n });\n }\n\n async deactivate({\n signer,\n address,\n contractAddress,\n gasStation = false,\n maciKeypair,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n gasStation?: boolean;\n maciKeypair?: Keypair;\n fee?: StdFee;\n }) {\n return await this.maci.deactivate({\n signer: this.getSigner(signer),\n address,\n maciKeypair,\n contractAddress,\n gasStation,\n fee,\n });\n }\n\n async genAddKeyInput({\n contractAddress,\n maciKeypair,\n }: {\n contractAddress: string;\n maciKeypair?: Keypair;\n }) {\n return await this.maci.genAddKeyInput({\n maciKeypair: maciKeypair || this.maciKeypair,\n contractAddress,\n });\n }\n\n async addNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newMaciKeypair,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newMaciKeypair: Keypair;\n fee?: number | StdFee | 'auto';\n }) {\n return await this.maci.addNewKey({\n signer: this.getSigner(signer),\n contractAddress,\n d,\n proof,\n nullifier,\n newMaciKeypair,\n fee,\n });\n }\n\n async claimAMaciRound({\n signer,\n contractAddress,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n fee?: number | StdFee | 'auto';\n }) {\n return await this.maci.claimAMaciRound({\n signer: this.getSigner(signer),\n contractAddress,\n fee,\n });\n }\n\n async getOracleCertificateConfig() {\n return await this.maci.getOracleCertificateConfig();\n }\n\n async batchGrantWithBond({\n signer,\n contractAddress,\n address,\n amount,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n address?: string;\n amount: string;\n fee?: number | StdFee | 'auto';\n }) {\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.batchGrantWithBond({\n signer: this.getSigner(signer),\n contractAddress,\n address,\n amount,\n fee,\n });\n }\n\n async batchRevokeWithdraw({\n signer,\n contractAddress,\n address,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n address?: string;\n fee?: number | StdFee | 'auto';\n }) {\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.batchRevokeWithdraw({\n signer: this.getSigner(signer),\n contractAddress,\n address,\n fee,\n });\n }\n\n async rawSignup({\n signer,\n address,\n contractAddress,\n pubKey,\n oracleCertificate,\n gasStation = false,\n granter,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n pubKey: PubKey;\n oracleCertificate?: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee;\n }) {\n return await this.maci.rawSignup({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n pubKey,\n oracleCertificate,\n gasStation,\n granter,\n fee,\n });\n }\n\n async rawVote({\n signer,\n address,\n contractAddress,\n payload,\n gasStation = false,\n granter,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n payload: {\n msg: bigint[];\n encPubkeys: PubKey;\n }[];\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n return await this.maci.rawVote({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n payload,\n gasStation,\n granter,\n fee,\n });\n }\n\n async getSignUpEventByPubKey(contractAddress: string, pubKey: bigint[]) {\n return await this.indexer.getSignUpEventByPubKey(contractAddress, pubKey);\n }\n\n async fetchAllDeactivateLogs(contractAddress: string) {\n return await this.indexer.fetchAllDeactivateLogs(contractAddress);\n }\n\n async rawDeactivate({\n signer,\n address,\n contractAddress,\n payload,\n gasStation = false,\n granter,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n payload: {\n msg: bigint[];\n encPubkeys: PubKey;\n };\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n return await this.maci.rawDeactivate({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n payload,\n gasStation,\n granter,\n fee,\n });\n }\n\n async rawAddNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newPubkey,\n gasStation = false,\n granter,\n fee,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newPubkey: PubKey;\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n return await this.maci.rawAddNewKey({\n signer: this.getSigner(signer),\n contractAddress,\n d,\n proof,\n nullifier,\n newPubkey,\n gasStation,\n granter,\n fee,\n });\n }\n\n async rawPreAddNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newPubkey,\n gasStation = false,\n granter,\n fee,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newPubkey: PubKey;\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n return await this.maci.rawPreAddNewKey({\n signer: this.getSigner(signer),\n contractAddress,\n d,\n proof,\n nullifier,\n newPubkey,\n gasStation,\n granter,\n fee,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,YAAN,cAAwB,MAAM;AAAA,EACnC,YACE,SACO,MACA,MACP;AACA,UAAM,OAAO;AAHN;AACA;AAGP,SAAK,OAAO,KAAK,YAAY;AAAA,EAC/B;AACF;AAEO,IAAM,YAAN,cAAwB,UAAU;AAAA,EACvC,YAAY,SAAiB,MAAc;AACzC,UAAM,SAAS,MAAM,YAAY;AAAA,EACnC;AACF;AAEO,IAAM,eAAN,cAA2B,UAAU;AAAA,EAC1C,YAAY,SAAiB;AAC3B,UAAM,SAAS,KAAK,eAAe;AAAA,EACrC;AACF;AAEO,IAAM,kBAAN,cAA8B,UAAU;AAAA,EAC7C,YAAY,SAAiB;AAC3B,UAAM,SAAS,KAAK,kBAAkB;AAAA,EACxC;AACF;AAEO,IAAM,gBAAN,cAA4B,UAAU;AAAA,EAC3C,YAAY,SAAiB;AAC3B,UAAM,SAAS,KAAK,iBAAiB;AAAA,EACvC;AACF;AAEO,IAAM,aAAN,cAAyB,UAAU;AAAA,EACxC,YAAY,SAAiB;AAC3B,UAAM,SAAS,KAAK,aAAa;AAAA,EACnC;AACF;AAWO,SAAS,YAAY,OAAkB;AAC5C,MAAI,EAAE,iBAAiB,QAAQ;AAC7B,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,UAAQ,MAAM;AAAA,IACZ,KAAK,iBAAiB;AACpB,aAAO;AAAA,QACL,MAAO,MAAoB;AAAA,QAC3B,OAAO;AAAA,UACL,SAAS,MAAM;AAAA,UACf,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IAEF,KAAK,iBAAiB;AACpB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,UACL,SAAS,MAAM;AAAA,UACf,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IAEF,KAAK,iBAAiB;AACpB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,UACL,SAAS,MAAM;AAAA,UACf,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IAEF,KAAK,iBAAiB;AACpB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,UACL,SAAS,MAAM;AAAA,UACf,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IAEF,KAAK,iBAAiB;AACpB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,UACL,SAAS,MAAM;AAAA,UACf,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IAEF,KAAK,iBAAiB;AACpB,aAAO;AAAA,QACL,MAAO,MAAoB;AAAA,QAC3B,OAAO;AAAA,UACL,SAAS,MAAM;AAAA,UACf,MAAO,MAAoB;AAAA,QAC7B;AAAA,MACF;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,UACL,SAAS,MAAM,WAAW;AAAA,UAC1B,MAAM;AAAA,QACR;AAAA,MACF;AAAA,EACJ;AACF;;;ACrHO,IAAM,OAAN,MAAW;AAAA,EAKhB,YACE,aACA,cACQ,aACR,gBACA;AAFQ;AAGR,SAAK,cAAc;AACnB,SAAK,eAAe;AACpB,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEQ,WAAW;AACjB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,MAAM,MAAM,KAAa,SAAkC;AACzD,QAAI;AACF,YAAM,UAAU,KAAK,SAAS;AAC9B,YAAM,WAAW,MAAM,QAAQ,KAAK;AAAA,QAClC,GAAG,KAAK;AAAA,QACR,GAAG;AAAA,MACL,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI;AAAA,UACR,uBAAuB,SAAS,MAAM;AAAA,UACtC,SAAS;AAAA,QACX;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,UAAI,iBAAiB,WAAW;AAC9B,cAAM;AAAA,MACR;AACA,YAAM,IAAI,UAAU,oBAAqB,MAAgB,OAAO,IAAI,GAAG;AAAA,IACzE;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,OACA,OACA,QAAuB,IACX;AACZ,QAAI;AACF,YAAM,cAAc,UAAU;AAC9B,YAAM,UAAU,KAAK,SAAS;AAE9B,YAAM,WAAW,MAAM,QAAQ,KAAK,aAAa;AAAA,QAC/C,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,QAAQ;AAAA,QACV;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA,WAAW,EAAE,OAAO,OAAO,cAAc,SAAY,MAAM;AAAA,QAC7D,CAAC;AAAA,QACD,GAAG,KAAK;AAAA,MACV,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,YAAY,MAAM,SAAS,KAAK;AAEtC,YAAI,UAAU,SAAS,CAAC,GAAG,SAAS,SAAS,cAAc,GAAG;AAC5D,gBAAM,IAAI;AAAA,YACR,yBAAyB,UAAU,OAAO,CAAC,EAAE,OAAO;AAAA,UACtD;AAAA,QACF;AAEA,YAAI,UAAU,QAAQ,SAAS,GAAG;AAChC,gBAAM,IAAI;AAAA,YACR,UAAU,OAAO,CAAC,EAAE,WAAW;AAAA,UACjC;AAAA,QACF;AAEA,cAAM,IAAI;AAAA,UACR,eAAe,KAAK,UAAU,SAAS,CAAC;AAAA,UACxC,SAAS;AAAA,QACX;AAAA,MACF;AAEA,YAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,UAAI,KAAK,QAAQ;AACf,cAAM,IAAI;AAAA,UACR,KAAK,OAAO,CAAC,GAAG,WAAW;AAAA,QAC7B;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,UAAI,iBAAiB,WAAW;AAC9B,cAAM;AAAA,MACR;AACA,UAAI,iBAAiB,aAAa;AAChC,cAAM,IAAI,WAAW,+BAA+B;AAAA,MACtD;AACA,YAAM,IAAI;AAAA,QACR,4BAA6B,MAAgB,OAAO;AAAA,QACpD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,MAAc,SAA6B;AACzD,QAAI;AACF,YAAM,UAAU,KAAK,SAAS;AAC9B,YAAM,WAAW,MAAM,QAAQ,GAAG,KAAK,YAAY,GAAG,IAAI,IAAI;AAAA,QAC5D,GAAG,KAAK;AAAA,QACR,GAAG;AAAA,MACL,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI;AAAA,UACR,uBAAuB,SAAS,MAAM;AAAA,UACtC,SAAS;AAAA,QACX;AAAA,MACF;AAEA,UAAI;AACF,eAAO,MAAM,SAAS,KAAK;AAAA,MAC7B,SAAS,OAAO;AACd,cAAM,IAAI,WAAW,+BAA+B;AAAA,MACtD;AAAA,IACF,SAAS,OAAO;AACd,UAAI,iBAAiB,WAAW;AAC9B,cAAM;AAAA,MACR;AACA,YAAM,IAAI;AAAA,QACR,yBAA0B,MAAgB,OAAO;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBAAwB,OAAe,WAA8B;AACzE,QAAI,cAAc;AAClB,QAAI,SAAS;AACb,UAAM,QAAQ;AACd,UAAM,UAAe,CAAC;AAEtB,WAAO,aAAa;AAClB,YAAM,WAAW,MAAM,KAAK,MAAM,KAAK,aAAa;AAAA,QAClD,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,QAAQ;AAAA,QACV;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA,WAAW,EAAE,GAAG,WAAW,OAAO,OAAO;AAAA,QAC3C,CAAC;AAAA,MACH,CAAC,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;AAE3B,YAAM,MAAM,OAAO,KAAK,SAAS,IAAI,EAAE,CAAC;AAExC,YAAM,EAAE,OAAO,SAAS,IAAI,SAAS,KAAK,GAAG;AAC7C,cAAQ,KAAK,GAAG,KAAK;AACrB,oBAAc,SAAS;AACvB,gBAAU;AAAA,IACZ;AAEA,WAAO;AAAA,EACT;AACF;;;AClLO,IAAM,QAAQ;AAAA,EACnB,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,gCAAgC;AAAA,EAChC,0BAA0B;AAAA,EAC1B,wCACE;AAAA,EACF,8BAA8B;AAAA,EAC9B,2BAA2B;AAAA,EAC3B,uBAAuB;AAAA,EACvB,6BAA6B;AAAA,EAC7B,4BAA4B;AAAA,EAC5B,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,6BAA6B;AAAA,EAC7B,8BAA8B;AAAA,EAC9B,gCAAgC;AAAA,EAChC,sBAAsB;AAAA,EACtB,6BAA6B;AAC/B;;;ACdO,IAAM,cAAN,MAAkB;AAAA,EAGvB,YAAY,MAAY;AACtB,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,UAAU,SAA2C;AACzD,QAAI;AACF,YAAM,OAAO,iCAAiC,OAAO;AACrD,YAAM,OAAO,MAAM,KAAK,KAAK,UAAU,IAAI;AAE3C,UAAI,KAAK,MAAM,MAAM,QAAW;AAC9B,cAAM,WAA4B;AAAA,UAChC,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,SAAS,KAAK,SAAS,EAAE,QAAQ;AAAA,UACnC;AAAA,QACF;AACA,eAAO;AAAA,MACT,OAAO;AACL,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AACF;;;ACpCO,IAAM,WAAwC;AAAA,EACnD,aAAa;AAAA,IACX,UAAU;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,SACE;AAAA,IACF,QACE;AAAA,EACJ;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,SACE;AAAA,IACF,QACE;AAAA,EACJ;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,SACE;AAAA,IACF,QACE;AAAA,EACJ;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,SACE;AAAA,IACF,QACE;AAAA,EACJ;AACF;AAyHO,SAAS,iBACd,UAAiC,WAClB;AACf,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,cAAc;AAAA,QACd,aAAa;AAAA,QACb,wBACE;AAAA,QACF,iBACE;AAAA,QACF,aACE;AAAA,QACF,gBACE;AAAA,QACF,YAAY;AAAA;AAAA,QAEZ,cAAc;AAAA;AAAA,QACd,8BACE;AAAA,QACF,wBAAwB;AAAA,QACxB,eAAe,CAAC,OAAO,OAAO,OAAO,KAAK;AAAA,MAC5C;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,cAAc;AAAA,QACd,aAAa;AAAA,QACb,wBACE;AAAA,QACF,iBACE;AAAA,QACF,aACE;AAAA,QACF,gBACE;AAAA,QACF,YAAY;AAAA;AAAA,QAEZ,cAAc;AAAA;AAAA,QACd,8BACE;AAAA,QACF,wBAAwB;AAAA,QACxB,eAAe,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,MACjE;AAAA,EACJ;AACF;;;ACxMO,IAAM,UAAN,MAAc;AAAA,EAGnB,YAAY,MAAY;AACtB,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,iBAAiB,MAAwC;AAC7D,QAAI;AACF,YAAM,cAAc;AACpB,YAAM,cAA2B,SAAS,WAAW;AAErD,UAAI,gBAAgB,QAAW;AAC7B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS,WAAW,WAAW;AAAA,YAC/B,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,YAAM,6BAA6B;AAAA;AAAA,kDAES,YAAY,WAAW;AAAA;AAAA;AAAA;AAAA;AAKnE,YAAM,6BACJ,MAAM,KAAK,KAAK;AAAA,QACd;AAAA,QACA;AAAA,MACF;AAEF,kBAAY,aACV,2BAA2B,KAAK,OAAO;AAEzC,YAAM,WAA4B;AAAA,QAChC,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,SAAS;AAAA,QACX;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,cAAyC;AAC7C,QAAI;AACF,YAAM,gBAA+B,OAAO,OAAO,QAAQ,EAAE;AAAA,QAC3D,CAAC,GAAG,MAAM,EAAE,YAAY,cAAc,EAAE,WAAW;AAAA,MACrD;AAEA,YAAM,yBAAyB,MAAM,QAAQ;AAAA,QAC3C,cAAc,IAAI,OAAO,YAAY;AACnC,gBAAM,6BAA6B;AAAA;AAAA,0DAEa,QAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAKnE,gBAAM,6BACJ,MAAM,KAAK,KAAK,aAAa,4BAA4B,EAAE;AAC7D,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,YAAY,2BAA2B,KAAK,OAAO;AAAA,UACrD;AAAA,QACF,CAAC;AAAA,MACH;AAEA,YAAM,WAA6B;AAAA,QACjC,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,UAAU;AAAA,QACZ;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AACF;;;AClGA,oBAAuB;;;ACAvB,IAAAC,oBAAqB;;;ACEd,IAAM,cAAc,CACzB,GACA,OAA4B,CAAC,MACP;AACtB,MAAI,KAAK,SAAS,CAAC,GAAG;AACpB,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AACA,QAAM,UAAU,CAAC,GAAG,MAAM,CAAC;AAE3B,MAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,WAAO,EAAE,IAAI,CAAC,SAAS,YAAY,MAAM,OAAO,CAAC;AAAA,EACnD,WAAW,OAAO,MAAM,UAAU;AAChC,UAAM,SAA+C,CAAC;AACtD,eAAW,OAAO,GAAG;AACnB,aAAO,GAAG,IAAI,YAAY,EAAE,GAAG,GAAG,OAAO;AAAA,IAC3C;AACA,WAAO;AAAA,EACT,OAAO;AACL,WAAO,EAAE,SAAS;AAAA,EACpB;AACF;AAEO,IAAM,gBAAgB,CAAC,MAAc;AAC1C,MAAI,MAAM,EAAE,SAAS,EAAE;AACvB,MAAI,IAAI,SAAS,MAAM,GAAG;AACxB,UAAM,MAAM;AAAA,EACd;AACA,SAAO,OAAO,KAAK,KAAK,KAAK;AAC/B;AAEO,IAAM,gBAAgB,CAAC,WAAwC;AACpE,QAAM,MAAM,OAAO,SAAS,MAAM,IAAI,SAAS,OAAO,KAAK,MAAM;AACjE,QAAM,MAAM,IAAI,SAAS,KAAK;AAC9B,SAAO,OAAO,OAAO,GAAG;AAC1B;AAEO,IAAM,gBAAgB,CAC3B,GACA,OAA4B,CAAC,MACP;AACtB,MAAI,KAAK,SAAS,CAAC,GAAG;AACpB,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AACA,QAAM,UAAU,CAAC,GAAG,MAAM,CAAC;AAE3B,MAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,WAAO,EAAE,IAAI,CAAC,SAAS,cAAc,MAAM,OAAO,CAAC;AAAA,EACrD,WAAW,OAAO,MAAM,YAAY,MAAM,MAAM;AAC9C,UAAM,SAA+C,CAAC;AACtD,eAAW,OAAO,GAAG;AACnB,aAAO,GAAG,IAAI,cAAc,EAAE,GAAG,GAAG,OAAO;AAAA,IAC7C;AACA,WAAO;AAAA,EACT,OAAO;AACL,WAAO,OAAO,CAAC;AAAA,EACjB;AACF;;;ADxDA,IAAAC,0BAAgC;AAChC,cAAyB;AAEzB,4BAIO;AAEP,IAAAC,iBAAqC;AAErC,IAAAC,sBAAgC;AAChC,IAAAC,yBAA+C;;;AEd/C,6BAA6B;AAC7B,IAAAC,iBAAqC;AAErC,IAAAC,iBAAmB;;;ACHnB,yBAAkB;AAClB,oBAAuC;AAEvC,oBAAmB;AAEZ,IAAM,mBAAmB;AAIzB,IAAM,uBACX,WAAO,6BAAU,2BAAY,MAAM,CAAC,CAAC,IAAI;AAAA,IAE3C,cAAAC;AAAA,EACE,yBACE;AAAA,IACE;AAAA,EACF;AACJ;AAEO,IAAM,eAAe;AAAA,EAC1B;AACF;;;ADPO,IAAM,aAAa,CAAC,UAA4B;AACrD,QAAM,QAAkB,CAAC;AAEzB,QAAM,QAAQ,MAAM;AAClB,UAAM,KAAK,SAAS;AAAA,EACtB,CAAC;AAED,SACE;AAAA,QACE;AAAA,MACE;AAAA,MACA,MAAM,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AAAA,IAC/B;AAAA,EACF,IAAI;AAER;AAOO,IAAM,WAAW,CAAC,eACvB,qCAAa,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAOvD,IAAM,aAAa,CAAC,WAA6B;AACtD,qBAAAC,SAAO,OAAO,WAAW,CAAC;AAC1B,SAAO,SAAS,MAAM;AACxB;AAOO,IAAM,aAAa,CAAC,WAA6B;AACtD,qBAAAA,SAAO,OAAO,WAAW,CAAC;AAC1B,SAAO,SAAS,MAAM;AACxB;AAOO,IAAM,aAAa,CAAC,WAA6B;AACtD,qBAAAA,SAAO,OAAO,WAAW,CAAC;AAC1B,SAAO,SAAS,MAAM;AACxB;AAOO,IAAM,aAAa,CAAC,WAA6B;AACtD,qBAAAA,SAAO,OAAO,WAAW,CAAC;AAC1B,SAAO,SAAS,MAAM;AACxB;AAQO,IAAM,gBAAgB,CAAC,MAAc,UAC1C,WAAW,CAAC,MAAM,KAAK,CAAC;AAG1B,IAAM,QAAuB;AAAA,EAC3B,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAQO,IAAM,QAAQ,CAAC,aAAqB,aAAgC;AACzE,QAAM,gBAAgB,SAAS;AAE/B,MAAI,SAAS,SAAS,aAAa;AACjC,UAAM,IAAI;AAAA,MACR,sDAAsD,WAAW,SAAS,SAAS,MAAM;AAAA,IAC3F;AAAA,EACF;AACA,QAAM,iBAAiB,SAAS,MAAM;AAEtC,MAAI,gBAAgB,aAAa;AAC/B,aAAS,IAAI,eAAe,IAAI,aAAa,KAAK,GAAG;AACnD,qBAAe,KAAK,OAAO,CAAC,CAAC;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO,MAAM,WAAW,EAAE,cAAc;AAC1C;AAGO,IAAM,cAAc,CAAC,GAAW,MAAsB,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACrE,IAAM,QAAQ,CAAC,aAAgC,MAAM,GAAG,QAAQ;AAChE,IAAM,QAAQ,CAAC,aAAgC,MAAM,GAAG,QAAQ;AAChE,IAAM,QAAQ,CAAC,aAAgC,MAAM,GAAG,QAAQ;AAChE,IAAM,QAAQ,CAAC,aAAgC,MAAM,GAAG,QAAQ;AAQhE,IAAM,SAAS,CAAC,aAAgC;AACrD,QAAM,MAAM;AACZ,QAAM,gBAAgB,SAAS;AAE/B,MAAI,gBAAgB,KAAK;AACvB,UAAM,IAAI;AAAA,MACR,sDAAsD,GAAG,SAAS,SAAS,MAAM;AAAA,IACnF;AAAA,EACF;AAEA,QAAM,iBAAiB,SAAS,MAAM;AAEtC,MAAI,gBAAgB,KAAK;AACvB,aAAS,IAAI,eAAe,IAAI,KAAK,KAAK,GAAG;AAC3C,qBAAe,KAAK,OAAO,CAAC,CAAC;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO,WAAW;AAAA,IAChB,WAAW,eAAe,MAAM,GAAG,CAAC,CAAC;AAAA,IACrC,WAAW,eAAe,MAAM,GAAG,EAAE,CAAC;AAAA,IACtC,eAAe,EAAE;AAAA,IACjB,eAAe,EAAE;AAAA,EACnB,CAAC;AACH;AAOO,IAAM,UAAU,CAAC,aACtB,WAAW,CAAC,UAAU,OAAO,CAAC,CAAC,CAAC;;;AEpK3B,IAAM,OAAN,MAAM,MAAK;AAAA,EAWhB,YAAY,QAAgB,OAAe,MAAc;AAHzD,SAAU,QAAkB,CAAC;AAC7B,SAAU,QAAkB,CAAC;AAG3B,SAAK,QAAQ;AACb,SAAK,SAAS,QAAQ;AACtB,SAAK,SAAS;AAEd,SAAK,eAAe,UAAU;AAC9B,SAAK,gBAAgB,UAAU,QAAQ,MAAM,SAAS;AACtD,SAAK,eAAe,WAAW,QAAQ,KAAK,MAAM,SAAS;AAE3D,SAAK,SAAS,IAAI;AAClB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK,MAAM,CAAC;AAAA,EACrB;AAAA,EAEA,SAAS,MAAc;AACrB,UAAM,QAAQ,IAAI,MAAM,KAAK,MAAM;AACnC,UAAM,CAAC,IAAI;AACX,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,WAAW,IAAI,MAAM,KAAK,MAAM,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC;AACzD,YAAM,CAAC,IAAI,SAAS,QAAQ;AAAA,IAC9B;AACA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,YAAY;AACV,UAAM,SAAS,KAAK;AAEpB,UAAM,QAAQ,IAAI,MAAM,KAAK,WAAW;AAExC,aAAS,IAAI,KAAK,OAAO,KAAK,GAAG,KAAK;AACpC,YAAM,OAAO,UAAU;AACvB,YAAM,QAAQ,UAAU,IAAI,MAAM,SAAS;AAC3C,YAAM,OAAO,KAAK,MAAM,KAAK,QAAQ,CAAC;AACtC,eAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,cAAM,OAAO,CAAC,IAAI;AAAA,MACpB;AAAA,IACF;AAEA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,WAAW,QAAkB;AAC3B,UAAM,SAAS,KAAK;AACpB,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAI,KAAK,KAAK,cAAc;AAC1B,gBAAQ,MAAM,UAAU;AACxB;AAAA,MACF;AACA,WAAK,MAAM,KAAK,eAAe,CAAC,IAAI,OAAO,OAAO,CAAC,CAAC;AAAA,IACtD;AAEA,aAAS,IAAI,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK;AACxC,YAAM,OAAO,UAAU;AACvB,YAAM,QAAQ,UAAU,IAAI,MAAM,SAAS;AAC3C,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,cAAM,SAAS,OAAO,KAAK,SAAS;AACpC,cAAM,WAAW,KAAK,MAAM,MAAM,OAAO,QAAQ,MAAM;AACvD,aAAK,MAAM,OAAO,CAAC,IAAI,SAAS,QAAQ;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,KAAK,SAAiB;AACpB,QAAI,UAAU,KAAK,gBAAgB,UAAU,GAAG;AAC9C,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,UAAM,UAAU,KAAK,eAAe;AACpC,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B;AAAA,EAEA,SAAS;AACP,WAAO,KAAK,MAAM,MAAM,KAAK,YAAY;AAAA,EAC3C;AAAA,EAEA,WAAW,SAAiB,MAAc;AACxC,QAAI,UAAU,KAAK,gBAAgB,UAAU,GAAG;AAC9C,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,UAAM,UAAU,KAAK,eAAe;AACpC,SAAK,MAAM,OAAO,IAAI;AAEtB,SAAK,QAAQ,OAAO;AAAA,EACtB;AAAA,EAEA,UAAU,SAAiB;AACzB,QAAI,UAAU,KAAK,gBAAgB,UAAU,GAAG;AAC9C,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,QAAI,MAAM,KAAK,eAAe;AAC9B,UAAM,UAAoB,CAAC;AAE3B,aAAS,IAAI,GAAG,IAAI,KAAK,OAAO,KAAK;AACnC,YAAM,YAAY,KAAK,OAAO,MAAM,KAAK,KAAK,MAAM;AACpD,YAAM,eAAe,YAAY,KAAK,SAAS;AAE/C,cAAQ,KAAK,OAAO,MAAM,YAAY,CAAC;AAEvC,YAAM;AAAA,IACR;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,cAAc,SAAiB;AAC7B,QAAI,UAAU,KAAK,gBAAgB,UAAU,GAAG;AAC9C,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,QAAI,MAAM,KAAK,eAAe;AAC9B,UAAM,cAA0B,CAAC;AAEjC,aAAS,IAAI,GAAG,IAAI,KAAK,OAAO,KAAK;AACnC,YAAM,YAAY,KAAK,OAAO,MAAM,KAAK,KAAK,MAAM;AACpD,YAAM,eAAe,YAAY,KAAK,SAAS;AAE/C,YAAM,KAAe,CAAC;AACtB,eAAS,IAAI,cAAc,IAAI,eAAe,KAAK,QAAQ,KAAK;AAC9D,YAAI,MAAM,IAAK;AACf,WAAG,KAAK,KAAK,MAAM,CAAC,CAAC;AAAA,MACvB;AAEA,kBAAY,KAAK,EAAE;AAEnB,YAAM;AAAA,IACR;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,QAAgB;AACtB,UAAM,UAAU,IAAI,MAAK,KAAK,QAAQ,KAAK,OAAO,KAAK,MAAM,CAAC,CAAC;AAC/D,UAAM,QAAQ,CAAC,GAAG,KAAK,KAAK;AAE5B,UAAM,SAAS,KAAK;AACpB,QAAI,OAAO;AACX,aAAS,IAAI,KAAK,OAAO,KAAK,GAAG,KAAK;AACpC,YAAM,OAAO,UAAU;AACvB,YAAM,QAAQ,UAAU,IAAI,MAAM,SAAS;AAC3C,YAAM,OAAO,KAAK,MAAM,KAAK,QAAQ,CAAC;AACtC,eAAS,IAAI,MAAM,IAAI,MAAM,KAAK;AAChC,cAAM,OAAO,CAAC,IAAI;AAAA,MACpB;AACA,aAAO,KAAK,KAAK,OAAO,MAAM;AAAA,IAChC;AAEA,YAAQ,QAAQ;AAChB,YAAQ,QAAQ,KAAK,eAAe,SAAS,CAAC;AAE9C,WAAO;AAAA,EACT;AAAA,EAEU,QAAQ,SAAiB;AACjC,QAAI,MAAM;AACV,WAAO,MAAM,GAAG;AACd,YAAM,YAAY,KAAK,OAAO,MAAM,KAAK,KAAK,MAAM;AACpD,YAAM,eAAe,YAAY,KAAK,SAAS;AAC/C,WAAK,MAAM,SAAS,IAAI;AAAA,QACtB,KAAK,MAAM,MAAM,cAAc,eAAe,CAAC;AAAA,MACjD;AAEA,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;AClLA,IAAAC,iBAAmB;AACnB,uBAAqB;AAUd,IAAM,UAAN,MAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUnB,YAAY,GAAW,GAAW;AAChC,uBAAAC,SAAO,IAAI,oBAAoB,KAAK,GAAG,wBAAwB;AAC/D,uBAAAA,SAAO,IAAI,oBAAoB,KAAK,GAAG,wBAAwB;AAC/D,SAAK,IAAI;AACT,SAAK,IAAI;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,IAAsB;AAC3B,WAAO,KAAK,MAAM,GAAG,KAAK,KAAK,MAAM,GAAG;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAA4C;AAC1C,WAAO;AAAA,MACL,GAAG,KAAK,EAAE,SAAS;AAAA,MACnB,GAAG,KAAK,EAAE,SAAS;AAAA,IACrB;AAAA,EACF;AACF;AAOO,IAAM,UAAN,MAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUnB,YAAY,GAAa,GAAa;AACpC,SAAK,iBAAiB,GAAG,GAAG;AAC5B,SAAK,iBAAiB,GAAG,GAAG;AAE5B,SAAK,IAAI;AACT,SAAK,IAAI;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,IAAsB;AAC3B,WACE,KAAK,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KACpB,KAAK,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KACpB,KAAK,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KACpB,KAAK,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC;AAAA,EAExB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAgD;AAC9C,WAAO;AAAA,MACL,GAAG,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AAAA,MACjC,GAAG,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AAAA,IACnC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,iBAAiB,GAAa,MAAiB;AACrD,uBAAAA;AAAA,MACE,EAAE,MAAM,CAAC,MAAM,IAAI,oBAAoB,KAAK,CAAC;AAAA,MAC7C,WAAW,IAAI;AAAA,IACjB;AAAA,EACF;AACF;AAkCO,IAAM,wBAAwB,MAAM;AAIzC,QAAM,MACJ;AAEF,MAAI;AACJ,SAAO,MAAM;AACX,WAAO;AAAA,MACL,KAAK,iBAAAC,QAAS,IAAI,UAAU,OAAO,EAAE,EAAE,SAAS,iBAAAA,QAAS,IAAI,GAAG,CAAC;AAAA,IACnE;AAEA,QAAI,QAAQ,KAAK;AACf;AAAA,IACF;AAAA,EACF;AAGA,QAAM,UAAU,OAAO,MAAM;AAC7B,SAAO;AACT;;;AL9IA,IAAMC,oBACJ;AAMK,IAAM,aAAa,MACxB,OAAO,KAAK,kBAAAC,QAAS,IAAI,UAAU,OAAO,EAAE,EAAE,SAAS,kBAAAA,QAAS,IAAI,GAAG,CAAC,EAAE;AAMrE,IAAM,gBAAgB,MAAc,sBAAsB;AAS1D,IAAM,0BAA0B,CAAC,YACtC,WAAO,0CAAmB,cAAc,OAAO,CAAC,CAAC;AAO5C,IAAM,aAAa,CAAC,WACzB,WAAO,sCAAc,MAAM,CAAC;AAOvB,IAAM,eAAe,CAAC,WAA2B;AACtD,QAAM,aAAS,wCAAgB,MAAM;AACrC,SAAO,OAAO,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC;AACpC;AAMO,IAAM,YAAY,CAAC,YAA6B;AACrD,QAAM,UAAM,uCAAgB,cAAc,OAAO,CAAC;AAClD,SAAO,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC;AACxC;AAMO,IAAM,aAAa,CAAC,SAA4B;AACrD,QAAM,UAAU,OAAO,OAAOD,oBAAmB,WAAW;AAC5D,QAAM,SAAS,UAAU,OAAO;AAChC,QAAM,kBAAkB,wBAAwB,OAAO;AAEvD,QAAM,UAAmB,EAAE,SAAS,QAAQ,gBAAgB;AAE5D,SAAO;AACT;AASO,IAAM,mBAAmB,CAC9B,SACA,eAEA,qCAAgB,QAAyB,wBAAwB,OAAO,CAAC;AAEpE,IAAM,oBACX,CACE,UACA,YACA,YACA,gBAEF,CACE,WACA,OACA,OACA,UACA,WACA,SACa;AACb,MAAI,CAAC,MAAM;AAET,WAAO;AAAA,MACL,KAAK,kBAAAC,QAAS,IAAI,UAAU,OAAO,CAAC,EAAE,SAAS,kBAAAA,QAAS,IAAI,GAAG,CAAC;AAAA,IAClE;AAAA,EACF;AAEA,QAAM,WACJ,OAAO,KAAK,KACX,OAAO,QAAQ,KAAK,QACpB,OAAO,KAAK,KAAK,QACjB,OAAO,QAAQ,KAAK,QACpB,OAAO,IAAI,KAAK;AAEnB,MAAI,YAAY,CAAC,GAAG,UAAU;AAC9B,MAAI,WAAW;AACb,gBAAY,CAAC,IAAI,EAAE;AAAA,EACrB;AAEA,QAAM,OAAO,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC;AAC9C,QAAM,gBAAY,mCAAY,cAAc,UAAU,GAAG,IAAI;AAE7D,QAAM,UAAU,CAAC,UAAU,GAAG,WAAW,GAAG,UAAU,IAAI,UAAU,CAAC;AAErE,QAAM,cAAU;AAAA,IACd;AAAA,IACA,iBAAiB,WAAW,WAAW;AAAA,IACvC;AAAA,EACF;AAEA,SAAO;AACT;AASK,IAAM,kBAAkB,CAC7B,UACA,SACA,aACA,SACG;AACH,QAAM,aAAa;AAAA,IACjB;AAAA,IACA,OAAO,QAAQ,OAAO;AAAA,IACtB,QAAQ;AAAA,IACR;AAAA,EACF;AAEA,QAAM,UAAU,CAAC;AACjB,WAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACzC,UAAM,IAAI,KAAK,CAAC;AAChB,UAAM,aAAa,WAAW;AAC9B,UAAM,MAAM;AAAA,MACV,OAAO,WAAW,OAAO;AAAA,MACzB,IAAI;AAAA,MACJ,EAAE,CAAC;AAAA,MACH,EAAE,CAAC;AAAA,MACH,MAAM,KAAK,SAAS;AAAA,IACtB;AAEA,YAAQ,KAAK;AAAA,MACX;AAAA,MACA,YAAY,WAAW;AAAA,IACzB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,IAAM,oBAAoB,CAAC,QAAgB;AAChD,MAAI,OAAO,QAAQ,UAAU;AAC3B;AAAA,EACF;AACA,QAAM,MAAM,IAAI,MAAM,IAAI,EAAE,CAAC,KAAK;AAClC,MAAI,IAAI,WAAW,KAAK;AACtB;AAAA,EACF;AACA,QAAM,OAAO,IAAI,MAAM,gBAAgB;AACvC,MAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAC9B;AAAA,EACF;AACA,QAAM,SAAS,SAAS,KAAK,IAAI,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC,CAAC;AACzD,SAAO,WAAW,SAASD,iBAAgB;AAC7C;AAEA,IAAM,cAAc,CAClB,QACA,YACA,YAAY,cAAc,MACvB;AACH,QAAM,KAAa;AAAA,IACT,wBAAwB,eAAO,SAAS;AAAA,IAChD,WAAW;AAAA,EACb;AAEA,QAAM,KAAa;AAAA,IACT,wBAAgB,QAAyB,SAAS;AAAA,IAC1D,WAAW;AAAA,EACb;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,iBAAiB,CAC5B,OACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AACF,MAKG;AACH,QAAM,gBAAgB,SAAS,iBAAiB,OAAO,SAAS,WAAW,CAAC;AAE5E,QAAM,YAAY,cAAc;AAChC,QAAM,gBAAgB,YAAY,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,aAAa;AACzE,MAAI,gBAAgB,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB,YAAY,aAAa;AAEhD,QAAM,KAAK,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC,CAAC;AAChD,QAAM,KAAK,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC,CAAC;AAEhD,QAAM,EAAE,IAAI,GAAG,IAAI,YAAY,aAAa,EAAE,IAAI,GAAG,GAAG,SAAS;AAEjE,QAAM,YAAY,SAAS;AAAA,IACzB,OAAO,OAAO,eAAe;AAAA,IAC7B;AAAA,EACF,CAAC;AAED,QAAM,OAAO,IAAI,KAAK,GAAG,OAAO,EAAE;AAClC,QAAM,SAAS,YAAY,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;AACjD,OAAK,WAAW,MAAM;AAEtB,QAAM,iBAAiB,KAAK;AAC5B,QAAM,6BAA6B,KAAK,cAAc,aAAa;AAEnE,QAAM,YACJ;AAAA,QACE;AAAA,MACE,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS;AAAA,MAC3B,YAAY;AAAA,QACV;AAAA,QACA,SAAS,WAAW;AAAA,QACpB;AAAA,QACA,GAAG,CAAC;AAAA,QACJ,GAAG,CAAC;AAAA,QACJ,GAAG,CAAC;AAAA,QACJ,GAAG,CAAC;AAAA,MACN,CAAC;AAAA,IACH;AAAA,EACF,IAAIA;AAEN,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB,gBAAgB,SAAS,cAAc;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,OAAO;AAAA,EACxB;AAEA,SAAO;AACT;AAGA,SAAS,gBAAgB;AACvB,QAAM,SAAS,CAAC;AAChB,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,WAAO;AAAA,MACL,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG,EAC3B,SAAS,EAAE,EACX,SAAS,GAAG,GAAG;AAAA,IACpB;AAAA,EACF;AACA,SAAO,OAAO,KAAK,EAAE;AACvB;AAEO,IAAM,eAAe,MAAM;AAChC,QAAM,MAAM;AAAA,IACV,cAAc;AAAA,IACd,cAAc;AAAA,IACd,cAAc;AAAA,IACd,cAAc;AAAA,EAChB,EAAE,KAAK,EAAE;AACT,SAAO,CAAC,4BAA4B,KAAK,wBAAwB,EAAE,KAAK,IAAI;AAC9E;;;AMlUA,2BAIO;AAOP,eAAsBE,aACpB,QACA,SACA,SACA,SACqB;AACrB,QAAM,WAAW,MAAM,OAAO,YAAY;AAC1C,QAAM,UAAU,SAAS,KAAK,CAAC,QAAQ,IAAI,YAAY,OAAO;AAC9D,QAAM,UAAU,iBAAiB,OAAO,EAAE;AAE1C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,WAAW,OAAO,sBAAsB;AAAA,EAC1D;AAEA,UAAI,4CAAsB,MAAM,GAAG;AAEjC,UAAM,UAAmB;AAAA,MACvB,WAAW,IAAI,YAAY,EAAE,OAAO,OAAO;AAAA,MAC3C,eAAe,IAAI,WAAW;AAAA,MAC9B;AAAA,MACA,eAAe,OAAO,CAAC;AAAA,IACzB;AAEA,UAAM,EAAE,UAAU,IAAI,MAAM,OAAO,WAAW,SAAS,OAAO;AAE9D,WAAO;AAAA,MACL,WAAW,UAAU;AAAA,MACrB,QAAQ,QAAQ;AAAA,IAClB;AAAA,EACF,OAAO;AAEL,UAAM,UAAsB;AAAA,MAC1B,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,KAAK;AAAA,QACH,KAAK;AAAA,QACL,QAAQ,CAAC;AAAA,MACX;AAAA,MACA,MAAM,CAAC;AAAA,MACP,MAAM;AAAA,IACR;AAEA,UAAM,EAAE,UAAU,IAAI,MAAM,OAAO,UAAU,SAAS,OAAO;AAE7D,WAAO;AAAA,MACL,WAAW,UAAU;AAAA,MACrB,QAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AACF;AAEA,eAAsB,wBAAwB,WAAmB;AAC/D,QAAM,OAAO,OAAO,OAAO,OAAO,KAAK,WAAW,QAAQ,EAAE,SAAS,KAAK,CAAC;AAE3E,SAAO,WAAW,IAAI;AACxB;AAEA,eAAsB,mBAAmB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,MAAI,CAAC,SAAS;AACZ,KAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAAA,EAC3C;AAEA,QAAM,MAAM,MAAMA;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,wBAAwB,IAAI,SAAS;AAC9C;;;APvFA,SAAS,eAAe,SAAoC;AAC1D,MAAI;AACF,8BAAO,OAAO;AAAA,EAChB,SAAS,OAAO;AACd,WAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,eAAe;AAAA,EACnE;AAEA,SAAO;AACT;AAEO,SAAS,eAAe,SAA0B;AAEvD,SAAO,QAAQ,WAAW,MAAM,KAAK,eAAe,OAAO,MAAM;AACnE;;;AQCO,IAAM,WAAN,MAAe;AAAA,EAIpB,YAAY,MAAY,uBAA+B;AACrD,SAAK,OAAO;AACZ,SAAK,wBAAwB;AAAA,EAC/B;AAAA,EAEA,MAAM,qBAAqB,SAA4C;AACrE,QAAI;AACF,UAAI,CAAC,eAAe,OAAO,GAAG;AAC5B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,YAAM,kBAAkB;AAAA,uDACyB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcxD,YAAM,WAAW,MAAM,KAAK,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,MACF;AAEA,UACE,CAAC,YACD,CAAC,SAAS,QACV,CAAC,SAAS,KAAK,aACf,CAAC,SAAS,KAAK,UAAU,SACzB,SAAS,KAAK,UAAU,MAAM,WAAW,GACzC;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS,iCAAiC,OAAO;AAAA,YACjD,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,YAAM,mBAAmB,SAAS,KAAK,UAAU,MAAM,CAAC,EAAE;AAE1D,UACE,iBAAiB,oBAAoB,MACrC,iBAAiB,uBAAuB,IACxC;AACA,yBAAiB,oBAAoB;AACrC,yBAAiB,uBAAuB;AAAA,MAC1C,OAAO;AACL,cAAM,eAAe;AAAA;AAAA;AAAA,iCAGI,iBAAiB,eAAe;AAAA,+BAClC,KAAK,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAMxB,iBAAiB,eAAe;AAAA,+BAClC,KAAK,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAMjD,cAAM,cACJ,MAAM,KAAK,KAAK;AAAA,UACd;AAAA,UACA;AAAA,QACF;AACF,yBAAiB,oBACf,YAAY,KAAK,kBAAkB;AACrC,yBAAiB,uBACf,YAAY,KAAK,qBAAqB;AAAA,MAC1C;AAEA,uBAAiB,UAAU;AAC3B,uBAAiB,UAAU;AAC3B,YAAM,WAAW,SAAS,KAAK,UAAU,MAAM,CAAC,EAAE,KAAK;AAEvD,YAAM,aAAa,4DAA4D,QAAQ;AACvF,YAAM,kBAAkB,MAAM,KAAK,KAAK,MAAM,UAAU;AACxD,YAAM,cAAc,MAAM,gBAAgB,KAAK;AAE/C,UAAI,YAAY,OAAO,SAAS,GAAG;AACjC,YAAI,YAAY,KAAK,CAAC,GAAG,UAAU,SAAS,KAAK;AAC/C,2BAAiB,UAAU,YAAY,KAAK,CAAC,EAAE,SAAS,QAAQ;AAAA,QAClE;AACA,YAAI,YAAY,KAAK,CAAC,GAAG,QAAQ,gBAAgB;AAC/C,2BAAiB,UAAU,YAAY,KAAK,CAAC,EAAE,QAAQ;AAAA,QACzD;AAAA,MACF;AACA,YAAM,WAA6B;AAAA,QACjC,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,UAAU;AAAA,QACZ;AAAA,MACF;AACA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,oCACJ,SACA,OACA,OAC0C;AAC1C,QAAI;AACF,UAAI,CAAC,eAAe,OAAO,GAAG;AAC5B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,YAAM,kBAAkB;AAAA,qGACuE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBtG,YAAM,WACJ,MAAM,KAAK,KAAK;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEF,UACE,CAAC,YACD,CAAC,SAAS,QACV,CAAC,SAAS,KAAK,2BACf,CAAC,SAAS,KAAK,wBAAwB,SACvC,SAAS,KAAK,wBAAwB,MAAM,WAAW,GACvD;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS,gDAAgD,OAAO;AAAA,YAChE,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AACA,YAAM,WAA4C;AAAA,QAChD,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB;AACA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,OACA,OAC4B;AAC5B,QAAI;AACF,YAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBxB,YAAM,WAAW,MAAM,KAAK,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UACE,CAAC,YACD,CAAC,SAAS,QACV,CAAC,SAAS,KAAK,aACf,CAAC,SAAS,KAAK,UAAU,OACzB;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AACA,YAAM,sBAAsB,MAAM,QAAQ;AAAA,QACxC,SAAS,KAAK,UAAU,MAAM,IAAI,OAAO,SAAS;AAChD,gBAAM,WAAW,KAAK;AACtB,cACE,SAAS,oBAAoB,MAC7B,SAAS,uBAAuB,IAChC;AACA,qBAAS,oBAAoB;AAC7B,qBAAS,uBAAuB;AAChC,mBAAO;AAAA,UACT;AACA,gBAAM,eAAe;AAAA;AAAA;AAAA,uCAGQ,SAAS,eAAe;AAAA,qCAC1B,KAAK,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAMxB,SAAS,eAAe;AAAA,qCAC1B,KAAK,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAMrD,gBAAM,cACJ,MAAM,KAAK,KAAK;AAAA,YACd;AAAA,YACA;AAAA,UACF;AACF,mBAAS,oBACP,YAAY,KAAK,kBAAkB;AACrC,mBAAS,uBACP,YAAY,KAAK,qBAAqB;AAExC,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAEA,eAAS,KAAK,UAAU,QAAQ,oBAAoB;AAAA,QAClD,CAAC,UAAU,WAAW;AAAA,UACpB,QAAQ,SAAS,KAAK,UAAU,MAAM,KAAK,EAAE;AAAA,UAC7C,MAAM;AAAA,QACR;AAAA,MACF;AAEA,YAAM,QAAQ;AAAA,QACZ,SAAS,KAAK,UAAU,MAAM,IAAI,OAAO,SAAS;AAChD,gBAAM,WAAW,KAAK;AACtB,gBAAM,WAAW,SAAS;AAC1B,mBAAS,UAAU;AACnB,mBAAS,UAAU;AAGnB,gBAAM,aAAa,4DAA4D,QAAQ;AACvF,gBAAM,kBAAkB,MAAM,KAAK,KAAK,MAAM,UAAU;AACxD,gBAAM,cAAc,MAAM,gBAAgB,KAAK;AAE/C,cAAI,YAAY,OAAO,SAAS,GAAG;AACjC,gBAAI,YAAY,KAAK,CAAC,GAAG,UAAU,SAAS,KAAK;AAC/C,uBAAS,UAAU,YAAY,KAAK,CAAC,EAAE,SAAS,QAAQ;AAAA,YAC1D;AACA,gBAAI,YAAY,KAAK,CAAC,GAAG,QAAQ,gBAAgB;AAC/C,uBAAS,UAAU,YAAY,KAAK,CAAC,EAAE,QAAQ;AAAA,YACjD;AAAA,UACF;AAIA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB;AAAA,IACF,SAAS,OAAO;AACd,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,SACA,aAC2B;AAC3B,QAAI;AACF,YAAM,MAAM,oBAAI,KAAK;AACrB,YAAM,YAAY,IAAI;AAAA,QACpB,IAAI,QAAQ,IAAI,cAAc,KAAK,KAAK,KAAK;AAAA,MAC/C;AACA,YAAM,iBAAiB,KAAK,MAAM,UAAU,QAAQ,IAAI,GAAI;AAC5D,YAAM,oBAAoB,KAAK,MAAM,UAAU,QAAQ,IAAI,GAAO;AAClE,YAAM,cAAc,KAAK,MAAM,UAAU,QAAQ,CAAC;AAElD,YAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,0CAKsB,OAAO;AAAA,kDACC,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqB1D,YAAM,eAAe;AAAA;AAAA;AAAA,uCAGY,OAAO;AAAA,sDACQ,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmDjE,YAAM,iBACJ,MAAM,KAAK,KAAK;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,YAAM,yBACJ,gBAAgB,MAAM,QAAQ,OAAO;AAAA,QACnC,CAAC,SAAS,KAAK,KAAK;AAAA,MACtB,KAAK,CAAC;AAER,YAAM,qBAAqB;AAAA;AAAA;AAAA,kDAGiB,WAAW;AAAA;AAAA,qCAExB,KAAK,UAAU,sBAAsB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BrE,YAAM,CAAC,eAAe,oBAAoB,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC9D,KAAK,KAAK;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,KAAK,KAAK;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAED,YAAM,aAAa,oBAAI,IAA0B;AAEjD,YAAM,UAAU,oBAAI,KAAK;AACzB,eAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,cAAM,OAAO,IAAI,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,KAAK,KAAK,GAAI,EAC9D,YAAY,EACZ,MAAM,GAAG,EAAE,CAAC;AACf,mBAAW,IAAI,MAAM;AAAA,UACnB,YAAY;AAAA,UACZ,iBAAiB;AAAA,YACf,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,UACA,YAAY;AAAA,YACV,OAAO;AAAA,UACT;AAAA,UACA,oBAAoB;AAAA,UACpB,kBAAkB;AAAA,UAClB,YAAY;AAAA,UACZ,iBAAiB;AAAA,UACjB,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAEA,oBAAc,KAAK,wBAAwB,MAAM,QAAQ,CAAC,EAAE,KAAK,MAAM;AACrE,cAAM,OAAO,IAAI,KAAK,SAAS,KAAK,SAAS,IAAI,GAAI,EAClD,YAAY,EACZ,MAAM,GAAG,EAAE,CAAC;AAEf,YAAI,WAAW,IAAI,IAAI,GAAG;AACxB,gBAAM,QAAQ,WAAW,IAAI,IAAI;AACjC,gBAAM;AACN,gBAAM,sBAAsB,SAAS,KAAK,aAAa;AACvD,cAAI,KAAK,cAAc,oBAAoB;AACzC,kBAAM,gBAAgB;AACtB,kBAAM,gBAAgB,aAAa,KAAK;AAAA,UAC1C,WAAW,KAAK,cAAc,eAAe;AAC3C,kBAAM,WAAW;AAAA,UACnB;AAAA,QACF;AAAA,MACF,CAAC;AAED,UAAI,gBAAgB,MAAM,QAAQ,OAAO;AACvC,uBAAe,KAAK,OAAO,MAAM,QAAQ,CAAC,EAAE,KAAK,MAAM;AACrD,gBAAM,OAAO,IAAI,KAAK,SAAS,KAAK,SAAS,IAAI,GAAO,EACrD,YAAY,EACZ,MAAM,GAAG,EAAE,CAAC;AACf,cAAI,WAAW,IAAI,IAAI,GAAG;AACxB,kBAAM,QAAQ,WAAW,IAAI,IAAI;AACjC,kBAAM;AAAA,UACR;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI,sBAAsB,MAAM,cAAc,OAAO;AACnD,6BAAqB,KAAK,aAAa,MAAM,QAAQ,CAAC,EAAE,KAAK,MAAM;AACjE,gBAAM,OAAO,IAAI,KAAK,SAAS,KAAK,SAAS,CAAC,EAC3C,YAAY,EACZ,MAAM,GAAG,EAAE,CAAC;AACf,cAAI,WAAW,IAAI,IAAI,GAAG;AACxB,kBAAM,QAAQ,WAAW,IAAI,IAAI;AACjC,kBAAM;AAAA,UACR;AAAA,QACF,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,UAAU,MAAM,KAAK,WAAW,QAAQ,CAAC,EACtC,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;AAAA,YACvB;AAAA,YACA,YAAY,MAAM;AAAA,YAClB,iBAAiB,MAAM;AAAA,YACvB,YAAY,MAAM;AAAA,YAClB,oBAAoB,MAAM;AAAA,YAC1B,kBACE,MAAM,aAAa,IACf,MAAM,qBAAqB,MAAM,aACjC;AAAA,YACN,YAAY,MAAM;AAAA,YAClB,iBAAiB,MAAM;AAAA,YACvB,UACE,MAAM,kBAAkB,MAAM,aAAa,IACvC;AAAA,gBAEK,MAAM,gBAAgB,QAAQ,MAAM,WAAW,UAC/C,MAAM,kBAAkB,MAAM,aAC/B,QAAQ,CAAC;AAAA,YACb,IACA;AAAA,UACR,EAAE,EACD,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAAA,QAChD;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,UACL,SAAS;AAAA,UACT,MAAM,MAAM;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC3kBO,IAAM,QAAN,MAAY;AAAA,EAGjB,YAAY,MAAY;AACtB,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,aAAa,SAAyC;AAC1D,QAAI;AACF,UAAI,CAAC,eAAe,OAAO,GAAG;AAC5B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,YAAM,cAAc;AAAA,mBACP,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCpB,YAAM,WAAW,MAAM,KAAK,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,MACF;AAEA,UAAI,CAAC,YAAY,CAAC,SAAS,QAAQ,CAAC,SAAS,KAAK,OAAO;AACvD,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS,mCAAmC,OAAO;AAAA,YACnD,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,eAAS,KAAK,MAAM,kBAAkB;AACtC,eAAS,KAAK,MAAM,kBAAkB;AAEtC,YAAM,WAAW,SAAS,KAAK,MAAM;AAErC,YAAM,aAAa,4DAA4D,QAAQ;AACvF,YAAM,kBAAkB,MAAM,KAAK,KAAK,MAAM,UAAU;AACxD,YAAM,cAAc,MAAM,gBAAgB,KAAK;AAE/C,UAAI,YAAY,OAAO,SAAS,GAAG;AACjC,YAAI,YAAY,KAAK,CAAC,GAAG,UAAU,SAAS,KAAK;AAC/C,mBAAS,KAAK,MAAM,kBAClB,YAAY,KAAK,CAAC,EAAE,SAAS,QAAQ;AAAA,QACzC;AACA,YAAI,YAAY,KAAK,CAAC,GAAG,QAAQ,gBAAgB;AAC/C,mBAAS,KAAK,MAAM,kBAClB,YAAY,KAAK,CAAC,EAAE,QAAQ;AAAA,QAChC;AAAA,MACF;AAKA,YAAM,UAAU,KAAK,MAAM,SAAS,KAAK,MAAM,OAAO;AACtD,YAAM,QAAQ,QAAQ,IAAI,CAACC,QAAe;AAAA,QACxC,GAAG,OAAOA,GAAE,MAAM,GAAG,GAAG,CAAC;AAAA,QACzB,IAAI,OAAOA,GAAE,MAAM,GAAG,CAAC;AAAA,MACzB,EAAE;AACF,YAAM,aAAa,MAAM;AAAA,QACvB,CAAC,GAA8B,OAAkC;AAAA,UAC/D,GAAG,EAAE,IAAI,EAAE;AAAA,UACX,IAAI,EAAE,KAAK,EAAE;AAAA,QACf;AAAA,QACA,EAAE,GAAG,GAAG,IAAI,EAAE;AAAA,MAChB;AACA,YAAM,cAAc,MAAM,IAAI,CAAC,OAAkC;AAAA,QAC/D,GAAG,WAAW,MAAM,IAAI,SAAU,EAAE,IAAI,WAAW,IAAK,KAAK,QAAQ,CAAC;AAAA,QACtE,IACE,WAAW,OAAO,IACd,SACE,EAAE,KAAK,WAAW,KAAM,KAAK,QAAQ,CAAC;AAAA,MAChD,EAAE;AACF,eAAS,KAAK,MAAM,cAAc;AAElC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB;AAAA,IACF,SAAS,OAAY;AACnB,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,mBACJ,SACA,QACiC;AACjC,QAAI;AACF,UAAI,CAAC,eAAe,OAAO,GAAG;AAC5B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,YAAM,gBAAgB;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,MAEF;AAEA,UAAI,UAAU,OAAO,SAAS,GAAG;AAC/B,cAAM,gBAAgB,OAAO;AAAA,UAC3B,CAAC,UAAU,CAAC,cAAc,SAAS,KAAK;AAAA,QAC1C;AACA,YAAI,cAAc,SAAS,GAAG;AAC5B,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,OAAO;AAAA,cACL,SAAS,mBAAmB,cAAc,KAAK,IAAI,CAAC;AAAA,cACpD,MAAM,MAAM;AAAA,YACd;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,YAAM,iBACJ,UAAU,OAAO,SAAS,IAAI,SAAS;AAEzC,YAAM,cAAc,eAAe,KAAK,YAAY;AAEpD,YAAM,cAAc;AAAA,uBACH,OAAO;AAAA,cAChB,WAAW;AAAA;AAAA;AAInB,YAAM,WACJ,MAAM,KAAK,KAAK;AAAA,QACd;AAAA,QACA;AAAA,MACF;AAEF,UAAI,CAAC,YAAY,CAAC,SAAS,QAAQ,CAAC,SAAS,KAAK,OAAO;AACvD,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS,mCAAmC,OAAO;AAAA,YACnD,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB;AAAA,IACF,SAAS,OAAY;AACnB,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,OAAe,OAAyC;AACtE,QAAI;AACF,YAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiD5B,YAAM,WAAW,MAAM,KAAK,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UACE,CAAC,YACD,CAAC,SAAS,QACV,CAAC,SAAS,KAAK,UACf,CAAC,SAAS,KAAK,OAAO,OACtB;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB;AAAA,IACF,SAAS,OAAO;AACd,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,OACA,OACyB;AACzB,QAAI;AACF,YAAM,sBAAsB;AAAA;AAAA;AAAA,wBAGV,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkD7B,YAAM,WAAW,MAAM,KAAK,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UACE,CAAC,YACD,CAAC,SAAS,QACV,CAAC,SAAS,KAAK,UACf,CAAC,SAAS,KAAK,OAAO,OACtB;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS,yCAAyC,WAAW;AAAA,YAC7D,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB;AAAA,IACF,SAAS,OAAY;AACnB,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,QACA,OACA,OACyB;AACzB,QAAI;AACF,YAAM,cAAc,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AAChD,UAAI,kBAAkB;AAEtB,cAAQ,QAAQ;AAAA,QACd,KAAK;AACH,4BAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,+CAKmB,YAAY,SAAS,CAAC;AAAA;AAAA;AAAA;AAI3D;AAAA,QACF,KAAK;AACH,4BAAkB;AAAA;AAAA;AAAA,mDAGuB,YAAY,SAAS,CAAC,mCAAmC,YAAY,SAAS,CAAC;AAAA;AAAA;AAGxH;AAAA,QACF,KAAK;AACH,4BAAkB;AAAA;AAAA;AAAA,wCAGY,YAAY,SAAS,CAAC;AAAA;AAAA;AAAA;AAIpD;AAAA,QACF,KAAK;AACH,4BAAkB;AAClB;AAAA,QACF;AACE,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,OAAO;AAAA,cACL,SAAS,mBAAmB,MAAM;AAAA,cAClC,MAAM,MAAM;AAAA,YACd;AAAA,UACF;AAAA,MACJ;AAEA,YAAM,sBAAsB;AAAA,uDACqB,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+ChE,YAAM,WAAW,MAAM,KAAK,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UACE,CAAC,YACD,CAAC,SAAS,QACV,CAAC,SAAS,KAAK,UACf,CAAC,SAAS,KAAK,OAAO,OACtB;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS,mCAAmC,MAAM;AAAA,YAClD,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB;AAAA,IACF,SAAS,OAAY;AACnB,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,UACA,OACA,OACyB;AACzB,QAAI;AACF,UAAI,CAAC,eAAe,QAAQ,GAAG;AAC7B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,YAAM,sBAAsB;AAAA;AAAA;AAAA,sBAGZ,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiDxB,YAAM,WAAW,MAAM,KAAK,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UACE,CAAC,YACD,CAAC,SAAS,QACV,CAAC,SAAS,KAAK,UACf,CAAC,SAAS,KAAK,OAAO,OACtB;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS,qCAAqC,QAAQ;AAAA,YACtD,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB;AAAA,IACF,SAAS,OAAY;AACnB,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AACF;;;ACznBO,IAAM,cAAN,MAAkB;AAAA,EAGvB,YAAY,MAAY;AACtB,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,qBAAqB,QAA8C;AACvE,QAAI;AACF,YAAM,oBAAoB;AAAA,2BACL,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgB3B,YAAM,WAAW,MAAM,KAAK,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,MACF;AAEA,UAAI,CAAC,YAAY,CAAC,SAAS,QAAQ,CAAC,SAAS,KAAK,aAAa;AAC7D,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS,mCAAmC,MAAM;AAAA,YAClD,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB;AAAA,IACF,SAAS,OAAY;AACnB,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,gBACJ,OACA,OAC+B;AAC/B,QAAI;AACF,YAAM,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BlC,YAAM,WACJ,MAAM,KAAK,KAAK;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEF,UACE,CAAC,YACD,CAAC,SAAS,QACV,CAAC,SAAS,KAAK,gBACf,CAAC,SAAS,KAAK,aAAa,OAC5B;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB;AAAA,IACF,SAAS,OAAO;AACd,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,iCACJ,SACA,OACA,OAC+B;AAC/B,QAAI;AACF,UAAI,CAAC,eAAe,OAAO,GAAG;AAC5B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,YAAM,4BAA4B;AAAA;AAAA;AAAA,0BAGd,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6B3B,YAAM,WACJ,MAAM,KAAK,KAAK;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEF,UACE,CAAC,YACD,CAAC,SAAS,QACV,CAAC,SAAS,KAAK,gBACf,CAAC,SAAS,KAAK,aAAa,OAC5B;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB;AAAA,IACF,SAAS,OAAO;AACd,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AACF;;;ACrMO,IAAM,QAAN,MAAY;AAAA,EAGjB,YAAY,MAAY;AACtB,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,0BAA0B,SAAyC;AACvE,QAAI;AACF,UAAI,CAAC,eAAe,OAAO,GAAG;AAC5B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,YAAM,cAAc;AAAA;AAAA;AAAA,8BAGI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkB/B,YAAM,WAAW,MAAM,KAAK,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,MACF;AAEA,UACE,CAAC,YACD,CAAC,SAAS,QACV,CAAC,SAAS,KAAK,aACf,CAAC,SAAS,KAAK,UAAU,SACzB,SAAS,KAAK,UAAU,MAAM,WAAW,GACzC;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS,oCAAoC,OAAO;AAAA,YACpD,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB;AAAA,IACF,SAAS,OAAO;AACd,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AACF;;;AClEO,IAAM,QAAN,MAAY;AAAA,EAGjB,YAAY,MAAY;AACtB,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,uBACJ,iBACA,QAC+B;AAC/B,QAAI;AACF,YAAM,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMzB,eAAe;AAAA;AAAA;AAAA,gBAGf,OAAO,IAAI,CAAC,MAAM,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBnD,YAAM,WACJ,MAAM,KAAK,KAAK;AAAA,QACd;AAAA,QACA;AAAA,MACF;AAEF,UACE,CAAC,YACD,CAAC,SAAS,QACV,CAAC,SAAS,KAAK,gBACf,CAAC,SAAS,KAAK,aAAa,SAC5B,SAAS,KAAK,aAAa,MAAM,WAAW,GAC5C;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS,oCAAoC,OAC1C,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EACnB,KAAK,GAAG,CAAC;AAAA,YACZ,MAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,cAAc,SAAS,KAAK,aAAa;AAAA,QAC3C;AAAA,MACF;AAAA,IACF,SAAS,OAAY;AACnB,aAAO,YAAY,KAAkB;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,uBAAuB,iBAAyB;AACpD,UAAM,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAOjB,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoB/B,UAAM,KAAK,MAAM,KAAK,KAAK;AAAA,MACzB;AAAA,MACA,CAAC;AAAA,IACH;AAEA,WAAO,GAAG;AAAA,MACR,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK,MAAM,EAAE,iBAAiB,CAAC;AAAA,MACnD,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACvFO,IAAM,UAAN,MAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBnB,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAkB;AAChB,SAAK,OAAO;AAEZ,SAAK,eAAe;AACpB,SAAK,cAAc;AACnB,SAAK,kBAAkB;AAEvB,SAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;AAChC,SAAK,UAAU,IAAI,YAAY,KAAK,IAAI;AACxC,SAAK,UAAU,IAAI,QAAQ,KAAK,IAAI;AACpC,SAAK,WAAW,IAAI,SAAS,KAAK,MAAM,KAAK,eAAe;AAC5D,SAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;AAChC,SAAK,cAAc,IAAI,YAAY,KAAK,IAAI;AAC5C,SAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,UAAU,SAA2C;AACzD,WAAO,MAAM,KAAK,QAAQ,UAAU,OAAO;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAa,IAAoC;AACrD,WAAO,MAAM,KAAK,MAAM,aAAa,EAAE;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,mBACJ,SACA,QACiC;AACjC,WAAO,MAAM,KAAK,MAAM,mBAAmB,SAAS,MAAM;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,UAAU,OAAe,OAAyC;AACtE,WAAO,MAAM,KAAK,MAAM,UAAU,OAAO,KAAK;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,kBACJ,QACA,OACA,OACyB;AACzB,WAAO,MAAM,KAAK,MAAM,kBAAkB,QAAQ,OAAO,KAAK;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,uBACJ,MACA,OACA,OACyB;AACzB,WAAO,MAAM,KAAK,MAAM,uBAAuB,MAAM,OAAO,KAAK;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBACJ,SACA,OACA,OACyB;AACzB,WAAO,MAAM,KAAK,MAAM,oBAAoB,SAAS,OAAO,KAAK;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,qBAAqB,SAA4C;AACrE,WAAO,MAAM,KAAK,SAAS,qBAAqB,OAAO;AAAA,EACzD;AAAA,EAEA,MAAM,oCACJ,SACA,OACA,OAC0C;AAC1C,WAAO,MAAM,KAAK,SAAS;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,SACA,aAC2B;AAC3B,WAAO,MAAM,KAAK,SAAS,cAAc,SAAS,WAAW;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,aACJ,OACA,OAC4B;AAC5B,WAAO,MAAM,KAAK,SAAS,aAAa,OAAO,KAAK;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAAiB,MAAwC;AAC7D,WAAO,MAAM,KAAK,QAAQ,iBAAiB,IAAI;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAyC;AAC7C,WAAO,MAAM,KAAK,QAAQ,YAAY;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,qBAAqB,MAA4C;AACrE,WAAO,MAAM,KAAK,YAAY,qBAAqB,IAAI;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,gBACJ,OACA,OAC+B;AAC/B,WAAO,MAAM,KAAK,YAAY,gBAAgB,OAAO,KAAK;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,iCACJ,SACA,OACA,OAC+B;AAC/B,WAAO,MAAM,KAAK,YAAY;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,0BAA0B,SAAyC;AACvE,WAAO,MAAM,KAAK,MAAM,0BAA0B,OAAO;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,uBACJ,iBACA,QAC+B;AAC/B,WAAO,MAAM,KAAK,MAAM,uBAAuB,iBAAiB,MAAM;AAAA,EACxE;AAAA,EAEA,MAAM,uBACJ,iBAC8B;AAC9B,WAAO,MAAM,KAAK,MAAM,uBAAuB,eAAe;AAAA,EAChE;AACF;;;AC1SA,sBAIO;AACP,+BAAsC;;;ACqD/B,IAAM,kBAAN,MAAuD;AAAA,EAG5D,YAAY,QAAwB,iBAAyB;AAuB7D,wBAAe,YAAgC;AAC7C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,gBAAgB,CAAC;AAAA,MACnB,CAAC;AAAA,IACH;AACA,yBAAgB,YAAiC;AAC/C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,qBAAY,YAA6B;AACvC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY,CAAC;AAAA,MACf,CAAC;AAAA,IACH;AACA,wBAAe,YAA8B;AAC3C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,6BAAoB,YAA8B;AAChD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,sBAAsB,CAAC;AAAA,MACzB,CAAC;AAAA,IACH;AACA,gCAAuB,YAA8B;AACnD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,yBAAyB,CAAC;AAAA,MAC5B,CAAC;AAAA,IACH;AACA,iCAAwB,YAA8B;AACpD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,0BAA0B,CAAC;AAAA,MAC7B,CAAC;AAAA,IACH;AACA,qBAAY,OAAO,EAAE,MAAM,MAA4C;AACrE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY;AAAA,UACV;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,wBAAe,YAA8B;AAC3C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,gBAAgB,CAAC;AAAA,MACnB,CAAC;AAAA,IACH;AACA,0BAAiB,OAAO,EAAE,QAAQ,MAA2C;AAC3E,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,mBAAmB;AAAA,UACjB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,iCAAwB,OAAO;AAAA,MAC7B;AAAA,IACF,MAEwB;AACtB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,0BAA0B;AAAA,UACxB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,qBAAY,YAAgC;AAC1C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY,CAAC;AAAA,MACf,CAAC;AAAA,IACH;AACA,uBAAc,OAAO,EAAE,OAAO,MAA4C;AACxE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,eAAe;AAAA,UACb;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,0BAAiB,OAAO,EAAE,OAAO,MAA4C;AAC3E,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,kBAAkB;AAAA,UAChB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,yBAAgB,YAAoC;AAClD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,0BAAiB,YAA8B;AAC7C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,kBAAkB,CAAC;AAAA,MACrB,CAAC;AAAA,IACH;AACA,8BAAqB,YAA8B;AACjD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,uBAAuB,CAAC;AAAA,MAC1B,CAAC;AAAA,IACH;AACA,4BAAmB,YAA8B;AAC/C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,oBAAoB,CAAC;AAAA,MACvB,CAAC;AAAA,IACH;AACA,2BAAkB,YAA8B;AAC9C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,mBAAmB,CAAC;AAAA,MACtB,CAAC;AAAA,IACH;AAlIE,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAC/D,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI;AACvD,SAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AAAA,EACvD;AA8GF;AAmKO,IAAM,aAAN,cAAyB,gBAAyC;AAAA,EAIvE,YACE,QACA,QACA,iBACA;AACA,UAAM,QAAQ,eAAe;AAsB/B,qBAAY,OACV;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAMA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,YAAY;AAAA,YACV,sBAAsB;AAAA,YACtB,oBAAoB;AAAA,YACpB,kBAAkB;AAAA,YAClB,wBAAwB;AAAA,UAC1B;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,wBAAe,OACb;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,gBAAgB;AAAA,YACd,YAAY;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,yBAAgB,OACd;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,gBAAgB;AAAA,YACd;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,6BAAoB,OAClB;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB;AAAA,YACpB,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,6BAAoB,OAClB,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,qBAAqB,CAAC;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,kBAAS,OACP;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,SAAS;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,8BAAqB,OACnB,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB,CAAC;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,4BAAmB,OACjB,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,oBAAoB,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,0BAAiB,OACf;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,iBAAiB;AAAA,YACf,aAAa;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,0BAAiB,OACf;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAKA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,iBAAiB;AAAA,YACf,eAAe;AAAA,YACf,sBAAsB;AAAA,YACtB,aAAa;AAAA,UACf;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,gCAAuB,OACrB,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,wBAAwB,CAAC;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,wBAAe,OACb;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAKA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,eAAe;AAAA,YACb,eAAe;AAAA,YACf,sBAAsB;AAAA,YACtB,aAAa;AAAA,UACf;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,8BAAqB,OACnB;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB;AAAA,YACpB;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,iBAAQ,OACN;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,OAAO;AAAA,YACL,YAAY;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,kBAAS,OACP,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,QAAQ,CAAC;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,gBAAO,OACL,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,MAAM,CAAC;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,oBAAW,OACT;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,UAAU;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AA5YE,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI;AACvD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAC/D,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AAAA,EACzC;AAyXF;;;ACnqBO,IAAM,mBAAN,MAAyD;AAAA,EAG9D,YAAY,QAAwB,iBAAyB;AAuC7D,iBAAQ,YAA2B;AACjC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,OAAO,CAAC;AAAA,MACV,CAAC;AAAA,IACH;AACA,oBAAW,YAA2B;AACpC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,UAAU,CAAC;AAAA,MACb,CAAC;AAAA,IACH;AACA,wBAAe,YAAgC;AAC7C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,gBAAgB,CAAC;AAAA,MACnB,CAAC;AAAA,IACH;AACA,yBAAgB,YAAiC;AAC/C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,qBAAY,YAA6B;AACvC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY,CAAC;AAAA,MACf,CAAC;AAAA,IACH;AACA,wBAAe,YAA8B;AAC3C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,6BAAoB,YAA8B;AAChD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,sBAAsB,CAAC;AAAA,MACzB,CAAC;AAAA,IACH;AACA,8BAAqB,YAA8B;AACjD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,wBAAwB,CAAC;AAAA,MAC3B,CAAC;AAAA,IACH;AACA,iCAAwB,YAA8B;AACpD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,2BAA2B,CAAC;AAAA,MAC9B,CAAC;AAAA,IACH;AACA,gCAAuB,YAA8B;AACnD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,yBAAyB,CAAC;AAAA,MAC5B,CAAC;AAAA,IACH;AACA,iCAAwB,YAA8B;AACpD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,0BAA0B,CAAC;AAAA,MAC7B,CAAC;AAAA,IACH;AACA,qBAAY,OAAO,EAAE,MAAM,MAA4C;AACrE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY;AAAA,UACV;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,wBAAe,YAA8B;AAC3C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,gBAAgB,CAAC;AAAA,MACnB,CAAC;AAAA,IACH;AACA,0BAAiB,OAAO,EAAE,QAAQ,MAA2C;AAC3E,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,mBAAmB;AAAA,UACjB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,iCAAwB,OAAO;AAAA,MAC7B;AAAA,IACF,MAEwB;AACtB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,0BAA0B;AAAA,UACxB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,gCAAuB,YAA8B;AACnD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,yBAAyB,CAAC;AAAA,MAC5B,CAAC;AAAA,IACH;AACA,qBAAY,YAAgC;AAC1C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY,CAAC;AAAA,MACf,CAAC;AAAA,IACH;AACA,qBAAY,OAAO,EAAE,OAAO,MAA0C;AACpE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,aAAa;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,uBAAc,OAAO,EAAE,OAAO,MAA0C;AACtE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,eAAe;AAAA,UACb;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,sBAAa,OAAO,EAAE,OAAO,MAA0C;AACrE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,aAAa;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,oBAAW,OAAO,EAAE,QAAQ,MAA8C;AACxE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,UAAU;AAAA,UACR,UAAU;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACH;AACA,yBAAgB,YAAoC;AAClD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,0BAAiB,YAA8B;AAC7C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,kBAAkB,CAAC;AAAA,MACrB,CAAC;AAAA,IACH;AACA,8BAAqB,YAA8B;AACjD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,uBAAuB,CAAC;AAAA,MAC1B,CAAC;AAAA,IACH;AACA,4BAAmB,YAA8B;AAC/C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,oBAAoB,CAAC;AAAA,MACvB,CAAC;AAAA,IACH;AACA,2BAAkB,YAA8B;AAC9C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,mBAAmB,CAAC;AAAA,MACtB,CAAC;AAAA,IACH;AACA,kCAAyB,YAA8B;AACrD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,2BAA2B,CAAC;AAAA,MAC9B,CAAC;AAAA,IACH;AACA,6CAAoC,YAAsC;AACxE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,uCAAuC,CAAC;AAAA,MAC1C,CAAC;AAAA,IACH;AACA,2BAAkB,YAAmC;AACnD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,mBAAmB,CAAC;AAAA,MACtB,CAAC;AAAA,IACH;AACA,yBAAgB,YAAqC;AACnD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,sCAA6B,YAAqC;AAChE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,+BAA+B,CAAC;AAAA,MAClC,CAAC;AAAA,IACH;AACA,+BAAsB,OAAO;AAAA,MAC3B;AAAA,MACA;AAAA,IACF,MAGwB;AACtB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,yBAAyB;AAAA,UACvB;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,0BAAiB,OAAO;AAAA,MACtB;AAAA,MACA;AAAA,IACF,MAGwB;AACtB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,kBAAkB;AAAA,UAChB;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AA9OE,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAC/D,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAC/D,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI;AACvD,SAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AACrD,SAAK,yBAAyB,KAAK,uBAAuB,KAAK,IAAI;AACnE,SAAK,oCACH,KAAK,kCAAkC,KAAK,IAAI;AAClD,SAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AACrD,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,6BACH,KAAK,2BAA2B,KAAK,IAAI;AAC3C,SAAK,sBAAsB,KAAK,oBAAoB,KAAK,IAAI;AAC7D,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AAAA,EACrD;AA0MF;AA0KO,IAAM,cAAN,cAA0B,iBAA2C;AAAA,EAI1E,YACE,QACA,QACA,iBACA;AACA,UAAM,QAAQ,eAAe;AAoB/B,wBAAe,OACb;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,gBAAgB;AAAA,YACd,YAAY;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,yBAAgB,OACd;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,gBAAgB;AAAA,YACd;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,6BAAoB,OAClB;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB;AAAA,YACpB,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,kBAAS,OACP;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,SAAS;AAAA,YACP;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,8BAAqB,OACnB,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB,CAAC;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,oCAA2B,OACzB;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,4BAA4B;AAAA,YAC1B,aAAa;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,oCAA2B,OACzB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAMA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,4BAA4B;AAAA,YAC1B,eAAe;AAAA,YACf,2BAA2B;AAAA,YAC3B,qBAAqB;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,qBAAY,OACV;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAMA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,aAAa;AAAA,YACX;AAAA,YACA,eAAe;AAAA,YACf;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,wBAAe,OACb;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAMA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,iBAAiB;AAAA,YACf;AAAA,YACA,eAAe;AAAA,YACf;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,0BAAiB,OACf;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,iBAAiB;AAAA,YACf,aAAa;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,0BAAiB,OACf;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,iBAAiB;AAAA,YACf,eAAe;AAAA,YACf,sBAAsB;AAAA,UACxB;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,gCAAuB,OACrB,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,wBAAwB,CAAC;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,wBAAe,OACb;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,eAAe;AAAA,YACb,eAAe;AAAA,YACf,sBAAsB;AAAA,UACxB;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,8BAAqB,OACnB;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB;AAAA,YACpB;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,iBAAQ,OACN,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,OAAO,CAAC;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAnYE,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,2BAA2B,KAAK,yBAAyB,KAAK,IAAI;AACvE,SAAK,2BAA2B,KAAK,yBAAyB,KAAK,IAAI;AACvE,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAC/D,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AAAA,EACnC;AAkXF;;;ACz1BO,IAAM,sBAAN,MAA+D;AAAA,EAGpE,YAAY,QAAwB,iBAAyB;AAa7D,iBAAQ,YAAoC;AAC1C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,OAAO,CAAC;AAAA,MACV,CAAC;AAAA,IACH;AACA,oBAAW,YAA2B;AACpC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,UAAU,CAAC;AAAA,MACb,CAAC;AAAA,IACH;AACA,0BAAiB,OAAO,EAAE,QAAQ,MAA2C;AAC3E,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,kBAAkB;AAAA,UAChB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,uBAAc,OAAO,EAAE,QAAQ,MAA2C;AACxE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,cAAc;AAAA,UACZ;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,yBAAgB,YAAmC;AACjD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,gBAAgB,CAAC;AAAA,MACnB,CAAC;AAAA,IACH;AACA,gCAAuB,OAAO;AAAA,MAC5B;AAAA,IACF,MAEqB;AACnB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,wBAAwB;AAAA,UACtB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,iCAAwB,OAAO;AAAA,MAC7B;AAAA,IACF,MAEuB;AACrB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,0BAA0B;AAAA,UACxB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,mCAA0B,OAAO;AAAA,MAC/B;AAAA,IACF,MAEuB;AACrB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,4BAA4B;AAAA,UAC1B;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,kCAAyB,YAA0C;AACjE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,2BAA2B,CAAC;AAAA,MAC9B,CAAC;AAAA,IACH;AA9EE,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAC/D,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,0BAA0B,KAAK,wBAAwB,KAAK,IAAI;AACrE,SAAK,yBAAyB,KAAK,uBAAuB,KAAK,IAAI;AAAA,EACrE;AAoEF;AAqHO,IAAM,iBAAN,cACG,oBAEV;AAAA,EAIE,YACE,QACA,QACA,iBACA;AACA,UAAM,QAAQ,eAAe;AAc/B,2BAAkB,OAChB;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,mBAAmB;AAAA,YACjB;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,iCAAwB,OACtB;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,0BAA0B;AAAA,YACxB;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,mCAA0B,OACxB;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,4BAA4B;AAAA,YAC1B;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,uBAAc,OACZ;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAcA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,cAAc;AAAA,YACZ,sBAAsB;AAAA,YACtB,cAAc;AAAA,YACd,WAAW;AAAA,YACX;AAAA,YACA,yBAAyB;AAAA,YACzB,4BAA4B;AAAA,YAC5B,qBAAqB;AAAA,YACrB,YAAY;AAAA,YACZ,qBAAqB;AAAA,YACrB,iBAAiB;AAAA,YACjB,aAAa;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,yBAAgB,OACd;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,gBAAgB;AAAA,YACd;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,2BAAkB,OAChB;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,kBAAkB;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,6BAAoB,OAClB;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB;AAAA,YACpB,eAAe;AAAA,UACjB;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,0BAAiB,OACf;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,iBAAiB;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,8BAAqB,OACnB;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB;AAAA,YACpB;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AA5PE,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AACrD,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,0BAA0B,KAAK,wBAAwB,KAAK,IAAI;AACrE,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AACrD,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAAA,EAC7D;AAiPF;;;AC3aO,IAAM,wBAAN,MAAmE;AAAA,EAGxE,YAAY,QAAwB,iBAAyB;AA2B7D,wBAAe,YAAgC;AAC7C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,gBAAgB,CAAC;AAAA,MACnB,CAAC;AAAA,IACH;AACA,yBAAgB,YAAiC;AAC/C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,qBAAY,YAA6B;AACvC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY,CAAC;AAAA,MACf,CAAC;AAAA,IACH;AACA,wBAAe,YAA8B;AAC3C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,6BAAoB,YAA8B;AAChD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,sBAAsB,CAAC;AAAA,MACzB,CAAC;AAAA,IACH;AACA,gCAAuB,YAA8B;AACnD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,yBAAyB,CAAC;AAAA,MAC5B,CAAC;AAAA,IACH;AACA,iCAAwB,YAA8B;AACpD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,0BAA0B,CAAC;AAAA,MAC7B,CAAC;AAAA,IACH;AACA,qBAAY,OAAO,EAAE,MAAM,MAA4C;AACrE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY;AAAA,UACV;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,wBAAe,YAA8B;AAC3C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,gBAAgB,CAAC;AAAA,MACnB,CAAC;AAAA,IACH;AACA,0BAAiB,OAAO,EAAE,QAAQ,MAA2C;AAC3E,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,mBAAmB;AAAA,UACjB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,iCAAwB,OAAO;AAAA,MAC7B;AAAA,IACF,MAEwB;AACtB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,0BAA0B;AAAA,UACxB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,uBAAc,OAAO;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAIwB;AACtB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,eAAe;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,0BAAiB,OAAO;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAIwB;AACtB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,kBAAkB;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,qBAAY,OAAO;AAAA,MACjB;AAAA,IACF,MAEgC;AAC9B,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY;AAAA,UACV;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,qBAAY,OAAO;AAAA,MACjB;AAAA,IACF,MAE4B;AAC1B,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY;AAAA,UACV;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,2BAAkB,YAA8B;AAC9C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,mBAAmB,CAAC;AAAA,MACtB,CAAC;AAAA,IACH;AACA,yBAAgB,YAAoC;AAClD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,0BAAiB,YAA8B;AAC7C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,kBAAkB,CAAC;AAAA,MACrB,CAAC;AAAA,IACH;AACA,8BAAqB,YAA8B;AACjD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,uBAAuB,CAAC;AAAA,MAC1B,CAAC;AAAA,IACH;AACA,4BAAmB,YAA8B;AAC/C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,oBAAoB,CAAC;AAAA,MACvB,CAAC;AAAA,IACH;AACA,2BAAkB,YAA8B;AAC9C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,mBAAmB,CAAC;AAAA,MACtB,CAAC;AAAA,IACH;AACA,sCAA6B,YAA4C;AACvE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,+BAA+B,CAAC;AAAA,MAClC,CAAC;AAAA,IACH;AArLE,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAC/D,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AACrD,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI;AACvD,SAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AACrD,SAAK,6BACH,KAAK,2BAA2B,KAAK,IAAI;AAAA,EAC7C;AA6JF;AAoKO,IAAM,mBAAN,cACG,sBAEV;AAAA,EAIE,YACE,QACA,QACA,iBACA;AACA,UAAM,QAAQ,eAAe;AAqB/B,qBAAY,OACV;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAMA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,YAAY;AAAA,YACV,sBAAsB;AAAA,YACtB,oBAAoB;AAAA,YACpB,kBAAkB;AAAA,YAClB,wBAAwB;AAAA,UAC1B;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,wBAAe,OACb;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,gBAAgB;AAAA,YACd,YAAY;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,6BAAoB,OAClB;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB;AAAA,YACpB,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,6BAAoB,OAClB,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,qBAAqB,CAAC;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,kBAAS,OACP;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAKA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,SAAS;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,8BAAqB,OACnB,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB,CAAC;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,4BAAmB,OACjB,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,oBAAoB,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,0BAAiB,OACf;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,iBAAiB;AAAA,YACf,aAAa;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,0BAAiB,OACf;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAKA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,iBAAiB;AAAA,YACf,eAAe;AAAA,YACf,sBAAsB;AAAA,YACtB,aAAa;AAAA,UACf;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,gCAAuB,OACrB,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,wBAAwB,CAAC;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,wBAAe,OACb;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAKA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,eAAe;AAAA,YACb,eAAe;AAAA,YACf,sBAAsB;AAAA,YACtB,aAAa;AAAA,UACf;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,8BAAqB,OACnB;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB;AAAA,YACpB;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,iBAAQ,OACN;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,OAAO;AAAA,YACL,aAAa;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,kBAAS,OACP;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,QAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,gBAAO,OACL,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,MAAM,CAAC;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,oBAAW,OACT;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,UAAU;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AApYE,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI;AACvD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAC/D,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AAAA,EACzC;AAkXF;;;ACvwBO,IAAM,kBAAN,MAAuD;AAAA,EAG5D,YAAY,QAAwB,iBAAyB;AAY7D,kBAAS,YAA6B;AACpC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,QAAQ,CAAC;AAAA,MACX,CAAC;AAAA,IACH;AACA,qBAAY,YAA0C;AACpD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,WAAW,CAAC;AAAA,MACd,CAAC;AAAA,IACH;AACA,sBAAa,OAAO,EAAE,QAAQ,MAA2C;AACvE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,aAAa;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,mBAAU,YAA8B;AACtC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,SAAS,CAAC;AAAA,MACZ,CAAC;AAAA,IACH;AACA,yBAAgB,OAAO;AAAA,MACrB;AAAA,MACA;AAAA,IACF,MAGwC;AACtC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,gBAAgB;AAAA,UACd;AAAA,UACA,aAAa;AAAA,QACf;AAAA,MACF,CAAC;AAAA,IACH;AACA,iCAAwB,OAAO;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAIwC;AACtC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,yBAAyB;AAAA,UACvB;AAAA,UACA;AAAA,UACA,aAAa;AAAA,QACf;AAAA,MACF,CAAC;AAAA,IACH;AACA,wBAAe,OAAO;AAAA,MACpB;AAAA,IACF,MAEyC;AACvC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,eAAe;AAAA,UACb,aAAa;AAAA,QACf;AAAA,MACF,CAAC;AAAA,IACH;AACA,4BAAmB,YAA6B;AAC9C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,qBAAqB,CAAC;AAAA,MACxB,CAAC;AAAA,IACH;AA/EE,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI;AAAA,EACzD;AAsEF;AAkIO,IAAM,aAAN,cAAyB,gBAAyC;AAAA,EAIvE,YACE,QACA,QACA,iBACA;AACA,UAAM,QAAQ,eAAe;AAe/B,wBAAe,OACb;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAKA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,eAAe;AAAA,YACb;AAAA,YACA;AAAA,YACA,mBAAmB;AAAA,UACrB;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,uBAAc,OACZ;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,cAAc;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,0BAAiB,OACf;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,iBAAiB;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,mBAAU,OACR,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,SAAS,CAAC;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,oBAAW,OACT;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,UAAU;AAAA,YACR;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,kCAAyB,OACvB;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,4BAA4B;AAAA,YAC1B,SAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,iCAAwB,OACtB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAWA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,0BAA0B;AAAA,YACxB,sBAAsB;AAAA,YACtB,cAAc;AAAA,YACd;AAAA,YACA,UAAU;AAAA,YACV,YAAY,UAAU,SAAS;AAAA,YAC/B,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,iBAAiB;AAAA,YACjB,0BAA0B;AAAA,UAC5B;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,wBAAe,OACb;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,gBAAgB;AAAA,YACd,eAAe;AAAA,YACf,YAAY;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,6BAAoB,OAClB;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB;AAAA,YACpB,eAAe;AAAA,YACf,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,wBAAe,OACb;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAKA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,gBAAgB;AAAA,YACd,aAAa;AAAA,YACb,eAAe;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAzRE,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,yBAAyB,KAAK,uBAAuB,KAAK,IAAI;AACnE,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAAA,EACjD;AA6QF;;;ACrfO,IAAM,qBAAN,MAA6D;AAAA,EAGlE,YAAY,QAAwB,iBAAyB;AAyB7D,wBAAe,YAAgC;AAC7C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,gBAAgB,CAAC;AAAA,MACnB,CAAC;AAAA,IACH;AACA,yBAAgB,YAAiC;AAC/C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,qBAAY,YAA6B;AACvC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY,CAAC;AAAA,MACf,CAAC;AAAA,IACH;AACA,wBAAe,YAA8B;AAC3C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,6BAAoB,YAA8B;AAChD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,sBAAsB,CAAC;AAAA,MACzB,CAAC;AAAA,IACH;AACA,gCAAuB,YAA8B;AACnD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,yBAAyB,CAAC;AAAA,MAC5B,CAAC;AAAA,IACH;AACA,iCAAwB,YAA8B;AACpD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,0BAA0B,CAAC;AAAA,MAC7B,CAAC;AAAA,IACH;AACA,qBAAY,OAAO;AAAA,MACjB;AAAA,IACF,MAEwB;AACtB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY;AAAA,UACV;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,wBAAe,YAA8B;AAC3C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,gBAAgB,CAAC;AAAA,MACnB,CAAC;AAAA,IACH;AACA,0BAAiB,OAAO;AAAA,MACtB;AAAA,IACF,MAEwB;AACtB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,mBAAmB;AAAA,UACjB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,iCAAwB,OAAO;AAAA,MAC7B;AAAA,IACF,MAEwB;AACtB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,0BAA0B;AAAA,UACxB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,uBAAc,OAAO;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAIwB;AACtB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,eAAe;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,0BAAiB,OAAO;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAIwB;AACtB,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,kBAAkB;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,qBAAY,OAAO;AAAA,MACjB;AAAA,IACF,MAEgC;AAC9B,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,YAAY;AAAA,UACV;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,2BAAkB,YAA8B;AAC9C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,mBAAmB,CAAC;AAAA,MACtB,CAAC;AAAA,IACH;AACA,yBAAgB,YAAoC;AAClD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,iBAAiB,CAAC;AAAA,MACpB,CAAC;AAAA,IACH;AACA,0BAAiB,YAA8B;AAC7C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,kBAAkB,CAAC;AAAA,MACrB,CAAC;AAAA,IACH;AACA,8BAAqB,YAA8B;AACjD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,uBAAuB,CAAC;AAAA,MAC1B,CAAC;AAAA,IACH;AACA,4BAAmB,YAA8B;AAC/C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,oBAAoB,CAAC;AAAA,MACvB,CAAC;AAAA,IACH;AACA,2BAAkB,YAA8B;AAC9C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,mBAAmB,CAAC;AAAA,MACtB,CAAC;AAAA,IACH;AACA,sCAA6B,YAA4C;AACvE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,+BAA+B,CAAC;AAAA,MAClC,CAAC;AAAA,IACH;AAhLE,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAC/D,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AACjE,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AACrD,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI;AACvD,SAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AACrD,SAAK,6BAA6B,KAAK,2BAA2B,KAAK,IAAI;AAAA,EAC7E;AA0JF;AAgEO,IAAM,gBAAN,cAA4B,mBAA+C;AAAA,EAIhF,YAAY,QAA+B,QAAgB,iBAAyB;AAClF,UAAM,QAAQ,eAAe;AAgB/B,wBAAe,OAAO;AAAA,MACpB;AAAA,IACF,GAEG,MAAgC,QAAQ,MAAe,WAA4C;AACpG,aAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ,KAAK,iBAAiB;AAAA,QAClE,gBAAgB;AAAA,UACd,YAAY;AAAA,QACd;AAAA,MACF,GAAG,KAAK,MAAM,MAAM;AAAA,IACtB;AACA,6BAAoB,OAAO;AAAA,MACzB;AAAA,IACF,GAEG,MAAgC,QAAQ,MAAe,WAA4C;AACpG,aAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ,KAAK,iBAAiB;AAAA,QAClE,sBAAsB;AAAA,UACpB,iBAAiB;AAAA,QACnB;AAAA,MACF,GAAG,KAAK,MAAM,MAAM;AAAA,IACtB;AACA,kBAAS,OAAO;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAIG,MAAgC,QAAQ,MAAe,WAA4C;AACpG,aAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ,KAAK,iBAAiB;AAAA,QAClE,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,GAAG,KAAK,MAAM,MAAM;AAAA,IACtB;AACA,8BAAqB,OAAO,MAAgC,QAAQ,MAAe,WAA4C;AAC7H,aAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ,KAAK,iBAAiB;AAAA,QAClE,sBAAsB,CAAC;AAAA,MACzB,GAAG,KAAK,MAAM,MAAM;AAAA,IACtB;AACA,0BAAiB,OAAO;AAAA,MACtB;AAAA,MACA;AAAA,IACF,GAGG,MAAgC,QAAQ,MAAe,WAA4C;AACpG,aAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ,KAAK,iBAAiB;AAAA,QAClE,iBAAiB;AAAA,UACf,aAAa;AAAA,UACb;AAAA,QACF;AAAA,MACF,GAAG,KAAK,MAAM,MAAM;AAAA,IACtB;AACA,0BAAiB,OAAO;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAIG,MAAgC,QAAQ,MAAe,WAA4C;AACpG,aAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ,KAAK,iBAAiB;AAAA,QAClE,iBAAiB;AAAA,UACf,eAAe;AAAA,UACf,sBAAsB;AAAA,UACtB,aAAa;AAAA,QACf;AAAA,MACF,GAAG,KAAK,MAAM,MAAM;AAAA,IACtB;AACA,gCAAuB,OAAO,MAAgC,QAAQ,MAAe,WAA4C;AAC/H,aAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ,KAAK,iBAAiB;AAAA,QAClE,wBAAwB,CAAC;AAAA,MAC3B,GAAG,KAAK,MAAM,MAAM;AAAA,IACtB;AACA,wBAAe,OAAO;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAIG,MAAgC,QAAQ,MAAe,WAA4C;AACpG,aAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ,KAAK,iBAAiB;AAAA,QAClE,eAAe;AAAA,UACb,eAAe;AAAA,UACf,sBAAsB;AAAA,UACtB,aAAa;AAAA,QACf;AAAA,MACF,GAAG,KAAK,MAAM,MAAM;AAAA,IACtB;AACA,8BAAqB,OAAO;AAAA,MAC1B;AAAA,MACA;AAAA,IACF,GAGG,MAAgC,QAAQ,MAAe,WAA4C;AACpG,aAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ,KAAK,iBAAiB;AAAA,QAClE,sBAAsB;AAAA,UACpB;AAAA,UACA;AAAA,QACF;AAAA,MACF,GAAG,KAAK,MAAM,MAAM;AAAA,IACtB;AACA,gBAAO,OAAO,MAAgC,QAAQ,MAAe,WAA4C;AAC/G,aAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ,KAAK,iBAAiB;AAAA,QAClE,MAAM,CAAC;AAAA,MACT,GAAG,KAAK,MAAM,MAAM;AAAA,IACtB;AACA,oBAAW,OAAO;AAAA,MAChB;AAAA,IACF,GAEG,MAAgC,QAAQ,MAAe,WAA4C;AACpG,aAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ,KAAK,iBAAiB;AAAA,QAClE,UAAU;AAAA,UACR;AAAA,QACF;AAAA,MACF,GAAG,KAAK,MAAM,MAAM;AAAA,IACtB;AA7IE,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAC/D,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AAAA,EACzC;AAgIF;;;AClaO,IAAM,qBAAN,MAA6D;AAAA,EAGlE,YAAY,QAAwB,iBAAyB;AAU7D,kBAAS,YAA6B;AACpC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,QAAQ,CAAC;AAAA,MACX,CAAC;AAAA,IACH;AACA,qBAAY,YAA0C;AACpD,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,WAAW,CAAC;AAAA,MACd,CAAC;AAAA,IACH;AACA,sBAAa,OAAO,EAAE,QAAQ,MAA2C;AACvE,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,aAAa;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,mBAAU,YAA8B;AACtC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,SAAS,CAAC;AAAA,MACZ,CAAC;AAAA,IACH;AACA,sBAAa,YAA6B;AACxC,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,cAAc,CAAC;AAAA,MACjB,CAAC;AAAA,IACH;AACA,2BAAkB,YAA2B;AAC3C,aAAO,KAAK,OAAO,mBAAmB,KAAK,iBAAiB;AAAA,QAC1D,kBAAkB,CAAC;AAAA,MACrB,CAAC;AAAA,IACH;AAxCE,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AAAA,EACvD;AAiCF;AA4JO,IAAM,gBAAN,cACG,mBAEV;AAAA,EAIE,YACE,QACA,QACA,iBACA;AACA,UAAM,QAAQ,eAAe;AAiB/B,wBAAe,OACb;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,eAAe;AAAA,YACb;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,4BAAmB,OACjB;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,qBAAqB;AAAA,YACnB,SAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,uCAA8B,OAC5B;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,gCAAgC;AAAA,YAC9B,mBAAmB;AAAA,UACrB;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,uBAAc,OACZ;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,cAAc;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,0BAAiB,OACf;AAAA,MACE;AAAA,IACF,GAGA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,iBAAiB;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,mBAAU,OACR,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,SAAS,CAAC;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,oBAAW,OACT;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,UAAU;AAAA,YACR;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,2BAAkB,OAChB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAWA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,mBAAmB;AAAA,YACjB,sBAAsB;AAAA,YACtB,cAAc;AAAA,YACd;AAAA,YACA,UAAU;AAAA,YACV,YAAY,UAAU,SAAS;AAAA,YAC/B,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,iBAAiB;AAAA,YACjB,0BAA0B;AAAA,UAC5B;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,4BAAmB,OACjB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAcA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,oBAAoB;AAAA,YAClB,sBAAsB;AAAA,YACtB,cAAc;AAAA,YACd,WAAW;AAAA,YACX;AAAA,YACA,yBAAyB;AAAA,YACzB,4BAA4B;AAAA,YAC5B,qBAAqB;AAAA,YACrB,YAAY;AAAA,YACZ,qBAAqB;AAAA,YACrB,iBAAiB;AAAA,YACjB,aAAa;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,wBAAe,OACb;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,gBAAgB;AAAA,YACd,eAAe;AAAA,YACf,YAAY;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,6BAAoB,OAClB;AAAA,MACE;AAAA,MACA;AAAA,IACF,GAIA,MAAgC,QAChC,MACA,WAC2B;AAC3B,aAAO,MAAM,KAAK,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE,sBAAsB;AAAA,YACpB,eAAe;AAAA,YACf,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AA1UE,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI;AACvD,SAAK,8BACH,KAAK,4BAA4B,KAAK,IAAI;AAC5C,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AACrD,SAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI;AACvD,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AAAA,EAC3D;AA4TF;;;APzjBA,IAAM,8BAA4D;AAAA,EAChE,yBAAyB;AAAA,EACzB,oBAAoB;AAAA;AAAA,EACpB,UAAU,yBAAS,WAAW,kBAAkB;AAClD;AAEA,eAAsB,mBAAmB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,wBAAwB,MAAM;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,SAAO,IAAI,WAAW,uBAAuB,SAAS,eAAe;AACvE;AAEA,eAAsB,oBAAoB;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,wBAAwB,MAAM;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,SAAO,IAAI,YAAY,uBAAuB,SAAS,eAAe;AACxE;AAEA,eAAsB,sBAAsB;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,wBAAwB,MAAM;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,SAAO,IAAI,cAAc,uBAAuB,SAAS,eAAe;AAC1E;AAEA,eAAsB,uBAAuB;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,wBAAwB,MAAM;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,SAAO,IAAI,eAAe,uBAAuB,SAAS,eAAe;AAC3E;AAEA,eAAsB,mBAAmB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,wBAAwB,MAAM;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,SAAO,IAAI,WAAW,uBAAuB,SAAS,eAAe;AACvE;AAEA,eAAsB,sBAAsB;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,wBAAwB,MAAM;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,SAAO,IAAI,cAAc,uBAAuB,SAAS,eAAe;AAC1E;AAEA,eAAsB,yBAAyB;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,wBAAwB,MAAM;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,SAAO,IAAI,iBAAiB,uBAAuB,SAAS,eAAe;AAC7E;AAEA,eAAsB,6BACpB,aACA,QACA;AACA,QAAM,SAAS,MAAM,+CAAsB;AAAA,IACzC;AAAA,IACA;AAAA,IACA;AAAA,MACE,GAAG;AAAA,IACL;AAAA,EACF;AACA,SAAO;AACT;;;AQnJO,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,QAAK;AAFK,SAAAA;AAAA,GAAA;AAKL,IAAK,qBAAL,kBAAKC,wBAAL;AACL,EAAAA,oBAAA,aAAU;AACV,EAAAA,oBAAA,WAAQ;AAFE,SAAAA;AAAA,GAAA;AAKL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,WAAQ;AACR,EAAAA,eAAA,iBAAc;AAHJ,SAAAA;AAAA,GAAA;;;ACkCL,IAAM,eAAgC;AAAA,EAC3C,WAAW;AAAA,IACT,WAAW;AAAA,MACT,kBAAkB;AAAA,MAClB,sBAAsB;AAAA,MACtB,wBAAwB;AAAA,MACxB,oBAAoB;AAAA,IACtB;AAAA,IACA,SAAS;AAAA,MACP,cAAc;AAAA,QACZ,WACE;AAAA,QACF,WACE;AAAA,QACF,YACE;AAAA,QACF,YACE;AAAA,QACF,QACE;AAAA,QACF,QACE;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,QACV,WACE;AAAA,QACF,WACE;AAAA,QACF,YACE;AAAA,QACF,YACE;AAAA,QACF,QACE;AAAA,QACF,QACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,GAAG;AAAA,QACH,YAAY;AAAA,QACZ,sBAAsB;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,gCAAgC;AAAA,UAC9B;AAAA,QACF;AAAA,QACA,yBAAyB;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,cAAc;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAY;AAAA,QACV,GAAG;AAAA,QACH,YAAY;AAAA,QACZ,sBAAsB;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,gCAAgC;AAAA,UAC9B;AAAA,QACF;AAAA,QACA,yBAAyB;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,cAAc;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,WAAW;AAAA,MACT,kBAAkB;AAAA,MAClB,sBAAsB;AAAA,MACtB,wBAAwB;AAAA,MACxB,oBAAoB;AAAA,IACtB;AAAA,IACA,SAAS;AAAA,MACP,cAAc;AAAA,QACZ,WACE;AAAA,QACF,WACE;AAAA,QACF,YACE;AAAA,QACF,YACE;AAAA,QACF,QACE;AAAA,QACF,QACE;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,QACV,WACE;AAAA,QACF,WACE;AAAA,QACF,YACE;AAAA,QACF,YACE;AAAA,QACF,QACE;AAAA,QACF,QACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,GAAG;AAAA,QACH,YAAY;AAAA,QACZ,sBAAsB;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,gCAAgC;AAAA,UAC9B;AAAA,QACF;AAAA,QACA,yBAAyB;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,cAAc;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAY;AAAA,QACV,GAAG;AAAA,QACH,YAAY;AAAA,QACZ,sBAAsB;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,gCAAgC;AAAA,UAC9B;AAAA,QACF;AAAA,QACA,yBAAyB;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,cAAc;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,WAAW;AAAA,MACT,kBAAkB;AAAA,MAClB,sBAAsB;AAAA,MACtB,wBAAwB;AAAA,MACxB,oBAAoB;AAAA,IACtB;AAAA,IACA,SAAS;AAAA,MACP,cAAc;AAAA,QACZ,WACE;AAAA,QACF,WACE;AAAA,QACF,YACE;AAAA,QACF,YACE;AAAA,QACF,QACE;AAAA,QACF,QACE;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,QACV,WACE;AAAA,QACF,WACE;AAAA,QACF,YACE;AAAA,QACF,YACE;AAAA,QACF,QACE;AAAA,QACF,QACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,GAAG;AAAA,QACH,YAAY;AAAA,QACZ,sBAAsB;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,gCAAgC;AAAA,UAC9B;AAAA,QACF;AAAA,QACA,yBAAyB;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,cAAc;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAY;AAAA,QACV,GAAG;AAAA,QACH,YAAY;AAAA,QACZ,sBAAsB;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,gCAAgC;AAAA,UAC9B;AAAA,QACF;AAAA,QACA,yBAAyB;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,cAAc;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,WAAW;AAAA,MACT,kBAAkB;AAAA,MAClB,sBAAsB;AAAA,MACtB,oBAAoB;AAAA,MACpB,wBAAwB;AAAA,IAC1B;AAAA,IACA,SAAS;AAAA,MACP,mBAAmB;AAAA,QACjB,WACE;AAAA,QACF,WACE;AAAA,QACF,YACE;AAAA,QACF,YACE;AAAA,QACF,QACE;AAAA,QACF,QACE;AAAA,MACJ;AAAA,MACA,iBAAiB;AAAA,QACf,WACE;AAAA,QACF,WACE;AAAA,QACF,YACE;AAAA,QACF,YACE;AAAA,QACF,QACE;AAAA,QACF,QACE;AAAA,MACJ;AAAA,MACA,iBAAiB;AAAA,QACf,WACE;AAAA,QACF,WACE;AAAA,QACF,YACE;AAAA,QACF,YACE;AAAA,QACF,QACE;AAAA,QACF,QACE;AAAA,MACJ;AAAA,MACA,eAAe;AAAA,QACb,WACE;AAAA,QACF,WACE;AAAA,QACF,YACE;AAAA,QACF,YACE;AAAA,QACF,QACE;AAAA,QACF,QACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACF;AAiBO,IAAM,UAAU;AAAA,EACrB,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACtaO,SAAS,kBACd,MACA,aACA,aACA,UACA,WACA;AACA,MAAI;AAMJ,MAAI,qBAAqB;AACzB,MAAI,mBAAmB;AACvB,MAAI,mBAAmB;AACvB,MAAI,iBAAiB;AACrB,MAAI,eAAe;AACnB,MAAI,iBAAiB;AAErB,UAAQ,aAAa;AAAA,IACnB;AACE,qBAAe;AACf;AAAA,IACF;AACE,qBAAe;AACf;AAAA,IACF;AACE,YAAM,IAAI;AAAA,QACR,wBAAwB,WAAW;AAAA,MACrC;AAAA,EACJ;AAEA,UAAQ,aAAa;AAAA,IACnB;AACE,uBAAiB;AACjB;AAAA,IACF;AACE,uBAAiB;AACjB;AAAA,IACF;AACE,YAAM,IAAI;AAAA,QACR,wBAAwB,WAAW;AAAA,MACrC;AAAA,EACJ;AAEA,MAAI,YAAY,MAAM,aAAa,GAAG;AAGpC,iBAAa,aAAa,SAAS,EAAE;AACrC,QAAI,yCAA4C;AAC9C,2BAAqB,aAAa,SAAS,EAAE,SAAS,EAAE;AACxD,yBAAmB,aAAa,SAAS,EAAE,SAAS,EAAE;AAAA,IACxD,WAAW,qCAA0C;AACnD,yBAAmB,aAAa,SAAS,EAAE,OAAO,GAAG;AACrD,uBAAiB,aAAa,SAAS,EAAE,OAAO,GAAG;AAAA,IACrD;AAAA,EACF,WAAW,YAAY,OAAO,aAAa,IAAI;AAG7C,iBAAa,aAAa,UAAU,EAAE;AACtC,QAAI,yCAA4C;AAC9C,2BAAqB,aAAa,UAAU,EAAE,SAAS,EAAE;AACzD,yBAAmB,aAAa,UAAU,EAAE,SAAS,EAAE;AAAA,IACzD,WAAW,qCAA0C;AACnD,yBAAmB,aAAa,UAAU,EAAE,OAAO,GAAG;AACtD,uBAAiB,aAAa,UAAU,EAAE,OAAO,GAAG;AAAA,IACtD;AAAA,EACF,WAAW,YAAY,SAAS,aAAa,KAAK;AAGhD,iBAAa,aAAa,WAAW,EAAE;AACvC,QAAI,yCAA4C;AAC9C,2BAAqB,aAAa,WAAW,EAAE,SAAS,EAAE;AAC1D,yBAAmB,aAAa,WAAW,EAAE,SAAS,EAAE;AAAA,IAC1D,WAAW,qCAA0C;AACnD,yBAAmB,aAAa,WAAW,EAAE,OAAO,GAAG;AACvD,uBAAiB,aAAa,WAAW,EAAE,OAAO,GAAG;AAAA,IACvD;AAAA,EACF,WAAW,YAAY,WAAW,aAAa,KAAK;AAGlD,iBAAa,aAAa,WAAW,EAAE;AACvC,QAAI,yCAA4C;AAC9C,UAAI,gCAAsC;AACxC,6BACE,aAAa,WAAW,EAAE,SAAS,EAAE;AACvC,2BAAmB,aAAa,WAAW,EAAE,SAAS,EAAE;AAAA,MAC1D,WAAW,8BAAoC;AAC7C,6BACE,aAAa,WAAW,EAAE,SAAS,EAAE;AACvC,2BAAmB,aAAa,WAAW,EAAE,SAAS,EAAE;AAAA,MAC1D;AAAA,IACF,WAAW,qCAA0C;AACnD,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AAAA,EACF,OAAO;AACL,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,UAAQ,MAAM;AAAA,IACZ;AACE,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACE,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMP;AAAA,IACF;AACE,UAAI,gCAAsC;AACxC,6BACE,aAAa,WAAW,EAAE,SAAS,EAAE;AACvC,2BAAmB,aAAa,WAAW,EAAE,SAAS,EAAE;AAAA,MAC1D,WAAW,8BAAoC;AAC7C,6BACE,aAAa,WAAW,EAAE,SAAS,EAAE;AACvC,2BAAmB,aAAa,WAAW,EAAE,SAAS,EAAE;AAAA,MAC1D;AACA,aAAO;AAAA,QACL,YAAY,aAAa,WAAW,EAAE;AAAA,QACtC;AAAA,QACA;AAAA,QACA,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,QAChB;AAAA,QACA,gBAAgB;AAAA,MAClB;AAAA,EACJ;AACF;AAEO,SAAS,wBACd,SACA,UACA,WACA;AACA,MAAI,cAAc;AAAA,IAChB,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACA,MAAI,YAAY,MAAM,aAAa,GAAG;AAGpC,QAAI,YAAY,WAAW;AACzB,kBAAY,SAAS;AAAA,IACvB,OAAO;AACL,kBAAY,SAAS;AAAA,IACvB;AAAA,EACF,WAAW,YAAY,OAAO,aAAa,IAAI;AAG7C,QAAI,YAAY,WAAW;AACzB,kBAAY,SAAS;AAAA,IACvB,OAAO;AACL,kBAAY,SAAS;AAAA,IACvB;AAAA,EACF,OAAO;AACL,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,SAAO;AACT;;;AC3KA,IAAAC,mBAA+C;AAIxC,IAAM,WAAN,MAAe;AAAA,EAWpB,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAmB;AACjB,SAAK,UAAU;AACf,SAAK,cAAc;AACnB,SAAK,kBAAkB;AACvB,SAAK,cAAc;AACnB,SAAK,iBAAiB;AACtB,SAAK,aAAa;AAClB,SAAK,eAAe;AACpB,SAAK,mBAAmB;AACxB,SAAK,yBAAyB;AAAA,EAChC;AAAA,EAEA,MAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAAuD;AACrD,UAAM,cAAc,YAAY,QAAQ,IAAI,MAAM,GAAG,SAAS;AAC9D,UAAM,YAAY,UAAU,QAAQ,IAAI,MAAM,GAAG,SAAS;AAC1D,UAAM,SAAS,MAAM,uBAAuB;AAAA,MAC1C,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,UAAM,cAAc;AAAA,MAClB,KAAK;AAAA,MACL;AAAA,MACA,cAAc;AAAA,IAChB;AAEA,wBAAoB,qBAAqB;AAGzC,QAAI,iCACF;AACF,QAAI,6BAA6B,QAAW;AAC1C,UAAI;AACJ,UAAI;AAEJ,UAAI,OAAO,6BAA6B,UAAU;AAEhD,SAAC,cAAc,YAAY,IAAI,aAAa,wBAAwB;AAAA,MACtE,OAAO;AAEL,SAAC,cAAc,YAAY,IAAI;AAAA,MACjC;AAEA,uCAAiC;AAAA,QAC/B,GAAG,aAAa,SAAS;AAAA,QACzB,GAAG,aAAa,SAAS;AAAA,MAC3B;AAAA,IACF;AAEA,UAAM,MAAM,MAAM,OAAO;AAAA,MACvB;AAAA,QACE;AAAA,QACA;AAAA,QACA,0BAA0B;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA,aAAa,eAAe;AAAA,UAC5B,MAAM,QAAQ;AAAA,QAChB;AAAA,QACA,YAAY;AAAA,UACV;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAU,SAAS,SAAS;AAAA,QAC5B;AAAA,QACA,qBAAqB;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA,CAAC,WAAW;AAAA,IACd;AACA,QAAI,kBAAkB;AACtB,QAAI,OAAO,IAAI,CAAC,UAAU;AACxB,UAAI,MAAM,SAAS,QAAQ;AACzB,YAAI,cAAc,MAAM,WAAW;AAAA,UACjC,CAAC,SAAS,KAAK,QAAQ;AAAA,QACzB;AACA,YAAI,YAAY,UAAU,iBAAiB;AACzC,4BAAkB,MAAM,WACrB,KAAK,CAAC,SAAS,KAAK,QAAQ,YAAY,EACxC,MAAM,SAAS;AAAA,QACpB;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAAsD;AACpD,UAAM,cAAc,YAAY,QAAQ,IAAI,MAAM,GAAG,SAAS;AAC9D,UAAM,YAAY,UAAU,QAAQ,IAAI,MAAM,GAAG,SAAS;AAC1D,UAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,UAAM,SAAS,MAAM,6BAA6B,KAAK,aAAa,MAAM;AAC1E,UAAM,CAAC,iBAAiB,eAAe,IAAI;AAAA,MACzC,OAAO,cAAc;AAAA,IACvB;AACA,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAAA;AAAA,MAEF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,sBAAsB,MAAM,OAAO;AAAA,MACvC;AAAA,MACA,KAAK;AAAA,MACL;AAAA,QACE,YAAY,EAAE,OAAO,aAAa,eAAe,IAAI,MAAM,QAAQ,GAAG;AAAA,QACtE,aAAa;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,QACA,aAAa;AAAA,UACX,GAAG,gBAAgB,SAAS;AAAA,UAC5B,GAAG,gBAAgB,SAAS;AAAA,QAC9B;AAAA,QACA,sBAAsB;AAAA,QACtB,oBAAoB;AAAA,QACpB,oBAAoB;AAAA,QACpB,kBAAkB;AAAA,QAClB,kBAAkB,UAAU,SAAS;AAAA,QACrC;AAAA,QACA,cAAc;AAAA,QACd,sBAAsB;AAAA,QACtB,SAAS;AAAA,MACX;AAAA,MACA,UAAU,KAAK;AAAA,MACf;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAA4D;AAC1D,UAAM,cAAc,YAAY,QAAQ,IAAI,KAAW,SAAS;AAChE,UAAM,YAAY,UAAU,QAAQ,IAAI,KAAW,SAAS;AAC5D,UAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,UAAM,SAAS,MAAM,6BAA6B,KAAK,aAAa,MAAM;AAC1E,UAAM,CAAC,iBAAiB,eAAe,IAAI;AAAA,MACzC,OAAO,cAAc;AAAA,IACvB;AACA,UAAM,EAAE,cAAc,eAAe,IAAI;AAAA;AAAA,MAEvC;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,sBAAsB,MAAM,OAAO;AAAA,MACvC;AAAA,MACA,KAAK;AAAA,MACL;AAAA,QACE,YAAY,EAAE,OAAO,aAAa,eAAe,IAAI,MAAM,QAAQ,GAAG;AAAA,QACtE,aAAa;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX,GAAG,gBAAgB,SAAS;AAAA,UAC5B,GAAG,gBAAgB,SAAS;AAAA,QAC9B;AAAA,QACA,iBAAiB;AAAA,QACjB,0BAA0B,KAAK;AAAA,QAC/B,qBAAqB;AAAA,QACrB,2BAA2B;AAAA,QAC3B,6BAA6B;AAAA,QAC7B,cAAc;AAAA,QACd,sBAAsB;AAAA,QACtB,mBAAmB,KAAK;AAAA,MAC1B;AAAA,MACA,iBAAiB,KAAK;AAAA,MACtB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,0BAA0B;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAAgE;AAC9D,UAAM,aAAa,YAAY,QAAQ,IAAI,KAAW,SAAS;AAC/D,UAAM,WAAW,UAAU,QAAQ,IAAI,KAAW,SAAS;AAE3D,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AACD,UAAM,CAAC,iBAAiB,eAAe,IAAI;AAAA,MACzC,OAAO,cAAc;AAAA,IACvB;AAEA,UAAM,cAAc;AAAA,MAClB,qBAAqB;AAAA,MACrB,aAAa;AAAA,MACb,aAAa;AAAA,QACX,GAAG,gBAAgB,SAAS;AAAA,QAC5B,GAAG,gBAAgB,SAAS;AAAA,MAC9B;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA,aAAa,eAAe;AAAA,QAC5B,MAAM,QAAQ;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,wBACE,0BAA0B,KAAK;AAAA,IACnC;AAEA,QAAI;AAEJ,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,0BAA0B;AAAA,UACxB,sBAAsB;AAAA,UACtB,cAAc;AAAA,UACd,aAAa,YAAY;AAAA,UACzB,YAAY,YAAY,UAAU,SAAS;AAAA,UAC3C,YAAY,YAAY;AAAA,UACxB,YAAY,YAAY;AAAA,UACxB,UAAU,YAAY;AAAA,UACtB,iBAAiB,YAAY;AAAA,UAC7B,0BAA0B,YAAY;AAAA,QACxC;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,uBAAiB,MAAM,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAAA,IACF,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,uBAAiB,MAAM,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAAA,IACF,OAAO;AACL,uBAAiB,MAAM,OAAO,sBAAsB,aAAa,GAAG;AAAA,IACtE;AAEA,QAAI,kBAAkB;AACtB,mBAAe,OAAO,IAAI,CAAC,UAAU;AACnC,UAAI,MAAM,SAAS,QAAQ;AACzB,YAAI,cAAc,MAAM,WAAW;AAAA,UACjC,CAAC,SAAS,KAAK,QAAQ;AAAA,QACzB;AACA,YAAI,YAAY,UAAU,6BAA6B;AACrD,4BAAkB,MAAM,WACrB,KAAK,CAAC,SAAS,KAAK,QAAQ,YAAY,EACxC,MAAM,SAAS;AAAA,QACpB;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,2BAA2B;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAQG;AACD,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,UAAM,YAAY;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,gBAAgB;AAAA,UACd,eAAe;AAAA,UACf,YAAY;AAAA,QACd;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO;AAAA,QACZ;AAAA,UACE,cAAc;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO;AAAA,QACZ;AAAA,UACE,cAAc;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,OAAO;AAAA,MACZ;AAAA,QACE,cAAc;AAAA,QACd;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kCAAkC;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAMG;AACD,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,sBAAsB;AAAA,UACpB,eAAe;AAAA,UACf,iBAAiB;AAAA,QACnB;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO;AAAA,QACZ;AAAA,UACE,cAAc;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO;AAAA,QACZ;AAAA,UACE,cAAc;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,OAAO;AAAA,MACZ;AAAA,QACE,cAAc;AAAA,QACd;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAOG;AACD,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,gBAAgB;AAAA,UACd,aAAa;AAAA,UACb,eAAe;AAAA,UACf;AAAA,QACF;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO;AAAA,QACZ;AAAA,UACE;AAAA,UACA,cAAc;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO;AAAA,QACZ;AAAA,UACE;AAAA,UACA,cAAc;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,OAAO;AAAA,MACZ;AAAA,QACE;AAAA,QACA,cAAc;AAAA,QACd;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAKG;AACD,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,cAAc;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO,YAAY,EAAE,SAAS,GAAG,QAAQ;AAAA,IAClD,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO,YAAY,EAAE,SAAS,GAAG,QAAQ;AAAA,IAClD;AAEA,WAAO,OAAO,YAAY,EAAE,SAAS,GAAG,GAAG;AAAA,EAC7C;AAAA,EAEA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAKG;AACD,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,iBAAiB;AAAA,UACf;AAAA,QACF;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO,eAAe,EAAE,SAAS,GAAG,QAAQ;AAAA,IACrD,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO,eAAe,EAAE,SAAS,GAAG,QAAQ;AAAA,IACrD;AAEA,WAAO,OAAO,eAAe,EAAE,SAAS,GAAG,GAAG;AAAA,EAChD;AAAA,EAEA,MAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,EACF,GAGG;AACD,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AACD,WAAO,OAAO,WAAW,EAAE,SAAS,SAAS,CAAC;AAAA,EAChD;AAAA,EAEA,MAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAKG;AACD,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,UAAM,QAAQ;AAAA,MACZ;AAAA,QACE,OAAO;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,SAAS,CAAC;AAAA,MACZ;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,cACjD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO,QAAQ,UAAU,QAAW,KAAK;AAAA,IAClD,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO,QAAQ,UAAU,QAAW,KAAK;AAAA,IAClD;AAEA,WAAO,OAAO,QAAQ,KAAK,QAAW,KAAK;AAAA,EAC7C;AAAA,EAEA,MAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAKG;AACD,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,UAAU;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO,SAAS,EAAE,OAAO,GAAG,QAAQ;AAAA,IAC7C,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO,SAAS,EAAE,OAAO,GAAG,QAAQ;AAAA,IAC7C;AAEA,WAAO,OAAO,SAAS,EAAE,OAAO,GAAG,GAAG;AAAA,EACxC;AAAA,EAEA,MAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,EACF,GAGG;AACD,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB;AAAA,IACnB,CAAC;AACD,UAAM,YAAY,MAAM,OAAO,aAAa;AAC5C,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,EACF,GAGG;AACD,UAAM,SAAS,MAAM,yBAAyB;AAAA,MAC5C,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,uBAAuB;AAAA,MAC5B,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,mBAAmB;AAAA,MACxB,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,oBAAoB;AAAA,MACzB,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,sBAAsB;AAAA,MAC3B,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,mBAAmB;AAAA,MACxB,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,sBAAsB;AAAA,MAC3B,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,eAAe,EAAE,OAAO,GAA8B;AAC1D,WAAO,6BAA6B,KAAK,aAAa,MAAM;AAAA,EAC9D;AAAA,EAEA,MAAM,uBAAuB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAAgE;AAC9D,UAAM,aAAa,YAAY,QAAQ,IAAI,KAAW,SAAS;AAC/D,UAAM,WAAW,UAAU,QAAQ,IAAI,KAAW,SAAS;AAE3D,UAAM,SAAS,MAAM,sBAAsB;AAAA,MACzC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AACD,UAAM,CAAC,iBAAiB,eAAe,IAAI;AAAA,MACzC,OAAO,cAAc;AAAA,IACvB;AAEA,UAAM,cAAc;AAAA,MAClB,qBAAqB;AAAA,MACrB,aAAa;AAAA,MACb,aAAa;AAAA,QACX,GAAG,gBAAgB,SAAS;AAAA,QAC5B,GAAG,gBAAgB,SAAS;AAAA,MAC9B;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA,aAAa,eAAe;AAAA,QAC5B,MAAM,QAAQ;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,wBACE,0BAA0B,KAAK;AAAA,IACnC;AAEA,QAAI;AAEJ,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,uBAAuB;AAAA,UACrB,sBAAsB;AAAA,UACtB,cAAc;AAAA,UACd,aAAa,YAAY;AAAA,UACzB,YAAY,YAAY,UAAU,SAAS;AAAA,UAC3C,YAAY,YAAY;AAAA,UACxB,YAAY,YAAY;AAAA,UACxB,UAAU,YAAY;AAAA,UACtB,iBAAiB,YAAY;AAAA,UAC7B,0BAA0B,YAAY;AAAA,QACxC;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,uBAAiB,MAAM,OAAO,gBAAgB,aAAa,QAAQ;AAAA,IACrE,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,uBAAiB,MAAM,OAAO,gBAAgB,aAAa,QAAQ;AAAA,IACrE,OAAO;AACL,uBAAiB,MAAM,OAAO,gBAAgB,aAAa,GAAG;AAAA,IAChE;AAEA,QAAI,kBAAkB;AACtB,mBAAe,OAAO,IAAI,CAAC,UAAU;AACnC,UAAI,MAAM,SAAS,QAAQ;AACzB,YAAI,cAAc,MAAM,WAAW;AAAA,UACjC,CAAC,SAAS,KAAK,QAAQ;AAAA,QACzB;AACA,YAAI,YAAY,UAAU,sBAAsB;AAC9C,4BAAkB,MAAM,WACrB,KAAK,CAAC,SAAS,KAAK,QAAQ,YAAY,EACxC,MAAM,SAAS;AAAA,QACpB;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,wBAAwB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAQG;AACD,UAAM,SAAS,MAAM,sBAAsB;AAAA,MACzC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,UAAM,YAAY;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,gBAAgB;AAAA,UACd,eAAe;AAAA,UACf,YAAY;AAAA,QACd;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO;AAAA,QACZ;AAAA,UACE,cAAc;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO;AAAA,QACZ;AAAA,UACE,cAAc;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,OAAO;AAAA,MACZ;AAAA,QACE,cAAc;AAAA,QACd;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,+BAA+B;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAMG;AACD,UAAM,SAAS,MAAM,sBAAsB;AAAA,MACzC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,sBAAsB;AAAA,UACpB,eAAe;AAAA,UACf,iBAAiB;AAAA,QACnB;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO;AAAA,QACZ;AAAA,UACE,cAAc;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO;AAAA,QACZ;AAAA,UACE,cAAc;AAAA,UACd;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,OAAO;AAAA,MACZ;AAAA,QACE,cAAc;AAAA,QACd;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAKG;AACD,UAAM,SAAS,MAAM,sBAAsB;AAAA,MACzC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,cAAc;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO,YAAY,EAAE,SAAS,GAAG,QAAQ;AAAA,IAClD,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO,YAAY,EAAE,SAAS,GAAG,QAAQ;AAAA,IAClD;AAEA,WAAO,OAAO,YAAY,EAAE,SAAS,GAAG,GAAG;AAAA,EAC7C;AAAA,EAEA,MAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAKG;AACD,UAAM,SAAS,MAAM,sBAAsB;AAAA,MACzC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,iBAAiB;AAAA,UACf;AAAA,QACF;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO,eAAe,EAAE,SAAS,GAAG,QAAQ;AAAA,IACrD,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,aAAO,OAAO,eAAe,EAAE,SAAS,GAAG,QAAQ;AAAA,IACrD;AAEA,WAAO,OAAO,eAAe,EAAE,SAAS,GAAG,GAAG;AAAA,EAChD;AAAA,EAEA,MAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,EACF,GAGG;AACD,UAAM,SAAS,MAAM,sBAAsB;AAAA,MACzC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AACD,WAAO,OAAO,WAAW,EAAE,SAAS,SAAS,CAAC;AAAA,EAChD;AAAA,EAEA,MAAM,wBAAwB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAA8D;AAC5D,UAAM,aAAa,YAAY,QAAQ,IAAI,KAAW,SAAS;AAC/D,UAAM,WAAW,UAAU,QAAQ,IAAI,KAAW,SAAS;AAE3D,UAAM,SAAS,MAAM,sBAAsB;AAAA,MACzC,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAGD,QAAI,iCACF;AACF,QAAI,6BAA6B,QAAW;AAC1C,UAAI;AACJ,UAAI;AAEJ,UAAI,OAAO,6BAA6B,UAAU;AAEhD,SAAC,cAAc,YAAY,IAAI,aAAa,wBAAwB;AAAA,MACtE,OAAO;AAEL,SAAC,cAAc,YAAY,IAAI;AAAA,MACjC;AAEA,uCAAiC;AAAA,QAC/B,GAAG,aAAa,SAAS;AAAA,QACzB,GAAG,aAAa,SAAS;AAAA,MAC3B;AAAA,IACF;AAEA,UAAM,cAAc;AAAA,MAClB,qBAAqB;AAAA,MACrB,aAAa,YAAY,SAAS;AAAA,MAClC,UAAU,SAAS,SAAS;AAAA,MAC5B;AAAA,MACA;AAAA,MACA,mBAAmB,qBAAqB;AAAA,MACxC,0BAA0B;AAAA,MAC1B,WAAW;AAAA,QACT;AAAA,QACA,aAAa,eAAe;AAAA,QAC5B,MAAM,QAAQ;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY;AAAA,QACV,YAAY;AAAA,QACZ,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,IACF;AAEA,QAAI;AAEJ,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAM,MAAM;AAAA,QACV,oBAAoB;AAAA,UAClB,sBAAsB;AAAA,UACtB,cAAc,YAAY,SAAS;AAAA,UACnC,WAAW,SAAS,SAAS;AAAA,UAC7B;AAAA,UACA,yBAAyB;AAAA,UACzB,qBAAqB,qBAAqB;AAAA,UAC1C,4BAA4B;AAAA,UAC5B,YAAY,YAAY;AAAA,UACxB,qBAAqB;AAAA,UACrB,iBAAiB;AAAA,UACjB,aAAa,YAAY;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AACA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU,KAAK;AAAA,cACf,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,KAAK;AAAA,MAChB;AACA,uBAAiB,MAAM,OAAO,iBAAiB,aAAa,QAAQ;AAAA,IACtE,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,MAChB;AACA,uBAAiB,MAAM,OAAO,iBAAiB,aAAa,QAAQ;AAAA,IACtE,OAAO;AACL,uBAAiB,MAAM,OAAO,iBAAiB,aAAa,GAAG;AAAA,IACjE;AAEA,QAAI,kBAAkB;AACtB,mBAAe,OAAO,IAAI,CAAC,UAAU;AACnC,UAAI,MAAM,SAAS,QAAQ;AACzB,YAAI,cAAc,MAAM,WAAW;AAAA,UACjC,CAAC,SAAS,KAAK,QAAQ;AAAA,QACzB;AACA,YAAI,eAAe,YAAY,UAAU,iBAAiB;AACxD,gBAAM,iBAAiB,MAAM,WAAW;AAAA,YACtC,CAAC,SAAS,KAAK,QAAQ;AAAA,UACzB;AACA,cAAI,gBAAgB;AAClB,8BAAkB,eAAe,MAAM,SAAS;AAAA,UAClD;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;;;ACpoDO,IAAM,oBAAN,MAAwB;AAAA,EAI7B,YAAY,EAAE,wBAAwB,KAAK,GAA4B;AACrE,SAAK,yBAAyB;AAC9B,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,KAAK,MAAoD;AAC7D,UAAM,WAAW,MAAM,KAAK,KAAK;AAAA,MAC/B,GAAG,KAAK,sBAAsB,IAAI,KAAK,SAAS;AAAA,MAChD;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB,SAAS,KAAK;AAAA,UACd,QAAQ,KAAK;AAAA,UACb,iBAAiB,KAAK;AAAA,QACxB,CAAC;AAAA,MACH;AAAA,IACF;AACA,UAAM,gBAAgB,MAAM,SAAS,KAAK;AAE1C,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,kBACJ,SACA,SACoC;AACpC,UAAM,WAAW,MAAM,KAAK,KAAK;AAAA,MAC/B,sCAAsC,OAAO,IAAI,OAAO;AAAA,IAC1D;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,aAAa,SAAS,UAAU,UAAU,UAAU;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,MAAM,iBAA8C;AAClD,UAAM,WAAW,MAAM,KAAK,KAAK;AAAA,MAC/B,GAAG,KAAK,sBAAsB;AAAA,MAC9B;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AACA,UAAM,gBAAgB,MAAM,SAAS,KAAK;AAE1C,WAAO;AAAA,EACT;AACF;;;ACpDA,IAAAC,mBAA+C;AAC/C,gBAAmC;AAO5B,SAAS,gBAAgB,UAA8C;AAC5E,SACE,OAAO,aAAa,YACpB,aAAa,QACb,WAAW,YACX,OAAQ,SAA2B,UAAU,YAC7C,aAAc,SAA2B;AAE7C;AAEO,IAAM,OAAN,MAAW;AAAA,EAMhB,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKG;AACD,SAAK,UAAU,SAAS;AACxB,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,oBAAoB;AACzB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,MAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AACD,QAAI,CAAC,SAAS;AACZ,iBAAW,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAAA,IAC5C;AAEA,UAAM,SAAS,MAAM,KAAK,SAAS,WAAW;AAAA,MAC5C;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,WAAW,MAAM,OAAO,eAAe,EAAE,QAAQ,CAAC;AACxD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AACD,UAAM,SAAS,MAAM,KAAK,SAAS,WAAW;AAAA,MAC5C;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,cAAc,MAAM,OAAO,sBAAsB;AAAA,MACrD,OAAO,SAAS,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,EACF,GAGG;AACD,UAAM,WAAW,MAAM,KAAK,QAAQ;AAAA,MAClC;AAAA,MACA;AAAA,IACF;AAEA,QAAI,gBAAgB,QAAQ,GAAG;AAC7B,aAAO;AAAA,IACT;AACA,WAAO,SAAS,KAAK,aAAa,CAAC,EAAE;AAAA,EACvC;AAAA,EAEA,MAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,EACF,GAGG;AACD,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,kBAAkB;AAAA,QAC5C;AAAA,QACA;AAAA,MACF;AACA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa,CAAC;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,EACF,GAGqB;AACnB,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,kBAAkB;AAAA,QAC5C;AAAA,QACA;AAAA,MACF;AACA,aAAO,SAAS,YAAY,SAAS;AAAA,IACvC,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBAAwB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAQoB;AAClB,QAAI,CAAC,SAAS;AACZ,iBAAW,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAAA,IAC5C;AAEA,UAAM,QAAQ,MAAM,KAAK,QAAQ,mBAAmB,iBAAiB;AAAA,MACnE;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,gBAAgB,KAAK,GAAG;AAC1B,YAAM,IAAI;AAAA,QACR,6BAA6B,MAAM,MAAM,IAAI,IAAI,MAAM,MAAM,OAAO;AAAA,MACtE;AAAA,IACF;AAEA,QAAI,MAAM,KAAK,MAAM,aAAa,SAAS;AACzC,YAAM,gBAAgB,MAAM,KAAK,cAAc;AAAA,QAC7C;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,UAAI,eAAe;AACjB,cAAMC,SAAQ,MAAM,KAAK,QAAQ,mBAAmB,iBAAiB;AAAA,UACnE;AAAA,QACF,CAAC;AAED,YAAI,CAAC,gBAAgBA,MAAK,GAAG;AAC3B,cAAIA,OAAM,KAAK,MAAM,mBAAmB;AACtC,mBAAOA,OAAM,KAAK,MAAM;AAAA,UAC1B,OAAO;AACL,mBAAO;AAAA,UACT;AAAA,QACF,OAAO;AACL,gBAAM,IAAI;AAAA,YACR,uCAAuCA,OAAM,MAAM,IAAI,IAAIA,OAAM,MAAM,OAAO;AAAA,UAChF;AAAA,QACF;AAAA,MACF,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,aAAa;AACf,YAAM,SAAS,MAAM,KAAK,SAAS,iBAAiB;AAAA,QAClD;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,UAAU,MAAM,OAAO,eAAe;AAAA,QAC1C,QAAQ,YAAY;AAAA,QACpB,aAAa,YAAY;AAAA,QACzB,QAAQ;AAAA,MACV,CAAC;AAED,aAAO;AAAA,IACT,OAAO;AACL,YAAM,SAAS,MAAM,KAAK,SAAS,WAAW;AAAA,QAC5C;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,UAAU,MAAM,OAAO,eAAe;AAAA,QAC1C,QAAQ;AAAA,MACV,CAAC;AAED,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AACD,QAAI,CAAC,SAAS;AACZ,iBAAW,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAAA,IAC5C;AAEA,UAAM,SAAS,MAAM,KAAK,SAAS,YAAY;AAAA,MAC7C;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,gBAAgB,MAAM,OAAO,YAAY;AAAA,MAC7C,QAAQ;AAAA,IACV,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,yBAAyB;AAAA,IAC7B;AAAA,IACA;AAAA,EACF,GAGmC;AACjC,UAAM,SAAS,MAAM,KAAK,SAAS,iBAAiB;AAAA,MAClD;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB,MAAM,OAAO,2BAA2B;AAC/D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,EAAE,gBAAgB,GAAgC;AACnE,UAAM,YAAY,MAAM,KAAK,QAAQ,mBAAmB,eAAe;AAEvE,QAAI,gBAAgB,SAAS,GAAG;AAC9B,YAAM,IAAI;AAAA,QACR,6BAA6B,UAAU,MAAM,IAAI,IAAI,UAAU,MAAM,OAAO;AAAA,MAC9E;AAAA,IACF;AAEA,WAAO,UAAU,KAAK;AAAA,EACxB;AAAA,EAEA,MAAM,oBAAoB,EAAE,gBAAgB,GAAgC;AAC1E,UAAM,YAAY,MAAM,KAAK,aAAa,EAAE,gBAAgB,CAAC;AAE7D,WAAO,UAAU;AAAA,EACnB;AAAA,EAEA,MAAM,eAAe,EAAE,gBAAgB,GAAgC;AACrE,UAAM,cAAc,MAAM,KAAK,oBAAoB,EAAE,gBAAgB,CAAC;AAEtE,WAAO,gBAAgB;AAAA,EACzB;AAAA,EAEA,MAAM,oBAAoB;AAAA,IACxB;AAAA,EACF,GAKG;AACD,QAAI;AACF,YAAM,YAAY,MAAM,KAAK,aAAa,EAAE,gBAAgB,CAAC;AAE7D,UAAI,UAAU,aAAa,SAAS;AAClC,eAAO;AAAA,UACL,WAAW;AAAA,UACX,SAAS;AAAA,QACX;AAAA,MACF;AAEA,YAAM,gBAAgB,IAAI,KAAK,OAAO,UAAU,SAAS,IAAI,MAAM,CAAC;AACpE,YAAM,cAAc,oBAAI,KAAK;AAC7B,YAAM,gBAAgB,IAAI,KAAK,KAAK,KAAK;AAEzC,UAAI,YAAY,QAAQ,IAAI,cAAc,QAAQ,KAAK,eAAe;AACpE,eAAO;AAAA,UACL,WAAW;AAAA,UACX,SAAS;AAAA,QACX;AAAA,MACF;AAEA,YAAM,eAAe,MAAM,KAAK,QAAQ,UAAU,eAAe;AACjE,UAAI,gBAAgB,YAAY,GAAG;AACjC,cAAM,IAAI;AAAA,UACR,kCAAkC,aAAa,MAAM,IAAI,IAAI,aAAa,MAAM,OAAO;AAAA,QACzF;AAAA,MACF;AAEA,UACE,aAAa,KAAK,WAClB,aAAa,KAAK,YAAY,OAC9B,aAAa,KAAK,YAAY,IAC9B;AACA,eAAO;AAAA,UACL,WAAW;AAAA,UACX,SAAS,aAAa,KAAK;AAAA,QAC7B;AAAA,MACF;AAEA,aAAO;AAAA,QACL,WAAW;AAAA,QACX,SAAS,aAAa,KAAK;AAAA,MAC7B;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,iCAAiC,KAAK;AACpD,aAAO;AAAA,QACL,WAAW;AAAA,QACX,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,EACF,GAGG;AACD,UAAM,MAAM,wBAAwB,KAAK,SAAS,UAAU,SAAS;AACrE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,qBAAqB,EAAE,gBAAgB,GAAgC;AAC3E,UAAM,YAAY,MAAM,KAAK,aAAa,EAAE,gBAAgB,CAAC;AAE7D,WAAO,UAAU;AAAA,EACnB;AAAA,EAEA,iBACE,aACA,WACA,QACA,aACQ;AACR,UAAM,YAAY,IAAI,KAAK,cAAc,MAAM,CAAC;AAChD,UAAM,UAAU,IAAI,KAAK,YAAY,MAAM,CAAC;AAG5C,QAAI,OAAO,WAAW,MAAM,GAAG;AAC7B,aAAO;AAAA,IACT;AAEA,QAAI,OAAO,SAAS,MAAM,GAAG;AAC3B,UAAI,YAAY,aAAa;AAC3B,eAAO;AAAA,MACT;AAAA,IACF,OAAO;AACL,UAAI,YAAY,eAAe,cAAc,SAAS;AACpD,eAAO;AAAA,MACT;AACA,UAAI,cAAc,SAAS;AACzB,YAAI,WAAW,UAAU;AACvB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,kBAAkB,EAAE,gBAAgB,GAAgC;AACxE,UAAM,eAAe,MAAM,KAAK,QAAQ,UAAU,eAAe;AACjE,QAAI,gBAAgB,YAAY,GAAG;AACjC,YAAM,IAAI;AAAA,QACR,kCAAkC,aAAa,MAAM,IAAI,IAAI,aAAa,MAAM,OAAO;AAAA,MACzF;AAAA,IACF;AAEA,WAAO,aAAa,KAAK;AAAA,EAC3B;AAAA,EAEA,MAAM,yBAAyB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAK+B;AAC7B,UAAM,wBAAwB,MAAM,KAAK,yBAAyB;AAAA,MAChE;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS;AACZ,iBAAW,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAAA,IAC5C;AAEA,UAAM,eAAe,MAAM,KAAK,kBAAkB,KAAK;AAAA,MACrD;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,sBAAsB;AAAA,IAChC,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,EACF,GAWG;AACD,QAAI;AACF,UAAI,CAAC,SAAS;AACZ,mBAAW,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAAA,MAC5C;AAEA,UAAI,gBAAgB,QAAW;AAC7B,sBAAc,KAAK;AAAA,MAErB;AAEA,YAAM,SAAS,MAAM,KAAK,SAAS,eAAe;AAAA,QAChD;AAAA,MACF,CAAC;AAGD,UAAI,qBAAqB,kBAAkB,QAAQ;AACjD,eAAO,MAAM,KAAK,aAAa;AAAA,UAC7B;AAAA,UACA;AAAA,UACA,QAAQ,YAAY;AAAA,UACpB;AAAA,UACA,mBAAmB;AAAA,YACjB,QAAQ,kBAAkB;AAAA,YAC1B,WAAW,kBAAkB;AAAA,UAC/B;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AAEL,eAAO,MAAM,KAAK,aAAa;AAAA,UAC7B;AAAA,UACA;AAAA,UACA,QAAQ,YAAY;AAAA,UACpB;AAAA,UACA,aAAa,mBAAmB;AAAA,UAChC;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,SAAS,OAAO;AACd,YAAM,MAAM,kBAAkB,KAAK,EAAE;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,GAYG;AACD,QAAI;AACF,UAAI,CAAC,SAAS;AACZ,mBAAW,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAAA,MAC5C;AAEA,YAAM,SAAS,MAAM,KAAK,SAAS,eAAe;AAAA,QAChD;AAAA,MACF,CAAC;AAGD,UAAI,qBAAqB,kBAAkB,QAAQ;AACjD,eAAO,MAAM,KAAK,aAAa;AAAA,UAC7B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,mBAAmB;AAAA,YACjB,QAAQ,kBAAkB;AAAA,YAC1B,WAAW,kBAAkB;AAAA,UAC/B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AAEL,eAAO,MAAM,KAAK,aAAa;AAAA,UAC7B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,aAAa,mBAAmB;AAAA,UAChC;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,SAAS,OAAO;AACd,YAAM,MAAM,kBAAkB,KAAK,EAAE;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAc,mBAAmB;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOG;AAED,UAAM,SAAS,oBAAI,IAAI;AACvB,eAAW,UAAU,iBAAiB;AACpC,UAAI,OAAO,IAAI,OAAO,GAAG,GAAG;AAC1B,cAAM,IAAI;AAAA,UACR,2BAA2B,OAAO,GAAG;AAAA,QACvC;AAAA,MACF;AACA,aAAO,IAAI,OAAO,GAAG;AAAA,IACvB;AAGA,UAAM,UAAU,gBACb,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EACpB,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG;AAG/B,UAAM,OAAO,MAAM,KAAK,eAAe,EAAE,gBAAgB,CAAC;AAC1D,UAAM,SAAS,QAAQ,OAAO,CAAC,GAAG,MAAM,KAAK,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAE1E,QAAI,OAAO,kBAAkB,IAAI,QAAQ;AACvC,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,EACR,GAYG;AACD,QAAI,gBAAgB,QAAW;AAC7B,oBAAc,KAAK;AAAA,IACrB;AAEA,UAAM,WAAW,MAAM,KAAK,oBAAoB;AAAA,MAC9C;AAAA,MACA,QAAQ,YAAY;AAAA,IACtB,CAAC;AAED,QAAI,aAAa,IAAI;AACnB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,QAAI;AACF,YAAM,QAAQ,MAAM,KAAK,QAAQ,mBAAmB,iBAAiB;AAAA,QACnE;AAAA,QACA;AAAA,MACF,CAAC;AAED,UAAI,gBAAgB,KAAK,GAAG;AAC1B,cAAM,IAAI;AAAA,UACR,6BAA6B,MAAM,MAAM,IAAI,IAAI,MAAM,MAAM,OAAO;AAAA,QACtE;AAAA,MACF;AAEA,UAAI;AACJ,UAAI,MAAM,KAAK,MAAM,aAAa,SAAS;AACzC,cAAM,gBAAgB,MAAM,KAAK,cAAc;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAED,YAAI,eAAe;AACjB,gBAAMA,SAAQ,MAAM,KAAK,QAAQ,mBAAmB,iBAAiB;AAAA,YACnE;AAAA,UACF,CAAC;AAED,cAAI,CAAC,gBAAgBA,MAAK,GAAG;AAC3B,gBAAIA,OAAM,KAAK,MAAM,mBAAmB;AACtC,mCAAqBA,OAAM,KAAK,MAAM;AAAA,YACxC,OAAO;AACL,mCAAqB;AAAA,YACvB;AAAA,UACF,OAAO;AACL,kBAAM,IAAI;AAAA,cACR,uCAAuCA,OAAM,MAAM,IAAI,IAAIA,OAAM,MAAM,OAAO;AAAA,YAChF;AAAA,UACF;AAAA,QACF,OAAO;AACL,+BAAqB;AAAA,QACvB;AAAA,MACF,OAAO;AACL,6BAAqB,MAAM,KAAK,sBAAsB;AAAA,UACpD;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAEA,YAAM,UAAU,MAAM,KAAK,mBAAmB;AAAA,QAC5C;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,CAAC,SAAS;AACZ,mBAAW,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAAA,MAC5C;AAEA,YAAM,OAAO,QAAQ,IAAI,CAAC,MAAM;AAC9B,eAAO,CAAC,EAAE,KAAK,EAAE,EAAE;AAAA,MACrB,CAAC;AAED,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,SAAS,MAAM,KAAK,SAAS,eAAe;AAAA,QAChD;AAAA,MACF,CAAC;AAED,aAAO,MAAM,KAAK,eAAe;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,MAAM,gBAAgB,KAAK,EAAE;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA,MAAM;AAAA,EACR,GAWG;AACD,QAAI;AACF,UAAI,CAAC,SAAS;AACZ,mBAAW,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAAA,MAC5C;AAEA,YAAM,SAAS,MAAM,KAAK,SAAS,eAAe;AAAA,QAChD;AAAA,MACF,CAAC;AAED,aAAO,MAAM,KAAK,eAAe;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,MAAM,gBAAgB,KAAK,EAAE;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAWG;AACD,UAAM,OAAyC,QAAQ;AAAA,MACrD,CAAC,EAAE,KAAK,WAAW,OAAO;AAAA,QACxB,SAAS;AAAA,QACT,OAAO,6BAAmB,YAAY;AAAA,UACpC,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,KAAK,IAAI,YAAY,EAAE;AAAA,YACrB,KAAK;AAAA,cACH,YAAY;AAAA,gBACV,iBAAiB;AAAA,kBACf,aAAa;AAAA,oBACX,GAAG,WAAW,CAAC;AAAA,oBACf,GAAG,WAAW,CAAC;AAAA,kBACjB;AAAA,kBACA,SAAS;AAAA,oBACP,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,cAAc,OAAO,QAAQ,UAAU;AAEzC,YAAM,gBAAgB,MAAM,OAAO,SAAS,SAAS,MAAM,EAAE;AAC7D,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,WAAW;AAAA,MACtB;AACA,aAAO,OAAO,iBAAiB,SAAS,MAAM,QAAQ;AAAA,IACxD,WAAW,cAAc,OAAO,QAAQ,UAAU;AAEhD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,WAAW;AAAA,MACtB;AACA,aAAO,OAAO,iBAAiB,SAAS,MAAM,QAAQ;AAAA,IACxD;AAEA,WAAO,OAAO,iBAAiB,SAAS,MAAM,GAAG;AAAA,EACnD;AAAA,EAEA,MAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GASG;AACD,UAAM,MAAM;AAAA,MACV,SAAS;AAAA,QACP;AAAA,QACA,QAAQ;AAAA,UACN,GAAG,OAAO,CAAC,EAAE,SAAS;AAAA,UACtB,GAAG,OAAO,CAAC,EAAE,SAAS;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,eAAe,QAAQ,OAAO,QAAQ,UAAU;AAElD,YAAM,gBAAgB,MAAM,OAAO;AAAA,QACjC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,WAAW;AAAA,MACtB;AACA,aAAO,OAAO,QAAQ,SAAS,iBAAiB,KAAK,QAAQ;AAAA,IAC/D,WAAW,eAAe,QAAQ,OAAO,QAAQ,UAAU;AAEzD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,WAAW;AAAA,MACtB;AACA,aAAO,OAAO,QAAQ,SAAS,iBAAiB,KAAK,QAAQ;AAAA,IAC/D;AAEA,WAAO,OAAO,QAAQ,SAAS,iBAAiB,KAAK,GAAG;AAAA,EAC1D;AAAA,EAEA,MAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAYG;AACD,UAAM,MAAM;AAAA,MACV,SAAS;AAAA,QACP,QAAQ;AAAA,UACN,GAAG,OAAO,CAAC,EAAE,SAAS;AAAA,UACtB,GAAG,OAAO,CAAC,EAAE,SAAS;AAAA,QACxB;AAAA,QACA,QAAQ,kBAAkB;AAAA,QAC1B,aAAa,kBAAkB;AAAA,MACjC;AAAA,IACF;AAEA,QAAI,eAAe,QAAQ,OAAO,QAAQ,UAAU;AAElD,YAAM,gBAAgB,MAAM,OAAO;AAAA,QACjC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,WAAW;AAAA,MACtB;AACA,aAAO,OAAO,QAAQ,SAAS,iBAAiB,KAAK,QAAQ;AAAA,IAC/D,WAAW,eAAe,QAAQ,OAAO,QAAQ,UAAU;AAEzD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,WAAW;AAAA,MACtB;AACA,aAAO,OAAO,QAAQ,SAAS,iBAAiB,KAAK,QAAQ;AAAA,IAC/D;AAEA,WAAO,OAAO,QAAQ,SAAS,iBAAiB,KAAK,GAAG;AAAA,EAC1D;AAAA,EAEA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAOG;AACD,QAAI;AACF,gBAAU,YAAY,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAErD,UAAI,gBAAgB,QAAW;AAC7B,sBAAc,KAAK;AAAA,MACrB;AAEA,YAAM,SAAS,MAAM,KAAK,SAAS,eAAe;AAAA,QAChD;AAAA,MACF,CAAC;AAED,YAAM,WAAW,MAAM,KAAK,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,sBAAsB,MAAM,KAAK,aAAa;AAAA,QAClD;AAAA,MACF,CAAC;AAED,YAAM,UAAU;AAAA,QACd,OAAO,QAAQ;AAAA,QACf;AAAA,QACA;AAAA,UACE,OAAO,oBAAoB,kBAAkB;AAAA,UAC7C,OAAO,oBAAoB,kBAAkB;AAAA,QAC/C;AAAA,QACA,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,MACT;AAEA,YAAM,EAAE,KAAK,WAAW,IAAI,QAAQ,CAAC;AAErC,YAAM,gBAAgB,YAAY;AAAA,QAChC,4BAA4B;AAAA,UAC1B,aAAa;AAAA,YACX,GAAG,WAAW,CAAC;AAAA,YACf,GAAG,WAAW,CAAC;AAAA,UACjB;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF,CAAC;AAED,UAAI,eAAe,QAAQ,OAAO,QAAQ,UAAU;AAElD,cAAM,gBAAgB,MAAM,OAAO;AAAA,UACjC;AAAA,UACA;AAAA,YACE;AAAA,cACE,SAAS;AAAA,cACT,OAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,UAAU;AAAA,gBACV,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,aAAa,CAAC;AAAA,cAC7D;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,QACF;AACA,cAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,cAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,cAAM,oBAAgB;AAAA,UACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,UACrC;AAAA,QACF;AACA,cAAM,WAAmB;AAAA,UACvB,QAAQ,cAAc;AAAA,UACtB,KAAK,cAAc;AAAA,UACnB,SAAS;AAAA,QACX;AACA,eAAO,OAAO;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,WAAW,eAAe,QAAQ,OAAO,QAAQ,UAAU;AAEzD,cAAM,WAAmB;AAAA,UACvB,GAAG;AAAA,UACH,SAAS;AAAA,QACX;AACA,eAAO,OAAO;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAEA,aAAO,OAAO,QAAQ,SAAS,iBAAiB,eAAe,GAAG;AAAA,IACpE,SAAS,OAAO;AACd,YAAM,MAAM,6BAA6B,KAAK,EAAE;AAAA,IAClD;AAAA,EACF;AAAA,EAEA,MAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA,MAAM;AAAA,EACR,GAWG;AACD,QAAI;AACF,gBAAU,YAAY,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAErD,YAAM,SAAS,MAAM,KAAK,SAAS,eAAe;AAAA,QAChD;AAAA,MACF,CAAC;AAYD,YAAM,EAAE,KAAK,WAAW,IAAI;AAE5B,YAAM,gBAAgB,YAAY;AAAA,QAChC,4BAA4B;AAAA,UAC1B,aAAa;AAAA,YACX,GAAG,WAAW,CAAC;AAAA,YACf,GAAG,WAAW,CAAC;AAAA,UACjB;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF,CAAC;AAED,UAAI,eAAe,QAAQ,OAAO,QAAQ,UAAU;AAElD,cAAM,gBAAgB,MAAM,OAAO;AAAA,UACjC;AAAA,UACA;AAAA,YACE;AAAA,cACE,SAAS;AAAA,cACT,OAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,UAAU;AAAA,gBACV,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,aAAa,CAAC;AAAA,cAC7D;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,QACF;AACA,cAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,cAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,cAAM,oBAAgB;AAAA,UACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,UACrC;AAAA,QACF;AACA,cAAM,WAAmB;AAAA,UACvB,QAAQ,cAAc;AAAA,UACtB,KAAK,cAAc;AAAA,UACnB,SAAS,WAAW;AAAA,QACtB;AACA,eAAO,OAAO;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,WAAW,eAAe,QAAQ,OAAO,QAAQ,UAAU;AAEzD,cAAM,WAAmB;AAAA,UACvB,GAAG;AAAA,UACH,SAAS,WAAW;AAAA,QACtB;AACA,eAAO,OAAO;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAEA,aAAO,OAAO,QAAQ,SAAS,iBAAiB,eAAe,GAAG;AAAA,IACpE,SAAS,OAAO;AACd,YAAM,MAAM,6BAA6B,KAAK,EAAE;AAAA,IAClD;AAAA,EACF;AAAA,EAEA,MAAM,uBAAuB;AAAA,IAC3B;AAAA,EACF,GAEG;AACD,UAAM,cACJ,MAAM,KAAK,QAAQ,uBAAuB,eAAe;AAC3D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,EACF,GAGG;AACD,UAAM,cAAc,MAAM,KAAK,uBAAuB;AAAA,MACpD;AAAA,IACF,CAAC;AAED,UAAM,YAAY,MAAM,KAAK,aAAa;AAAA,MACxC;AAAA,IACF,CAAC;AAED,UAAM,eAAe,UAAU;AAC/B,UAAM,iBAAiB,OAAO,aAAa,MAAM,GAAG,EAAE,CAAC,CAAC;AACxD,UAAM,WAAW,eAAe,iBAAiB,GAAG;AAAA,MAClD,aAAa;AAAA,QACX,OAAO,UAAU,kBAAkB;AAAA,QACnC,OAAO,UAAU,kBAAkB;AAAA,MACrC;AAAA,MACA,QAAQ;AAAA,MACR,aAAa,YAAY,IAAI,CAAC,MAAW,EAAE,IAAI,MAAM,CAAC;AAAA,IACxD,CAAC;AACD,WAAO;AAAA,EAOT;AAAA,EAEA,MAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAQG;AACD,UAAM,SAAS,MAAM,KAAK,SAAS,YAAY;AAAA,MAC7C;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO,MAAM,OAAO;AAAA,MAClB;AAAA,QACE;AAAA,QACA,cAAc;AAAA,QACd,WAAW,UAAU,SAAS;AAAA,QAC9B,QAAQ;AAAA,UACN,GAAG,eAAe,OAAO,CAAC,EAAE,SAAS;AAAA,UACrC,GAAG,eAAe,OAAO,CAAC,EAAE,SAAS;AAAA,QACvC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA,MAAM;AAAA,EACR,GAUG;AACD,UAAM,SAAS,MAAM,KAAK,SAAS,YAAY;AAAA,MAC7C;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,eAAe,QAAQ,OAAO,QAAQ,UAAU;AAElD,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,SAAS,eAAe,EAAE,OAAO,CAAC;AAEpE,YAAM,MAAM;AAAA,QACV,aAAa;AAAA,UACX;AAAA,UACA,eAAe;AAAA,UACf,WAAW,UAAU,SAAS;AAAA,UAC9B,QAAQ;AAAA,YACN,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,YACzB,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAEA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,WAAW;AAAA,MACtB;AAEA,aAAO,MAAM,OAAO;AAAA,QAClB;AAAA,UACE;AAAA,UACA,cAAc;AAAA,UACd,WAAW,UAAU,SAAS;AAAA,UAC9B,QAAQ;AAAA,YACN,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,YACzB,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,UAC3B;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF,WAAW,eAAe,QAAQ,OAAO,QAAQ,UAAU;AAEzD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,WAAW;AAAA,MACtB;AAEA,aAAO,MAAM,OAAO;AAAA,QAClB;AAAA,UACE;AAAA,UACA,cAAc;AAAA,UACd,WAAW,UAAU,SAAS;AAAA,UAC9B,QAAQ;AAAA,YACN,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,YACzB,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,UAC3B;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,MAAM,OAAO;AAAA,MAClB;AAAA,QACE;AAAA,QACA,cAAc;AAAA,QACd,WAAW,UAAU,SAAS;AAAA,QAC9B,QAAQ;AAAA,UACN,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,UACzB,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,QAC3B;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA,MAAM;AAAA,EACR,GAUG;AACD,UAAM,SAAS,MAAM,KAAK,SAAS,YAAY;AAAA,MAC7C;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,eAAe,QAAQ,OAAO,QAAQ,UAAU;AAElD,YAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,OAAO,YAAY;AAC/C,YAAM,iBAAiB,MAAM,KAAK,SAAS,eAAe,EAAE,OAAO,CAAC;AAEpE,YAAM,MAAM;AAAA,QACV,iBAAiB;AAAA,UACf;AAAA,UACA,eAAe;AAAA,UACf,WAAW,UAAU,SAAS;AAAA,UAC9B,QAAQ;AAAA,YACN,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,YACzB,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAEA,YAAM,gBAAgB,MAAM,eAAe;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,YACE,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,KAAK,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,OAAO,QAAQ,WAAW,MAAM;AACnD,YAAM,WAAW,0BAAS,WAAW,kBAAkB;AACvD,YAAM,oBAAgB;AAAA,QACpB,KAAK,MAAM,gBAAgB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,YAAM,WAAmB;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,KAAK,cAAc;AAAA,QACnB,SAAS,WAAW;AAAA,MACtB;AAEA,aAAO,MAAM,OAAO;AAAA,QAClB;AAAA,UACE;AAAA,UACA,cAAc;AAAA,UACd,WAAW,UAAU,SAAS;AAAA,UAC9B,QAAQ;AAAA,YACN,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,YACzB,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,UAC3B;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF,WAAW,eAAe,QAAQ,OAAO,QAAQ,UAAU;AAEzD,YAAM,WAAmB;AAAA,QACvB,GAAG;AAAA,QACH,SAAS,WAAW;AAAA,MACtB;AAEA,aAAO,MAAM,OAAO;AAAA,QAClB;AAAA,UACE;AAAA,UACA,cAAc;AAAA,UACd,WAAW,UAAU,SAAS;AAAA,UAC9B,QAAQ;AAAA,YACN,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,YACzB,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,UAC3B;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,MAAM,OAAO;AAAA,MAClB;AAAA,QACE;AAAA,QACA,cAAc;AAAA,QACd,WAAW,UAAU,SAAS;AAAA,QAC9B,QAAQ;AAAA,UACN,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,UACzB,GAAG,UAAU,CAAC,EAAE,SAAS;AAAA,QAC3B;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAIG;AACD,UAAM,SAAS,MAAM,KAAK,SAAS,YAAY;AAAA,MAC7C;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO,OAAO,MAAM,GAAG;AAAA,EACzB;AAAA,EAEA,MAAM,6BAA6B;AACjC,UAAM,aAAa,MAAM,KAAK,kBAAkB,eAAe;AAC/D,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAMG;AACD,UAAM,SAAS,MAAM,KAAK,SAAS,eAAe;AAAA,MAChD;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS;AACZ,iBAAW,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAAA,IAC5C;AAEA,UAAM,OAAyC;AAAA,MAC7C;AAAA,QACE,SAAS;AAAA,QACT,OAAO,6BAAmB,YAAY;AAAA,UACpC,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,KAAK,IAAI,YAAY,EAAE;AAAA,YACrB,KAAK;AAAA,cACH,YAAY;AAAA,gBACV,OAAO;AAAA,kBACL,YAAY,OAAO,0BAA0B;AAAA,gBAC/C;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,OAAO,6BAAmB,YAAY;AAAA,UACpC,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,KAAK,IAAI,YAAY,EAAE;AAAA,YACrB,KAAK;AAAA,cACH,YAAY;AAAA,gBACV,MAAM,CAAC;AAAA,cACT,CAAC;AAAA,YACH;AAAA,UACF;AAAA,UACA,OAAO;AAAA,YACL;AAAA,cACE,OAAO;AAAA,cACP;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI;AACF,YAAM,SAAS,MAAM,OAAO,iBAAiB,SAAS,MAAM,GAAG;AAC/D,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAKG;AACD,UAAM,SAAS,MAAM,KAAK,SAAS,eAAe;AAAA,MAChD;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS;AACZ,iBAAW,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAAA,IAC5C;AAEA,UAAM,OAAyC;AAAA,MAC7C;AAAA,QACE,SAAS;AAAA,QACT,OAAO,6BAAmB,YAAY;AAAA,UACpC,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,KAAK,IAAI,YAAY,EAAE;AAAA,YACrB,KAAK;AAAA,cACH,YAAY;AAAA,gBACV,UAAU,CAAC;AAAA,cACb,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,OAAO,6BAAmB,YAAY;AAAA,UACpC,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,KAAK,IAAI,YAAY,EAAE;AAAA,YACrB,KAAK;AAAA,cACH,YAAY;AAAA,gBACV,QAAQ,CAAC;AAAA,cACX,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI;AACF,YAAM,SAAS,MAAM,OAAO,iBAAiB,SAAS,MAAM,GAAG;AAC/D,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;AChoDO,IAAMC,cAAN,MAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BtB,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAiB;AACf,SAAK,SAAS;AACd,SAAK,UAAU;AACf,UAAM,gBAAgB,iBAAiB,OAAO;AAE9C,SAAK,cAAc,eAAe,cAAc;AAChD,SAAK,eAAe,gBAAgB,cAAc;AAClD,SAAK,cAAc,eAAe,cAAc;AAChD,SAAK,yBACH,0BAA0B,cAAc;AAC1C,SAAK,kBAAkB,mBAAmB,cAAc;AACxD,SAAK,cAAc,eAAe,cAAc;AAChD,SAAK,iBAAiB,kBAAkB,cAAc;AACtD,SAAK,aAAa,cAAc,cAAc;AAC9C,SAAK,eAAe,gBAAgB,cAAc;AAClD,SAAK,mBACH,oBAAoB,cAAc;AACpC,SAAK,yBACH,0BAA0B,cAAc;AAC1C,SAAK,cAAc,eAAe,WAAW;AAE7C,SAAK,OAAO,IAAI;AAAA,MACd,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AACA,SAAK,UAAU,IAAI,QAAQ;AAAA,MACzB,cAAc,KAAK;AAAA,MACnB,aAAa,KAAK;AAAA,MAClB,iBAAiB,KAAK;AAAA,MACtB,MAAM,KAAK;AAAA,IACb,CAAC;AACD,SAAK,WAAW,IAAI,SAAS;AAAA,MAC3B,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,iBAAiB,KAAK;AAAA,MACtB,aAAa,KAAK;AAAA,MAClB,gBAAgB,KAAK;AAAA,MACrB,YAAY,KAAK;AAAA,MACjB,cAAc,KAAK;AAAA,MACnB,kBAAkB,KAAK;AAAA,MACvB,wBAAwB,KAAK;AAAA,IAC/B,CAAC;AACD,SAAK,oBAAoB,IAAI,kBAAkB;AAAA,MAC7C,wBAAwB,KAAK;AAAA,MAC7B,MAAM,KAAK;AAAA,IACb,CAAC;AACD,SAAK,OAAO,IAAI,KAAK;AAAA,MACnB,UAAU,KAAK;AAAA,MACf,SAAS,KAAK;AAAA,MACd,mBAAmB,KAAK;AAAA,MACxB,aAAa,KAAK;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAAwB;AAChC,QAAI,QAAQ;AACV,aAAO;AAAA,IACT;AACA,QAAI,KAAK,QAAQ;AACf,aAAO,KAAK;AAAA,IACd;AACA,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AAAA,EAEA,iBAAiB;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAAgB;AACd,WAAO,KAAK,eAAe,KAAK,YAAY,MAAM;AAAA,EACpD;AAAA,EAEA,eAAe,QAAiB;AAC9B,WAAO,WAAW,UAAU,KAAK,YAAY,MAAM;AAAA,EACrD;AAAA,EAEA,iBAAiB,QAAyB;AACxC,WAAO,aAAa,OAAO,MAAM,CAAC;AAAA,EACpC;AAAA,EAEA,MAAM,WAAW,QAAwB;AACvC,UAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,KAAK,UAAU,MAAM,EAAE,YAAY;AAC/D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,EACF,GAGG;AACD,aAAS,KAAK,UAAU,MAAM;AAC9B,WAAO,MAAM,KAAK,SAAS,iBAAiB;AAAA,MAC1C;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,EACF,GAGG;AACD,aAAS,KAAK,UAAU,MAAM;AAC9B,WAAO,MAAM,KAAK,SAAS,eAAe,EAAE,QAAQ,gBAAgB,CAAC;AAAA,EACvE;AAAA,EAEA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,EACF,GAGG;AACD,aAAS,KAAK,UAAU,MAAM;AAC9B,WAAO,MAAM,KAAK,SAAS,WAAW,EAAE,QAAQ,gBAAgB,CAAC;AAAA,EACnE;AAAA,EAEA,MAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,EACF,GAGG;AACD,aAAS,KAAK,UAAU,MAAM;AAC9B,WAAO,MAAM,KAAK,SAAS,YAAY,EAAE,QAAQ,gBAAgB,CAAC;AAAA,EACpE;AAAA,EAEA,MAAM,iBAAiB,QAAgC;AACrD,WAAO,MAAM,KAAK,SAAS,iBAAiB;AAAA,MAC1C,QAAQ,KAAK,UAAU,OAAO,MAAM;AAAA,MACpC,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,QAA+B;AACnD,WAAO,MAAM,KAAK,SAAS,gBAAgB;AAAA,MACzC,QAAQ,KAAK,UAAU,OAAO,MAAM;AAAA,MACpC,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,sBAAsB,QAAqC;AAC/D,WAAO,MAAM,KAAK,SAAS,sBAAsB;AAAA,MAC/C,QAAQ,KAAK,UAAU,OAAO,MAAM;AAAA,MACpC,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,0BAA0B,QAAyC;AACvE,WAAO,MAAM,KAAK,SAAS,0BAA0B;AAAA,MACnD,QAAQ,KAAK,UAAU,OAAO,MAAM;AAAA,MACpC,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EACA,MAAM,uBAAuB,QAAyC;AACpE,WAAO,MAAM,KAAK,SAAS,uBAAuB;AAAA,MAChD,QAAQ,KAAK,UAAU,OAAO,MAAM;AAAA,MACpC,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,wBAAwB,QAAuC;AACnE,WAAO,MAAM,KAAK,SAAS,wBAAwB;AAAA,MACjD,QAAQ,KAAK,UAAU,OAAO,MAAM;AAAA,MACpC,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,EACF,IAGI,CAAC,GAAG;AACN,WAAO,MAAM,mBAAmB;AAAA,MAC9B,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AACD,WAAO,MAAM,KAAK,KAAK,eAAe;AAAA,MACpC,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKG;AACD,QAAI,gBAAgB,QAAW;AAC7B,oBAAc,KAAK;AAAA,IACrB;AAEA,QAAI,aAAa,QAAW;AAC1B,iBAAW,MAAM,KAAK,oBAAoB;AAAA,QACxC;AAAA,QACA,QAAQ,YAAY;AAAA,MACtB,CAAC;AAAA,IACH;AAEA,WAAO,MAAM,KAAK,KAAK,sBAAsB;AAAA,MAC3C,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,MAAM,KAAK,KAAK,oBAAoB;AAAA,MACzC;AAAA,MACA,QAAQ,UAAU,KAAK,YAAY;AAAA,IACrC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AACD,cAAU,MAAM,KAAK,WAAW,MAAM;AACtC,WAAO,MAAM,KAAK,KAAK,kBAAkB;AAAA,MACvC;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIqB;AACnB,QAAI,YAAY,QAAW;AACzB,gBAAU,MAAM,KAAK,WAAW,MAAM;AAAA,IACxC;AACA,WAAO,MAAM,KAAK,KAAK,YAAY;AAAA,MACjC;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,wBAAwB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAQoB;AAClB,aAAS,KAAK,UAAU,MAAM;AAC9B,QAAI,CAAC,SAAS;AACZ,gBAAU,MAAM,KAAK,WAAW,MAAM;AAAA,IACxC;AACA,WAAO,MAAM,KAAK,KAAK,wBAAwB;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AACD,aAAS,KAAK,UAAU,MAAM;AAC9B,QAAI,CAAC,SAAS;AACZ,gBAAU,MAAM,KAAK,WAAW,MAAM;AAAA,IACxC;AACA,WAAO,MAAM,KAAK,KAAK,cAAc;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,yBAAyB;AAAA,IAC7B;AAAA,IACA;AAAA,EACF,GAGmC;AACjC,WAAO,MAAM,KAAK,KAAK,yBAAyB;AAAA,MAC9C,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,OAAgB,OAAgB;AAC9C,UAAM,SAAS,MAAM,KAAK,QAAQ,UAAU,SAAS,IAAI,SAAS,EAAE;AAEpE,QAAI,gBAAgB,MAAM,GAAG;AAC3B,YAAM,IAAI;AAAA,QACR,yBAAyB,OAAO,IAAI,IAAI,OAAO,MAAM,OAAO;AAAA,MAC9D;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,EAAE,gBAAgB,GAAgC;AACnE,WAAO,MAAM,KAAK,KAAK,aAAa,EAAE,gBAAgB,CAAC;AAAA,EACzD;AAAA,EAEA,MAAM,oBAAoB,EAAE,gBAAgB,GAAgC;AAC1E,WAAO,MAAM,KAAK,KAAK,oBAAoB,EAAE,gBAAgB,CAAC;AAAA,EAChE;AAAA,EAEA,MAAM,eAAe,EAAE,gBAAgB,GAAgC;AACrE,WAAO,MAAM,KAAK,KAAK,eAAe,EAAE,gBAAgB,CAAC;AAAA,EAC3D;AAAA,EAEA,MAAM,oBAAoB;AAAA,IACxB;AAAA,EACF,GAKG;AACD,WAAO,MAAM,KAAK,KAAK,oBAAoB,EAAE,gBAAgB,CAAC;AAAA,EAChE;AAAA,EAEA,MAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,MAAM,KAAK,KAAK,oBAAoB;AAAA,MACzC;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,qBAAqB,EAAE,gBAAgB,GAAgC;AAC3E,WAAO,MAAM,KAAK,KAAK,qBAAqB,EAAE,gBAAgB,CAAC;AAAA,EACjE;AAAA,EAEA,iBACE,aACA,WACA,QACA,aACQ;AACR,WAAO,KAAK,KAAK;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,EAAE,gBAAgB,GAAgC;AACxE,WAAO,MAAM,KAAK,KAAK,kBAAkB,EAAE,gBAAgB,CAAC;AAAA,EAC9D;AAAA,EAEA,MAAM,yBAAyB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAK+B;AAC7B,WAAO,MAAM,KAAK,KAAK,yBAAyB;AAAA,MAC9C,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,EACF,GAWG;AACD,WAAO,MAAM,KAAK,KAAK,OAAO;AAAA,MAC5B,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KAAK;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,EACf,GAWG;AACD,WAAO,MAAM,KAAK,KAAK,KAAK;AAAA,MAC1B,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,GAOG;AACD,WAAO,MAAM,KAAK,KAAK,WAAW;AAAA,MAChC,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,MAAM,KAAK,KAAK,eAAe;AAAA,MACpC,aAAa,eAAe,KAAK;AAAA,MACjC;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAQG;AACD,WAAO,MAAM,KAAK,KAAK,UAAU;AAAA,MAC/B,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAIG;AACD,WAAO,MAAM,KAAK,KAAK,gBAAgB;AAAA,MACrC,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,6BAA6B;AACjC,WAAO,MAAM,KAAK,KAAK,2BAA2B;AAAA,EACpD;AAAA,EAEA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAMG;AACD,QAAI,CAAC,SAAS;AACZ,gBAAU,MAAM,KAAK,WAAW,MAAM;AAAA,IACxC;AACA,WAAO,MAAM,KAAK,KAAK,mBAAmB;AAAA,MACxC,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR,GAKG;AACD,QAAI,CAAC,SAAS;AACZ,gBAAU,MAAM,KAAK,WAAW,MAAM;AAAA,IACxC;AACA,WAAO,MAAM,KAAK,KAAK,oBAAoB;AAAA,MACzC,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,GAYG;AACD,WAAO,MAAM,KAAK,KAAK,UAAU;AAAA,MAC/B,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,GAWG;AACD,WAAO,MAAM,KAAK,KAAK,QAAQ;AAAA,MAC7B,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,uBAAuB,iBAAyB,QAAkB;AACtE,WAAO,MAAM,KAAK,QAAQ,uBAAuB,iBAAiB,MAAM;AAAA,EAC1E;AAAA,EAEA,MAAM,uBAAuB,iBAAyB;AACpD,WAAO,MAAM,KAAK,QAAQ,uBAAuB,eAAe;AAAA,EAClE;AAAA,EAEA,MAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,GAWG;AACD,WAAO,MAAM,KAAK,KAAK,cAAc;AAAA,MACnC,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,GAUG;AACD,WAAO,MAAM,KAAK,KAAK,aAAa;AAAA,MAClC,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,GAUG;AACD,WAAO,MAAM,KAAK,KAAK,gBAAgB;AAAA,MACrC,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":["MaciClient","signMessage","import_crypto_js","import_poseidon_cipher","import_ethers","import_baby_jubjub","import_eddsa_poseidon","import_ethers","import_assert","assert","assert","import_assert","assert","CryptoJS","SNARK_FIELD_SIZE","CryptoJS","signMessage","r","MaciCircuitType","MaciCertSystemType","MaciRoundType","import_stargate","import_stargate","round","MaciClient"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/libs/errors/index.ts","../src/libs/http/http.ts","../src/libs/errors/types.ts","../src/libs/query/account.ts","../src/libs/const.ts","../src/libs/query/circuit.ts","../src/utils/base64.ts","../src/utils/hex.ts","../src/utils/decode-address.ts","../src/voter.ts","../src/libs/keypairs/eddsa-poseidon/keypair.ts","../src/libs/cryptography/keypair.ts","../src/libs/cryptography/mnemonics.ts","../src/libs/keypairs/eddsa-poseidon/publickey.ts","../src/libs/cryptography/publickey.ts","../src/libs/crypto/keys.ts","../src/libs/crypto/bigintUtils.ts","../src/libs/crypto/hashing.ts","../src/libs/crypto/constants.ts","../src/libs/crypto/tree.ts","../src/libs/crypto/babyjub.ts","../src/libs/crypto/sign.ts","../src/libs/crypto/curve.ts","../src/libs/crypto/adapter.ts","../src/libs/crypto/rerandomize.ts","../src/libs/account/keypair.ts","../src/libs/account/crypto.ts","../src/libs/account/index.ts","../src/utils/account.ts","../src/utils/validate-address.ts","../src/libs/query/operator.ts","../src/libs/query/round.ts","../src/libs/query/transaction.ts","../src/libs/query/proof.ts","../src/libs/query/event.ts","../src/libs/indexer/indexer.ts","../src/libs/contract/config.ts","../src/libs/contract/ts/Maci.client.ts","../src/libs/contract/ts/AMaci.client.ts","../src/libs/contract/ts/Registry.client.ts","../src/libs/contract/ts/OracleMaci.client.ts","../src/libs/contract/ts/Saas.client.ts","../src/libs/contract/ts/ApiMaci.client.ts","../src/libs/contract/ts/ApiSaas.client.ts","../src/types/index.ts","../src/libs/contract/vars.ts","../src/libs/contract/utils.ts","../src/libs/contract/contract.ts","../src/libs/oracle-certificate/oracle-certificate.ts","../src/libs/maci/maci.ts","../src/maci.ts"],"sourcesContent":["// Core\nexport { MaciClient } from './maci';\nexport { VoterClient } from './voter';\nexport { Http } from './libs/http';\n\n// Query Types\nexport { Round, UserAccount, Circuit, Operator, Proof, Transaction } from './libs/query';\n\n// Crypto\nexport * from './libs/crypto';\n\n// Types\nexport * from './types';\nexport type * from './types';\n\n// Constants\nexport { circuits, getDefaultParams, type NetworkConfig } from './libs/const';\n\n// Utils\nexport { stringizing, destringizing, bigInt2Buffer } from './libs/crypto/bigintUtils';\nexport { isValidAddress } from './utils';\nexport { getAMaciRoundCircuitFee } from './libs/contract/utils';\n\nexport { EdDSAPoseidonKeypair, EdDSAPoseidonPublicKey } from './libs/keypairs/eddsa-poseidon';\n\nexport * from './utils';\n","export class BaseError extends Error {\n constructor(\n message: string,\n public code: number,\n public type: string\n ) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\nexport class HttpError extends BaseError {\n constructor(message: string, code: number) {\n super(message, code, 'ERROR_HTTP');\n }\n}\n\nexport class GraphQLError extends BaseError {\n constructor(message: string) {\n super(message, 400, 'ERROR_GRAPHQL');\n }\n}\n\nexport class ValidationError extends BaseError {\n constructor(message: string) {\n super(message, 400, 'ERROR_VALIDATION');\n }\n}\n\nexport class NotFoundError extends BaseError {\n constructor(message: string) {\n super(message, 404, 'ERROR_NOT_FOUND');\n }\n}\n\nexport class ParseError extends BaseError {\n constructor(message: string) {\n super(message, 500, 'ERROR_PARSE');\n }\n}\n\nexport type ErrorType =\n | BaseError\n | Error\n | HttpError\n | NotFoundError\n | ValidationError\n | ParseError\n | GraphQLError;\n\nexport function handleError(error: ErrorType) {\n if (!(error instanceof Error)) {\n return {\n code: 500,\n error: {\n message: 'Unknown error occurred',\n type: `ERROR_UNKNOWN`,\n },\n };\n }\n\n switch (true) {\n case error instanceof HttpError:\n return {\n code: (error as HttpError).code,\n error: {\n message: error.message,\n type: 'ERROR_HTTP',\n },\n };\n\n case error instanceof GraphQLError:\n return {\n code: 400,\n error: {\n message: error.message,\n type: 'ERROR_GRAPHQL',\n },\n };\n\n case error instanceof ValidationError:\n return {\n code: 400,\n error: {\n message: error.message,\n type: 'ERROR_VALIDATION',\n },\n };\n\n case error instanceof NotFoundError:\n return {\n code: 404,\n error: {\n message: error.message,\n type: 'ERROR_NOT_FOUND',\n },\n };\n\n case error instanceof ParseError:\n return {\n code: 500,\n error: {\n message: error.message,\n type: 'ERROR_PARSE',\n },\n };\n\n case error instanceof BaseError:\n return {\n code: (error as BaseError).code,\n error: {\n message: error.message,\n type: (error as BaseError).type,\n },\n };\n\n default:\n return {\n code: 500,\n error: {\n message: error.message || 'Internal server error',\n type: 'ERROR_UNKNOWN',\n },\n };\n }\n}\n","import { BaseError, HttpError, GraphQLError, ParseError } from '../errors';\n\nexport type FetchOptions = RequestInit & {\n next?: {\n revalidate?: boolean | number;\n };\n};\n\nexport class Http {\n private apiEndpoint: string;\n private restEndpoint: string;\n private defaultOptions?: FetchOptions;\n\n constructor(\n apiEndpoint: string,\n restEndpoint: string,\n private customFetch?: typeof fetch,\n defaultOptions?: FetchOptions\n ) {\n this.apiEndpoint = apiEndpoint;\n this.restEndpoint = restEndpoint;\n this.defaultOptions = defaultOptions;\n }\n\n private getFetch() {\n return this.customFetch || fetch;\n }\n\n async fetch(url: string, options?: any): Promise<Response> {\n try {\n const fetchFn = this.getFetch();\n const response = await fetchFn(url, {\n ...this.defaultOptions,\n ...options,\n });\n\n if (!response.ok) {\n throw new HttpError(\n `HTTP error! status: ${response.status}`,\n response.status\n );\n }\n\n return response;\n } catch (error) {\n if (error instanceof HttpError) {\n throw error;\n }\n throw new HttpError(`Failed to fetch: ${(error as Error).message}`, 500);\n }\n }\n\n async fetchGraphql<T>(\n query: string,\n after: string,\n limit: number | null = 10\n ): Promise<T> {\n try {\n const isFirstPage = after === 'first';\n const fetchFn = this.getFetch();\n\n const response = await fetchFn(this.apiEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify({\n query,\n variables: { limit, after: isFirstPage ? undefined : after },\n }),\n ...this.defaultOptions,\n });\n\n if (!response.ok) {\n const errorData = await response.json();\n\n if (errorData.errors?.[0]?.message?.includes('Syntax Error')) {\n throw new GraphQLError(\n `GraphQL syntax error: ${errorData.errors[0].message}`\n );\n }\n\n if (errorData.errors?.length > 0) {\n throw new GraphQLError(\n errorData.errors[0].message || 'Unknown GraphQL error'\n );\n }\n\n throw new HttpError(\n `HTTP error: ${JSON.stringify(errorData)}`,\n response.status\n );\n }\n\n const data = await response.json();\n\n if (data.errors) {\n throw new GraphQLError(\n data.errors[0]?.message || 'GraphQL query failed'\n );\n }\n\n return data;\n } catch (error) {\n if (error instanceof BaseError) {\n throw error;\n }\n if (error instanceof SyntaxError) {\n throw new ParseError('Failed to parse JSON response');\n }\n throw new HttpError(\n `Failed to fetch GraphQL: ${(error as Error).message}`,\n 500\n );\n }\n }\n\n async fetchRest(path: string, options?: any): Promise<any> {\n try {\n const fetchFn = this.getFetch();\n const response = await fetchFn(`${this.restEndpoint}${path}`, {\n ...this.defaultOptions,\n ...options,\n });\n\n if (!response.ok) {\n throw new HttpError(\n `HTTP error! status: ${response.status}`,\n response.status\n );\n }\n\n try {\n return await response.json();\n } catch (error) {\n throw new ParseError('Failed to parse JSON response');\n }\n } catch (error) {\n if (error instanceof BaseError) {\n throw error;\n }\n throw new HttpError(\n `Failed to fetch REST: ${(error as Error).message}`,\n 500\n );\n }\n }\n\n async fetchAllGraphqlPages<T>(query: string, variables: any): Promise<T[]> {\n let hasNextPage = true;\n let offset = 0;\n const limit = 100; // Adjust the limit as needed\n const allData: T[] = [];\n\n while (hasNextPage) {\n const response = await this.fetch(this.apiEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify({\n query,\n variables: { ...variables, limit, offset },\n }),\n }).then((res) => res.json());\n\n const key = Object.keys(response.data)[0];\n\n const { nodes, pageInfo } = response.data[key];\n allData.push(...nodes);\n hasNextPage = pageInfo.hasNextPage;\n offset += limit;\n }\n\n return allData;\n }\n}\n","export const ERROR = {\n ERROR_ADDRESS_NOT_FOUND: 'ERROR_ADDRESS_NOT_FOUND',\n ERROR_CIRCUIT_NOT_FOUND: 'ERROR_CIRCUIT_NOT_FOUND',\n ERROR_OPERATOR_INVALID_ADDRESS: 'ERROR_OPERATOR_INVALID_ADDRESS',\n ERROR_OPERATOR_NOT_FOUND: 'ERROR_OPERATOR_NOT_FOUND',\n ERROR_OPERATOR_DELAY_HISTORY_NOT_FOUND:\n 'ERROR_OPERATOR_DELAY_HISTORY_NOT_FOUND',\n ERROR_QUERY_MISS_RATE_FAILED: 'ERROR_QUERY_MISS_RATE_FAILED',\n ERROR_OPERATORS_NOT_FOUND: 'ERROR_OPERATORS_NOT_FOUND',\n ERROR_PROOF_NOT_FOUND: 'ERROR_PROOF_NOT_FOUND',\n ERROR_ROUND_INVALID_ADDRESS: 'ERROR_ROUND_INVALID_ADDRESS',\n ERROR_ROUND_INVALID_STATUS: 'ERROR_ROUND_INVALID_STATUS',\n ERROR_ROUND_NOT_FOUND: 'ERROR_ROUND_NOT_FOUND',\n ERROR_ROUNDS_NOT_FOUND: 'ERROR_ROUNDS_NOT_FOUND',\n ERROR_TRANSACTION_NOT_FOUND: 'ERROR_TRANSACTION_NOT_FOUND',\n ERROR_TRANSACTIONS_NOT_FOUND: 'ERROR_TRANSACTIONS_NOT_FOUND',\n ERROR_SIGN_UP_EVENTS_NOT_FOUND: 'ERROR_SIGN_UP_EVENTS_NOT_FOUND',\n ERROR_INVALID_FIELDS: 'ERROR_INVALID_FIELDS',\n ERROR_CLAIM_INFOS_NOT_FOUND: 'ERROR_CLAIM_INFOS_NOT_FOUND',\n} as const;\n","import { Http } from '../http';\nimport { BalanceResponse } from '../../types';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class UserAccount {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async balanceOf(address: string): Promise<BalanceResponse> {\n try {\n const path = `/cosmos/bank/v1beta1/balances/${address}/by_denom?denom=peaka`;\n const data = await this.http.fetchRest(path);\n\n if (data['code'] === undefined) {\n const response: BalanceResponse = {\n code: 200,\n data: {\n balance: data['balance']['amount'],\n },\n };\n return response;\n } else {\n return {\n code: 404,\n error: {\n message: 'Address not found',\n type: ERROR.ERROR_ADDRESS_NOT_FOUND,\n },\n };\n }\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import type { CircuitType } from '../types';\n\nexport const circuits: Record<string, CircuitType> = {\n 'maci-1p1v': {\n maciType: 'MACI',\n circuitType: '1p1v',\n displayName: 'MACI-1p1v',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/maci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n 'maci-qv': {\n maciType: 'MACI',\n circuitType: 'QV',\n displayName: 'MACI-QV',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/maci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n 'amaci-1p1v': {\n maciType: 'aMACI',\n circuitType: '1p1v',\n displayName: 'aMACI-1p1v',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/amaci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n 'amaci-qv': {\n maciType: 'aMACI',\n circuitType: 'QV',\n displayName: 'aMACI-QV',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/amaci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n};\n\nexport const validator_operator_set = {\n doravaloper12yk434ut3un4wx0rult2aww89rsrel8nhmp387: {\n operator_address: '',\n account_address: 'dora12yk434ut3un4wx0rult2aww89rsrel8nydy83p',\n allocation: '22571615985356796592128',\n allocation_dora: 22571.615985356795,\n moniker: '𝐥𝐞𝐬𝐧𝐢𝐤 | 𝐔𝐓𝐒𝐀',\n program_voting_power: 0.06432895760166438,\n tokens: '200731587709257889972292',\n },\n doravaloper15frh0nn3v4yp3vv6sk4pn6jg9l8rt82f7uqfk5: {\n operator_address: '',\n account_address: 'dora15frh0nn3v4yp3vv6sk4pn6jg9l8rt82fd29lqt',\n allocation: '33745159209325474873344',\n allocation_dora: 33745.15920932547,\n moniker: 'NomadValidator',\n program_voting_power: 0.09617348254756773,\n tokens: '300099000000000000000000',\n },\n doravaloper1ddewp74vd2w8jhth2p0uazmc8ajgtcuf3ntqgn: {\n operator_address: '',\n account_address: 'dora1ddewp74vd2w8jhth2p0uazmc8ajgtcufz9wk7v',\n allocation: '40789397021635754590208',\n allocation_dora: 40789.397021635756,\n moniker: 'polkachu.com',\n program_voting_power: 0.11624951413777938,\n tokens: '362744095556470434789338',\n },\n doravaloper1gh8j89jtc2vx6d3y4ehllcdlvluwa49w6xmjsm: {\n operator_address: '',\n account_address: 'dora1gh8j89jtc2vx6d3y4ehllcdlvluwa49wfs7yxy',\n allocation: '33743029941764137943040',\n allocation_dora: 33743.029941764136,\n moniker: 'ITRocket',\n program_voting_power: 0.09616741414897524,\n tokens: '300080064215405665352721',\n },\n doravaloper1j8ru7p8zctup6grfwuga6ndrjj7v88wzn407x7: {\n operator_address: '',\n account_address: 'dora1j8ru7p8zctup6grfwuga6ndrjj7v88wzqr2gsp',\n allocation: '22646525272055477174272',\n allocation_dora: 22646.525272055478,\n moniker: 'StakeUs',\n program_voting_power: 0.06454244857772638,\n tokens: '201397763319500000000000',\n },\n doravaloper1l5zz0kkjt2n7nllsrymy96mc2v2gehda0zc85s: {\n operator_address: '',\n account_address: 'dora1l5zz0kkjt2n7nllsrymy96mc2v2gehdau5a3z0',\n allocation: '22622846742220005965824',\n allocation_dora: 22622.846742220005,\n moniker: 'BlackNodes',\n program_voting_power: 0.06447496492290769,\n tokens: '201187187838702364379121',\n },\n doravaloper1m9v3txhhtadjxpv09gwjhhs344qsxgfscwxjkg: {\n operator_address: '',\n account_address: 'dora1m9v3txhhtadjxpv09gwjhhs344qsxgfstcryqh',\n allocation: '22549006983854435598336',\n allocation_dora: 22549.006983854437,\n moniker: '👋 79anvi 🍀',\n program_voting_power: 0.06426452209558432,\n tokens: '200530523648490887200824',\n },\n doravaloper1tu8006g60t62zwgwf5knkaujv0uzhp2a6wh94h: {\n operator_address: '',\n account_address: 'dora1tu8006g60t62zwgwf5knkaujv0uzhp2afcjnrg',\n allocation: '39369183740744815345664',\n allocation_dora: 39369.18374074482,\n moniker: 'Citadel.one',\n program_voting_power: 0.11220191559671686,\n tokens: '350114000000000000000000',\n },\n doravaloper1x5z0tkafrgyeuqkrwfjr933vghjxchqnqlhcdw: {\n operator_address: '',\n account_address: 'dora1x5z0tkafrgyeuqkrwfjr933vghjxchqnnfjwm3',\n allocation: '22611521290904268701696',\n allocation_dora: 22611.521290904268,\n moniker: '1ce',\n program_voting_power: 0.064442687460896,\n tokens: '201086469492900000000000',\n },\n doravaloper1z6kfew2nhuh02szc2hdecw4fqey2d32auucvux: {\n operator_address: '',\n account_address: 'dora1z6kfew2nhuh02szc2hdecw4fqey2d32a02a62e',\n allocation: '45246951843662957379584',\n allocation_dora: 45246.95184366296,\n moniker: 'Nodes.Guru',\n program_voting_power: 0.12895351616135226,\n tokens: '402385566389000000000006',\n },\n doravaloper1zzne8ufazycklx4j6mgc987t8ykd6wxu63223v: {\n operator_address: '',\n account_address: 'dora1zzne8ufazycklx4j6mgc987t8ykd6wxu63223v',\n allocation: '44982761968475888943104',\n allocation_dora: 44982.76196847589,\n moniker: 'ZKV',\n program_voting_power: 0.12820057674882976,\n tokens: '400036100000000000000000',\n },\n};\n\nexport interface NetworkConfig {\n network: string;\n chainId: string;\n rpcEndpoint: string;\n restEndpoint: string;\n apiEndpoint: string;\n certificateApiEndpoint: string;\n registryAddress: string;\n saasAddress: string;\n apiSaasAddress: string;\n maciCodeId: number;\n oracleCodeId: number;\n oracleWhitelistBackendPubkey: string;\n oracleFeegrantOperator: string;\n oracleCodeIds: string[];\n}\n\nexport function getDefaultParams(\n network: 'mainnet' | 'testnet' = 'mainnet'\n): NetworkConfig {\n switch (network) {\n case 'mainnet':\n return {\n network: 'mainnet',\n chainId: 'vota-ash',\n rpcEndpoint: 'https://vota-rpc.dorafactory.org',\n restEndpoint: 'https://vota-rest.dorafactory.org',\n apiEndpoint: 'https://vota-api.dorafactory.org',\n certificateApiEndpoint:\n 'https://vota-certificate-api.dorafactory.org/api/v1',\n registryAddress:\n 'dora1smg5qp5trjdkcekdjssqpjehdjf6n4cjss0clyvqcud3t3u3948s8rmgg4',\n saasAddress:\n 'dora1ksxvvve2nsw5uyvg7y6lnnxcqxadjepc78z0qa8enm5zhayxaqgqpsewf8',\n apiSaasAddress:\n 'dora1ksxvvve2nsw5uyvg7y6lnnxcqxadjepc78z0qa8enm5zhayxaqgqpsewf8',\n maciCodeId: 106,\n // oracleCodeId: 116,// 9-4-3-625\n oracleCodeId: 119, // 6-3-3-125\n oracleWhitelistBackendPubkey:\n 'A61YtCv2ibMZmDeM02nEElil8wlHx1tLKogBk5dPgf/Q',\n oracleFeegrantOperator: 'dora16s9tljk8dy9ae335yvyzlm8gvkypx9228q8pq8',\n oracleCodeIds: ['101', '116', '117', '119'],\n };\n case 'testnet':\n return {\n network: 'testnet',\n chainId: 'vota-testnet',\n rpcEndpoint: 'https://vota-testnet-rpc.dorafactory.org',\n restEndpoint: 'https://vota-testnet-rest.dorafactory.org',\n apiEndpoint: 'https://vota-testnet-api.dorafactory.org',\n certificateApiEndpoint:\n 'https://vota-testnet-certificate-api.dorafactory.org/api/v1',\n registryAddress:\n 'dora13c8aecstyxrhax9znvvh5zey89edrmd2k5va57pxvpe3fxtfsfeqlhsjnd',\n saasAddress:\n 'dora1dgnszrwnwxgr5djprrr6w4q45z8s3ghsew869g6tlp4ruqah39nqnemjya',\n apiSaasAddress:\n 'dora16xj2yrh3snq8f2qvma9uzjd5m2qgvzaqjcqmeuweh73t29c4rhusxm9hq6',\n maciCodeId: 134,\n // oracleCodeId: 113, // 9-4-3-625\n oracleCodeId: 123, // 6-3-3-125\n oracleWhitelistBackendPubkey:\n 'AoYo/zENN/JquagPdG0/NMbWBBYxOM8BVN677mBXJKJQ',\n oracleFeegrantOperator: 'dora1xp0twdzsdeq4qg3c64v66552deax8zmvq4zw78',\n oracleCodeIds: ['102', '105', '108', '110', '113', '115', '123'],\n };\n }\n}\n","import { Http } from '../../libs';\nimport {\n CircuitResponse,\n CircuitsCountGraphqlResponse,\n CircuitType,\n CircuitsResponse,\n} from '../../types';\nimport { circuits } from '../const';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Circuit {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getCircuitByName(name: string): Promise<CircuitResponse> {\n try {\n const circuitName = name;\n const circuitData: CircuitType = circuits[circuitName];\n\n if (circuitData === undefined) {\n return {\n code: 404,\n error: {\n message: `Circuit ${circuitName} not found`,\n type: ERROR.ERROR_CIRCUIT_NOT_FOUND,\n },\n };\n }\n\n const CIRCUIT_ROUNDS_COUNT_QUERY = `\n query {\n rounds(filter: { circuitName: { equalTo: \"${circuitData.displayName}\" } }) {\n totalCount\n }\n }\n `;\n const circuitRoundsCountResponse =\n await this.http.fetchGraphql<CircuitsCountGraphqlResponse>(\n CIRCUIT_ROUNDS_COUNT_QUERY,\n ''\n );\n\n circuitData.roundCount =\n circuitRoundsCountResponse.data.rounds.totalCount;\n\n const response: CircuitResponse = {\n code: 200,\n data: {\n circuit: circuitData,\n },\n };\n\n return response;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getCircuits(): Promise<CircuitsResponse> {\n try {\n const circuitsArray: CircuitType[] = Object.values(circuits).sort(\n (a, b) => a.displayName.localeCompare(b.displayName)\n );\n\n const circuitsWithRoundCount = await Promise.all(\n circuitsArray.map(async (circuit) => {\n const CIRCUIT_ROUNDS_COUNT_QUERY = `\n query {\n rounds(filter: { circuitName: { equalTo: \"${circuit.displayName}\" } }) {\n totalCount\n }\n }\n `;\n const circuitRoundsCountResponse: CircuitsCountGraphqlResponse =\n await this.http.fetchGraphql(CIRCUIT_ROUNDS_COUNT_QUERY, '');\n return {\n ...circuit,\n roundCount: circuitRoundsCountResponse.data.rounds.totalCount,\n };\n })\n );\n\n const response: CircuitsResponse = {\n code: 200,\n data: {\n circuits: circuitsWithRoundCount,\n },\n };\n\n return response;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","// Copyright (c) Dorafactory, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport function fromBase64(base64String: string): Uint8Array {\n\treturn Uint8Array.from(atob(base64String), char => char.charCodeAt(0));\n}\n\nconst CHUNK_SIZE = 8192;\nexport function toBase64(bytes: Uint8Array): string {\n\t// Special-case the simple case for speed's sake.\n\tif (bytes.length < CHUNK_SIZE) {\n\t\treturn btoa(String.fromCharCode(...bytes));\n\t}\n\n\tlet output = '';\n\tfor (var i = 0; i < bytes.length; i += CHUNK_SIZE) {\n\t\tconst chunk = bytes.slice(i, i + CHUNK_SIZE);\n\t\toutput += String.fromCharCode(...chunk);\n\t}\n\n\treturn btoa(output);\n}\n\n/** @deprecated use toBase64 instead */\nexport const toB64 = toBase64;\n\n/** @deprecated use fromBase64 instead */\nexport const fromB64 = fromBase64;\n","// Copyright (c) Dorafactory, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport function fromHex(hexStr: string): Uint8Array {\n\tconst normalized = hexStr.startsWith('0x') ? hexStr.slice(2) : hexStr;\n\tconst padded = normalized.length % 2 === 0 ? normalized : `0${normalized}}`;\n\tconst intArr = padded.match(/.{2}/g)?.map(byte => parseInt(byte, 16)) ?? [];\n\n\treturn Uint8Array.from(intArr);\n}\n\nexport function toHex(bytes: Uint8Array): string {\n\treturn bytes.reduce(\n\t\t(str, byte) => str + byte.toString(16).padStart(2, '0'),\n\t\t''\n\t);\n}\n\n/** @deprecated use toHex instead */\nexport const toHEX = toHex;\n\n/** @deprecated use fromHex instead */\nexport const fromHEX = fromHex;\n","import { sha256 } from '@noble/hashes/sha256';\n\n/**\n * Convert a contract address to Uint256 format.\n * This replicates the exact logic from the Rust code:\n * Use SHA256 hash + reverse bytes order.\n */\nexport function addressToUint256(address: string): bigint {\n\t// Convert address string to bytes\n\tconst addressBytes = new TextEncoder().encode(address);\n\n\t// Use SHA256 hash to convert the address to a fixed-length 32-byte format\n\tconst hashResult = sha256(addressBytes);\n\n\t// Convert bytes to Uint256 (big-endian) with reversal like Rust code\n\tconst uint256Bytes = new Uint8Array(32);\n\tfor (let i = 0; i < hashResult.length && i < 32; i++) {\n\t\tuint256Bytes[31 - i] = hashResult[i]; // Reverse for little-endian to big-endian conversion\n\t}\n\n\t// Convert bytes to Uint256 (big-endian)\n\tlet result = 0n;\n\tfor (let i = 0; i < uint256Bytes.length; i++) {\n\t\tresult = (result << 8n) + BigInt(uint256Bytes[i]);\n\t}\n\n\treturn result;\n}\n\n/**\n * Convert bigint to hex string.\n */\nexport function bigintToHex(value: bigint): string {\n\treturn '0x' + value.toString(16).padStart(64, '0');\n}\n","import CryptoJS from 'crypto-js';\nimport { solidityPackedSha256 } from 'ethers';\nimport { groth16, ZKArtifact } from 'snarkjs';\n\nimport { MaciAccount } from './libs/account';\nimport {\n packPubKey,\n unpackPubKey,\n genEcdhSharedKey,\n genKeypair,\n genRandomSalt,\n rerandomize,\n Tree,\n stringizing,\n SNARK_FIELD_SIZE,\n adaptToUncompressed\n} from './libs/crypto';\nimport { poseidon } from './libs/crypto/hashing';\nimport { poseidonEncrypt } from '@zk-kit/poseidon-cipher';\nimport { VoterClientParams, DerivePathParams, PubKey, PrivKey, DeactivateMessage } from './types';\n\n/**\n * @class Maci Voter Client\n * @description This class is used to interact with Maci Voter Client.\n */\nexport class VoterClient {\n public accountManager: MaciAccount;\n\n /**\n * @constructor\n * @param {VoterClientParams} params - The parameters for the Maci Voter Client instance.\n */\n constructor({ mnemonic, secretKey }: VoterClientParams = {}) {\n this.accountManager = new MaciAccount({ mnemonic, secretKey });\n }\n\n /**\n * else:\n * it will generate signer from the mnemonic with the given derivePathParams.\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getSigner(derivePathParams?: DerivePathParams) {\n return this.accountManager.getKeyPair(derivePathParams);\n }\n\n packMaciPubkey(pubkey?: PubKey) {\n return packPubKey(pubkey || this.accountManager.currentPubkey.toPoints());\n }\n\n unpackMaciPubkey(pubkey: bigint | string) {\n return unpackPubKey(BigInt(pubkey));\n }\n\n getPubkey(derivePathParams?: DerivePathParams) {\n return this.accountManager.getKeyPair(derivePathParams).getPublicKey();\n }\n\n buildVotePayload({\n stateIdx,\n operatorPubkey,\n selectedOptions,\n derivePathParams\n }: {\n stateIdx: number;\n operatorPubkey: bigint;\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n derivePathParams?: DerivePathParams;\n }) {\n // Check for duplicate options\n const idxSet = new Set();\n for (const option of selectedOptions) {\n if (idxSet.has(option.idx)) {\n throw new Error(`Duplicate option index (${option.idx}) is not allowed`);\n }\n idxSet.add(option.idx);\n }\n\n // Filter and sort options\n const options = selectedOptions.filter((o) => !!o.vc).sort((a, b) => a.idx - b.idx);\n\n const plan = options.map((o) => {\n return [o.idx, o.vc] as [number, number];\n });\n\n const payload = this.batchGenMessage(stateIdx, operatorPubkey, plan, derivePathParams);\n\n return stringizing(payload);\n }\n\n batchGenMessage(\n stateIdx: number,\n operatorPubkey: bigint,\n plan: [number, number][],\n derivePathParams?: DerivePathParams\n ) {\n const genMessage = this.genMessageFactory(stateIdx, operatorPubkey, derivePathParams);\n\n const payload = [];\n for (let i = plan.length - 1; i >= 0; i--) {\n const p = plan[i];\n const encAccount = genKeypair();\n const msg = genMessage(BigInt(encAccount.privKey), i + 1, p[0], p[1], i === plan.length - 1);\n\n payload.push({\n msg,\n encPubkeys: encAccount.pubKey\n });\n }\n\n return payload;\n }\n\n genMessageFactory(\n stateIdx: number,\n operatorPubkey: bigint,\n // signPriKey: PrivKey,\n // signPubKey: PubKey,\n // coordPubKey: PubKey,\n derivePathParams?: DerivePathParams\n ) {\n return (\n encPriKey: PrivKey,\n nonce: number,\n voIdx: number,\n newVotes: number,\n isLastCmd: boolean,\n salt?: bigint\n ): bigint[] => {\n if (!salt) {\n // uint56\n salt = BigInt(`0x${CryptoJS.lib.WordArray.random(7).toString(CryptoJS.enc.Hex)}`);\n }\n\n const packaged =\n BigInt(nonce) +\n (BigInt(stateIdx) << 32n) +\n (BigInt(voIdx) << 64n) +\n (BigInt(newVotes) << 96n) +\n (BigInt(salt) << 192n);\n\n const signer = this.getSigner(derivePathParams);\n\n let newPubKey = [...signer.getPublicKey().toPoints()];\n if (isLastCmd) {\n newPubKey = [0n, 0n];\n }\n\n const hash = poseidon([packaged, ...newPubKey]);\n // const signature = signMessage(bigInt2Buffer(signPriKey), hash);\n const signature = signer.sign(hash);\n\n const command = [packaged, ...newPubKey, ...signature.R8, signature.S];\n const coordPubkey = this.unpackMaciPubkey(operatorPubkey);\n\n const message = poseidonEncrypt(command, genEcdhSharedKey(encPriKey, coordPubkey), 0n);\n\n return message;\n };\n }\n\n async buildAddNewKeyPayload({\n stateTreeDepth,\n operatorPubkey,\n deactivates,\n wasmFile,\n zkeyFile,\n derivePathParams\n }: {\n stateTreeDepth: number;\n operatorPubkey: bigint;\n deactivates: DeactivateMessage[];\n wasmFile: ZKArtifact;\n zkeyFile: ZKArtifact;\n derivePathParams?: DerivePathParams;\n }): Promise<{\n proof: {\n a: string;\n b: string;\n c: string;\n };\n d: string[];\n nullifier: string;\n }> {\n const [coordPubkeyX, coordPubkeyY] = this.unpackMaciPubkey(operatorPubkey);\n // const stateTreeDepth = Number(circuitPower.split('-')[0]);\n const addKeyInput = await this.genAddKeyInput(stateTreeDepth + 2, {\n coordPubKey: [coordPubkeyX, coordPubkeyY],\n deactivates: deactivates.map((d: any) => d.map(BigInt)),\n derivePathParams\n });\n\n if (addKeyInput === null) {\n throw Error('genAddKeyInput failed');\n }\n\n // 1. generate proof\n const { proof } = await groth16.fullProve(addKeyInput, wasmFile, zkeyFile);\n\n // 2. compress proof to vote proof\n const proofHex = await adaptToUncompressed(proof);\n\n // 3. send addNewKey tx\n return {\n proof: proofHex,\n d: [\n addKeyInput.d1[0].toString(),\n addKeyInput.d1[1].toString(),\n addKeyInput.d2[0].toString(),\n addKeyInput.d2[1].toString()\n ],\n nullifier: addKeyInput.nullifier.toString()\n };\n }\n\n async buildPreAddNewKeyPayload({\n stateTreeDepth,\n operatorPubkey,\n deactivates,\n wasmFile,\n zkeyFile,\n derivePathParams\n }: {\n stateTreeDepth: number;\n operatorPubkey: bigint;\n deactivates: bigint[][];\n wasmFile: ZKArtifact;\n zkeyFile: ZKArtifact;\n derivePathParams?: DerivePathParams;\n }): Promise<{\n proof: {\n a: string;\n b: string;\n c: string;\n };\n d: string[];\n nullifier: string;\n }> {\n const [coordPubkeyX, coordPubkeyY] = this.unpackMaciPubkey(operatorPubkey);\n // const stateTreeDepth = Number(circuitPower.split('-')[0]);\n const addKeyInput = await this.genPreAddKeyInput(stateTreeDepth + 2, {\n coordPubKey: [coordPubkeyX, coordPubkeyY],\n deactivates: deactivates.map((d: any) => d.map(BigInt)),\n derivePathParams\n });\n\n if (addKeyInput === null) {\n throw Error('genPreAddKeyInput failed, cannot find deactivate idx');\n }\n\n // 1. generate proof\n const { proof } = await groth16.fullProve(addKeyInput, wasmFile, zkeyFile);\n\n // 2. compress proof to vote proof\n const proofHex = await adaptToUncompressed(proof);\n\n // 3. send addNewKey tx\n return {\n proof: proofHex,\n d: [\n addKeyInput.d1[0].toString(),\n addKeyInput.d1[1].toString(),\n addKeyInput.d2[0].toString(),\n addKeyInput.d2[1].toString()\n ],\n nullifier: addKeyInput.nullifier.toString()\n };\n }\n\n async genAddKeyInput(\n depth: number,\n {\n coordPubKey,\n deactivates,\n derivePathParams\n }: {\n coordPubKey: PubKey;\n deactivates: bigint[][];\n derivePathParams?: DerivePathParams;\n }\n ) {\n const signer = this.getSigner(derivePathParams);\n\n const sharedKeyHash = poseidon(signer.genEcdhSharedKey(coordPubKey));\n\n const randomVal = genRandomSalt();\n const deactivateIdx = deactivates.findIndex((d) => d[4] === sharedKeyHash);\n if (deactivateIdx < 0) {\n return null;\n }\n\n const deactivateLeaf = deactivates[deactivateIdx];\n\n const c1 = [deactivateLeaf[0], deactivateLeaf[1]];\n const c2 = [deactivateLeaf[2], deactivateLeaf[3]];\n\n const { d1, d2 } = rerandomize(coordPubKey, { c1, c2 }, randomVal);\n\n const nullifier = poseidon([signer.getFormatedPrivKey(), 1444992409218394441042n]);\n\n const tree = new Tree(5, depth, 0n);\n const leaves = deactivates.map((d) => poseidon(d));\n tree.initLeaves(leaves);\n\n const deactivateRoot = tree.root;\n const deactivateLeafPathElements = tree.pathElementOf(deactivateIdx);\n\n const inputHash =\n BigInt(\n solidityPackedSha256(\n new Array(7).fill('uint256'),\n stringizing([\n deactivateRoot,\n poseidon(coordPubKey),\n nullifier,\n d1[0],\n d1[1],\n d2[0],\n d2[1]\n ]) as string[]\n )\n ) % SNARK_FIELD_SIZE;\n\n const input = {\n inputHash,\n coordPubKey,\n deactivateRoot,\n deactivateIndex: deactivateIdx,\n deactivateLeaf: poseidon(deactivateLeaf),\n c1,\n c2,\n randomVal,\n d1,\n d2,\n deactivateLeafPathElements,\n nullifier,\n oldPrivateKey: signer.getFormatedPrivKey()\n };\n\n return input;\n }\n\n async genPreAddKeyInput(\n depth: number,\n {\n coordPubKey,\n deactivates,\n derivePathParams\n }: {\n coordPubKey: PubKey;\n deactivates: bigint[][];\n derivePathParams?: DerivePathParams;\n }\n ) {\n const signer = this.getSigner(derivePathParams);\n\n const sharedKeyHash = poseidon(signer.genEcdhSharedKey(coordPubKey));\n\n const randomVal = genRandomSalt();\n const deactivateIdx = deactivates.findIndex((d) => d[4] === sharedKeyHash);\n if (deactivateIdx < 0) {\n return null;\n }\n\n const deactivateLeaf = deactivates[deactivateIdx];\n\n const c1: [bigint, bigint] = [deactivateLeaf[0], deactivateLeaf[1]];\n const c2: [bigint, bigint] = [deactivateLeaf[2], deactivateLeaf[3]];\n\n const { d1, d2 } = rerandomize(coordPubKey, { c1, c2 }, randomVal);\n\n const nullifier = poseidon([signer.getFormatedPrivKey(), 1444992409218394441042n]);\n\n const tree = new Tree(5, depth, 0n);\n const leaves = deactivates.map((d) => poseidon(d));\n tree.initLeaves(leaves);\n\n const deactivateRoot = tree.root;\n const deactivateLeafPathElements = tree.pathElementOf(deactivateIdx);\n\n const inputHash =\n BigInt(\n solidityPackedSha256(\n new Array(7).fill('uint256'),\n stringizing([\n deactivateRoot,\n poseidon(coordPubKey),\n nullifier,\n d1[0],\n d1[1],\n d2[0],\n d2[1]\n ]) as string[]\n )\n ) % SNARK_FIELD_SIZE;\n\n const input = {\n inputHash,\n coordPubKey,\n deactivateRoot,\n deactivateIndex: deactivateIdx,\n deactivateLeaf: poseidon(deactivateLeaf),\n c1,\n c2,\n randomVal,\n d1,\n d2,\n deactivateLeafPathElements,\n nullifier,\n oldPrivateKey: signer.getFormatedPrivKey()\n };\n\n return input;\n }\n\n async buildDeactivatePayload({\n stateIdx,\n operatorPubkey,\n derivePathParams\n }: {\n stateIdx: number;\n operatorPubkey: bigint;\n derivePathParams?: DerivePathParams;\n }) {\n const payload = this.batchGenMessage(stateIdx, operatorPubkey, [[0, 0]], derivePathParams);\n return stringizing(payload[0]);\n }\n}\n","/**\n * @file EdDSA-Poseidon Keypair Implementation\n * @description This module provides a complete implementation of EdDSA-Poseidon keypairs\n * for use in zero-knowledge proof systems and MACI (Minimal Anti-Collusion Infrastructure).\n *\n * The EdDSA-Poseidon signature scheme combines:\n * - Edwards-curve Digital Signature Algorithm (EdDSA) for efficient elliptic curve cryptography\n * - Poseidon hash function for ZK-SNARK friendly hashing\n * - BIP-32 hierarchical deterministic key derivation\n * - Support for both JSON payload signing and ZK-optimized credential signing\n *\n * Key features:\n * - Random keypair generation\n * - Keypair derivation from mnemonic phrases\n * - Keypair reconstruction from secret keys\n * - Multiple signing methods for different use cases\n * - Comprehensive input validation and error handling\n *\n * @author MACI Team\n * @version 1.0.0\n */\n\n// Hash function imports for blake2b hashing algorithm\nimport { blake2b } from '@noble/hashes/blake2b';\n// Utility functions for converting between bytes and hex strings\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils';\n// HD (Hierarchical Deterministic) key derivation functionality\nimport { HDKey } from '@scure/bip32';\n// SHA-256 hash function for secure hashing\nimport { sha256 } from '@noble/hashes/sha256';\n\n// EdDSA-Poseidon cryptographic functions from zk-kit\nimport {\n\tderivePublicKey,\n\tsignMessage,\n\tderiveSecretScalar,\n\tverifySignature,\n\tpackSignature,\n\t// packPublicKey, // Commented out - not currently used\n} from '@zk-kit/eddsa-poseidon';\n\n// Base keypair class and related cryptographic utilities\nimport { Keypair } from '../../cryptography/keypair';\nimport { isValidBIP32Path, mnemonicToSeed } from '../../cryptography/mnemonics';\nimport type { SignatureScheme } from '../../cryptography/signature-scheme';\n\n// EdDSA-Poseidon specific public key implementation\nimport { EdDSAPoseidonPublicKey } from './publickey';\n\n// Cryptographic utility functions for key generation and manipulation\nimport {\n\tbigInt2Buffer,\n\tbuffer2Bigint,\n\tEcdhSharedKey,\n\tencryptOdevity,\n\tformatPrivKeyForBabyJub,\n\tgenKeypair,\n\tgenPubKey,\n\tgenRandomBabyJubValue,\n\thash5,\n\tpackPubKey,\n\tunpackPubKey,\n\tPoint,\n\tposeidon,\n\tPubKey,\n\tSNARK_FIELD_SIZE,\n\tTree,\n} from '../../crypto';\n\n// Type definitions and utility functions\nimport { BigNumberish } from '@zk-kit/utils';\nimport { addressToUint256, toBase64 } from 'src/utils';\nimport { mulPointEscalar } from '@zk-kit/baby-jubjub';\n\n// Default BIP-32 derivation path for EdDSA-Poseidon keypairs\n// Uses Cosmos SDK coin type (118) for compatibility with blockchain ecosystems\nexport const DEFAULT_EDDSA_POSEIDON_DERIVATION_PATH = \"m/44'/118'/0'/0/0\";\n\n/**\n * Interface defining the structure of EdDSA-Poseidon keypair data\n * Contains both the public and secret key components as bigint values\n */\nexport interface EdDSAPoseidonKeypairData {\n\t/** The public key component as a bigint */\n\tpublicKey: bigint;\n\t/** The secret key component as a bigint */\n\tsecretKey: bigint;\n\tformatedPrivKey: bigint;\n}\n\n/**\n * EdDSA-Poseidon Keypair implementation for zero-knowledge proof systems\n *\n * This class implements the Edwards-curve Digital Signature Algorithm (EdDSA)\n * using the Poseidon hash function, which is optimized for zero-knowledge circuits.\n * It extends the base Keypair class and provides methods for key generation,\n * signing, and cryptographic operations suitable for MACI (Minimal Anti-Collusion Infrastructure).\n */\nexport class EdDSAPoseidonKeypair extends Keypair {\n\t/** Private storage for the keypair data */\n\tprivate keypair: EdDSAPoseidonKeypairData;\n\n\t/**\n\t * Create a new EdDSA-Poseidon keypair instance.\n\t *\n\t * If no keypair data is provided, a new random keypair will be generated\n\t * using cryptographically secure random number generation.\n\t *\n\t * @param keypair Optional existing EdDSA-Poseidon keypair data to initialize with\n\t */\n\tconstructor(keypair?: EdDSAPoseidonKeypairData) {\n\t\tsuper();\n\t\tif (keypair) {\n\t\t\t// Use the provided keypair data\n\t\t\tthis.keypair = keypair;\n\t\t} else {\n\t\t\t// Generate a new random keypair\n\t\t\t// Note: genRandomBabyJubValue() was the previous approach, now using genKeypair()\n\t\t\tconst generatedKeypair = genKeypair();\n\t\t\tconst secretKey = generatedKeypair.privKey;\n\t\t\tconst unPackedPublicKey = generatedKeypair.pubKey;\n\t\t\t// Pack the public key into a more compact format for storage and transmission\n\t\t\tconst publicKey = packPubKey(unPackedPublicKey);\n\n\t\t\tconst formatedPrivKey = formatPrivKeyForBabyJub(secretKey);\n\n\t\t\tthis.keypair = { publicKey, secretKey, formatedPrivKey };\n\t\t}\n\t}\n\n\t/**\n\t * Get the signature scheme identifier for this keypair.\n\t *\n\t * @returns The signature scheme type 'EDDSA_POSEIDON'\n\t */\n\tgetKeyScheme(): SignatureScheme {\n\t\treturn 'EDDSA_POSEIDON';\n\t}\n\n\t/**\n\t * Generate a new random EdDSA-Poseidon keypair.\n\t *\n\t * This is a convenience static method that creates a new instance\n\t * with randomly generated cryptographic keys.\n\t *\n\t * @returns A new EdDSAPoseidonKeypair instance with random keys\n\t */\n\tstatic generate(): EdDSAPoseidonKeypair {\n\t\treturn new EdDSAPoseidonKeypair();\n\t}\n\n\t/**\n\t * Create a keypair from an existing secret key.\n\t *\n\t * This method reconstructs a keypair from a previously generated secret key.\n\t * The secret key can be provided as either a hex string (with or without '0x' prefix)\n\t * or as a bigint value. For generating keypairs from mnemonic seeds, use the\n\t * {@link EdDSAPoseidonKeypair.deriveKeypair} method instead.\n\t *\n\t * @param secretKey The secret key as a hex string or bigint\n\t * @param options Configuration options for key reconstruction\n\t * @param options.skipValidation If true, skips cryptographic validation of the secret key\n\t *\n\t * @returns A new EdDSAPoseidonKeypair instance created from the secret key\n\t * @throws Error if the provided secret key is invalid and validation is not skipped\n\t */\n\tstatic fromSecretKey(\n\t\tsecretKey: string | bigint,\n\t\toptions?: { skipValidation?: boolean }\n\t): EdDSAPoseidonKeypair {\n\t\t// Handle string input by converting hex to bigint\n\t\tif (typeof secretKey === 'string') {\n\t\t\t// Remove '0x' prefix if it exists for consistent processing\n\t\t\tconst cleanSecretKey = secretKey.startsWith('0x')\n\t\t\t\t? secretKey.slice(2)\n\t\t\t\t: secretKey;\n\t\t\t// Convert hex string to bigint\n\t\t\tconst decoded = buffer2Bigint(hexToBytes(cleanSecretKey));\n\n\t\t\t// Recursively call with the decoded bigint value\n\t\t\treturn this.fromSecretKey(decoded, options);\n\t\t}\n\n\t\t// Generate the corresponding public key from the secret key\n\t\tconst unPackedPublicKey = genPubKey(secretKey);\n\t\tconst publicKey = packPubKey(unPackedPublicKey);\n\n\t\t// Perform cryptographic validation unless explicitly skipped\n\t\tif (!options || !options.skipValidation) {\n\t\t\t// Create a test message for validation\n\t\t\tconst encoder = new TextEncoder();\n\t\t\tconst signData = encoder.encode('dora validation');\n\t\t\tconst msgHash = bytesToHex(blake2b(signData, { dkLen: 16 }));\n\n\t\t\t// Sign the test message and verify it with the derived public key\n\t\t\tconst signature = signMessage(bigInt2Buffer(secretKey), msgHash);\n\t\t\tif (!verifySignature(msgHash, signature, unPackedPublicKey)) {\n\t\t\t\tthrow new Error('Provided secretKey is invalid');\n\t\t\t}\n\t\t}\n\n\t\tconst formatedPrivKey = formatPrivKeyForBabyJub(secretKey);\n\t\treturn new EdDSAPoseidonKeypair({\n\t\t\tpublicKey,\n\t\t\tsecretKey,\n\t\t\tformatedPrivKey,\n\t\t});\n\t}\n\n\t/**\n\t * Get the public key associated with this keypair.\n\t *\n\t * @returns An EdDSAPoseidonPublicKey instance containing the public key data\n\t */\n\tgetPublicKey(): EdDSAPoseidonPublicKey {\n\t\treturn new EdDSAPoseidonPublicKey(this.keypair.publicKey);\n\t}\n\n\t/**\n\t * Get the secret key as a hexadecimal string.\n\t *\n\t * Returns the secret key component of this keypair encoded as a hex string.\n\t * This can be used to serialize the secret key for storage or transmission.\n\t *\n\t * @returns The secret key encoded as a hexadecimal string\n\t */\n\tgetSecretKey(): string {\n\t\treturn bytesToHex(bigInt2Buffer(this.keypair.secretKey));\n\t}\n\n\tgetFormatedPrivKey(): bigint {\n\t\treturn this.keypair.formatedPrivKey;\n\t}\n\n\t/**\n\t * Sign a message using this keypair's secret key.\n\t *\n\t * Creates a cryptographic signature for the provided message using the\n\t * EdDSA-Poseidon signature algorithm. The signature can later be verified\n\t * using the corresponding public key.\n\t *\n\t * @param message The message to sign (as BigNumberish - can be bigint, string, or number)\n\t * @returns The cryptographic signature of the message\n\t */\n\tsign(message: BigNumberish) {\n\t\tconst sig = signMessage(bigInt2Buffer(this.keypair.secretKey), message);\n\t\treturn sig;\n\t}\n\n\t/**\n\t * Derive an EdDSA-Poseidon keypair from a mnemonic phrase and derivation path.\n\t *\n\t * This method implements hierarchical deterministic (HD) key derivation following\n\t * the BIP-32 standard. The mnemonic phrase must be normalized and validated against\n\t * the English wordlist before use.\n\t *\n\t * @param mnemonics The mnemonic phrase (12, 15, 18, 21, or 24 words)\n\t * @param path Optional BIP-32 derivation path. If not provided, uses the default path.\n\t * Must be in the form m/44'/118'/{account_index}'/{change_index}/{address_index}\n\t *\n\t * @returns A new EdDSAPoseidonKeypair derived from the mnemonic and path\n\t * @throws Error if the derivation path is invalid or key derivation fails\n\t */\n\tstatic deriveKeypair(\n\t\tmnemonics: string,\n\t\tpath?: string\n\t): EdDSAPoseidonKeypair {\n\t\t// Use default derivation path if none provided\n\t\tif (path == null) {\n\t\t\tpath = DEFAULT_EDDSA_POSEIDON_DERIVATION_PATH;\n\t\t}\n\n\t\t// Validate the BIP-32 derivation path format\n\t\tif (!isValidBIP32Path(path)) {\n\t\t\tthrow new Error('Invalid derivation path');\n\t\t}\n\n\t\t// Convert the mnemonic phrase to a cryptographic seed\n\t\tconst seed = mnemonicToSeed(mnemonics);\n\n\t\t// Create an HD key from the master seed\n\t\tconst hdKey = HDKey.fromMasterSeed(seed);\n\n\t\t// Derive the specific key using the provided path\n\t\tconst derivedKey = hdKey.derive(path);\n\n\t\t// Extract the 32-byte private key from the derived key\n\t\tif (!derivedKey.privateKey) {\n\t\t\tthrow new Error('Invalid key');\n\t\t}\n\n\t\t// Convert the private key bytes to hexadecimal string\n\t\tconst privateKeyHex = Buffer.from(derivedKey.privateKey).toString(\n\t\t\t'hex'\n\t\t);\n\n\t\t// Convert hex to bigint and ensure it's within the SNARK field size\n\t\tconst secretKey = BigInt('0x' + privateKeyHex) % SNARK_FIELD_SIZE;\n\n\t\t// Generate the corresponding public key and pack it for storage\n\t\tconst unPackedPubKey = genPubKey(secretKey);\n\t\tconst pubKey = packPubKey(unPackedPubKey);\n\n\t\treturn new EdDSAPoseidonKeypair({\n\t\t\tpublicKey: pubKey,\n\t\t\tsecretKey: secretKey,\n\t\t\tformatedPrivKey: formatPrivKeyForBabyJub(secretKey),\n\t\t});\n\t}\n\n\t/**\n\t * Sign a payload containing contract address and amount information.\n\t *\n\t * This method creates a structured payload with the contract address, amount,\n\t * and public key coordinates, then generates a cryptographic signature over\n\t * the JSON-serialized payload using SHA-256 hashing.\n\t *\n\t * The resulting signature can be used as a certificate or proof of authorization\n\t * for the specified contract address and amount.\n\t *\n\t * @param params The payload parameters\n\t * @param params.amount The amount value as a string\n\t * @param params.contractAddress The contract address to include in the payload\n\t *\n\t * @returns Base64-encoded signature of the payload\n\t */\n\tsignPayload({\n\t\tamount,\n\t\tcontractAddress,\n\t}: {\n\t\tamount: string;\n\t\tcontractAddress: string;\n\t}) {\n\t\t// Create a structured payload with all relevant information\n\t\tconst payload = {\n\t\t\tamount,\n\t\t\tcontract_address: addressToUint256(contractAddress).toString(),\n\t\t\tpubkey_x: this.getPublicKey().toPoints()[0].toString(),\n\t\t\tpubkey_y: this.getPublicKey().toPoints()[1].toString(),\n\t\t};\n\n\t\t// Serialize the payload to bytes and hash it\n\t\tconst bytes = new TextEncoder().encode(JSON.stringify(payload));\n\t\tconst msgHash = sha256(bytes);\n\n\t\t// Sign the hash and return as base64-encoded packed signature\n\t\tconst signature = this.sign(msgHash);\n\t\treturn toBase64(new Uint8Array(packSignature(signature)));\n\t}\n\n\t/**\n\t * Sign a credential containing contract address and amount using Poseidon hashing.\n\t *\n\t * This method creates a cryptographic credential by signing a structured message\n\t * using the Poseidon hash function (hash5). The message includes the amount,\n\t * contract address (converted to uint256), public key coordinates, and a zero nonce.\n\t *\n\t * This type of credential is optimized for zero-knowledge proof systems where\n\t * Poseidon hashing is more efficient than traditional hash functions.\n\t *\n\t * @param params The credential parameters\n\t * @param params.amount The amount value as a string (will be converted to BigInt)\n\t * @param params.contractAddress The contract address (will be converted to uint256)\n\t *\n\t * @returns Base64-encoded signature of the credential\n\t */\n\tsignCredential({\n\t\tamount,\n\t\tcontractAddress,\n\t}: {\n\t\tamount: string;\n\t\tcontractAddress: string;\n\t}) {\n\t\t// Create a message hash using Poseidon hash function (hash5)\n\t\t// The message contains: [amount, contract_address_as_uint256, pubkey_x, pubkey_y, nonce]\n\t\tconst messageHash = hash5([\n\t\t\tBigInt(amount),\n\t\t\tBigInt(addressToUint256(contractAddress)),\n\t\t\tthis.getPublicKey().toPoints()[0],\n\t\t\tthis.getPublicKey().toPoints()[1],\n\t\t\tBigInt(0), // Nonce field (currently set to 0)\n\t\t]);\n\n\t\t// Sign the Poseidon hash and return as base64-encoded packed signature\n\t\tconst signature = this.sign(messageHash);\n\t\treturn toBase64(new Uint8Array(packSignature(signature)));\n\t}\n\n\t/**\n\t * Generates an Elliptic-Curve Diffie–Hellman (ECDH) shared key given a private\n\t * key and a public key.\n\t * @param pubKey A public key generated using genPubKey()\n\t * @returns The ECDH shared key.\n\t */\n\tgenEcdhSharedKey(pubKey: PubKey): EcdhSharedKey {\n\t\treturn mulPointEscalar(\n\t\t\tpubKey as Point<bigint>,\n\t\t\tthis.keypair.formatedPrivKey\n\t\t);\n\t}\n\n\tgenDeactivateRoot(\n\t\taccounts: PubKey[] | bigint[],\n\t\tstateTreeDepth: number\n\t): {\n\t\tdeactivates: bigint[][];\n\t\troot: bigint;\n\t\tleaves: bigint[];\n\t\ttree: Tree;\n\t} {\n\t\t// If accounts are passed as bigint[], unpack them to PubKey[]\n\t\tconst unpackedAccounts: PubKey[] =\n\t\t\taccounts.length > 0 && typeof accounts[0] === 'bigint'\n\t\t\t\t? (accounts as bigint[]).map(account => unpackPubKey(account))\n\t\t\t\t: (accounts as PubKey[]);\n\n\t\t// STEP 1: Generate deactivate state tree leaf for each account\n\t\tconst deactivates = unpackedAccounts.map(account => {\n\t\t\t// const sharedKey = genEcdhSharedKey(coordinator.privKey, account.pubKey);\n\t\t\tconst sharedKey = this.genEcdhSharedKey(account);\n\n\t\t\tconst deactivate = encryptOdevity(\n\t\t\t\tfalse, // isOdd: According to circuit rules, odd values indicate active accounts and even values indicate inactive accounts. Set to false here to ensure valid signup\n\t\t\t\tthis.getPublicKey().toPoints(),\n\t\t\t\tgenRandomBabyJubValue()\n\t\t\t);\n\n\t\t\treturn [\n\t\t\t\tdeactivate.c1.x,\n\t\t\t\tdeactivate.c1.y,\n\t\t\t\tdeactivate.c2.x,\n\t\t\t\tdeactivate.c2.y,\n\t\t\t\tposeidon(sharedKey),\n\t\t\t];\n\t\t});\n\n\t\t// STEP 2: Generate tree root\n\t\tconst degree = 5;\n\t\tconst depth = stateTreeDepth + 2;\n\t\tconst zero = 0n;\n\t\tconst tree = new Tree(degree, depth, zero);\n\t\tconst leaves = deactivates.map(deactivate => poseidon(deactivate));\n\t\ttree.initLeaves(leaves);\n\n\t\treturn {\n\t\t\tdeactivates,\n\t\t\troot: tree.root,\n\t\t\tleaves,\n\t\t\ttree, // Return tree instance for later retrieval of path elements\n\t\t};\n\t}\n}\n","import { Signature } from '@zk-kit/eddsa-poseidon';\nimport { toBase64, toHex } from '../../utils';\n\nimport type { PublicKey } from './publickey';\nimport type { SignatureScheme } from './signature-scheme';\nimport { BigNumberish } from '@zk-kit/utils';\n\nexport interface SignatureWithBytes {\n message: BigNumberish;\n signature: Signature<bigint>;\n}\n\nexport abstract class Signer {\n abstract sign(message: BigNumberish): Signature<bigint>;\n /**\n * Sign messages with a specific payload. By combining the message bytes with the payload before hashing and signing,\n * it ensures that a signed message is tied to a specific purpose and domain separator is provided\n */\n async signWithPayload(message: BigNumberish): Promise<SignatureWithBytes> {\n const signature = await this.sign(message);\n\n return {\n message: message,\n signature: signature\n };\n }\n\n /**\n * Get the key scheme of the keypair: Secp256k1 or ED25519\n */\n abstract getKeyScheme(): SignatureScheme;\n\n /**\n * The public key for this keypair\n */\n abstract getPublicKey(): PublicKey;\n}\n\nexport abstract class Keypair extends Signer {\n /**\n * This returns the Bech32 secret key string for this keypair.\n */\n abstract getSecretKey(): string;\n}\n","import { toHex } from '../../utils';\nimport { mnemonicToSeedSync as bip39MnemonicToSeedSync } from '@scure/bip39';\n\n/**\n * Parse and validate a path that is compliant to SLIP-0010 in form m/44'/118'/{account_index}'/{change_index}'/{address_index}'.\n *\n * @param path path string (e.g. `m/44'/118'/0'/0'/0'`).\n */\nexport function isValidHardenedPath(path: string): boolean {\n if (!new RegExp(\"^m\\\\/44'\\\\/118'\\\\/[0-9]+'\\\\/[0-9]+'\\\\/[0-9]+'+$\").test(path)) {\n return false;\n }\n return true;\n}\n\n/**\n * Parse and validate a path that is compliant to BIP-32 in form m/54'/784'/{account_index}'/{change_index}/{address_index}\n * for Secp256k1 and m/74'/784'/{account_index}'/{change_index}/{address_index} for Secp256r1.\n *\n * Note that the purpose for Secp256k1 is registered as 54, to differentiate from Ed25519 with purpose 44.\n *\n * @param path path string (e.g. `m/54'/118'/0'/0/0`).\n */\nexport function isValidBIP32Path(path: string): boolean {\n if (!new RegExp(\"^m\\\\/(44|54|74)'\\\\/118'\\\\/[0-9]+'\\\\/[0-9]+\\\\/[0-9]+$\").test(path)) {\n return false;\n }\n return true;\n}\n\n/**\n * Uses KDF to derive 64 bytes of key data from mnemonic with empty password.\n *\n * @param mnemonics 12 words string split by spaces.\n */\nexport function mnemonicToSeed(mnemonics: string): Uint8Array {\n return bip39MnemonicToSeedSync(mnemonics, '');\n}\n\n/**\n * Derive the seed in hex format from a 12-word mnemonic string.\n *\n * @param mnemonics 12 words string split by spaces.\n */\nexport function mnemonicToSeedHex(mnemonics: string): string {\n return toHex(mnemonicToSeed(mnemonics));\n}\n","import { sha256 } from '@noble/hashes/sha256';\n\nimport { PublicKey } from '../../cryptography/publickey';\nimport type { PublicKeyInitData } from '../../cryptography/publickey';\nimport {\n\tderivePublicKey,\n\tsignMessage,\n\tderiveSecretScalar,\n\tverifySignature,\n\tSignature,\n\tunpackSignature,\n} from '@zk-kit/eddsa-poseidon';\nimport {\n\tpackPubKey,\n\tunpackPubKey,\n\tPubKey,\n\tbigInt2Buffer,\n\thash5,\n} from '../../crypto';\nimport { addressToUint256, fromBase64, toHex } from 'src/utils';\n\n/**\n * An EdDSAPoseidon public key\n */\nexport class EdDSAPoseidonPublicKey extends PublicKey {\n\tprivate packedData: bigint;\n\tprivate rawPoint: PubKey;\n\n\t/**\n\t * Create a new EdDSAPoseidonPublicKey object\n\t * @param value public key as packed bigint, Point array, Uint8Array or string\n\t */\n\tconstructor(value: PublicKeyInitData | bigint | PubKey) {\n\t\tsuper();\n\n\t\tif (typeof value === 'bigint') {\n\t\t\t// 输入是 packed 的公钥\n\t\t\tthis.packedData = value;\n\t\t\tthis.rawPoint = unpackPubKey(value);\n\t\t} else if (Array.isArray(value) && value.length === 2) {\n\t\t\t// 输入是 Point [x, y]\n\t\t\tthis.rawPoint = value as PubKey;\n\t\t\tthis.packedData = packPubKey(this.rawPoint);\n\t\t} else if (typeof value === 'string') {\n\t\t\t// 输入是字符串格式的 packed 公钥\n\t\t\tthis.packedData = BigInt(value);\n\t\t\tthis.rawPoint = unpackPubKey(this.packedData);\n\t\t} else if (value instanceof Uint8Array) {\n\t\t\t// 输入是字节数组,需要转换为 bigint\n\t\t\tconst hex = Array.from(value)\n\t\t\t\t.map(b => b.toString(16).padStart(2, '0'))\n\t\t\t\t.join('');\n\t\t\tthis.packedData = BigInt('0x' + hex);\n\t\t\tthis.rawPoint = unpackPubKey(this.packedData);\n\t\t} else {\n\t\t\t// 其他可迭代类型\n\t\t\tconst bytes = new Uint8Array(value as Iterable<number>);\n\t\t\tconst hex = Array.from(bytes)\n\t\t\t\t.map(b => b.toString(16).padStart(2, '0'))\n\t\t\t\t.join('');\n\t\t\tthis.packedData = BigInt('0x' + hex);\n\t\t\tthis.rawPoint = unpackPubKey(this.packedData);\n\t\t}\n\t}\n\n\t/**\n\t * Checks if two EdDSAPoseidon public keys are equal\n\t */\n\toverride equals(publicKey: EdDSAPoseidonPublicKey): boolean {\n\t\treturn super.equals(publicKey);\n\t}\n\n\t/**\n\t * Return the Point representation of the EdDSAPoseidon public key\n\t */\n\ttoPoints(): PubKey {\n\t\treturn this.rawPoint;\n\t}\n\n\t/**\n\t * Return the packed bigint representation of the EdDSAPoseidon public key\n\t */\n\ttoPackedData(): bigint {\n\t\treturn this.packedData;\n\t}\n\n\t/**\n\t * Verifies that the signature is valid for for the provided message\n\t */\n\tverify(message: Uint8Array | string, signature: Signature): boolean {\n\t\ttry {\n\t\t\treturn verifySignature(message, signature, this.rawPoint);\n\t\t} catch (error) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Verifies that the signature is valid for the provided address and amount\n\t */\n\tverifyPayload({\n\t\tamount,\n\t\tcontractAddress,\n\t\tsignature,\n\t}: {\n\t\tamount: string;\n\t\tcontractAddress: string;\n\t\tsignature: string;\n\t}): boolean {\n\t\tconst payload = {\n\t\t\tamount,\n\t\t\tcontract_address: addressToUint256(contractAddress).toString(),\n\t\t\tpubkey_x: this.toPoints()[0].toString(),\n\t\t\tpubkey_y: this.toPoints()[1].toString(),\n\t\t};\n\t\tconst signatureBytes = fromBase64(signature);\n\t\tconst rawSignature = unpackSignature(new Buffer(signatureBytes));\n\n\t\tconst payloadHash = sha256(\n\t\t\tnew TextEncoder().encode(JSON.stringify(payload))\n\t\t);\n\t\treturn this.verify(payloadHash, rawSignature);\n\t}\n\n\t/**\n\t * Verifies that the signature is valid for the provided address and amount\n\t */\n\tverifyCredential({\n\t\tamount,\n\t\tcontractAddress,\n\t\tsignature,\n\t}: {\n\t\tamount: string;\n\t\tcontractAddress: string;\n\t\tsignature: string;\n\t}): boolean {\n\t\tconst messageHash = hash5([\n\t\t\tBigInt(amount),\n\t\t\tBigInt(addressToUint256(contractAddress)),\n\t\t\tthis.toPoints()[0],\n\t\t\tthis.toPoints()[1],\n\t\t\tBigInt(0),\n\t\t]);\n\t\tconst signatureBytes = fromBase64(signature);\n\t\tconst rawSignature = unpackSignature(new Buffer(signatureBytes));\n\n\t\treturn this.verify(bigInt2Buffer(messageHash), rawSignature);\n\t}\n}\n","import { Signature } from '@zk-kit/eddsa-poseidon';\n\n/**\n * Value to be converted into public key.\n */\nexport type PublicKeyInitData = string | Uint8Array | Iterable<number>;\n\nexport function bytesEqual(a: Uint8Array, b: Uint8Array) {\n\tif (a === b) return true;\n\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (a[i] !== b[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * A public key\n */\nexport abstract class PublicKey {\n\t/**\n\t * Checks if two public keys are equal\n\t */\n\tequals(publicKey: PublicKey) {\n\t\treturn this.toPackedData() === publicKey.toPackedData();\n\t}\n\n\t/**\n\t * Converts the public key to a packed data format\n\t */\n\tabstract toPackedData(): bigint;\n\n\t/**\n\t * Verifies that the signature is valid for for the provided message\n\t */\n\t// abstract verify(data: Uint8Array, signature: Uint8Array | string): boolean;\n\tabstract verify(data: Uint8Array, signature: Signature): boolean;\n}\n","import CryptoJS from 'crypto-js';\nimport { bigInt2Buffer, stringizing } from './bigintUtils';\nimport { poseidonEncrypt } from '@zk-kit/poseidon-cipher';\nimport * as BabyJub from '@zk-kit/baby-jubjub';\nimport { Point } from '@zk-kit/baby-jubjub';\nimport { derivePublicKey, signMessage, deriveSecretScalar } from '@zk-kit/eddsa-poseidon';\n\nimport { solidityPackedSha256 } from 'ethers';\n\nimport { mulPointEscalar } from '@zk-kit/baby-jubjub';\nimport { packPublicKey, unpackPublicKey } from '@zk-kit/eddsa-poseidon';\n\nimport { EcdhSharedKey, Keypair, PrivKey, PubKey } from './types';\nimport { poseidon } from './hashing';\nimport { Tree } from './tree';\nimport { genRandomBabyJubValue } from './babyjub';\n\nconst SNARK_FIELD_SIZE =\n 21888242871839275222246405745257275088548364400416034343698204186575808495617n;\n\n/**\n * Generate a private key\n * @returns A random seed for a private key.\n */\nexport const genPrivKey = (): bigint =>\n BigInt(`0x${CryptoJS.lib.WordArray.random(32).toString(CryptoJS.enc.Hex)}`);\n\n/**\n * Generate a random value\n * @returns A BabyJub-compatible salt.\n */\nexport const genRandomSalt = (): bigint => genRandomBabyJubValue();\n\n/**\n * An internal function which formats a random private key to be compatible\n * with the BabyJub curve. This is the format which should be passed into the\n * PubKey and other circuits.\n * @param privKey A private key generated using genPrivKey()\n * @returns A BabyJub-compatible private key.\n */\nexport const formatPrivKeyForBabyJub = (privKey: PrivKey): bigint =>\n BigInt(deriveSecretScalar(bigInt2Buffer(privKey)));\n\n/**\n * Losslessly reduces the size of the representation of a public key\n * @param pubKey The public key to pack\n * @returns A packed public key\n */\nexport const packPubKey = (pubKey: PubKey): bigint => BigInt(packPublicKey(pubKey));\n\n/**\n * Restores the original PubKey from its packed representation\n * @param packed The value to unpack\n * @returns The unpacked public key\n */\nexport const unpackPubKey = (packed: bigint): PubKey => {\n const pubKey = unpackPublicKey(packed);\n return pubKey.map((x) => BigInt(x)) as PubKey;\n};\n\n/**\n * @param privKey A private key generated using genPrivKey()\n * @returns A public key associated with the private key\n */\nexport const genPubKey = (privKey: PrivKey): PubKey => {\n const key = derivePublicKey(bigInt2Buffer(privKey));\n return [BigInt(key[0]), BigInt(key[1])];\n};\n\n/**\n * Generates a keypair.\n * @returns a keypair\n */\nexport const genKeypair = (pkey?: PrivKey): Keypair => {\n const privKey = pkey ? pkey % SNARK_FIELD_SIZE : genPrivKey();\n const pubKey = genPubKey(privKey);\n const formatedPrivKey = formatPrivKeyForBabyJub(privKey);\n\n const keypair: Keypair = { privKey, pubKey, formatedPrivKey };\n\n return keypair;\n};\n\n/**\n * Generates an Elliptic-Curve Diffie–Hellman (ECDH) shared key given a private\n * key and a public key.\n * @param privKey A private key generated using genPrivKey()\n * @param pubKey A public key generated using genPubKey()\n * @returns The ECDH shared key.\n */\nexport const genEcdhSharedKey = (privKey: PrivKey, pubKey: PubKey): EcdhSharedKey =>\n mulPointEscalar(pubKey as Point<bigint>, formatPrivKeyForBabyJub(privKey));\n\nexport const genMessageFactory =\n (stateIdx: number, signPriKey: PrivKey, signPubKey: PubKey, coordPubKey: PubKey) =>\n (\n encPriKey: PrivKey,\n nonce: number,\n voIdx: number,\n newVotes: number,\n isLastCmd: boolean,\n salt?: bigint\n ): bigint[] => {\n if (!salt) {\n // uint56\n salt = BigInt(`0x${CryptoJS.lib.WordArray.random(7).toString(CryptoJS.enc.Hex)}`);\n }\n\n const packaged =\n BigInt(nonce) +\n (BigInt(stateIdx) << 32n) +\n (BigInt(voIdx) << 64n) +\n (BigInt(newVotes) << 96n) +\n (BigInt(salt) << 192n);\n\n let newPubKey = [...signPubKey];\n if (isLastCmd) {\n newPubKey = [0n, 0n];\n }\n\n const hash = poseidon([packaged, ...newPubKey]);\n const signature = signMessage(bigInt2Buffer(signPriKey), hash);\n\n const command = [packaged, ...newPubKey, ...signature.R8, signature.S];\n\n const message = poseidonEncrypt(command, genEcdhSharedKey(encPriKey, coordPubKey), 0n);\n\n return message;\n };\n\n// Batch generate encrypted commands.\n// output format just like (with commands 1 ~ N):\n// [\n// [msg_N, msg_N-1, ... msg_3, msg_2, msg_1],\n// [pubkey_N, pubkey_N-1, ... pubkey_3, pubkey_2, pubkey_1]\n// ]\n// and change the public key at command_N\nexport const batchGenMessage = (\n stateIdx: number,\n keypair: Keypair,\n coordPubKey: PubKey,\n plan: [number, number][]\n) => {\n const genMessage = genMessageFactory(\n stateIdx,\n BigInt(keypair.privKey),\n keypair.pubKey,\n coordPubKey\n );\n\n const payload = [];\n for (let i = plan.length - 1; i >= 0; i--) {\n const p = plan[i];\n const encAccount = genKeypair();\n const msg = genMessage(BigInt(encAccount.privKey), i + 1, p[0], p[1], i === plan.length - 1);\n\n payload.push({\n msg,\n encPubkeys: encAccount.pubKey\n });\n }\n\n return payload;\n};\n\nexport const privateKeyFromTxt = (txt: string) => {\n if (typeof txt !== 'string') {\n return;\n }\n const key = txt.split('\\n')[1] || '';\n if (key.length !== 512) {\n return;\n }\n const keys = key.match(/[0-9a-f]{128}/g);\n if (!keys || keys.length !== 4) {\n return;\n }\n const priKey = poseidon(keys.map((k) => BigInt('0x' + k)));\n return genKeypair(priKey % SNARK_FIELD_SIZE);\n};\n\nexport const rerandomize = (\n pubKey: bigint[],\n ciphertext: { c1: bigint[]; c2: bigint[] },\n randomVal = genRandomSalt()\n) => {\n const d1 = BabyJub.addPoint(\n BabyJub.mulPointEscalar(BabyJub.Base8, randomVal),\n ciphertext.c1 as Point<bigint>\n );\n\n const d2 = BabyJub.addPoint(\n BabyJub.mulPointEscalar(pubKey as Point<bigint>, randomVal),\n ciphertext.c2 as Point<bigint>\n );\n\n return {\n d1,\n d2\n } as { d1: bigint[]; d2: bigint[] };\n};\n\nexport const genAddKeyInput = (\n depth: number,\n {\n coordPubKey,\n oldKey,\n deactivates\n }: {\n coordPubKey: PubKey;\n oldKey: Keypair;\n deactivates: bigint[][];\n }\n) => {\n const sharedKeyHash = poseidon(genEcdhSharedKey(oldKey.privKey, coordPubKey));\n\n const randomVal = genRandomSalt();\n const deactivateIdx = deactivates.findIndex((d) => d[4] === sharedKeyHash);\n if (deactivateIdx < 0) {\n return null;\n }\n\n const deactivateLeaf = deactivates[deactivateIdx];\n\n const c1 = [deactivateLeaf[0], deactivateLeaf[1]];\n const c2 = [deactivateLeaf[2], deactivateLeaf[3]];\n\n const { d1, d2 } = rerandomize(coordPubKey, { c1, c2 }, randomVal);\n\n const nullifier = poseidon([BigInt(oldKey.formatedPrivKey), 1444992409218394441042n]);\n\n const tree = new Tree(5, depth, 0n);\n const leaves = deactivates.map((d) => poseidon(d));\n tree.initLeaves(leaves);\n\n const deactivateRoot = tree.root;\n const deactivateLeafPathElements = tree.pathElementOf(deactivateIdx);\n\n const inputHash =\n BigInt(\n solidityPackedSha256(\n new Array(7).fill('uint256'),\n stringizing([\n deactivateRoot,\n poseidon(coordPubKey),\n nullifier,\n d1[0],\n d1[1],\n d2[0],\n d2[1]\n ]) as string[]\n )\n ) % SNARK_FIELD_SIZE;\n\n const input = {\n inputHash,\n coordPubKey,\n deactivateRoot,\n deactivateIndex: deactivateIdx,\n deactivateLeaf: poseidon(deactivateLeaf),\n c1,\n c2,\n randomVal,\n d1,\n d2,\n deactivateLeafPathElements,\n nullifier,\n oldPrivateKey: oldKey.formatedPrivKey\n };\n\n return input;\n};\n\n// LIB\nfunction randomUint256() {\n const buffer = [];\n for (let i = 0; i < 64; i++) {\n buffer.push(\n Math.floor(Math.random() * 256)\n .toString(16)\n .padStart(2, '0')\n );\n }\n return buffer.join('');\n}\n\nexport const genRandomKey = () => {\n const key = [randomUint256(), randomUint256(), randomUint256(), randomUint256()].join('');\n return ['-----BEGIN MACI KEY-----', key, '-----END MACI KEY-----'].join('\\n');\n};\n","type MixedData<T> = T | Array<MixedData<T>> | { [key: string]: MixedData<T> };\n\nexport const stringizing = (\n o: MixedData<bigint>,\n path: MixedData<bigint>[] = []\n): MixedData<string> => {\n if (path.includes(o)) {\n throw new Error('loop nesting!');\n }\n const newPath = [...path, o];\n\n if (Array.isArray(o)) {\n return o.map((item) => stringizing(item, newPath));\n } else if (typeof o === 'object') {\n const output: { [key: string]: MixedData<string> } = {};\n for (const key in o) {\n output[key] = stringizing(o[key], newPath);\n }\n return output;\n } else {\n return o.toString();\n }\n};\n\nexport const bigInt2Buffer = (i: bigint) => {\n let hex = i.toString(16);\n if (hex.length % 2 === 1) {\n hex = '0' + hex;\n }\n return Buffer.from(hex, 'hex');\n};\n\nexport const buffer2Bigint = (buffer: Buffer | Uint8Array): bigint => {\n const buf = Buffer.isBuffer(buffer) ? buffer : Buffer.from(buffer);\n const hex = buf.toString('hex');\n return BigInt('0x' + hex);\n};\n\nexport const destringizing = (\n o: MixedData<string>,\n path: MixedData<string>[] = []\n): MixedData<bigint> => {\n if (path.includes(o)) {\n throw new Error('loop nesting!');\n }\n const newPath = [...path, o];\n\n if (Array.isArray(o)) {\n return o.map((item) => destringizing(item, newPath));\n } else if (typeof o === 'object' && o !== null) {\n const output: { [key: string]: MixedData<bigint> } = {};\n for (const key in o) {\n output[key] = destringizing(o[key], newPath);\n }\n return output;\n } else {\n return BigInt(o);\n }\n};\n","import { poseidonPerm } from '@zk-kit/poseidon-cipher';\nimport { solidityPackedSha256 } from 'ethers';\n\nimport assert from 'assert';\n\nimport type { Plaintext, PoseidonFuncs } from './types';\n\nimport { SNARK_FIELD_SIZE } from './constants';\n\n/**\n * Hash an array of uint256 values the same way that the EVM does.\n * @param input - the array of values to hash\n * @returns a EVM compatible sha256 hash\n */\nexport const sha256Hash = (input: bigint[]): bigint => {\n const types: string[] = [];\n\n input.forEach(() => {\n types.push('uint256');\n });\n\n return (\n BigInt(\n solidityPackedSha256(\n types,\n input.map((x) => x.toString())\n )\n ) % SNARK_FIELD_SIZE\n );\n};\n\n/**\n * Generate the poseidon hash of the inputs provided\n * @param inputs The inputs to hash\n * @returns the hash of the inputs\n */\nexport const poseidon = (inputs: bigint[]): bigint =>\n poseidonPerm([BigInt(0), ...inputs.map((x) => BigInt(x))])[0];\n\n/**\n * Hash up to 2 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT3 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 2);\n return poseidon(inputs);\n};\n\n/**\n * Hash up to 3 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT4 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 3);\n return poseidon(inputs);\n};\n\n/**\n * Hash up to 4 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT5 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 4);\n return poseidon(inputs);\n};\n\n/**\n * Hash up to 5 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT6 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 5);\n return poseidon(inputs);\n};\n\n/**\n * Hash two BigInts with the Poseidon hash function\n * @param left The left-hand element to hash\n * @param right The right-hand element to hash\n * @returns The hash of the two elements\n */\nexport const hashLeftRight = (left: bigint, right: bigint): bigint => poseidonT3([left, right]);\n\n// hash functions\nconst funcs: PoseidonFuncs = {\n 2: poseidonT3,\n 3: poseidonT4,\n 4: poseidonT5,\n 5: poseidonT6\n};\n\n/**\n * Hash up to N elements\n * @param numElements The number of elements to hash\n * @param elements The elements to hash\n * @returns The hash of the elements\n */\nexport const hashN = (numElements: number, elements: Plaintext): bigint => {\n const elementLength = elements.length;\n\n if (elements.length > numElements) {\n throw new TypeError(\n `the length of the elements array should be at most ${numElements}; got ${elements.length}`\n );\n }\n const elementsPadded = elements.slice();\n\n if (elementLength < numElements) {\n for (let i = elementLength; i < numElements; i += 1) {\n elementsPadded.push(BigInt(0));\n }\n }\n\n return funcs[numElements](elementsPadded);\n};\n\n// hash functions\nexport const hashLeanIMT = (a: bigint, b: bigint): bigint => hashN(2, [a, b]);\nexport const hash2 = (elements: Plaintext): bigint => hashN(2, elements);\nexport const hash3 = (elements: Plaintext): bigint => hashN(3, elements);\nexport const hash4 = (elements: Plaintext): bigint => hashN(4, elements);\nexport const hash5 = (elements: Plaintext): bigint => hashN(5, elements);\n\n/**\n * A convenience function to use Poseidon to hash a Plaintext with\n * no more than 13 elements\n * @param elements The elements to hash\n * @returns The hash of the elements\n */\nexport const hash12 = (elements: Plaintext): bigint => {\n const max = 12;\n const elementLength = elements.length;\n\n if (elementLength > max) {\n throw new TypeError(\n `the length of the elements array should be at most ${max}; got ${elements.length}`\n );\n }\n\n const elementsPadded = elements.slice();\n\n if (elementLength < max) {\n for (let i = elementLength; i < max; i += 1) {\n elementsPadded.push(BigInt(0));\n }\n }\n\n return poseidonT5([\n poseidonT6(elementsPadded.slice(0, 5)),\n poseidonT6(elementsPadded.slice(5, 10)),\n elementsPadded[10],\n elementsPadded[11]\n ]);\n};\n\n/**\n * Hash a single BigInt with the Poseidon hash function\n * @param preImage The element to hash\n * @returns The hash of the element\n */\nexport const hashOne = (preImage: bigint): bigint => poseidonT3([preImage, BigInt(0)]);\n","import { r } from '@zk-kit/baby-jubjub';\nimport { keccak256, toUtf8Bytes } from 'ethers';\n\nimport assert from 'assert';\n\nexport const SNARK_FIELD_SIZE = r;\n\n// A nothing-up-my-sleeve zero value\n// Should be equal to 8370432830353022751713833565135785980866757267633941821328460903436894336785\nexport const NOTHING_UP_MY_SLEEVE = BigInt(keccak256(toUtf8Bytes('Maci'))) % SNARK_FIELD_SIZE;\n\nassert(\n NOTHING_UP_MY_SLEEVE ===\n BigInt('8370432830353022751713833565135785980866757267633941821328460903436894336785')\n);\n\nexport const PAD_KEY_HASH = BigInt(\n '1309255631273308531193241901289907343161346846555918942743921933037802809814'\n);\n","import { poseidon } from './hashing';\n\nexport class Tree {\n public readonly DEPTH: number;\n public readonly HEIGHT: number;\n public readonly DEGREE: number;\n public readonly LEAVES_COUNT: number;\n public readonly LEAVES_IDX_0: number;\n public readonly NODES_COUNT: number;\n\n protected nodes: bigint[] = [];\n protected zeros: bigint[] = [];\n\n constructor(degree: number, depth: number, zero: bigint) {\n this.DEPTH = depth;\n this.HEIGHT = depth + 1;\n this.DEGREE = degree;\n\n this.LEAVES_COUNT = degree ** depth;\n this.LEAVES_IDX_0 = (degree ** depth - 1) / (degree - 1);\n this.NODES_COUNT = (degree ** (depth + 1) - 1) / (degree - 1);\n\n this.initZero(zero);\n this.initNodes();\n }\n\n get root() {\n return this.nodes[0];\n }\n\n initZero(zero: bigint) {\n const zeros = new Array(this.HEIGHT);\n zeros[0] = zero;\n for (let i = 1; i < zeros.length; i++) {\n const children = new Array(this.DEGREE).fill(zeros[i - 1]);\n zeros[i] = poseidon(children);\n }\n this.zeros = zeros;\n }\n\n initNodes() {\n const DEGREE = this.DEGREE;\n\n const nodes = new Array(this.NODES_COUNT);\n\n for (let d = this.DEPTH; d >= 0; d--) {\n const size = DEGREE ** d;\n const idx0 = (DEGREE ** d - 1) / (DEGREE - 1);\n const zero = this.zeros[this.DEPTH - d];\n for (let i = 0; i < size; i++) {\n nodes[idx0 + i] = zero;\n }\n }\n\n this.nodes = nodes;\n }\n\n initLeaves(leaves: bigint[]) {\n const DEGREE = this.DEGREE;\n for (let i = 0; i < leaves.length; i++) {\n if (i >= this.LEAVES_COUNT) {\n console.error('OVERFLOW');\n break;\n }\n this.nodes[this.LEAVES_IDX_0 + i] = BigInt(leaves[i]);\n }\n\n for (let d = this.DEPTH - 1; d >= 0; d--) {\n const size = DEGREE ** d;\n const idx0 = (DEGREE ** d - 1) / (DEGREE - 1);\n for (let i = 0; i < size / DEGREE; i++) {\n const start = (idx0 + i) * DEGREE + 1;\n const children = this.nodes.slice(start, start + DEGREE);\n this.nodes[idx0 + i] = poseidon(children);\n }\n }\n }\n\n leaf(leafIdx: number) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n const nodeIdx = this.LEAVES_IDX_0 + leafIdx;\n return this.nodes[nodeIdx];\n }\n\n leaves() {\n return this.nodes.slice(this.LEAVES_IDX_0);\n }\n\n updateLeaf(leafIdx: number, leaf: bigint) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n const nodeIdx = this.LEAVES_IDX_0 + leafIdx;\n this.nodes[nodeIdx] = leaf;\n\n this._update(nodeIdx);\n }\n\n pathIdxOf(leafIdx: number) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n let idx = this.LEAVES_IDX_0 + leafIdx;\n const pathIdx: bigint[] = [];\n\n for (let i = 0; i < this.DEPTH; i++) {\n const parentIdx = Math.floor((idx - 1) / this.DEGREE);\n const childrenIdx0 = parentIdx * this.DEGREE + 1;\n\n pathIdx.push(BigInt(idx - childrenIdx0));\n\n idx = parentIdx;\n }\n\n return pathIdx;\n }\n\n pathElementOf(leafIdx: number) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n let idx = this.LEAVES_IDX_0 + leafIdx;\n const pathElement: bigint[][] = [];\n\n for (let h = 0; h < this.DEPTH; h++) {\n const parentIdx = Math.floor((idx - 1) / this.DEGREE);\n const childrenIdx0 = parentIdx * this.DEGREE + 1;\n\n const el: bigint[] = [];\n for (let i = childrenIdx0; i < childrenIdx0 + this.DEGREE; i++) {\n if (i === idx) continue;\n el.push(this.nodes[i]);\n }\n\n pathElement.push(el);\n\n idx = parentIdx;\n }\n\n return pathElement;\n }\n\n subTree(length: number) {\n const subTree = new Tree(this.DEGREE, this.DEPTH, this.zeros[0]);\n const nodes = [...this.nodes];\n\n const DEGREE = this.DEGREE;\n let tail = length;\n for (let d = this.DEPTH; d >= 0; d--) {\n const size = DEGREE ** d;\n const idx0 = (DEGREE ** d - 1) / (DEGREE - 1);\n const zero = this.zeros[this.DEPTH - d];\n for (let i = tail; i < size; i++) {\n nodes[idx0 + i] = zero;\n }\n tail = Math.ceil(tail / DEGREE);\n }\n\n subTree.nodes = nodes;\n subTree._update(this.LEAVES_IDX_0 + length - 1);\n\n return subTree;\n }\n\n protected _update(nodeIdx: number) {\n let idx = nodeIdx;\n while (idx > 0) {\n const parentIdx = Math.floor((idx - 1) / this.DEGREE);\n const childrenIdx0 = parentIdx * this.DEGREE + 1;\n this.nodes[parentIdx] = poseidon(this.nodes.slice(childrenIdx0, childrenIdx0 + 5));\n\n idx = parentIdx;\n }\n }\n}\n","import assert from 'assert';\nimport CryptoJS from 'crypto-js';\n\nimport type { PrivKey } from './types';\n\nimport { SNARK_FIELD_SIZE } from './constants';\n\n/**\n * @notice A class representing a point on the first group (G1)\n * of the Jubjub curve\n */\nexport class G1Point {\n x: bigint;\n\n y: bigint;\n\n /**\n * Create a new instance of G1Point\n * @param x the x coordinate\n * @param y the y coordinate\n */\n constructor(x: bigint, y: bigint) {\n assert(x < SNARK_FIELD_SIZE && x >= 0, 'G1Point x out of range');\n assert(y < SNARK_FIELD_SIZE && y >= 0, 'G1Point y out of range');\n this.x = x;\n this.y = y;\n }\n\n /**\n * Check whether two points are equal\n * @param pt the point to compare with\n * @returns whether they are equal or not\n */\n equals(pt: G1Point): boolean {\n return this.x === pt.x && this.y === pt.y;\n }\n\n /**\n * Return the point as a contract param in the form of an object\n * @returns the point as a contract param\n */\n asContractParam(): { x: string; y: string } {\n return {\n x: this.x.toString(),\n y: this.y.toString()\n };\n }\n}\n\n/**\n * @notice A class representing a point on the second group (G2)\n * of the Jubjub curve. This is usually an extension field of the\n * base field of the curve.\n */\nexport class G2Point {\n x: bigint[];\n\n y: bigint[];\n\n /**\n * Create a new instance of G2Point\n * @param x the x coordinate\n * @param y the y coordinate\n */\n constructor(x: bigint[], y: bigint[]) {\n this.checkPointsRange(x, 'x');\n this.checkPointsRange(y, 'y');\n\n this.x = x;\n this.y = y;\n }\n\n /**\n * Check whether two points are equal\n * @param pt the point to compare with\n * @returns whether they are equal or not\n */\n equals(pt: G2Point): boolean {\n return (\n this.x[0] === pt.x[0] &&\n this.x[1] === pt.x[1] &&\n this.y[0] === pt.y[0] &&\n this.y[1] === pt.y[1]\n );\n }\n\n /**\n * Return the point as a contract param in the form of an object\n * @returns the point as a contract param\n */\n asContractParam(): { x: string[]; y: string[] } {\n return {\n x: this.x.map((n) => n.toString()),\n y: this.y.map((n) => n.toString())\n };\n }\n\n /**\n * Check whether the points are in range\n * @param x the x coordinate\n * @param type the type of the coordinate\n */\n private checkPointsRange(x: bigint[], type: 'x' | 'y') {\n assert(\n x.every((n) => n < SNARK_FIELD_SIZE && n >= 0),\n `G2Point ${type} out of range`\n );\n }\n}\n\n// /**\n// * Returns a BabyJub-compatible random value. We create it by first generating\n// * a random value (initially 256 bits large) modulo the snark field size as\n// * described in EIP197. This results in a key size of roughly 253 bits and no\n// * more than 254 bits. To prevent modulo bias, we then use this efficient\n// * algorithm:\n// * http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/lib/libc/crypt/arc4random_uniform.c\n// * @returns A BabyJub-compatible random value.\n// */\n// export const genRandomBabyJubValue = (): bigint => {\n// // Prevent modulo bias\n// // const lim = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000')\n// // const min = (lim - SNARK_FIELD_SIZE) % SNARK_FIELD_SIZE\n// const min = BigInt(\n// '6350874878119819312338956282401532410528162663560392320966563075034087161851'\n// );\n\n// let privKey: PrivKey = SNARK_FIELD_SIZE;\n\n// do {\n// const rand = BigInt(\n// `0x${CryptoJS.lib.WordArray.random(32).toString(CryptoJS.enc.Hex)}`\n// );\n\n// if (rand >= min) {\n// privKey = rand % SNARK_FIELD_SIZE;\n// }\n// } while (privKey >= SNARK_FIELD_SIZE);\n// privKey =\n// return privKey;\n// };\n\nexport const genRandomBabyJubValue = () => {\n // Prevent modulo bias\n //const lim = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000')\n //const min = (lim - SNARK_FIELD_SIZE) % SNARK_FIELD_SIZE\n const min = 6350874878119819312338956282401532410528162663560392320966563075034087161851n;\n\n let rand;\n while (true) {\n rand = BigInt(`0x${CryptoJS.lib.WordArray.random(32).toString(CryptoJS.enc.Hex)}`);\n\n if (rand >= min) {\n break;\n }\n }\n\n // const privKey = rand % SNARK_FIELD_SIZE;\n const privKey = rand % 2n ** 253n;\n return privKey;\n};\n","import { OfflineSigner, OfflineDirectSigner, isOfflineDirectSigner } from '@cosmjs/proto-signing';\nimport { StdSignDoc } from '@cosmjs/amino';\nimport { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx';\nimport { getDefaultParams } from '../const';\nimport { genKeypair } from './keys';\nimport { SignResult } from './types';\n\nexport async function signMessage(\n signer: OfflineSigner,\n address: string,\n message: string,\n network: 'mainnet' | 'testnet'\n): Promise<SignResult> {\n const accounts = await signer.getAccounts();\n const account = accounts.find((acc) => acc.address === address);\n const chainId = getDefaultParams(network).chainId;\n\n if (!account) {\n throw new Error(`Address ${address} not found in wallet`);\n }\n\n if (isOfflineDirectSigner(signer)) {\n // Direct\n const signDoc: SignDoc = {\n bodyBytes: new TextEncoder().encode(message),\n authInfoBytes: new Uint8Array(),\n chainId,\n accountNumber: BigInt(0)\n };\n\n const { signature } = await signer.signDirect(address, signDoc);\n\n return {\n signature: signature.signature,\n pubkey: account.pubkey\n };\n } else {\n // Amino\n const signDoc: StdSignDoc = {\n chain_id: chainId,\n account_number: '0',\n sequence: '0',\n fee: {\n gas: '0',\n amount: []\n },\n msgs: [],\n memo: message\n };\n\n const { signature } = await signer.signAmino(address, signDoc);\n\n return {\n signature: signature.signature,\n pubkey: account.pubkey\n };\n }\n}\n\nexport async function genKeypairFromSignature(signature: string) {\n const sign = BigInt('0x' + Buffer.from(signature, 'base64').toString('hex'));\n\n return genKeypair(sign);\n}\n\nexport async function genKeypairFromSign({\n signer,\n address,\n network\n}: {\n signer: OfflineSigner;\n address?: string;\n network: 'mainnet' | 'testnet';\n}) {\n if (!address) {\n [{ address }] = await signer.getAccounts();\n }\n\n const sig = await signMessage(signer, address, 'Generate_MACI_Private_Key', network);\n\n return genKeypairFromSignature(sig.signature);\n}\n","import { Scalar, buildBn128, buildBls12381 } from 'ffjavascript';\n\nconst bls12381r = Scalar.e('73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001', 16);\nconst bn128r = Scalar.e(\n '21888242871839275222246405745257275088548364400416034343698204186575808495617'\n);\n\nconst bls12381q = Scalar.e(\n '1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab',\n 16\n);\nconst bn128q = Scalar.e(\n '21888242871839275222246405745257275088696311157297823662689037894645226208583'\n);\n\nexport async function getCurveFromR(r: bigint) {\n let curve;\n if (Scalar.eq(r, bn128r)) {\n curve = await buildBn128();\n } else if (Scalar.eq(r, bls12381r)) {\n curve = await buildBls12381();\n } else {\n throw new Error(`Curve not supported: ${Scalar.toString(r)}`);\n }\n return curve;\n}\n\nexport async function getCurveFromQ(q: bigint) {\n let curve;\n if (Scalar.eq(q, bn128q)) {\n curve = await buildBn128();\n } else if (Scalar.eq(q, bls12381q)) {\n curve = await buildBls12381();\n } else {\n throw new Error(`Curve not supported: ${Scalar.toString(q)}`);\n }\n return curve;\n}\n\nexport async function getCurveFromName(name: string) {\n let curve;\n const normName = normalizeName(name);\n if (['BN128', 'BN254', 'ALTBN128'].indexOf(normName) >= 0) {\n curve = await buildBn128();\n } else if (['BLS12381'].indexOf(normName) >= 0) {\n curve = await buildBls12381();\n } else {\n throw new Error(`Curve not supported: ${name}`);\n }\n return curve;\n\n function normalizeName(n: string) {\n return (n.toUpperCase().match(/[A-Za-z0-9]+/g) || []).join('');\n }\n}\n","import { Groth16Proof } from 'snarkjs';\nimport { utils } from 'ffjavascript';\nconst { unstringifyBigInts } = utils;\n\nimport * as curves from './curve';\n\nconst Bytes2Str = (arr: number[]) => {\n\tlet str = '';\n\tfor (let i = 0; i < arr.length; i++) {\n\t\tlet tmp = arr[i].toString(16);\n\t\tif (tmp.length == 1) {\n\t\t\ttmp = '0' + tmp;\n\t\t}\n\t\tstr += tmp;\n\t}\n\treturn str;\n};\n\nlet BN128Curve: any = null;\n\nexport const adaptToUncompressed = async (proof: Groth16Proof) => {\n\tconst p = unstringifyBigInts(proof);\n\n\tlet curve = BN128Curve;\n\tif (!curve) {\n\t\tBN128Curve = await curves.getCurveFromName('BN128');\n\t\tcurve = BN128Curve;\n\t}\n\n\t// convert u8 array(little-endian order)to uncompressed type(big-endian order and on bls12_381 curve)\n\t// which can be convert into Affine type in bellman\n\tconst pi_a = curve.G1.toUncompressed(curve.G1.fromObject(p.pi_a));\n\tconst pi_b = curve.G2.toUncompressed(curve.G2.fromObject(p.pi_b));\n\tconst pi_c = curve.G1.toUncompressed(curve.G1.fromObject(p.pi_c));\n\n\treturn {\n\t\ta: Bytes2Str(Array.from(pi_a)),\n\t\tb: Bytes2Str(Array.from(pi_b)),\n\t\tc: Bytes2Str(Array.from(pi_c)),\n\t};\n};\n","import { genKeypair } from './keys';\nimport * as BabyJub from '@zk-kit/baby-jubjub';\nimport { PubKey } from './types';\nimport { genRandomBabyJubValue } from './babyjub';\n\nconst F = BabyJub.Fr;\n\n/*\n * Converts an arbitrary BigInt, which must be less than the BabyJub field\n * size, into a Message. Each Message has a BabyJub curve point, and an\n * x-increment.\n *\n * @param original The value to encode. It must be less than the BabyJub field\n * size.\n */\nconst encodeToMessage = (original: bigint, randomKey = genKeypair()) => {\n const xIncrement = F.e(F.sub(randomKey.pubKey[0], original));\n\n return {\n point: {\n x: randomKey.pubKey[0],\n y: randomKey.pubKey[1]\n },\n xIncrement\n };\n};\n\n/*\n * Converts a Message into the original value.\n * The original value is the x-value of the BabyJub point minus the\n * x-increment.\n * @param message The message to convert.\n */\nconst decodeMessage = (message: { point: { x: bigint; y: bigint }; xIncrement: bigint }) => {\n const decoded = BigInt(F.e(F.sub(message.point.x, message.xIncrement)));\n\n return decoded;\n};\n\nconst encrypt = (plaintext: bigint, pubKey: PubKey, randomVal = genRandomBabyJubValue()) => {\n const message = encodeToMessage(plaintext);\n\n const c1Point = BabyJub.mulPointEscalar(BabyJub.Base8, randomVal);\n\n const pky = BabyJub.mulPointEscalar(pubKey, randomVal);\n const c2Point = BabyJub.addPoint([message.point.x, message.point.y], pky);\n\n return {\n c1: { x: c1Point[0], y: c1Point[1] },\n c2: { x: c2Point[0], y: c2Point[1] },\n xIncrement: message.xIncrement\n };\n};\n\nexport const encryptOdevity = (\n isOdd: boolean,\n pubKey: PubKey,\n randomVal = genRandomBabyJubValue()\n) => {\n let i = 0n;\n let message = encodeToMessage(123n, genKeypair(randomVal + i));\n while ((message.point.x % 2n === 1n) !== isOdd) {\n i++;\n message = encodeToMessage(123n, genKeypair(randomVal + i));\n }\n\n const c1Point = BabyJub.mulPointEscalar(BabyJub.Base8, randomVal);\n\n const pky = BabyJub.mulPointEscalar(pubKey, randomVal);\n const c2Point = BabyJub.addPoint([message.point.x, message.point.y], pky);\n\n return {\n c1: { x: c1Point[0], y: c1Point[1] },\n c2: { x: c2Point[0], y: c2Point[1] },\n xIncrement: message.xIncrement\n };\n};\n","import type { DerivePathParams } from '../../types';\nimport { EdDSAPoseidonKeypair } from '../keypairs/eddsa-poseidon';\n\n/**\n * @description Get eddsaposeidon derive path for MACI\n * @param derivePathParams\n */\nexport const getDerivePathForMACI = (derivePathParams: DerivePathParams = {}) => {\n const { accountIndex = 0, isExternal = false, addressIndex = 0 } = derivePathParams;\n return `m/44'/118'/${accountIndex}'/${isExternal ? 1 : 0}/${addressIndex}`;\n};\n\n/**\n * the format is m/44'/118'/accountIndex'/${isExternal ? 1 : 0}/addressIndex\n *\n * accountIndex is the index of the account, default is 0.\n *\n * isExternal is the type of the address, default is false. Usually, the external address is used to receive coins. The internal address is used to change coins.\n *\n * addressIndex is the index of the address, default is 0. It's used to generate multiple addresses for one account.\n *\n * @description Get keypair from mnemonics and derive path\n * @param mnemonics\n * @param derivePathParams\n */\nexport const getKeyPair = (mnemonics: string, derivePathParams: DerivePathParams = {}) => {\n const derivePath = getDerivePathForMACI(derivePathParams);\n return EdDSAPoseidonKeypair.deriveKeypair(mnemonics, derivePath);\n};\n","import { generateMnemonic as genMnemonic } from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\n\nexport const generateMnemonic = (numberOfWords: 12 | 24 = 24) => {\n const strength = numberOfWords === 12 ? 128 : 256;\n return genMnemonic(wordlist, strength);\n};\n","import {\n\tEdDSAPoseidonKeypair,\n\tEdDSAPoseidonPublicKey,\n} from '../keypairs/eddsa-poseidon';\nimport { getKeyPair } from './keypair';\nimport { generateMnemonic } from './crypto';\nimport type { AccountMangerParams, DerivePathParams } from 'src/types';\n\nexport { generateMnemonic } from './crypto';\nexport { getKeyPair } from './keypair';\n\nexport class MaciAccount {\n\tprivate mnemonic: string;\n\tprivate secretKey: string | bigint;\n\tpublic currentKeypair: EdDSAPoseidonKeypair;\n\tpublic currentPubkey: EdDSAPoseidonPublicKey;\n\n\t/**\n\t * Support the following ways to init the SuiToolkit:\n\t * 1. mnemonics\n\t * 2. secretKey (base64 or hex)\n\t * If none of them is provided, will generate a random mnemonics with 24 words.\n\t *\n\t * @param mnemonics, 12 or 24 mnemonics words, separated by space\n\t * @param secretKey, base64 or hex string or Bech32 string, when mnemonics is provided, secretKey will be ignored\n\t */\n\tconstructor({ mnemonic, secretKey }: AccountMangerParams = {}) {\n\t\t// If the mnemonics or secretKey is provided, use it\n\t\t// Otherwise, generate a random mnemonics with 24 words\n\t\tthis.mnemonic = mnemonic || '';\n\t\tthis.secretKey = secretKey || '';\n\t\tif (!this.mnemonic && !this.secretKey) {\n\t\t\tthis.mnemonic = generateMnemonic(24);\n\t\t}\n\n\t\t// Init the current account\n\t\tthis.currentKeypair = this.secretKey\n\t\t\t? this.parseSecretKey(this.secretKey)\n\t\t\t: getKeyPair(this.mnemonic);\n\t\tthis.currentPubkey = this.currentKeypair.getPublicKey();\n\t}\n\n\t/**\n\t * Check if the secretKey starts with bench32 format\n\t */\n\tparseSecretKey(secretKey: string | bigint) {\n\t\treturn EdDSAPoseidonKeypair.fromSecretKey(secretKey);\n\t}\n\n\t/**\n\t * if derivePathParams is not provided or mnemonics is empty, it will return the currentKeyPair.\n\t * else:\n\t * it will generate keyPair from the mnemonic with the given derivePathParams.\n\t */\n\tgetKeyPair(derivePathParams?: DerivePathParams) {\n\t\tif (!derivePathParams || !this.mnemonic) return this.currentKeypair;\n\t\treturn getKeyPair(this.mnemonic, derivePathParams);\n\t}\n\n\t/**\n\t * Switch the current account with the given derivePathParams.\n\t * This is only useful when the mnemonic is provided. For secretKey mode, it will always use the same account.\n\t */\n\tswitchAccount(derivePathParams: DerivePathParams) {\n\t\tif (this.mnemonic) {\n\t\t\tthis.currentKeypair = getKeyPair(this.mnemonic, derivePathParams);\n\t\t\tthis.currentPubkey = this.currentKeypair.getPublicKey();\n\t\t}\n\t}\n}\n","import { VoterClient } from 'src/voter';\n\nexport function genAccounts(num: number): VoterClient[] {\n\treturn Array.from({ length: num }, () => new VoterClient());\n}\n","import { bech32 } from 'bech32';\nimport { packPubKey, PubKey } from 'src/libs/crypto';\n\nfunction verifyIsBech32(address: string): Error | undefined {\n\ttry {\n\t\tbech32.decode(address);\n\t} catch (error) {\n\t\treturn error instanceof Error ? error : new Error('Unknown error');\n\t}\n\n\treturn undefined;\n}\n\nexport function isValidAddress(address: string): boolean {\n\t// An address is valid if it starts with `dora` and is Bech32 format.\n\treturn address.startsWith('dora') && verifyIsBech32(address) === undefined;\n}\n\n/**\n * Converts a hexadecimal string to a decimal string.\n * @param hexString - The hexadecimal string to convert.\n * @returns The decimal string representation of the input.\n */\nexport function hexToDecimalString(hexString: string) {\n\tconst decimalString = BigInt('0x' + hexString).toString(10);\n\treturn decimalString;\n}\n\n/**\n * Converts a hexadecimal string to a BigInt.\n * @param hexString - The hexadecimal string to convert.\n * @returns The BigInt representation of the input.\n */\nexport function hexToBigInt(hexString: string) {\n\treturn BigInt('0x' + hexString);\n}\n\nfunction padWithZerosIfNeeded(inputString: string) {\n\tif (inputString.length === 64) {\n\t\treturn inputString;\n\t} else if (inputString.length < 64) {\n\t\tconst zerosToAdd = 64 - inputString.length;\n\t\tconst zeroPadding = '0'.repeat(zerosToAdd);\n\t\treturn zeroPadding + inputString;\n\t}\n\tthrow new Error('Invalid input string length');\n}\n\n/**\n * Parses a public key string into its x and y coordinates.\n * @param publickKey - The public key string to parse (128 characters long).\n * @returns An object containing the x and y coordinates as decimal strings.\n */\nexport function decompressPublicKey(compressedPubkey: string) {\n\tconst x = compressedPubkey.slice(0, 64);\n\tconst y = compressedPubkey.slice(64);\n\n\treturn {\n\t\tx: hexToDecimalString(x),\n\t\ty: hexToDecimalString(y),\n\t};\n}\n\nexport function compressPublicKey(decompressedPubkey: any[]) {\n\tconst x = decompressedPubkey[0];\n\tconst y = decompressedPubkey[1];\n\tconst compressedPubkey =\n\t\tpadWithZerosIfNeeded(x.toString(16)) +\n\t\tpadWithZerosIfNeeded(y.toString(16));\n\treturn compressedPubkey;\n}\n\nexport function transformPubkey(oldPubkey: string) {\n\tconst x = oldPubkey.slice(0, 64);\n\tconst y = oldPubkey.slice(64);\n\n\tconst pubkey: PubKey = [hexToBigInt(x), hexToBigInt(y)];\n\tconsole.log(pubkey);\n\tconsole.log([hexToDecimalString(x), hexToDecimalString(y)]);\n\tconst packedPubkey = packPubKey(pubkey);\n\treturn packedPubkey;\n}\n","import { ERROR } from '../errors/types';\nimport { Http } from '../../libs';\nimport {\n OperatorsGraphqlResponse,\n RoundsCountGraphqlResponse,\n OperatorResponse,\n OperatorsResponse,\n OperatorDelayOperationsResponse,\n OperatorDelayOperationsGraphqlResponse,\n MissRateResponse,\n MissRateType,\n TransactionsGraphqlResponse,\n RoundsGraphqlResponse,\n} from '../../types';\nimport { isValidAddress } from '../../utils';\nimport { handleError, ErrorType } from '../errors';\n\nexport class Operator {\n public http: Http;\n public amaciRegistryContract: string;\n\n constructor(http: Http, amaciRegistryContract: string) {\n this.http = http;\n this.amaciRegistryContract = amaciRegistryContract;\n }\n\n async getOperatorByAddress(address: string): Promise<OperatorResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid operator address format',\n type: ERROR.ERROR_OPERATOR_INVALID_ADDRESS,\n },\n };\n }\n\n const OPERATORS_QUERY = `query {\n operators(filter: { operatorAddress: { equalTo: \"${address}\" } }) {\n edges {\n node {\n id\n validatorAddress\n operatorAddress\n coordinatorPubkeyX\n coordinatorPubkeyY\n identity\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<OperatorsGraphqlResponse>(\n OPERATORS_QUERY,\n ''\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.operators ||\n !response.data.operators.edges ||\n response.data.operators.edges.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No operator found for address ${address}`,\n type: ERROR.ERROR_OPERATOR_NOT_FOUND,\n },\n };\n }\n\n const operatorResponse = response.data.operators.edges[0].node;\n\n if (\n operatorResponse.operatorAddress === '' ||\n operatorResponse.coordinatorPubkeyX === ''\n ) {\n operatorResponse.activeRoundsCount = 0;\n operatorResponse.completedRoundsCount = 0;\n } else {\n const ROUNDS_QUERY = `query {\n activeRoundsCount: rounds(filter: {\n period: {notEqualTo: \"Ended\"},\n operator: {equalTo: \"${operatorResponse.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n completedRoundsCount: rounds(filter: {\n period: {equalTo: \"Ended\"},\n operator: {equalTo: \"${operatorResponse.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n }`;\n\n const roundsCount =\n await this.http.fetchGraphql<RoundsCountGraphqlResponse>(\n ROUNDS_QUERY,\n ''\n );\n operatorResponse.activeRoundsCount =\n roundsCount.data.activeRoundsCount.totalCount;\n operatorResponse.completedRoundsCount =\n roundsCount.data.completedRoundsCount.totalCount;\n }\n\n operatorResponse.logoUrl = '';\n operatorResponse.moniker = '';\n const identity = response.data.operators.edges[0].node.identity;\n\n const keybaseUrl = `https://keybase.io/_/api/1.0/user/lookup.json?key_suffix=${identity}`;\n const keybaseResponse = await this.http.fetch(keybaseUrl);\n const keybaseData = await keybaseResponse.json();\n\n if (keybaseData.status.code === 0) {\n if (keybaseData.them[0]?.pictures?.primary?.url) {\n operatorResponse.logoUrl = keybaseData.them[0].pictures.primary.url;\n }\n if (keybaseData.them[0]?.basics?.username_cased) {\n operatorResponse.moniker = keybaseData.them[0].profile.full_name;\n }\n }\n const operator: OperatorResponse = {\n code: 200,\n data: {\n operator: operatorResponse,\n },\n };\n return operator;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getOperatorDelayOperationsByAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<OperatorDelayOperationsResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid operator address format',\n type: ERROR.ERROR_OPERATOR_INVALID_ADDRESS,\n },\n };\n }\n\n const OPERATORS_QUERY = `query ($limit: Int, $after: Cursor) {\n operatorDelayOperations(first: $limit, after: $after, filter: {operatorAddress: {equalTo: \"${address}\"}}, orderBy: [TIMESTAMP_DESC]) {\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n blockHeight\n delayProcessDmsgCount\n delayDuration\n delayReason\n delayType\n id\n nodeId\n operatorAddress\n timestamp\n roundAddress\n }\n }\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<OperatorDelayOperationsGraphqlResponse>(\n OPERATORS_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.operatorDelayOperations ||\n !response.data.operatorDelayOperations.edges ||\n response.data.operatorDelayOperations.edges.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No operatorDelayOperations found for address ${address}`,\n type: ERROR.ERROR_OPERATOR_DELAY_HISTORY_NOT_FOUND,\n },\n };\n }\n const operator: OperatorDelayOperationsResponse = {\n code: 200,\n data: response.data,\n };\n return operator;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getOperators(\n after: string,\n limit?: number\n ): Promise<OperatorsResponse> {\n try {\n const OPERATORS_QUERY = `query ($limit: Int, $after: Cursor) {\n operators(first: $limit, after: $after) {\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n validatorAddress\n operatorAddress\n coordinatorPubkeyX\n coordinatorPubkeyY\n identity\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<OperatorsGraphqlResponse>(\n OPERATORS_QUERY,\n after,\n limit\n );\n if (\n !response ||\n !response.data ||\n !response.data.operators ||\n !response.data.operators.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No operators found',\n type: ERROR.ERROR_OPERATORS_NOT_FOUND,\n },\n };\n }\n const operatorsWithRounds = await Promise.all(\n response.data.operators.edges.map(async (edge) => {\n const operator = edge.node;\n if (\n operator.operatorAddress === '' ||\n operator.coordinatorPubkeyX === ''\n ) {\n operator.activeRoundsCount = 0;\n operator.completedRoundsCount = 0;\n return operator;\n }\n const ROUNDS_QUERY = `query {\n activeRoundsCount: rounds(filter: {\n period: {notEqualTo: \"Ended\"},\n operator: {equalTo: \"${operator.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n completedRoundsCount: rounds(filter: {\n period: {equalTo: \"Ended\"},\n operator: {equalTo: \"${operator.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n }`;\n\n const roundsCount =\n await this.http.fetchGraphql<RoundsCountGraphqlResponse>(\n ROUNDS_QUERY,\n ''\n );\n operator.activeRoundsCount =\n roundsCount.data.activeRoundsCount.totalCount;\n operator.completedRoundsCount =\n roundsCount.data.completedRoundsCount.totalCount;\n\n return operator;\n })\n );\n\n response.data.operators.edges = operatorsWithRounds.map(\n (operator, index) => ({\n cursor: response.data.operators.edges[index].cursor,\n node: operator,\n })\n );\n\n await Promise.all(\n response.data.operators.edges.map(async (edge) => {\n const operator = edge.node;\n const identity = operator.identity;\n operator.logoUrl = '';\n operator.moniker = '';\n\n // try {\n const keybaseUrl = `https://keybase.io/_/api/1.0/user/lookup.json?key_suffix=${identity}`;\n const keybaseResponse = await this.http.fetch(keybaseUrl);\n const keybaseData = await keybaseResponse.json();\n\n if (keybaseData.status.code === 0) {\n if (keybaseData.them[0]?.pictures?.primary?.url) {\n operator.logoUrl = keybaseData.them[0].pictures.primary.url;\n }\n if (keybaseData.them[0]?.basics?.username_cased) {\n operator.moniker = keybaseData.them[0].profile.full_name;\n }\n }\n // } catch (error) {\n // console.error('Error fetching keybase data:', error);\n // }\n return operator;\n })\n );\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async queryMissRate(\n address: string,\n durationDay: number\n ): Promise<MissRateResponse> {\n try {\n const now = new Date();\n const startTime = new Date(\n now.getTime() - durationDay * 24 * 60 * 60 * 1000\n );\n const startTimestamp = Math.floor(startTime.getTime() / 1000);\n const endNanosTimestamp = Math.floor(startTime.getTime() * 1000000);\n const txTimestamp = Math.floor(startTime.getTime());\n\n const QUERY = `query ($limit: Int, $after: Cursor) {\n operatorDelayOperations(\n first: $limit,\n after: $after,\n filter: {\n operatorAddress: {equalTo: \"${address}\"},\n timestamp: { greaterThanOrEqualTo: \"${startTimestamp}\" }\n },\n orderBy: [TIMESTAMP_DESC]\n ) {\n edges {\n node {\n blockHeight\n delayProcessDmsgCount\n delayDuration\n delayReason\n delayType\n id\n nodeId\n operatorAddress\n timestamp\n roundAddress\n }\n }\n }\n }`;\n\n const ROUNDS_QUERY = `query ($limit: Int, $after: Cursor) {\n rounds(first: $limit, after: $after, \n filter: {\n operator: {equalTo: \"${address}\"},\n votingEnd: { greaterThanOrEqualTo: \"${endNanosTimestamp}\" }\n },\n orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n cursor\n }\n }\n }\n `;\n\n const roundsResponse =\n await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUNDS_QUERY,\n '',\n 9999\n );\n const roundContractAddresses =\n roundsResponse?.data?.rounds?.edges?.map(\n (edge) => edge.node.contractAddress\n ) || [];\n\n const TRANSACTIONS_QUERY = `query transactions($limit: Int, $after: Cursor) {\n transactions(first: $limit, after: $after, \n filter: {\n timestamp: { greaterThanOrEqualTo: \"${txTimestamp}\" },\n type: { equalTo: \"op:procDeactivate\" },\n contractAddress: { in: ${JSON.stringify(roundContractAddresses)} }\n },\n orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }\n }\n }`;\n\n const [delayResponse, transactionsResponse] = await Promise.all([\n this.http.fetchGraphql<OperatorDelayOperationsGraphqlResponse>(\n QUERY,\n '',\n 9999\n ),\n this.http.fetchGraphql<TransactionsGraphqlResponse>(\n TRANSACTIONS_QUERY,\n '',\n 9999\n ),\n ]);\n\n const dailyStats = new Map<string, MissRateType>();\n\n const endDate = new Date();\n for (let i = 0; i < durationDay; i++) {\n const date = new Date(endDate.getTime() - i * 24 * 60 * 60 * 1000)\n .toISOString()\n .split('T')[0];\n dailyStats.set(date, {\n delayCount: 0,\n deactivateDelay: {\n count: 0,\n dmsgCount: 0,\n },\n tallyDelay: {\n count: 0,\n },\n totalDelayDuration: 0,\n avgDelayDuration: 0,\n tallyCount: 0,\n deactivateCount: 0,\n missRate: 0,\n });\n }\n\n delayResponse.data.operatorDelayOperations.edges.forEach(({ node }) => {\n const date = new Date(parseInt(node.timestamp) * 1000)\n .toISOString()\n .split('T')[0];\n\n if (dailyStats.has(date)) {\n const stats = dailyStats.get(date)!;\n stats.delayCount++;\n stats.totalDelayDuration += parseInt(node.delayDuration);\n if (node.delayType === 'deactivate_delay') {\n stats.deactivateDelay.count++;\n stats.deactivateDelay.dmsgCount += node.delayProcessDmsgCount;\n } else if (node.delayType === 'tally_delay') {\n stats.tallyDelay.count++;\n }\n }\n });\n\n if (roundsResponse?.data?.rounds?.edges) {\n roundsResponse.data.rounds.edges.forEach(({ node }) => {\n const date = new Date(parseInt(node.votingEnd) / 1000000)\n .toISOString()\n .split('T')[0];\n if (dailyStats.has(date)) {\n const stats = dailyStats.get(date)!;\n stats.tallyCount++;\n }\n });\n }\n\n if (transactionsResponse?.data?.transactions?.edges) {\n transactionsResponse.data.transactions.edges.forEach(({ node }) => {\n const date = new Date(parseInt(node.timestamp))\n .toISOString()\n .split('T')[0];\n if (dailyStats.has(date)) {\n const stats = dailyStats.get(date)!;\n stats.deactivateCount++;\n }\n });\n }\n\n return {\n code: 200,\n data: {\n missRate: Array.from(dailyStats.entries())\n .map(([date, stats]) => ({\n date,\n delayCount: stats.delayCount,\n deactivateDelay: stats.deactivateDelay,\n tallyDelay: stats.tallyDelay,\n totalDelayDuration: stats.totalDelayDuration,\n avgDelayDuration:\n stats.delayCount > 0\n ? stats.totalDelayDuration / stats.delayCount\n : 0,\n tallyCount: stats.tallyCount,\n deactivateCount: stats.deactivateCount,\n missRate:\n stats.deactivateCount + stats.tallyCount > 0\n ? parseFloat(\n (\n (stats.deactivateDelay.count + stats.tallyDelay.count) /\n (stats.deactivateCount + stats.tallyCount)\n ).toFixed(2)\n )\n : 0,\n }))\n .sort((a, b) => b.date.localeCompare(a.date)),\n },\n };\n } catch (error) {\n return {\n code: 404,\n error: {\n message: 'Query miss rate failed',\n type: ERROR.ERROR_QUERY_MISS_RATE_FAILED,\n },\n };\n }\n }\n}\n","import {\n RoundsResponse,\n RoundResponse,\n RoundGraphqlResponse,\n RoundsGraphqlResponse,\n SelectiveRoundResponse,\n SelectiveRoundGraphqlResponse,\n} from '../../types';\nimport { Http } from '../../libs';\nimport { isValidAddress } from '../../utils';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Round {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getRoundById(address: string): Promise<RoundResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const ROUND_QUERY = `query {\n round(id: \"${address}\") {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n identity\n }\n }`;\n\n const response = await this.http.fetchGraphql<RoundGraphqlResponse>(\n ROUND_QUERY,\n ''\n );\n\n if (!response || !response.data || !response.data.round) {\n return {\n code: 404,\n error: {\n message: `No round data found for address ${address}`,\n type: ERROR.ERROR_ROUND_NOT_FOUND,\n },\n };\n }\n\n response.data.round.operatorLogoUrl = '';\n response.data.round.operatorMoniker = '';\n\n const identity = response.data.round.identity;\n // try {\n const keybaseUrl = `https://keybase.io/_/api/1.0/user/lookup.json?key_suffix=${identity}`;\n const keybaseResponse = await this.http.fetch(keybaseUrl);\n const keybaseData = await keybaseResponse.json();\n\n if (keybaseData.status.code === 0) {\n if (keybaseData.them[0]?.pictures?.primary?.url) {\n response.data.round.operatorLogoUrl =\n keybaseData.them[0].pictures.primary.url;\n }\n if (keybaseData.them[0]?.basics?.username_cased) {\n response.data.round.operatorMoniker =\n keybaseData.them[0].profile.full_name;\n }\n }\n // } catch (error) {\n // console.error('Error fetching keybase data:', error);\n // }\n\n const results = JSON.parse(response.data.round.results);\n const votes = results.map((r: string) => ({\n v: Number(r.slice(0, -24)),\n v2: Number(r.slice(-24)),\n }));\n const totalVotes = votes.reduce(\n (s: { v: number; v2: number }, c: { v: number; v2: number }) => ({\n v: s.v + c.v,\n v2: s.v2 + c.v2,\n }),\n { v: 0, v2: 0 }\n );\n const resultsList = votes.map((v: { v: number; v2: number }) => ({\n v: totalVotes.v === 0 ? '0.0' : ((v.v / totalVotes.v) * 100).toFixed(3),\n v2:\n totalVotes.v2 === 0\n ? '0.0'\n : ((v.v2 / totalVotes.v2) * 100).toFixed(3),\n }));\n response.data.round.resultsList = resultsList;\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n /**\n * Get round information with selective fields\n * @param address Round address\n * @param fields Array of fields to return, returns all fields if empty\n * @returns Round information response\n */\n async getRoundWithFields(\n address: string,\n fields?: string[]\n ): Promise<SelectiveRoundResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const defaultFields = [\n 'id',\n 'blockHeight',\n 'txHash',\n 'caller',\n 'admin',\n 'operator',\n 'contractAddress',\n 'circuitName',\n 'timestamp',\n 'votingStart',\n 'votingEnd',\n 'status',\n 'period',\n 'actionType',\n 'roundTitle',\n 'roundDescription',\n 'roundLink',\n 'coordinatorPubkeyX',\n 'coordinatorPubkeyY',\n 'voteOptionMap',\n 'results',\n 'allResult',\n 'gasStationEnable',\n 'totalGrant',\n 'baseGrant',\n 'totalBond',\n 'circuitType',\n 'circuitPower',\n 'certificationSystem',\n 'codeId',\n 'maciType',\n 'voiceCreditAmount',\n 'preDeactivateRoot',\n 'identity',\n // 'funds',\n ];\n\n if (fields && fields.length > 0) {\n const invalidFields = fields.filter(\n (field) => !defaultFields.includes(field)\n );\n if (invalidFields.length > 0) {\n return {\n code: 400,\n error: {\n message: `Invalid fields: ${invalidFields.join(', ')}`,\n type: ERROR.ERROR_INVALID_FIELDS,\n },\n };\n }\n }\n\n const selectedFields =\n fields && fields.length > 0 ? fields : defaultFields;\n\n const fieldString = selectedFields.join('\\n ');\n\n const ROUND_QUERY = `query {\n round(id: \"${address}\") {\n ${fieldString}\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<SelectiveRoundGraphqlResponse>(\n ROUND_QUERY,\n ''\n );\n\n if (!response || !response.data || !response.data.round) {\n return {\n code: 404,\n error: {\n message: `No round data found for address ${address}`,\n type: ERROR.ERROR_ROUND_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRounds(after: string, limit?: number): Promise<RoundsResponse> {\n try {\n const ROUND_HISTORY_QUERY = `query ($limit: Int, $after: Cursor) {\n rounds(first: $limit, after: $after, orderBy: [TIMESTAMP_DESC]){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n cursor\n }\n }\n }\n `;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No rounds data found',\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRoundsByCircuitName(\n circuitName: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n try {\n const ROUND_HISTORY_QUERY = `query ($limit: Int, $after: Cursor) {\n rounds(first: $limit, after: $after, filter:{\n circuitName:{\n equalTo: \"${circuitName}\"\n }\n }, orderBy: [TIMESTAMP_DESC]){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n }\n }\n }\n `;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: `No rounds data found for circuit name ${circuitName}`,\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRoundsByStatus(\n status: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n let filterCondition = '';\n\n switch (status) {\n case 'Created':\n filterCondition = `\n or: [\n { votingStart: { equalTo: \"0\" } },\n { and: [\n { votingStart: { notEqualTo: \"0\" } },\n { votingStart: { greaterThan: \"${currentTime.toString()}\" } }\n ] }\n ]\n `;\n break;\n case 'Ongoing':\n filterCondition = `\n or: [\n { votingStart: { equalTo: \"0\" }},\n { votingStart: { lessThanOrEqualTo: \"${currentTime.toString()}\" }, votingEnd: { greaterThan: \"${currentTime.toString()}\" } }\n ]\n `;\n break;\n case 'Tallying':\n filterCondition = `\n and: [\n { status: { notEqualTo: \"Closed\" } },\n { votingEnd: { lessThan: \"${currentTime.toString()}\" } },\n { votingEnd: { notEqualTo: \"0\" } }\n ]\n `;\n break;\n case 'Closed':\n filterCondition = `status: { equalTo: \"Closed\" }`;\n break;\n default:\n return {\n code: 400,\n error: {\n message: `Invalid status: ${status}`,\n type: ERROR.ERROR_ROUND_INVALID_STATUS,\n },\n };\n }\n\n const ROUND_HISTORY_QUERY = `query ($limit: Int!, $after: Cursor) {\n rounds(first: $limit, after: $after, filter: { ${filterCondition} }, orderBy: [TIMESTAMP_DESC]) {\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: `No rounds data found for status ${status}`,\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRoundsByOperator(\n operator: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n try {\n if (!isValidAddress(operator)) {\n return {\n code: 400,\n error: {\n message: 'Invalid operator address format',\n type: ERROR.ERROR_OPERATOR_INVALID_ADDRESS,\n },\n };\n }\n\n const ROUND_HISTORY_QUERY = `query ($limit: Int!, $after: Cursor) {\n rounds(first: $limit, after: $after, filter:{\n operator:{\n equalTo: \"${operator}\"\n }\n }, orderBy: [TIMESTAMP_DESC]){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: `No rounds data found for operator ${operator}`,\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import {\n TransactionsResponse,\n TransactionResponse,\n TransactionGraphqlResponse,\n TransactionsGraphqlResponse,\n} from '../../types';\nimport { Http } from '../../libs';\nimport { isValidAddress } from '../../utils';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Transaction {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getTransactionByHash(txHash: string): Promise<TransactionResponse> {\n try {\n const TRANSACTION_QUERY = `query {\n transaction(id: \"${txHash}\") {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }`;\n\n const response = await this.http.fetchGraphql<TransactionGraphqlResponse>(\n TRANSACTION_QUERY,\n ''\n );\n\n if (!response || !response.data || !response.data.transaction) {\n return {\n code: 404,\n error: {\n message: `No transaction found for txHash ${txHash}`,\n type: ERROR.ERROR_TRANSACTION_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getTransactions(\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n try {\n const TRANSACTION_HISTORY_QUERY = `query transactions($limit: Int, $after: Cursor) {\n transactions(first: $limit, after: $after, orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<TransactionsGraphqlResponse>(\n TRANSACTION_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.transactions ||\n !response.data.transactions.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No transactions data found',\n type: ERROR.ERROR_TRANSACTIONS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getTransactionsByContractAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const TRANSACTION_HISTORY_QUERY = `query transactions($limit: Int!, $after: Cursor) {\n transactions(first: $limit, after: $after, filter:{\n contractAddress:{\n equalTo: \"${address}\"\n }\n }, orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<TransactionsGraphqlResponse>(\n TRANSACTION_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.transactions ||\n !response.data.transactions.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No transactions data found',\n type: ERROR.ERROR_TRANSACTIONS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import { Http } from '../../libs';\nimport { isValidAddress } from '../../utils';\nimport { ProofResponse, ProofGraphqlResponse } from '../../types';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Proof {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getProofByContractAddress(address: string): Promise<ProofResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const PROOF_QUERY = `query HomePage {\n proofData(first: 100, filter:{\n contractAddress:{\n equalTo: \"${address}\"\n }\n } ,orderBy: [TIMESTAMP_DESC]\n ){\n nodes {\n id\n blockHeight\n txHash\n contractAddress\n timestamp\n actionType\n commitment\n proof\n }\n }\n }\n `;\n\n const response = await this.http.fetchGraphql<ProofGraphqlResponse>(\n PROOF_QUERY,\n ''\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.proofData ||\n !response.data.proofData.nodes ||\n response.data.proofData.nodes.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No proof found for round address ${address}`,\n type: ERROR.ERROR_PROOF_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import { Http } from '../../libs';\nimport {\n DeactivateMessage,\n SignUpEventsGraphqlResponse,\n SignUpEventsResponse,\n} from '../../types';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Event {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getSignUpEventByPubKey(\n contractAddress: string,\n pubKey: bigint[]\n ): Promise<SignUpEventsResponse> {\n try {\n const STATE_IDX_BY_PUB_KEY_QUERY = `\nquery signUpEvents($limit: Int, $after: Cursor) {\n\tsignUpEvents(\n first: $limit, after: $after,\n\t\tfilter: {\n\t\t\tcontractAddress: {\n\t\t\t\tequalTo: \"${contractAddress}\"\n\t\t\t}\n\t\t\tpubKey: {\n\t\t\t\tequalTo: \"${pubKey.map((n) => `\\\\\"${n}\\\\\"`).join(',')}\"\n\t\t\t}\n\t\t}) {\n\t\tnodes {\n\t\t\tid\n\t\t\tblockHeight\n\t\t\ttxHash\n\t\t\tcontractAddress\n\t\t\ttimestamp\n\t\t\tpubKey\n\t\t\tstateIdx\n\t\t\tbalance\n\t\t}\n\t}\n}\n `;\n\n const response =\n await this.http.fetchGraphql<SignUpEventsGraphqlResponse>(\n STATE_IDX_BY_PUB_KEY_QUERY,\n ''\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.signUpEvents ||\n !response.data.signUpEvents.nodes ||\n response.data.signUpEvents.nodes.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No signUpEvents found for pubKey ${pubKey\n .map((n) => `\"${n}\"`)\n .join(',')}`,\n type: ERROR.ERROR_SIGN_UP_EVENTS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: {\n signUpEvents: response.data.signUpEvents.nodes,\n },\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async fetchAllDeactivateLogs(contractAddress: string) {\n const DEACTIVATE_MESSAGE_QUERY = `query ($limit: Int, $offset: Int) {\n deactivateMessages(\n first: $limit,\n offset: $offset,\n orderBy: [BLOCK_HEIGHT_ASC],\n filter: {\n maciContractAddress: { \n equalTo: \"${contractAddress}\" \n },\n }\n ) {\n\t totalCount\n\t pageInfo {\n endCursor\n hasNextPage\n\t }\n nodes {\n id\n blockHeight\n timestamp\n txHash\n deactivateMessage\n maciContractAddress\n maciOperator\n }\n }\n}`;\n const ds = await this.http.fetchAllGraphqlPages<DeactivateMessage>(\n DEACTIVATE_MESSAGE_QUERY,\n {}\n );\n\n return ds.reduce(\n (s, c) => [...s, ...JSON.parse(c.deactivateMessage)],\n [] as string[][]\n );\n }\n}\n","import {\n BalanceResponse,\n RoundResponse,\n RoundsResponse,\n OperatorResponse,\n OperatorsResponse,\n CircuitResponse,\n TransactionResponse,\n TransactionsResponse,\n CircuitsResponse,\n ProofResponse,\n SignUpEventsResponse,\n OperatorDelayOperationsResponse,\n MissRateResponse,\n SelectiveRoundResponse,\n DeactivateMessage,\n} from '../../types';\nimport { IndexerParams } from './types';\nimport { Http } from '../http';\nimport {\n Round,\n UserAccount,\n Circuit,\n Operator,\n Proof,\n Transaction,\n Event,\n} from '../query';\n\n/**\n * @class Indexer\n * @description This class is used to interact with Maci Indexer.\n */\nexport class Indexer {\n public restEndpoint: string;\n public apiEndpoint: string;\n public registryAddress: string;\n\n public http: Http;\n public round: Round;\n public account: UserAccount;\n public circuit: Circuit;\n public operator: Operator;\n public proof: Proof;\n public transaction: Transaction;\n public event: Event;\n\n /**\n * @constructor\n * @param {IndexerParams} params - The parameters for the Maci Indexer instance.\n */\n constructor({\n restEndpoint,\n apiEndpoint,\n registryAddress,\n http,\n }: IndexerParams) {\n this.http = http;\n\n this.restEndpoint = restEndpoint;\n this.apiEndpoint = apiEndpoint;\n this.registryAddress = registryAddress;\n\n this.round = new Round(this.http);\n this.account = new UserAccount(this.http);\n this.circuit = new Circuit(this.http);\n this.operator = new Operator(this.http, this.registryAddress);\n this.proof = new Proof(this.http);\n this.transaction = new Transaction(this.http);\n this.event = new Event(this.http);\n }\n\n /**\n * @method balanceOf\n * @description Get the balance of a specific address.\n * @param {string} address - The address to check the balance for.\n * @returns {Promise<BalanceResponse>} The balance response.\n */\n async balanceOf(address: string): Promise<BalanceResponse> {\n return await this.account.balanceOf(address);\n }\n\n /**\n * @method getRoundById\n * @description Get a round by its ID.\n * @param {string} id - The ID of the round.\n * @returns {Promise<RoundResponse>} The round response.\n */\n async getRoundById(id: string): Promise<RoundResponse> {\n return await this.round.getRoundById(id);\n }\n\n /**\n * @method getRoundWithFields\n * @description Get a round by its address with selective fields.\n * @param {string} address - The address of the round.\n * @param {string[]} [fields] - The fields to retrieve.\n * @returns {Promise<SelectiveRoundResponse>} The round response.\n */\n async getRoundWithFields(\n address: string,\n fields?: string[]\n ): Promise<SelectiveRoundResponse> {\n return await this.round.getRoundWithFields(address, fields);\n }\n\n /**\n * @method getRounds\n * @description Get multiple rounds.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRounds(after: string, limit?: number): Promise<RoundsResponse> {\n return await this.round.getRounds(after, limit);\n }\n\n /**\n * @method getRoundsByStatus\n * @description Get rounds by their status.\n * @param {string} status - The status of the rounds to retrieve.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByStatus(\n status: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.round.getRoundsByStatus(status, after, limit);\n }\n\n /**\n * @method getRoundsByCircuitName\n * @description Get rounds by their circuit name.\n * @param {string} name - The name of the circuit.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByCircuitName(\n name: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.round.getRoundsByCircuitName(name, after, limit);\n }\n\n /**\n * @method getRoundsByOperator\n * @description Get rounds by their operator address.\n * @param {string} address - The address of the operator.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByOperator(\n address: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.round.getRoundsByOperator(address, after, limit);\n }\n\n /**\n * @method getOperatorByAddress\n * @description Get an operator by their address.\n * @param {string} address - The address of the operator.\n * @returns {Promise<OperatorResponse>} The operator response.\n */\n async getOperatorByAddress(address: string): Promise<OperatorResponse> {\n return await this.operator.getOperatorByAddress(address);\n }\n\n async getOperatorDelayOperationsByAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<OperatorDelayOperationsResponse> {\n return await this.operator.getOperatorDelayOperationsByAddress(\n address,\n after,\n limit\n );\n }\n\n async queryMissRate(\n address: string,\n durationDay: number\n ): Promise<MissRateResponse> {\n return await this.operator.queryMissRate(address, durationDay);\n }\n\n /**\n * @method getOperators\n * @description Get multiple operators.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of operators to retrieve.\n * @returns {Promise<OperatorsResponse>} The operators response.\n */\n async getOperators(\n after: string,\n limit?: number\n ): Promise<OperatorsResponse> {\n return await this.operator.getOperators(after, limit);\n }\n\n /**\n * @method getCircuitByName\n * @description Get a circuit by its name.\n * @param {string} name - The name of the circuit.\n * @returns {Promise<CircuitResponse>} The circuit response.\n */\n async getCircuitByName(name: string): Promise<CircuitResponse> {\n return await this.circuit.getCircuitByName(name);\n }\n\n /**\n * @method getCircuits\n * @description Get all available circuits.\n * @returns {Promise<CircuitsResponse>} The circuits response.\n */\n async getCircuits(): Promise<CircuitsResponse> {\n return await this.circuit.getCircuits();\n }\n\n /**\n * @method getTransactionByHash\n * @description Get a transaction by its hash.\n * @param {string} hash - The hash of the transaction.\n * @returns {Promise<TransactionResponse>} The transaction response.\n */\n async getTransactionByHash(hash: string): Promise<TransactionResponse> {\n return await this.transaction.getTransactionByHash(hash);\n }\n\n /**\n * @method getTransactions\n * @description Get multiple transactions.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of transactions to retrieve.\n * @returns {Promise<TransactionsResponse>} The transactions response.\n */\n async getTransactions(\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n return await this.transaction.getTransactions(after, limit);\n }\n\n /**\n * @method getTransactionsByContractAddress\n * @description Get transactions by contract address.\n * @param {string} address - The contract address.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of transactions to retrieve.\n * @returns {Promise<TransactionsResponse>} The transactions response.\n */\n async getTransactionsByContractAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n return await this.transaction.getTransactionsByContractAddress(\n address,\n after,\n limit\n );\n }\n\n /**\n * @method getProofByContractAddress\n * @description Get proof data by contract address.\n * @param {string} address - The contract address.\n * @returns {Promise<ProofResponse>} The proof response.\n */\n async getProofByContractAddress(address: string): Promise<ProofResponse> {\n return await this.proof.getProofByContractAddress(address);\n }\n\n /**\n * @method getStateIdxByPubKey\n * @description Get the state index of a specific public key.\n * @param {string} contractAddress - The contract address.\n * @param {bigint[]} pubKey - The public key.\n * @returns {Promise<SignUpEventsResponse>} The sign up events response.\n */\n async getSignUpEventByPubKey(\n contractAddress: string,\n pubKey: bigint[]\n ): Promise<SignUpEventsResponse> {\n return await this.event.getSignUpEventByPubKey(contractAddress, pubKey);\n }\n\n async fetchAllDeactivateLogs(\n contractAddress: string\n ): Promise<DeactivateMessage[]> {\n return await this.event.fetchAllDeactivateLogs(contractAddress);\n }\n}\n","import { Secp256k1HdWallet } from '@cosmjs/launchpad';\nimport { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n GasPrice,\n SigningStargateClient,\n SigningStargateClientOptions,\n} from '@cosmjs/stargate';\nimport { SigningCosmWasmClient } from '@cosmjs/cosmwasm-stargate';\nimport { MaciClient } from './ts/Maci.client';\nimport { AMaciClient } from './ts/AMaci.client';\nimport { RegistryClient } from './ts/Registry.client';\nimport { OracleMaciClient } from './ts/OracleMaci.client';\nimport { SaasClient } from './ts/Saas.client';\nimport { ApiMaciClient } from './ts/ApiMaci.client';\nimport { ApiSaasClient } from './ts/ApiSaas.client';\n\nconst defaultSigningClientOptions: SigningStargateClientOptions = {\n broadcastPollIntervalMs: 8_000,\n broadcastTimeoutMs: 150_000, // 2min30s for the tx to be confirmed\n gasPrice: GasPrice.fromString('10000000000peaka'),\n};\n\nexport async function createMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new MaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createAMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new AMaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createApiMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new ApiMaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createRegistryClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new RegistryClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createSaasClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new SaasClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createApiSaasClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new ApiSaasClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createOracleMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new OracleMaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createContractClientByWallet(\n rpcEndpoint: string,\n wallet: OfflineSigner\n) {\n const client = await SigningCosmWasmClient.connectWithSigner(\n rpcEndpoint,\n wallet,\n {\n ...defaultSigningClientOptions,\n }\n );\n return client;\n}\n\nexport async function getSignerClientByWallet(\n rpcEndpoint: string,\n wallet: OfflineSigner\n) {\n const signingStargateClient = await SigningStargateClient.connectWithSigner(\n rpcEndpoint,\n wallet,\n {\n ...defaultSigningClientOptions,\n }\n );\n return signingStargateClient;\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Uint256,\n Timestamp,\n Uint64,\n InstantiateMsg,\n PubKey,\n Groth16VKeyType,\n MaciParameters,\n PlonkVKeyType,\n QuinaryTreeRoot,\n RoundInfo,\n VotingTime,\n Whitelist,\n WhitelistConfig,\n ExecuteMsg,\n Uint128,\n MessageData,\n Groth16ProofType,\n PlonkProofType,\n QueryMsg,\n Addr,\n PeriodStatus,\n Period,\n Boolean,\n ArrayOfString,\n} from './Maci.types';\nexport interface MaciReadOnlyInterface {\n contractAddress: string;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({ address }: { address: Addr }) => Promise<Uint256>;\n getVoiceCreditBalance: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n whiteList: () => Promise<Whitelist>;\n isWhiteList: ({ sender }: { sender: string }) => Promise<Boolean>;\n whiteBalanceOf: ({ sender }: { sender: string }) => Promise<Uint256>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n}\nexport class MaciQueryClient implements MaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.whiteList = this.whiteList.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.whiteBalanceOf = this.whiteBalanceOf.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n }\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {},\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {},\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {},\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {},\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {},\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {},\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {},\n });\n };\n getResult = async ({ index }: { index: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index,\n },\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {},\n });\n };\n getStateIdxInc = async ({ address }: { address: Addr }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address,\n },\n });\n };\n getVoiceCreditBalance = async ({\n index,\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index,\n },\n });\n };\n whiteList = async (): Promise<Whitelist> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_list: {},\n });\n };\n isWhiteList = async ({ sender }: { sender: string }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n sender,\n },\n });\n };\n whiteBalanceOf = async ({ sender }: { sender: string }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_balance_of: {\n sender,\n },\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {},\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {},\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {},\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {},\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {},\n });\n };\n}\nexport interface MaciInterface extends MaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setParams: (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setWhitelists: (\n {\n whitelists,\n }: {\n whitelists: Whitelist;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n signUp: (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startProcessPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processMessage: (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopProcessingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processTally: (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopTallyingPeriod: (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grant: (\n {\n maxAmount,\n }: {\n maxAmount: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n revoke: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n bond: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class MaciClient extends MaciQueryClient implements MaciInterface {\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setParams = this.setParams.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setWhitelists = this.setWhitelists.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.startVotingPeriod = this.startVotingPeriod.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.stopVotingPeriod = this.stopVotingPeriod.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.grant = this.grant.bind(this);\n this.revoke = this.revoke.bind(this);\n this.bond = this.bond.bind(this);\n this.withdraw = this.withdraw.bind(this);\n }\n setParams = async (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_params: {\n int_state_tree_depth: intStateTreeDepth,\n message_batch_size: messageBatchSize,\n state_tree_depth: stateTreeDepth,\n vote_option_tree_depth: voteOptionTreeDepth,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setWhitelists = async (\n {\n whitelists,\n }: {\n whitelists: Whitelist;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_whitelists: {\n whitelists,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n signUp = async (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n sign_up: {\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startProcessPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_process_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n stopVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n publishMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processMessage = async (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopProcessingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_processing_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n processTally = async (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopTallyingPeriod = async (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_tallying_period: {\n results,\n salt,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grant = async (\n {\n maxAmount,\n }: {\n maxAmount: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n grant: {\n max_amount: maxAmount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n revoke = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n revoke: {},\n },\n fee,\n memo,\n _funds\n );\n };\n bond = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n bond: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Addr,\n Uint256,\n Timestamp,\n Uint64,\n InstantiateMsg,\n PubKey,\n MaciParameters,\n RoundInfo,\n VotingTime,\n WhitelistBase,\n WhitelistBaseConfig,\n ExecuteMsg,\n MessageData,\n Groth16ProofType,\n QueryMsg,\n Boolean,\n DelayType,\n DelayRecords,\n DelayRecord,\n PeriodStatus,\n Period,\n TallyDelayInfo,\n NullableString,\n NullableUint256,\n Uint128,\n ArrayOfString,\n Whitelist,\n WhitelistConfig,\n} from './AMaci.types';\nexport interface AMaciReadOnlyInterface {\n contractAddress: string;\n admin: () => Promise<Addr>;\n operator: () => Promise<Addr>;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getDMsgChainLength: () => Promise<Uint256>;\n getProcessedDMsgCount: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({ address }: { address: Addr }) => Promise<Uint256>;\n getVoiceCreditBalance: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getVoiceCreditAmount: () => Promise<Uint256>;\n whiteList: () => Promise<Whitelist>;\n canSignUp: ({ sender }: { sender: Addr }) => Promise<Boolean>;\n isWhiteList: ({ sender }: { sender: Addr }) => Promise<Boolean>;\n isRegister: ({ sender }: { sender: Addr }) => Promise<Boolean>;\n signuped: ({ pubkeyX }: { pubkeyX: Uint256 }) => Promise<Uint256>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n queryPreDeactivateRoot: () => Promise<Uint256>;\n queryPreDeactivateCoordinatorHash: () => Promise<NullableUint256>;\n getDelayRecords: () => Promise<DelayRecords>;\n getTallyDelay: () => Promise<TallyDelayInfo>;\n queryOracleWhitelistConfig: () => Promise<NullableString>;\n canSignUpWithOracle: ({\n certificate,\n pubkey,\n }: {\n certificate: string;\n pubkey: PubKey;\n }) => Promise<Boolean>;\n whiteBalanceOf: ({\n certificate,\n pubkey,\n }: {\n certificate: string;\n pubkey: PubKey;\n }) => Promise<Uint256>;\n}\nexport class AMaciQueryClient implements AMaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.admin = this.admin.bind(this);\n this.operator = this.operator.bind(this);\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getDMsgChainLength = this.getDMsgChainLength.bind(this);\n this.getProcessedDMsgCount = this.getProcessedDMsgCount.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.getVoiceCreditAmount = this.getVoiceCreditAmount.bind(this);\n this.whiteList = this.whiteList.bind(this);\n this.canSignUp = this.canSignUp.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.isRegister = this.isRegister.bind(this);\n this.signuped = this.signuped.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n this.queryPreDeactivateRoot = this.queryPreDeactivateRoot.bind(this);\n this.queryPreDeactivateCoordinatorHash =\n this.queryPreDeactivateCoordinatorHash.bind(this);\n this.getDelayRecords = this.getDelayRecords.bind(this);\n this.getTallyDelay = this.getTallyDelay.bind(this);\n this.queryOracleWhitelistConfig =\n this.queryOracleWhitelistConfig.bind(this);\n this.canSignUpWithOracle = this.canSignUpWithOracle.bind(this);\n this.whiteBalanceOf = this.whiteBalanceOf.bind(this);\n }\n admin = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n admin: {},\n });\n };\n operator = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operator: {},\n });\n };\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {},\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {},\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {},\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {},\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {},\n });\n };\n getDMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_d_msg_chain_length: {},\n });\n };\n getProcessedDMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_d_msg_count: {},\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {},\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {},\n });\n };\n getResult = async ({ index }: { index: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index,\n },\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {},\n });\n };\n getStateIdxInc = async ({ address }: { address: Addr }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address,\n },\n });\n };\n getVoiceCreditBalance = async ({\n index,\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index,\n },\n });\n };\n getVoiceCreditAmount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_amount: {},\n });\n };\n whiteList = async (): Promise<Whitelist> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_list: {},\n });\n };\n canSignUp = async ({ sender }: { sender: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n can_sign_up: {\n sender,\n },\n });\n };\n isWhiteList = async ({ sender }: { sender: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n sender,\n },\n });\n };\n isRegister = async ({ sender }: { sender: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_register: {\n sender,\n },\n });\n };\n signuped = async ({ pubkeyX }: { pubkeyX: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n signuped: {\n pubkey_x: pubkeyX,\n },\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {},\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {},\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {},\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {},\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {},\n });\n };\n queryPreDeactivateRoot = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_pre_deactivate_root: {},\n });\n };\n queryPreDeactivateCoordinatorHash = async (): Promise<NullableUint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_pre_deactivate_coordinator_hash: {},\n });\n };\n getDelayRecords = async (): Promise<DelayRecords> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_delay_records: {},\n });\n };\n getTallyDelay = async (): Promise<TallyDelayInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_tally_delay: {},\n });\n };\n queryOracleWhitelistConfig = async (): Promise<NullableString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_oracle_whitelist_config: {},\n });\n };\n canSignUpWithOracle = async ({\n certificate,\n pubkey,\n }: {\n certificate: string;\n pubkey: PubKey;\n }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n can_sign_up_with_oracle: {\n certificate,\n pubkey,\n },\n });\n };\n whiteBalanceOf = async ({\n certificate,\n pubkey,\n }: {\n certificate: string;\n pubkey: PubKey;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_balance_of: {\n certificate,\n pubkey,\n },\n });\n };\n}\nexport interface AMaciInterface extends AMaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setRoundInfo: (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setWhitelists: (\n {\n whitelists,\n }: {\n whitelists: WhitelistBase;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n signUp: (\n {\n certificate,\n pubkey,\n }: {\n certificate?: string;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startProcessPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishDeactivateMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processDeactivateMessage: (\n {\n groth16Proof,\n newDeactivateCommitment,\n newDeactivateRoot,\n size,\n }: {\n groth16Proof: Groth16ProofType;\n newDeactivateCommitment: Uint256;\n newDeactivateRoot: Uint256;\n size: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n addNewKey: (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n preAddNewKey: (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processMessage: (\n {\n groth16Proof,\n newStateCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newStateCommitment: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopProcessingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processTally: (\n {\n groth16Proof,\n newTallyCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newTallyCommitment: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopTallyingPeriod: (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n claim: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class AMaciClient extends AMaciQueryClient implements AMaciInterface {\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setWhitelists = this.setWhitelists.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.publishDeactivateMessage = this.publishDeactivateMessage.bind(this);\n this.processDeactivateMessage = this.processDeactivateMessage.bind(this);\n this.addNewKey = this.addNewKey.bind(this);\n this.preAddNewKey = this.preAddNewKey.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.claim = this.claim.bind(this);\n }\n setRoundInfo = async (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setWhitelists = async (\n {\n whitelists,\n }: {\n whitelists: WhitelistBase;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_whitelists: {\n whitelists,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n signUp = async (\n {\n certificate,\n pubkey,\n }: {\n certificate?: string;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n sign_up: {\n certificate,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startProcessPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_process_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n publishDeactivateMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_deactivate_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processDeactivateMessage = async (\n {\n groth16Proof,\n newDeactivateCommitment,\n newDeactivateRoot,\n size,\n }: {\n groth16Proof: Groth16ProofType;\n newDeactivateCommitment: Uint256;\n newDeactivateRoot: Uint256;\n size: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_deactivate_message: {\n groth16_proof: groth16Proof,\n new_deactivate_commitment: newDeactivateCommitment,\n new_deactivate_root: newDeactivateRoot,\n size,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n addNewKey = async (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n add_new_key: {\n d,\n groth16_proof: groth16Proof,\n nullifier,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n preAddNewKey = async (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n pre_add_new_key: {\n d,\n groth16_proof: groth16Proof,\n nullifier,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n publishMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processMessage = async (\n {\n groth16Proof,\n newStateCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newStateCommitment: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopProcessingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_processing_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n processTally = async (\n {\n groth16Proof,\n newTallyCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newTallyCommitment: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopTallyingPeriod = async (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_tallying_period: {\n results,\n salt,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n claim = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n claim: {},\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Addr,\n InstantiateMsg,\n ExecuteMsg,\n Uint256,\n Timestamp,\n Uint64,\n Decimal,\n PubKey,\n RoundInfo,\n VotingTime,\n WhitelistBase,\n WhitelistBaseConfig,\n ValidatorSet,\n CircuitChargeConfig,\n QueryMsg,\n AdminResponse,\n String,\n Boolean,\n} from './Registry.types';\nexport interface RegistryReadOnlyInterface {\n contractAddress: string;\n admin: () => Promise<AdminResponse>;\n operator: () => Promise<Addr>;\n isMaciOperator: ({ address }: { address: Addr }) => Promise<Boolean>;\n isValidator: ({ address }: { address: Addr }) => Promise<Boolean>;\n getValidators: () => Promise<ValidatorSet>;\n getValidatorOperator: ({ address }: { address: Addr }) => Promise<Addr>;\n getMaciOperatorPubkey: ({ address }: { address: Addr }) => Promise<PubKey>;\n getMaciOperatorIdentity: ({ address }: { address: Addr }) => Promise<String>;\n getCircuitChargeConfig: () => Promise<CircuitChargeConfig>;\n}\nexport class RegistryQueryClient implements RegistryReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.admin = this.admin.bind(this);\n this.operator = this.operator.bind(this);\n this.isMaciOperator = this.isMaciOperator.bind(this);\n this.isValidator = this.isValidator.bind(this);\n this.getValidators = this.getValidators.bind(this);\n this.getValidatorOperator = this.getValidatorOperator.bind(this);\n this.getMaciOperatorPubkey = this.getMaciOperatorPubkey.bind(this);\n this.getMaciOperatorIdentity = this.getMaciOperatorIdentity.bind(this);\n this.getCircuitChargeConfig = this.getCircuitChargeConfig.bind(this);\n }\n admin = async (): Promise<AdminResponse> => {\n return this.client.queryContractSmart(this.contractAddress, {\n admin: {},\n });\n };\n operator = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operator: {},\n });\n };\n isMaciOperator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_maci_operator: {\n address,\n },\n });\n };\n isValidator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_validator: {\n address,\n },\n });\n };\n getValidators = async (): Promise<ValidatorSet> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_validators: {},\n });\n };\n getValidatorOperator = async ({\n address,\n }: {\n address: Addr;\n }): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_validator_operator: {\n address,\n },\n });\n };\n getMaciOperatorPubkey = async ({\n address,\n }: {\n address: Addr;\n }): Promise<PubKey> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_maci_operator_pubkey: {\n address,\n },\n });\n };\n getMaciOperatorIdentity = async ({\n address,\n }: {\n address: Addr;\n }): Promise<String> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_maci_operator_identity: {\n address,\n },\n });\n };\n getCircuitChargeConfig = async (): Promise<CircuitChargeConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_circuit_charge_config: {},\n });\n };\n}\nexport interface RegistryInterface extends RegistryReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setMaciOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setMaciOperatorPubkey: (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setMaciOperatorIdentity: (\n {\n identity,\n }: {\n identity: string;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n createRound: (\n {\n certificationSystem,\n circuitType,\n maxVoter,\n operator,\n oracleWhitelistPubkey,\n preDeactivateCoordinator,\n preDeactivateRoot,\n roundInfo,\n voiceCreditAmount,\n voteOptionMap,\n votingTime,\n whitelist,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n maxVoter: Uint256;\n operator: Addr;\n oracleWhitelistPubkey?: string;\n preDeactivateCoordinator?: PubKey;\n preDeactivateRoot: Uint256;\n roundInfo: RoundInfo;\n voiceCreditAmount: Uint256;\n voteOptionMap: string[];\n votingTime: VotingTime;\n whitelist?: WhitelistBase;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setValidators: (\n {\n addresses,\n }: {\n addresses: ValidatorSet;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n removeValidator: (\n {\n address,\n }: {\n address: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n updateAmaciCodeId: (\n {\n amaciCodeId,\n }: {\n amaciCodeId: number;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n changeOperator: (\n {\n address,\n }: {\n address: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n changeChargeConfig: (\n {\n config,\n }: {\n config: CircuitChargeConfig;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class RegistryClient\n extends RegistryQueryClient\n implements RegistryInterface\n{\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setMaciOperator = this.setMaciOperator.bind(this);\n this.setMaciOperatorPubkey = this.setMaciOperatorPubkey.bind(this);\n this.setMaciOperatorIdentity = this.setMaciOperatorIdentity.bind(this);\n this.createRound = this.createRound.bind(this);\n this.setValidators = this.setValidators.bind(this);\n this.removeValidator = this.removeValidator.bind(this);\n this.updateAmaciCodeId = this.updateAmaciCodeId.bind(this);\n this.changeOperator = this.changeOperator.bind(this);\n this.changeChargeConfig = this.changeChargeConfig.bind(this);\n }\n setMaciOperator = async (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_maci_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setMaciOperatorPubkey = async (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_maci_operator_pubkey: {\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setMaciOperatorIdentity = async (\n {\n identity,\n }: {\n identity: string;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_maci_operator_identity: {\n identity,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n createRound = async (\n {\n certificationSystem,\n circuitType,\n maxVoter,\n operator,\n oracleWhitelistPubkey,\n preDeactivateCoordinator,\n preDeactivateRoot,\n roundInfo,\n voiceCreditAmount,\n voteOptionMap,\n votingTime,\n whitelist,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n maxVoter: Uint256;\n operator: Addr;\n oracleWhitelistPubkey?: string;\n preDeactivateCoordinator?: PubKey;\n preDeactivateRoot: Uint256;\n roundInfo: RoundInfo;\n voiceCreditAmount: Uint256;\n voteOptionMap: string[];\n votingTime: VotingTime;\n whitelist?: WhitelistBase;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n create_round: {\n certification_system: certificationSystem,\n circuit_type: circuitType,\n max_voter: maxVoter,\n operator,\n oracle_whitelist_pubkey: oracleWhitelistPubkey,\n pre_deactivate_coordinator: preDeactivateCoordinator,\n pre_deactivate_root: preDeactivateRoot,\n round_info: roundInfo,\n voice_credit_amount: voiceCreditAmount,\n vote_option_map: voteOptionMap,\n voting_time: votingTime,\n whitelist,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setValidators = async (\n {\n addresses,\n }: {\n addresses: ValidatorSet;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_validators: {\n addresses,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n removeValidator = async (\n {\n address,\n }: {\n address: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n remove_validator: {\n address,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n updateAmaciCodeId = async (\n {\n amaciCodeId,\n }: {\n amaciCodeId: number;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_amaci_code_id: {\n amaci_code_id: amaciCodeId,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n changeOperator = async (\n {\n address,\n }: {\n address: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n change_operator: {\n address,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n changeChargeConfig = async (\n {\n config,\n }: {\n config: CircuitChargeConfig;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n change_charge_config: {\n config,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Uint256,\n Addr,\n Timestamp,\n Uint64,\n VotingPowerMode,\n InstantiateMsg,\n PubKey,\n Groth16VKeyType,\n MaciParameters,\n PlonkVKeyType,\n QuinaryTreeRoot,\n RoundInfo,\n VotingTime,\n VotingPowerArgs,\n ExecuteMsg,\n Uint128,\n MessageData,\n Groth16ProofType,\n PlonkProofType,\n QueryMsg,\n PeriodStatus,\n Period,\n GrantConfig,\n Boolean,\n Binary,\n OracleWhitelistConfig,\n ArrayOfString,\n WhitelistConfig,\n} from './OracleMaci.types';\nexport interface OracleMaciReadOnlyInterface {\n contractAddress: string;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({ address }: { address: Addr }) => Promise<Uint256>;\n getVoiceCreditBalance: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n isWhiteList: ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }) => Promise<Boolean>;\n whiteBalanceOf: ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }) => Promise<Uint256>;\n whiteInfo: ({ sender }: { sender: string }) => Promise<WhitelistConfig>;\n grantInfo: ({ grantee }: { grantee: string }) => Promise<GrantConfig>;\n maxWhitelistNum: () => Promise<Uint128>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n queryOracleWhitelistConfig: () => Promise<OracleWhitelistConfig>;\n}\nexport class OracleMaciQueryClient implements OracleMaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.whiteBalanceOf = this.whiteBalanceOf.bind(this);\n this.whiteInfo = this.whiteInfo.bind(this);\n this.grantInfo = this.grantInfo.bind(this);\n this.maxWhitelistNum = this.maxWhitelistNum.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n this.queryOracleWhitelistConfig =\n this.queryOracleWhitelistConfig.bind(this);\n }\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {},\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {},\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {},\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {},\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {},\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {},\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {},\n });\n };\n getResult = async ({ index }: { index: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index,\n },\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {},\n });\n };\n getStateIdxInc = async ({ address }: { address: Addr }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address,\n },\n });\n };\n getVoiceCreditBalance = async ({\n index,\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index,\n },\n });\n };\n isWhiteList = async ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n amount,\n certificate,\n sender,\n },\n });\n };\n whiteBalanceOf = async ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_balance_of: {\n amount,\n certificate,\n sender,\n },\n });\n };\n whiteInfo = async ({\n sender,\n }: {\n sender: string;\n }): Promise<WhitelistConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_info: {\n sender,\n },\n });\n };\n grantInfo = async ({\n grantee,\n }: {\n grantee: string;\n }): Promise<GrantConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n grant_info: {\n grantee,\n },\n });\n };\n maxWhitelistNum = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_whitelist_num: {},\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {},\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {},\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {},\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {},\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {},\n });\n };\n queryOracleWhitelistConfig = async (): Promise<OracleWhitelistConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_oracle_whitelist_config: {},\n });\n };\n}\nexport interface OracleMaciInterface extends OracleMaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setParams: (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n signUp: (\n {\n amount,\n certificate,\n pubkey,\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startProcessPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processMessage: (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopProcessingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processTally: (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopTallyingPeriod: (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grant: (\n {\n baseAmount,\n grantee,\n }: {\n baseAmount: Uint128;\n grantee: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n revoke: (\n {\n grantee,\n }: {\n grantee: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n bond: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class OracleMaciClient\n extends OracleMaciQueryClient\n implements OracleMaciInterface\n{\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setParams = this.setParams.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.startVotingPeriod = this.startVotingPeriod.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.stopVotingPeriod = this.stopVotingPeriod.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.grant = this.grant.bind(this);\n this.revoke = this.revoke.bind(this);\n this.bond = this.bond.bind(this);\n this.withdraw = this.withdraw.bind(this);\n }\n setParams = async (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_params: {\n int_state_tree_depth: intStateTreeDepth,\n message_batch_size: messageBatchSize,\n state_tree_depth: stateTreeDepth,\n vote_option_tree_depth: voteOptionTreeDepth,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n signUp = async (\n {\n amount,\n certificate,\n pubkey,\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n sign_up: {\n amount,\n certificate,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startProcessPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_process_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n stopVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n publishMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processMessage = async (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopProcessingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_processing_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n processTally = async (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopTallyingPeriod = async (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_tallying_period: {\n results,\n salt,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grant = async (\n {\n baseAmount,\n grantee,\n }: {\n baseAmount: Uint128;\n grantee: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n grant: {\n base_amount: baseAmount,\n grantee,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n revoke = async (\n {\n grantee,\n }: {\n grantee: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n revoke: {\n grantee,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n bond = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n bond: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Addr,\n InstantiateMsg,\n ExecuteMsg,\n Uint128,\n Uint256,\n Timestamp,\n Uint64,\n PubKey,\n RoundInfo,\n QueryMsg,\n Config,\n Boolean,\n NullableMaciContractInfo,\n MaciContractInfo,\n ArrayOfMaciContractInfo,\n ArrayOfOperatorInfo,\n OperatorInfo,\n} from './Saas.types';\nexport interface SaasReadOnlyInterface {\n contractAddress: string;\n config: () => Promise<Config>;\n operators: () => Promise<ArrayOfOperatorInfo>;\n isOperator: ({ address }: { address: Addr }) => Promise<Boolean>;\n balance: () => Promise<Uint128>;\n maciContracts: ({\n limit,\n startAfter,\n }: {\n limit?: number;\n startAfter?: number;\n }) => Promise<ArrayOfMaciContractInfo>;\n operatorMaciContracts: ({\n limit,\n operator,\n startAfter,\n }: {\n limit?: number;\n operator: Addr;\n startAfter?: number;\n }) => Promise<ArrayOfMaciContractInfo>;\n maciContract: ({\n contractId,\n }: {\n contractId: number;\n }) => Promise<NullableMaciContractInfo>;\n oracleMaciCodeId: () => Promise<Uint64>;\n}\nexport class SaasQueryClient implements SaasReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.config = this.config.bind(this);\n this.operators = this.operators.bind(this);\n this.isOperator = this.isOperator.bind(this);\n this.balance = this.balance.bind(this);\n this.maciContracts = this.maciContracts.bind(this);\n this.operatorMaciContracts = this.operatorMaciContracts.bind(this);\n this.maciContract = this.maciContract.bind(this);\n this.oracleMaciCodeId = this.oracleMaciCodeId.bind(this);\n }\n config = async (): Promise<Config> => {\n return this.client.queryContractSmart(this.contractAddress, {\n config: {},\n });\n };\n operators = async (): Promise<ArrayOfOperatorInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operators: {},\n });\n };\n isOperator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_operator: {\n address,\n },\n });\n };\n balance = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n balance: {},\n });\n };\n maciContracts = async ({\n limit,\n startAfter,\n }: {\n limit?: number;\n startAfter?: number;\n }): Promise<ArrayOfMaciContractInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n maci_contracts: {\n limit,\n start_after: startAfter,\n },\n });\n };\n operatorMaciContracts = async ({\n limit,\n operator,\n startAfter,\n }: {\n limit?: number;\n operator: Addr;\n startAfter?: number;\n }): Promise<ArrayOfMaciContractInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operator_maci_contracts: {\n limit,\n operator,\n start_after: startAfter,\n },\n });\n };\n maciContract = async ({\n contractId,\n }: {\n contractId: number;\n }): Promise<NullableMaciContractInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n maci_contract: {\n contract_id: contractId,\n },\n });\n };\n oracleMaciCodeId = async (): Promise<Uint64> => {\n return this.client.queryContractSmart(this.contractAddress, {\n oracle_maci_code_id: {},\n });\n };\n}\nexport interface SaasInterface extends SaasReadOnlyInterface {\n contractAddress: string;\n sender: string;\n updateConfig: (\n {\n admin,\n denom,\n registryContract,\n }: {\n admin?: Addr;\n denom?: string;\n registryContract?: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n addOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n removeOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n deposit: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n recipient,\n }: {\n amount: Uint128;\n recipient?: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n updateOracleMaciCodeId: (\n {\n codeId,\n }: {\n codeId: number;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n createOracleMaciRound: (\n {\n certificationSystem,\n circuitType,\n coordinator,\n endTime,\n maxVoters,\n roundInfo,\n startTime,\n voteOptionMap,\n whitelistBackendPubkey,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n coordinator: PubKey;\n endTime: Timestamp;\n maxVoters: number;\n roundInfo: RoundInfo;\n startTime: Timestamp;\n voteOptionMap: string[];\n whitelistBackendPubkey: string;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n contractAddr,\n roundInfo,\n }: {\n contractAddr: string;\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n contractAddr,\n voteOptionMap,\n }: {\n contractAddr: string;\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grantToVoter: (\n {\n baseAmount,\n contractAddr,\n grantee,\n }: {\n baseAmount: Uint128;\n contractAddr: string;\n grantee: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class SaasClient extends SaasQueryClient implements SaasInterface {\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.updateConfig = this.updateConfig.bind(this);\n this.addOperator = this.addOperator.bind(this);\n this.removeOperator = this.removeOperator.bind(this);\n this.deposit = this.deposit.bind(this);\n this.withdraw = this.withdraw.bind(this);\n this.updateOracleMaciCodeId = this.updateOracleMaciCodeId.bind(this);\n this.createOracleMaciRound = this.createOracleMaciRound.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.grantToVoter = this.grantToVoter.bind(this);\n }\n updateConfig = async (\n {\n admin,\n denom,\n registryContract,\n }: {\n admin?: Addr;\n denom?: string;\n registryContract?: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_config: {\n admin,\n denom,\n registry_contract: registryContract,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n addOperator = async (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n add_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n removeOperator = async (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n remove_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n deposit = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n deposit: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n recipient,\n }: {\n amount: Uint128;\n recipient?: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n recipient,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n updateOracleMaciCodeId = async (\n {\n codeId,\n }: {\n codeId: number;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_oracle_maci_code_id: {\n code_id: codeId,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n createOracleMaciRound = async (\n {\n certificationSystem,\n circuitType,\n coordinator,\n endTime,\n maxVoters,\n roundInfo,\n startTime,\n voteOptionMap,\n whitelistBackendPubkey,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n coordinator: PubKey;\n endTime: Timestamp;\n maxVoters: number;\n roundInfo: RoundInfo;\n startTime: Timestamp;\n voteOptionMap: string[];\n whitelistBackendPubkey: string;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n create_oracle_maci_round: {\n certification_system: certificationSystem,\n circuit_type: circuitType,\n coordinator,\n end_time: endTime,\n max_voters: maxVoters.toString(),\n round_info: roundInfo,\n start_time: startTime,\n vote_option_map: voteOptionMap,\n whitelist_backend_pubkey: whitelistBackendPubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n contractAddr,\n roundInfo,\n }: {\n contractAddr: string;\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n contract_addr: contractAddr,\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n contractAddr,\n voteOptionMap,\n }: {\n contractAddr: string;\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n contract_addr: contractAddr,\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grantToVoter = async (\n {\n baseAmount,\n contractAddr,\n grantee,\n }: {\n baseAmount: Uint128;\n contractAddr: string;\n grantee: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n grant_to_voter: {\n base_amount: baseAmount,\n contract_addr: contractAddr,\n grantee,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n* This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n* and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n*/\n\nimport { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from \"@cosmjs/cosmwasm-stargate\";\nimport { Coin, StdFee } from \"@cosmjs/amino\";\nimport { Uint256, Timestamp, Uint64, VotingPowerMode, InstantiateMsg, PubKey, RoundInfo, VotingTime, VotingPowerArgs, ExecuteMsg, Uint128, MessageData, Groth16ProofType, PlonkProofType, QueryMsg, Addr, PeriodStatus, Period, Boolean, Binary, OracleWhitelistConfig, ArrayOfString, WhitelistConfig } from \"./ApiMaci.types\";\nexport interface ApiMaciReadOnlyInterface {\n contractAddress: string;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({\n index\n }: {\n index: Uint256;\n }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({\n address\n }: {\n address: Addr;\n }) => Promise<Uint256>;\n getVoiceCreditBalance: ({\n index\n }: {\n index: Uint256;\n }) => Promise<Uint256>;\n isWhiteList: ({\n amount,\n certificate,\n pubkey\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n }) => Promise<Boolean>;\n whiteBalanceOf: ({\n amount,\n certificate,\n pubkey\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n }) => Promise<Uint256>;\n whiteInfo: ({\n pubkey\n }: {\n pubkey: PubKey;\n }) => Promise<WhitelistConfig>;\n maxWhitelistNum: () => Promise<Uint128>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n queryOracleWhitelistConfig: () => Promise<OracleWhitelistConfig>;\n}\nexport class ApiMaciQueryClient implements ApiMaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.whiteBalanceOf = this.whiteBalanceOf.bind(this);\n this.whiteInfo = this.whiteInfo.bind(this);\n this.maxWhitelistNum = this.maxWhitelistNum.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n this.queryOracleWhitelistConfig = this.queryOracleWhitelistConfig.bind(this);\n }\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {}\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {}\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {}\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {}\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {}\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {}\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {}\n });\n };\n getResult = async ({\n index\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index\n }\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {}\n });\n };\n getStateIdxInc = async ({\n address\n }: {\n address: Addr;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address\n }\n });\n };\n getVoiceCreditBalance = async ({\n index\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index\n }\n });\n };\n isWhiteList = async ({\n amount,\n certificate,\n pubkey\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n amount,\n certificate,\n pubkey\n }\n });\n };\n whiteBalanceOf = async ({\n amount,\n certificate,\n pubkey\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_balance_of: {\n amount,\n certificate,\n pubkey\n }\n });\n };\n whiteInfo = async ({\n pubkey\n }: {\n pubkey: PubKey;\n }): Promise<WhitelistConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_info: {\n pubkey\n }\n });\n };\n maxWhitelistNum = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_whitelist_num: {}\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {}\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {}\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {}\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {}\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {}\n });\n };\n queryOracleWhitelistConfig = async (): Promise<OracleWhitelistConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_oracle_whitelist_config: {}\n });\n };\n}\nexport interface ApiMaciInterface extends ApiMaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setRoundInfo: ({\n roundInfo\n }: {\n roundInfo: RoundInfo;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n setVoteOptionsMap: ({\n voteOptionMap\n }: {\n voteOptionMap: string[];\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n signUp: ({\n amount,\n certificate,\n pubkey\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n startProcessPeriod: (fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n publishMessage: ({\n encPubKey,\n message\n }: {\n encPubKey: PubKey;\n message: MessageData;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n processMessage: ({\n groth16Proof,\n newStateCommitment,\n plonkProof\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n stopProcessingPeriod: (fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n processTally: ({\n groth16Proof,\n newTallyCommitment,\n plonkProof\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n stopTallyingPeriod: ({\n results,\n salt\n }: {\n results: Uint256[];\n salt: Uint256;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n bond: (fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n withdraw: ({\n amount\n }: {\n amount?: Uint128;\n }, fee?: number | StdFee | \"auto\", memo?: string, _funds?: Coin[]) => Promise<ExecuteResult>;\n}\nexport class ApiMaciClient extends ApiMaciQueryClient implements ApiMaciInterface {\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(client: SigningCosmWasmClient, sender: string, contractAddress: string) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.bond = this.bond.bind(this);\n this.withdraw = this.withdraw.bind(this);\n }\n setRoundInfo = async ({\n roundInfo\n }: {\n roundInfo: RoundInfo;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n set_round_info: {\n round_info: roundInfo\n }\n }, fee, memo, _funds);\n };\n setVoteOptionsMap = async ({\n voteOptionMap\n }: {\n voteOptionMap: string[];\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n set_vote_options_map: {\n vote_option_map: voteOptionMap\n }\n }, fee, memo, _funds);\n };\n signUp = async ({\n amount,\n certificate,\n pubkey\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n sign_up: {\n amount,\n certificate,\n pubkey\n }\n }, fee, memo, _funds);\n };\n startProcessPeriod = async (fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n start_process_period: {}\n }, fee, memo, _funds);\n };\n publishMessage = async ({\n encPubKey,\n message\n }: {\n encPubKey: PubKey;\n message: MessageData;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n publish_message: {\n enc_pub_key: encPubKey,\n message\n }\n }, fee, memo, _funds);\n };\n processMessage = async ({\n groth16Proof,\n newStateCommitment,\n plonkProof\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n plonk_proof: plonkProof\n }\n }, fee, memo, _funds);\n };\n stopProcessingPeriod = async (fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n stop_processing_period: {}\n }, fee, memo, _funds);\n };\n processTally = async ({\n groth16Proof,\n newTallyCommitment,\n plonkProof\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n plonk_proof: plonkProof\n }\n }, fee, memo, _funds);\n };\n stopTallyingPeriod = async ({\n results,\n salt\n }: {\n results: Uint256[];\n salt: Uint256;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n stop_tallying_period: {\n results,\n salt\n }\n }, fee, memo, _funds);\n };\n bond = async (fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n bond: {}\n }, fee, memo, _funds);\n };\n withdraw = async ({\n amount\n }: {\n amount?: Uint128;\n }, fee: number | StdFee | \"auto\" = \"auto\", memo?: string, _funds?: Coin[]): Promise<ExecuteResult> => {\n return await this.client.execute(this.sender, this.contractAddress, {\n withdraw: {\n amount\n }\n }, fee, memo, _funds);\n };\n}","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Addr,\n InstantiateMsg,\n ExecuteMsg,\n Uint128,\n Uint256,\n Timestamp,\n Uint64,\n PubKey,\n RoundInfo,\n VotingTime,\n WhitelistBase,\n WhitelistBaseConfig,\n QueryMsg,\n Config,\n Boolean,\n ArrayOfOperatorInfo,\n OperatorInfo,\n} from './ApiSaas.types';\nexport interface ApiSaasReadOnlyInterface {\n contractAddress: string;\n config: () => Promise<Config>;\n operators: () => Promise<ArrayOfOperatorInfo>;\n isOperator: ({ address }: { address: Addr }) => Promise<Boolean>;\n balance: () => Promise<Uint128>;\n maciCodeId: () => Promise<Uint64>;\n treasuryManager: () => Promise<Addr>;\n}\nexport class ApiSaasQueryClient implements ApiSaasReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.config = this.config.bind(this);\n this.operators = this.operators.bind(this);\n this.isOperator = this.isOperator.bind(this);\n this.balance = this.balance.bind(this);\n this.maciCodeId = this.maciCodeId.bind(this);\n this.treasuryManager = this.treasuryManager.bind(this);\n }\n config = async (): Promise<Config> => {\n return this.client.queryContractSmart(this.contractAddress, {\n config: {},\n });\n };\n operators = async (): Promise<ArrayOfOperatorInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operators: {},\n });\n };\n isOperator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_operator: {\n address,\n },\n });\n };\n balance = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n balance: {},\n });\n };\n maciCodeId = async (): Promise<Uint64> => {\n return this.client.queryContractSmart(this.contractAddress, {\n maci_code_id: {},\n });\n };\n treasuryManager = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n treasury_manager: {},\n });\n };\n}\nexport interface ApiSaasInterface extends ApiSaasReadOnlyInterface {\n contractAddress: string;\n sender: string;\n updateConfig: (\n {\n admin,\n denom,\n }: {\n admin?: Addr;\n denom?: string;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n updateMaciCodeId: (\n {\n codeId,\n }: {\n codeId: number;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n updateAmaciRegistryContract: (\n {\n registryContract,\n }: {\n registryContract: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n addOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n removeOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n deposit: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n recipient,\n }: {\n amount: Uint128;\n recipient?: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n createMaciRound: (\n {\n certificationSystem,\n circuitType,\n coordinator,\n endTime,\n maxVoters,\n roundInfo,\n startTime,\n voteOptionMap,\n whitelistBackendPubkey,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n coordinator: PubKey;\n endTime: Timestamp;\n maxVoters: number;\n roundInfo: RoundInfo;\n startTime: Timestamp;\n voteOptionMap: string[];\n whitelistBackendPubkey: string;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n createAmaciRound: (\n {\n certificationSystem,\n circuitType,\n maxVoter,\n operator,\n oracleWhitelistPubkey,\n preDeactivateCoordinator,\n preDeactivateRoot,\n roundInfo,\n voiceCreditAmount,\n voteOptionMap,\n votingTime,\n whitelist,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n maxVoter: Uint256;\n operator: Addr;\n oracleWhitelistPubkey?: string;\n preDeactivateCoordinator?: PubKey;\n preDeactivateRoot: Uint256;\n roundInfo: RoundInfo;\n voiceCreditAmount: Uint256;\n voteOptionMap: string[];\n votingTime: VotingTime;\n whitelist?: WhitelistBase;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n contractAddr,\n roundInfo,\n }: {\n contractAddr: string;\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n contractAddr,\n voteOptionMap,\n }: {\n contractAddr: string;\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class ApiSaasClient\n extends ApiSaasQueryClient\n implements ApiSaasInterface\n{\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.updateConfig = this.updateConfig.bind(this);\n this.updateMaciCodeId = this.updateMaciCodeId.bind(this);\n this.updateAmaciRegistryContract =\n this.updateAmaciRegistryContract.bind(this);\n this.addOperator = this.addOperator.bind(this);\n this.removeOperator = this.removeOperator.bind(this);\n this.deposit = this.deposit.bind(this);\n this.withdraw = this.withdraw.bind(this);\n this.createMaciRound = this.createMaciRound.bind(this);\n this.createAmaciRound = this.createAmaciRound.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n }\n updateConfig = async (\n {\n admin,\n denom,\n }: {\n admin?: Addr;\n denom?: string;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_config: {\n admin,\n denom,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n updateMaciCodeId = async (\n {\n codeId,\n }: {\n codeId: number;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_maci_code_id: {\n code_id: codeId,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n updateAmaciRegistryContract = async (\n {\n registryContract,\n }: {\n registryContract: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_amaci_registry_contract: {\n registry_contract: registryContract,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n addOperator = async (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n add_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n removeOperator = async (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n remove_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n deposit = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n deposit: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n recipient,\n }: {\n amount: Uint128;\n recipient?: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n recipient,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n createMaciRound = async (\n {\n certificationSystem,\n circuitType,\n coordinator,\n endTime,\n maxVoters,\n roundInfo,\n startTime,\n voteOptionMap,\n whitelistBackendPubkey,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n coordinator: PubKey;\n endTime: Timestamp;\n maxVoters: number;\n roundInfo: RoundInfo;\n startTime: Timestamp;\n voteOptionMap: string[];\n whitelistBackendPubkey: string;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n create_maci_round: {\n certification_system: certificationSystem,\n circuit_type: circuitType,\n coordinator,\n end_time: endTime,\n max_voters: maxVoters.toString(),\n round_info: roundInfo,\n start_time: startTime,\n vote_option_map: voteOptionMap,\n whitelist_backend_pubkey: whitelistBackendPubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n createAmaciRound = async (\n {\n certificationSystem,\n circuitType,\n maxVoter,\n operator,\n oracleWhitelistPubkey,\n preDeactivateCoordinator,\n preDeactivateRoot,\n roundInfo,\n voiceCreditAmount,\n voteOptionMap,\n votingTime,\n whitelist,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n maxVoter: Uint256;\n operator: Addr;\n oracleWhitelistPubkey?: string;\n preDeactivateCoordinator?: PubKey;\n preDeactivateRoot: Uint256;\n roundInfo: RoundInfo;\n voiceCreditAmount: Uint256;\n voteOptionMap: string[];\n votingTime: VotingTime;\n whitelist?: WhitelistBase;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n create_amaci_round: {\n certification_system: certificationSystem,\n circuit_type: circuitType,\n max_voter: maxVoter,\n operator,\n oracle_whitelist_pubkey: oracleWhitelistPubkey,\n pre_deactivate_coordinator: preDeactivateCoordinator,\n pre_deactivate_root: preDeactivateRoot,\n round_info: roundInfo,\n voice_credit_amount: voiceCreditAmount,\n vote_option_map: voteOptionMap,\n voting_time: votingTime,\n whitelist,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n contractAddr,\n roundInfo,\n }: {\n contractAddr: string;\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n contract_addr: contractAddr,\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n contractAddr,\n voteOptionMap,\n }: {\n contractAddr: string;\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n contract_addr: contractAddr,\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport { Keypair } from '../libs/crypto';\nimport { FetchOptions } from '../libs/http/http';\nexport type * from '../libs/contract/types';\nexport type * from '../libs/crypto/types';\n\nexport enum MaciCircuitType {\n IP1V = '0',\n QV = '1',\n}\n\nexport enum MaciCertSystemType {\n GROTH16 = 'groth16',\n PLONK = 'plonk',\n}\n\nexport enum MaciRoundType {\n MACI = '0',\n AMACI = '1',\n ORACLE_MACI = '2',\n}\n\nexport type CertificateEcosystem = 'cosmoshub' | 'doravota';\n\nexport type ClientParams = {\n signer?: OfflineSigner;\n network: 'mainnet' | 'testnet';\n rpcEndpoint?: string;\n restEndpoint?: string;\n apiEndpoint?: string;\n certificateApiEndpoint?: string;\n registryAddress?: string;\n saasAddress?: string;\n apiSaasAddress?: string;\n maciCodeId?: number;\n oracleCodeId?: number;\n customFetch?: typeof fetch;\n defaultOptions?: FetchOptions;\n feegrantOperator?: string;\n whitelistBackendPubkey?: string;\n maciKeypair?: Keypair;\n secretKey?: string;\n mnemonic?: string;\n};\n\nexport type ContractParams = {\n network: 'mainnet' | 'testnet';\n rpcEndpoint: string;\n registryAddress: string;\n saasAddress: string;\n apiSaasAddress: string;\n maciCodeId: number;\n oracleCodeId: number;\n whitelistBackendPubkey: string;\n feegrantOperator: string;\n};\n\nexport type TransactionType = {\n id: string;\n blockHeight: string;\n txHash: string;\n timestamp: string;\n type: string;\n status: string;\n circuitName: string;\n fee: string;\n gasUsed: string;\n gasWanted: string;\n caller: string;\n contractAddress: string;\n};\n\nexport type RoundType = {\n id: string;\n blockHeight: string;\n txHash: string;\n caller: string;\n admin: string;\n operator: string;\n contractAddress: string;\n circuitName: string;\n timestamp: string;\n votingStart: string;\n votingEnd: string;\n status: string;\n period: string;\n actionType: string;\n roundTitle: string;\n roundDescription: string;\n roundLink: string;\n coordinatorPubkeyX: string;\n coordinatorPubkeyY: string;\n voteOptionMap: string;\n results: string;\n allResult: string;\n gasStationEnable: boolean;\n totalGrant: string;\n baseGrant: string;\n totalBond: string;\n circuitType: string;\n circuitPower: string;\n certificationSystem: string;\n codeId: string;\n maciType: string;\n voiceCreditAmount: string;\n preDeactivateRoot: string;\n identity: string;\n // funds: string;\n operatorLogoUrl?: string;\n operatorMoniker?: string;\n resultsList?: {\n v: number;\n v2: number;\n }[];\n};\n\nexport type SelectiveRoundType = Partial<RoundType>;\n\nexport type ProofType = {\n nodes: {\n id: string;\n blockHeight: string;\n txHash: string;\n contractAddress: string;\n timestamp: string;\n actionType: string;\n commitment: string;\n proof: string;\n }[];\n};\n\nexport type OperatorDelayType = {\n blockHeight: string;\n delayProcessDmsgCount: number;\n delayDuration: string;\n delayReason: string;\n delayType: string;\n id: string;\n nodeId: string;\n operatorAddress: string;\n timestamp: string;\n roundAddress: string;\n};\n\nexport type OperatorType = {\n id: string;\n validatorAddress: string;\n operatorAddress: string;\n coordinatorPubkeyX: string;\n coordinatorPubkeyY: string;\n identity: string;\n logoUrl: string;\n moniker: string;\n activeRoundsCount: number;\n completedRoundsCount: number;\n};\n\nexport type CircuitType = {\n maciType: string;\n circuitType: string;\n displayName: string;\n repoUrl: string;\n zipUrl: string;\n roundCount?: number;\n};\n\nexport type SignUpEventType = {\n id: string;\n blockHeight: string;\n txHash: string;\n contractAddress: string;\n timestamp: string;\n pubKey: string;\n stateIdx: number;\n balance: string;\n};\n\nexport type CircuitsCountGraphqlResponse = {\n data: {\n rounds: {\n totalCount: number;\n };\n };\n};\n\nexport type ErrorResponse = {\n code: number;\n error: {\n message: string;\n type: string;\n };\n};\n\nexport type SuccessResponse<T> = {\n code: 200;\n data: T;\n};\n\nexport type CircuitResponse =\n | SuccessResponse<{\n circuit: CircuitType;\n }>\n | ErrorResponse;\n\nexport type CircuitsResponse =\n | SuccessResponse<{\n circuits: CircuitType[];\n }>\n | ErrorResponse;\n\nexport type BalanceResponse =\n | SuccessResponse<{\n balance: string;\n }>\n | ErrorResponse;\n\nexport type OperatorResponse =\n | SuccessResponse<{\n operator: OperatorType;\n }>\n | ErrorResponse;\n\nexport type MissRateResponse =\n | SuccessResponse<{\n missRate: (MissRateType & {\n date: string;\n })[];\n }>\n | ErrorResponse;\n\n// export type ClaimableResponse =\n// | SuccessResponse<{\n// claimable: ClaimableType;\n// }>\n// | ErrorResponse;\n\nexport type OperatorDelayOperationsResponse =\n | SuccessResponse<{\n operatorDelayOperations: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorDelayType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type OperatorsResponse =\n | SuccessResponse<{\n operators: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type OperatorsGraphqlResponse = {\n data: {\n operators: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type RoundsCountGraphqlResponse = {\n data: {\n activeRoundsCount: {\n totalCount: number;\n };\n completedRoundsCount: {\n totalCount: number;\n };\n };\n};\n\nexport type VoteCountGraphqlResponse = {\n data: {\n signupsCount: {\n totalCount: number;\n };\n messagesCount: {\n totalCount: number;\n };\n };\n};\n\nexport type OperatorDelayOperationsGraphqlResponse = {\n data: {\n operatorDelayOperations: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorDelayType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type TransactionGraphqlResponse = {\n data: {\n transaction: TransactionType;\n };\n};\n\nexport type TransactionResponse =\n | SuccessResponse<{\n transaction: TransactionType;\n }>\n | ErrorResponse;\n\nexport type TransactionsGraphqlResponse = {\n data: {\n transactions: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: TransactionType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type TransactionsResponse =\n | SuccessResponse<{\n transactions: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: TransactionType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type RoundResponse =\n | SuccessResponse<{\n round: RoundType;\n }>\n | ErrorResponse;\n\nexport type SelectiveRoundResponse =\n | SuccessResponse<{\n round: SelectiveRoundType;\n }>\n | ErrorResponse;\n\nexport type RoundsResponse =\n | SuccessResponse<{\n rounds: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: RoundType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type RoundGraphqlResponse = {\n data: {\n round: RoundType;\n };\n};\n\n/**\n * GraphQL response type for selective round fields\n */\nexport type SelectiveRoundGraphqlResponse = {\n data: {\n round: SelectiveRoundType;\n };\n};\n\nexport type RoundsGraphqlResponse = {\n data: {\n rounds: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: RoundType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type ProofResponse =\n | SuccessResponse<{\n proofData: ProofType;\n }>\n | ErrorResponse;\n\nexport type ProofGraphqlResponse = {\n data: {\n proofData: ProofType;\n };\n};\n\nexport type SignUpEventsResponse =\n | SuccessResponse<{\n signUpEvents: SignUpEventType[];\n }>\n | ErrorResponse;\n\nexport type SignUpEventsGraphqlResponse = {\n data: {\n signUpEvents: {\n nodes: SignUpEventType[];\n };\n };\n};\n\nexport type MissRateType = {\n delayCount: number;\n deactivateDelay: {\n count: number;\n dmsgCount: number;\n };\n tallyDelay: {\n count: number;\n };\n totalDelayDuration: number;\n avgDelayDuration: number;\n tallyCount: number;\n deactivateCount: number;\n missRate: number;\n};\n\nexport type DeactivateMessage = {\n id: string;\n blockHeight: string;\n timestamp: string;\n txHash: string;\n deactivateMessage: string; // '[[\"0\", \"1\", \"2\", \"3\", \"4\"]]'\n maciContractAddress: string;\n maciOperator: string;\n};\n\nexport type AccountMangerParams = {\n mnemonic?: string;\n secretKey?: string | bigint;\n};\n\nexport type DerivePathParams = {\n accountIndex?: number;\n isExternal?: boolean;\n addressIndex?: number;\n};\n\nexport type VoterClientParams = {\n mnemonic?: string;\n secretKey?: string | bigint;\n};\n","import { GasPrice } from '@cosmjs/stargate';\n\ntype Groth16VkeyType = {\n vk_alpha1: string;\n vk_beta_2: string;\n vk_gamma_2: string;\n vk_delta_2: string;\n vk_ic0: string;\n vk_ic1: string;\n};\n\ntype CircuitInfoType = {\n [key: string]: {\n parameter: {\n state_tree_depth: string;\n int_state_tree_depth: string;\n vote_option_tree_depth: string;\n message_batch_size: string;\n };\n groth16: {\n process_vkey?: Groth16VkeyType;\n tally_vkey?: Groth16VkeyType;\n process_1p1v_vkey?: Groth16VkeyType;\n tally_1p1v_vkey?: Groth16VkeyType;\n process_qv_vkey?: Groth16VkeyType;\n tally_qv_vkey?: Groth16VkeyType;\n };\n plonk?: {\n process_vkey: {\n n: number;\n num_inputs: number;\n selector_commitments: string[];\n next_step_selector_commitments: string[];\n permutation_commitments: string[];\n non_residues: string[];\n g2_elements: string[];\n };\n tally_vkey: {\n n: number;\n num_inputs: number;\n selector_commitments: string[];\n next_step_selector_commitments: string[];\n permutation_commitments: string[];\n non_residues: string[];\n g2_elements: string[];\n };\n };\n };\n};\n\nexport const CIRCUIT_INFO: CircuitInfoType = {\n '2-1-1-5': {\n parameter: {\n state_tree_depth: '2',\n int_state_tree_depth: '1',\n vote_option_tree_depth: '1',\n message_batch_size: '5',\n },\n groth16: {\n process_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '2178a9c3805dd82071b2b28bb4c0ffc8178cad913c8c990b98b4863284dc3a5d175c0be554fc060c27c551e5e32effef015b918a0f5a2dc1b92909b8272719301c521d5f6542db5ea4775a42d32159c356a696599c1a3df011ec00559ae1c2b60d860f7e6513a7d20feaeaca401863e35a0f691dd7d30ce06d07946840de1ec8',\n vk_ic0:\n '19126a54a9b6d0d415f892c246485cb2889487cf9c4a8cd88dab5e1140e1d0630d1d76ef4652df8887c9dc557aa57f25e221db7e5b2e4cf618a362bece107f5c',\n vk_ic1:\n '0632e625fefc7172e8aec1070c4d32b90b6c482f6f3806773a4c55a03877c2d716cfd935eb3e3883f580c93f56adbf3a253ce3c208c52fb784f9d8fec139c617',\n },\n tally_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '2e9fad39728c543c5213599111e1a44b01720c999a6785e8136c3e3b3bf8e07e248e1933d477969ca6e27cb7a74bca18cac7e3bbdf9371be5c54fe151f6376a30955609ec69b89329322a2f435b706ca248d1312c7513853a50ef37ed0f7826c25a5c57bf07789d89e538bc24017cf2722811f21480b0bb8030ed0028ecb7cd8',\n vk_ic0:\n '1bc1a1a3444256469c07cd6f4d1cfd9f7c9ddce596a306e0af077ca9e9c0fe9602db2a9aecef76a9dc4c19bf88c0099b04fc75410cc9004f0966440825e3790a',\n vk_ic1:\n '05b8b475f2bfedba4fa04ab1972006da9764c2c3e6fb65d6dd0aac938fd298112a560e13770b06a3f709a49fddf016331ea205fa125026993f6666eff69f4def',\n },\n },\n plonk: {\n process_vkey: {\n n: 1048575,\n num_inputs: 1,\n selector_commitments: [\n '29b0f4a90bea69583a8fca1e74d23adf739d605af605a0e0971fac548df976fb2e10a42dfca2325684c1bca5fabbf9d7022fc8b997ea478f1052dd8808d99e44',\n '119002055b6c2f98314ef408e4a917a6678f114ca991185749289f171f61efc32b3a931c700271b82d22c2073af9b7fffcb7bfa644ea09102d9ef8482410a991',\n '10c5f32870d26f8e26d2eaae2705557b18210b2355677172e1bef5fe684120891f8317185390ddbb22ecb922d37e03c3cc524c84f65c8045f2324b0f164cfbdb',\n '115a5f9af5d438d3261cfa31b7050b931b7d22647f628a43af41a41dcd44cb8d2e99368eb15cdc6d1f16faf9db0db4825613d6893c776aef456705bdc76eb728',\n '1a61cc5f0fbe92fbc8c9bd58928ce467f63e4771e4d517966afbaf220ea069a91cec3231c370be07fee8d9ec01660d054c549b034715855ffa652ad5b67ced86',\n '19e0d095a343115f6e7ad7ae1f51e375cd648fb35451cb2d5a8cf3bafbb25d0525efdc2cc5b5600ee0ae954dca3bf67c8277d470161fe23b4be7a5bcdf641e68',\n ],\n next_step_selector_commitments: [\n '246ce82e01ed312e81492f132da2ee16bc13cc0024fbcc668de30173ad59067f0f072a892451cc495f5d9b8b99c8dc29be1d42d3004aed45fd5b2cd32a420016',\n ],\n permutation_commitments: [\n '19c4143f41738480adc5ae49922d31b8a5afaa1d25ced5c20b869c0e1ccad91920c267c53d33907318cd194ba2ea08a85f250779765ba4121f7a0edfe1afe22b',\n '114bda14aa702a0815e3f91318a08a2798244420fd6675c8fc3cc2b0232298890d2eb3c1f27a83f4a3be777524d6cc65aa435e0a472fae8d1158e0a6ded685d0',\n '289f0b046968d2c095d05350e43996756fc85d2deb0e267a069615f0889a249413bdbe6f09edb4db956b8f3fc4488c4681cd52469dc0d419dab99a65b88309f7',\n '16dd74a2089960aac0d68309d5e81c6b45c29fafe4d42c922c06eb633ed48d551d347d1f43ee9b137772eefc43a6dcdf5ac35ee1615bc8f7c243bce071c410a9',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n tally_vkey: {\n n: 524287,\n num_inputs: 1,\n selector_commitments: [\n '18c2bb75c8ed53a5d15a56cc91c56f14c832419994ce7187c7c98b5e622cac0808b773f05e09822d8d267646198a78359ea2aa6fbaeb01317142f99fd11da6c0',\n '181499098243a5968f5490b7759aa15f0f769f24f3f4219b69f96913cf4fb23c1cd7b3f109196d7577390fd2e6d3930a71b0559aff756f3ca43eef66ce7333f4',\n '07ba2bdd452503fb16b56ea2940e95a98118c9dd120ae192680fe2b80bdb26f10ac6cdc7cb12b581a8c64d45b5af3d253c4282405eed3fd4d091ae05aac45cb6',\n '1caf01f1775eeafa78a11202e926ee92be997ce040f9c6fbce161348a40aeda70d9f15738cccf538083784e566ceef651d000223ae810c980e2d5d98b91b4665',\n '2c377c69cae1d591af413da2fd986ef3dca595d0c5817ee4932b92169d37c52d1218ce63dde705ebd1dc66d9b62daca287e4fdf6800b69204e5b78bfe84365a1',\n '175dd4ff280e39f0e080c181f853845e40c4b91709a93e4398d24befc9cf556903675361817e031e86bd896ff1dd7bc1cc31ca920a101499db0c58d77f0730ec',\n ],\n next_step_selector_commitments: [\n '12d76999d26137d433f7119ab34f3fc63cfedb9172052cfb34acfc3cdc570f511aba802ebe92b87f913496314b938cf526078280a68826c90b686b90420c7742',\n ],\n permutation_commitments: [\n '167b05c0132399e7126e8d16efb224b1c6729942048fc7e730fd1451116e0a6e05acaf2a6d2c88cc25610474b651c8cdcb7e8e14e59ddfad819123e888c4b1b6',\n '25aed62de4b701dc645e076543e2553c306010f2776c74edae55ea5253d9540403d042c4cb699cc04b2bb63d3c3edc0c85b049a84dc2fd44369f957d81363563',\n '0e77fb0b0e84da1d955da3d66dbb8fa3988f22e999a34bc4ac537a0f9187ac40156f8d7cb6d005fd85a0178d794f941b4e84832fd389a37c2a78112dac09b758',\n '051d3d906d457eaa9eff77a296dfa1760fd9ea379eec60487be38de91545ca2c1fcf457d6ac31afee10951245b0cc1e2c7674596f65955d189d48b6938fb3594',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n },\n },\n '4-2-2-25': {\n parameter: {\n state_tree_depth: '4',\n int_state_tree_depth: '2',\n vote_option_tree_depth: '2',\n message_batch_size: '25',\n },\n groth16: {\n process_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '0d0fe390b9dd4d1d0f486787b6ea96765cbeaa8f00310fecc3429673c5866c081a27998596ba296f66f3f7b5e2450d1ce1bcc535c133b2e8b577ba07dc1ccb4c1895f7afb9b3168a6d628c9173157cd56ca51948cc66c129a25f80e3b665e4b12c9c50f0cc0d070978ed2fb8ce15956d67c5dc6c07c7f45f1facfb5522d7b656',\n vk_ic0:\n '0ff2b22774da5c0ba94db4d759827b8c962aaf44db2649eb10407de02a40463a26497581d6d0979ad7f9057f26e048109158b0872700e2ad8447ffc9b4bf146b',\n vk_ic1:\n '0a47be101a59d20641e1369c0b2b9fb839cd35ecbfbeac3866df43723b70c78d17e96303c417743d93b7726805b736f364d305036b50e4ad1b885fc41284daf5',\n },\n tally_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '08e44e0876bd574d8a3411e374884eb61da7292ca52903fa96553c37311b66ce0f2f529e59b1d37e55794a575d0f87548ca0d03331c19689bc203a68c1c4bae20e9fd25a7bffaa9b7409e694a48bc0d57f42df164d4a01bd5deecffedd2d3a3125eff290efb93eaf9c578cc7ee9d00406137607b9602de02424ff413ac948690',\n vk_ic0:\n '295c8e84b4b6b8de44b24f80eb5cae1df65e4877c4af8da2dbadfbfc3586dc790661b9e636f2c2a83028d11cbb7c753675481b65a5dfe32fff7a558231b3c9ef',\n vk_ic1:\n '299cfb28054cde0470bd7ff280349089350226d1ca154dcf6544b2680bf3bea925026e6644668273d6066ef6766c2f561c3607c523fbbd1379c5002376ef69c3',\n },\n },\n plonk: {\n process_vkey: {\n n: 2097151,\n num_inputs: 1,\n selector_commitments: [\n '126cbf10e0b68a56d45614be16c5bb48bd1374478e17b9fe1a78b726ea70f9b21f3cd20fd178d89e5923c422ef050ccc7134fbd76c9efdbb90f677ee41e01edb',\n '12813166f206c95eddd998a40d8d2e54e29dd393f543e3583a7999b18d674832024cdd935540bd3b96207ec0609c6718ad8b14e2ef315594454c57d606494485',\n '05da9eea3ee7151355067ced11a8e8ff57a56c758493afc9cbb6cfbacfc42e7b08993dfa25c85f20aeb7f64e87fe56ac8066cf6b8479dc96294e302ef5d55372',\n '2e446e540bacde7daea23c93a67bc6b1424b7c16b33fd2cee251b0d093cd78300030b8e340f01f320639d60b77724e58fc8a2d778b7b2a5df2c953ce34debeea',\n '1cf8c75b18071ede19d196b46a8776efc29ac514458a698d9f2e50b7bc692f6e06f7ff96897240eca31058fe330e8cbcd911324b79a3a34d03340a3cfed85fd5',\n '17101fb5c293438a695075b221219679e278e4bd147239c9fc69081b19cacefe218eb895f1456ca81e29731967588aee4b0758ea51aa28e5fefc81fed4a11513',\n ],\n next_step_selector_commitments: [\n '0cebff4fe8cd70325f986088a1e17ae129a025481137bd80aef9c1f1c2e52f1e265a4ccae1ed89cb2fba527165f007898e70f988311ee4e4e87e41376cfeed03',\n ],\n permutation_commitments: [\n '025b5db167721133693f0b6d9d7cfadce68ad15365ef1605dda4a6c809edeea61927b27ca11713fc683c88f6330e9621837b05e5db74d5994d1cf04bc3d529b3',\n '1fac93999f33b145613901846e6403d7f4237d582b51ccc4fb5c70038284c6e21cc804cc3cf7170b96da74fcbb30c81cd8c3405a629327c657025db7332f169a',\n '0b6d7d383de73dbfc16f2c0f3af763135ff05a12ec937548008cfee944c195f902336a68a50f62f595953e44401e872fb41abb66a733684b079ffe550d09c233',\n '225a1f5e92d105d3be026ae68904826f89b786faad75a846ef966ed714568bba28d1388786fde71dea206cdef16faa7a589e90863e6245d271e3f154c75c5531',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n tally_vkey: {\n n: 1048575,\n num_inputs: 1,\n selector_commitments: [\n '1588fb667b3f0e4d0970b8208e4b6b4c729c4926b936f8d877017cf42d07ca15069643791d98abcd6b7d0b0546e7560ab9011e069f2ee48ede581fc72d8b5e04',\n '09c5480b103c44a81850ffd9a61ec21f7db41bc89996d8df075c3e029290eb5b083cb2b184d95c0761e585547be33250c8939929b87fdc39775ccea17d51b481',\n '278e239bcac0a945a17572a6d61ba59f705746e6893a10a44841933a8c8310e712e4ee913af9b77c8fdcdc365316aa9f1b8dc081eb99ad80265768ec9f484beb',\n '12532585ea307c5559b18a4d01db59b544a88088f61a5b5ed0431393e6f675af1309bf0dcaa7a552849e5f28d0300c8c61b18393fb638aed3b7d70e27bb91c35',\n '172e7ecb8e485aaee801fd78b8fd7c0b862baef65e39e6832cffa2170b6f981928d86ab5887e8c3210e34e03cada468bd501f60ec3a8fa35b4c7067d6fb8c6ae',\n '0c27211d046735fc681228b8366be2c8cf9a256cbd03dcd4af65152e94f95a6f1af151a5311b195b0f4acffeec4952cc52edbb7045aab61bbd3be9cd322ab99e',\n ],\n next_step_selector_commitments: [\n '25ee15301d562e6c630946b3fbe36b9fbd8dfbd44ddf70cc825fb1fa1ebd966229081f6b9297da671c69064e10b8f5dd0f69b69d1bf79122c6197f119087ebe1',\n ],\n permutation_commitments: [\n '194849a6ec5cb37e09d20801d387abbab04e453f630c5fbbf5c4819c5569480c0c8bf0ce2b4955cc4c891840da1d9e99feb81e8d43251dffbe4d6167639b9f9b',\n '17717d2638632d406b3c8aa69550c8aeed1b79def3ab55e9d0c4bdf21cc339ad07d3bd3a331145fc96f34c85469a34a8c93b53b7aa36bb5a94c31e3b4d47713e',\n '277b0c99b63c79bb9ed2f677c3987cf00acb293933dfced82b5afcb8bf0c34570d3187ce5c7e892582ddda4322cf7c50d41105fe98503fb60e41f4a08da5916d',\n '0489f6dec0f27a8c21d147ebb9781b68b4b73db065a6017924c543f6d9fadbe922d24c0946bd8b19df7659810296d063b557cdf7aba510b11e08fbf2e9d37931',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n },\n },\n '6-3-3-125': {\n parameter: {\n state_tree_depth: '6',\n int_state_tree_depth: '3',\n vote_option_tree_depth: '3',\n message_batch_size: '125',\n },\n groth16: {\n process_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '057f25675851ef5a79a6d8706a43a6cd8e494cfb12c241ede46991d9174cf30605b081ff44f3ede774dab68ea9324c12308c13cb09cbb129adf94401b9134f5b16137d952fd32ab2d4243ebff4cb15d17206948ef17909ea8606886a8109bdad082f7d27e1cbf98925f055b39d1c89f9bcc4f6d92fdb920934ff5e37ba4d9b49',\n vk_ic0:\n '27c937c032a18a320566e934448a0ffceea7050492a509c45a3bcb7e8ff8905d20789ada31729a833a4f595ff9f49f88adb66f2ab987de15a15deccb0e785bf4',\n vk_ic1:\n '0ed2cefc103a2234dbc6bbd8634812d65332218b7589f4079b2c08eb5a4f5f63113a7f3cb53797a7f5819d7de7e3f0b2197d1c34790685a4a59af4314810420b',\n },\n tally_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '2065e91c00fcc5cbc3d974cf52e24de972bdb1b4d8ded629dec20b5c904c3fa327ffe02402094795ff4d02588c8268fcad738f69eb4c732a0c98b485035e1f4913ede11b074ff143a929673e581a547717c58ce01af87d9d8b28f65f506093a61013e367b93e6782129362065840a0af9b77d7d9659a84577176e64a918d8d4c',\n vk_ic0:\n '11db4a022aab89a265f06ff62aa18c74b21e913a8b23e7fce9cb46f76d1c4d9f2a7475b1eeb7be0a0dc457e6d52536ba351b621b63a7d77da75d4e773048537e',\n vk_ic1:\n '0f298d235d0822ad281386abdf511853529af4c864b0cd54140facebfc1356a3059cd6d0d4b27b39e5683548fe12025e2a6b2e2724c2ca87d2008ef932ed3801',\n },\n },\n plonk: {\n process_vkey: {\n n: 8388607,\n num_inputs: 1,\n selector_commitments: [\n '216533ab27390f98812429524326ac08736d636d2891fb81446796cc1771a3230642f49db115acc15a186a1013f91a08efcd05640eb137d700276e80fd05bc90',\n '11747f6f378e26dbdacff464ce7eb6a8869750d0fa7e508e263ac77b582c1e9b24ba3d208650b0c28943915c563cc94cc3f98cdb5fd8adc4f4d3e2a60eda3302',\n '09239eb768d8d47b91c7e08e2ec6a374571964ed16be293cdc35e112393c4fd1182a0794be7f1441418664e9f718b67ed392a7da3e2868375bcf629131bb2680',\n '2020f7db24940bbf38d097ea5d7ef7253e38b154d7eb0ff1782ea18ce215dd7b0e8475197b071b118adc6418b7b7fb42fea19b6272d1bb460cc47deacb299ec7',\n '298923db1618185064bbab5df30ee03a3c9cbc7ce8f096d76cbd2a5ab3df86cd05bbedb938e6e0ff35cce23609458aff8081cdf3163655672074d1b18b0007bd',\n '0effaabe8c6e8a076aedd36d10f2926f9871f552d93e22bfbe69e3c828a546fa2d0cd163b49a6de219ac2c048a8459ae448047748ba078b9d5d07b290c946b08',\n ],\n next_step_selector_commitments: [\n '13e3d7299e30e6142699469d620df721eca35bbb807a8f4298f165260fdc24f823e7bd9bcb6506a094a5ebef44434c62e4bcb5d3dd7e092c49d5cb80b8ae0757',\n ],\n permutation_commitments: [\n '03d94ab8fdc681523a8eec10f1ce5552937c268d1d970f9e75ee8657cd4c12a81e03476f83ef5c14db2f4d931b833a3b65b8d5689b37cc7f183914c90d3d065d',\n '1b9c6ef20e68355c535bda6ff04a8a61d7552a594bb8e88d69a6f8840ddab04d2884824cc356d0d90cc278c247fc531de62efca4b19ed1be6f071144474d2037',\n '1ff82de8312481e1591d2d1c2698fa3944b3f0afa0dd702be8a1a944a5a8997323ffbd0ab39a2e13608a8e76803c33ffda7317bb7101e335ce5552ed62dcd09d',\n '2cb2bbdd51d22b79957b0401ecb6fe089f05426ba092b1205fa92f39b36cc5fc0c36c3934e47b7d407d4cda0c78c2b3fb23162cb0d295e8a8cce1a274956c34a',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n tally_vkey: {\n n: 8388607,\n num_inputs: 1,\n selector_commitments: [\n '258d101f9499e81c0d0da8986c659ef33da19d4955a142e56b4854d1327c902c1996baecd81432717a9cbf92ccf651e4217a788c1a2ed855f749480f8ce8203c',\n '1892a17c9c01389e3149b0663069a1ad4fd3c8e2db5ce99795b781c47b55acf9001cf5f0b4c1d088fa2058ca19cd2f1e9559ebe059897bb0aadcb540ce5f468a',\n '09912d6eaa4a22802451135d9a221ebf97c2ce8ad5bbb2942d5a860482e8e4202573995072c4b014cd0e9d09a1fd53ee7d602070b404288a7fd0d97b57d8f07d',\n '0c62ef7ad01b05b2c01fca6188de269d63d725348a07a99bbc50f24c1518aa871fdc61bbf42399433a0917c919dcfe9e851b206e1c37dec0908f69ad89bb1f8e',\n '07d181c1026ef4a6732bff3dffbc5ae0e3746e4860f478c6c2e8e258df2ed7671efe073fb31cf5a61c0eedceccb5e968220b9ff7e2b055b11d7c456a57fe7ac9',\n '1bbd7ad96893df675c811e5a2be184e2e3bc9af0ce30a7b26e53a916a10a777a01ffa70dbe585201ac09778429c04c71229392608095d220c7d82631a0caedd6',\n ],\n next_step_selector_commitments: [\n '2ae6c5c98d4c384e8e645d85a4ca362de4c4e75efe3c79d5bcbd126a9e305b831618df99300c7327f1eac6a498c8feac6013d4ba09b7ea046340f99b0598a832',\n ],\n permutation_commitments: [\n '2458c5fb474ab3e7ae9c6b82cc432a111954d8be5e7e9b4fc58c14e1aed77f3207426dbe08272aa69ba8b73809f27f9ff083641b5c3c896c386a74bbed3083dd',\n '0879ac4885674b1af0ab67c7b505bce6234f32a0335bdfd229023fea5f303ece0973ba8abc9ade8edcfb68c7d4b8b98272c7bf33eff841fec78d21c0c2e82aa6',\n '07b74f37fcbcb2d9962a529fbc254d54925aeb1be1a49517affeb3571ef3e31e3033f7900ff5bb5759cbb98b64ca7f42967278c328d00e60c042aa65f2178ded',\n '203c948fdc386e7bfbdc37363ab489e9ce3264f4ccd23c33dd8f2337fb9007a621cabf740aa26e522dcb7af6c0de9f93cbc69595b29b02e75c2f3507e97664ec',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n },\n },\n '9-4-3-625': {\n parameter: {\n state_tree_depth: '9',\n int_state_tree_depth: '4',\n message_batch_size: '625',\n vote_option_tree_depth: '3',\n },\n groth16: {\n process_1p1v_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '1195be678487bbc8c0ae726c0985a5caf6f75e3f8327926926c4f89e498ad733043e46e10b506d194b27275f402bc3fb208a2f5be69662e7c9898d1c0ece4f04',\n vk_ic1:\n '10c34362189a7ee44b1c5e57755d7e0d672dba552e614d5cd9a53081bee2333425879fa4e4a9e3fff287824cce35f94725ca0edb60a4ffcbf50becb2fd96cb0b',\n },\n tally_1p1v_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '2ec191d51bd4ac7cd65cb3dd2decfa4e56c4f167bbc40e2c9e1ca728f9bc5b0e2ed1c82319dc554aea5ff2ca05d6f4d4d61e8f059a8c05d4b4faabae5128a437',\n vk_ic1:\n '2f19db8f03b6b5896abc6989273371b14833356f45c12685e57bc292eccc53570cb629e551df179f73b9f3391946bad29739af8b808c80b0f057af45aea59849',\n },\n process_qv_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '1832600210a459fe61d971081d4baa1a1add23f87c8a8dc4042cd5cf6c6fdf8e3018489aec30d9deb26629e05965a3a7e038be58ce10c854cb7e1071f2708aad',\n vk_ic1:\n '0274a24117a799333754d646e35f37292e7ca9984fb8781211504b158d69d2c422aa99651ca207c77084988b16ef363664b9cf36071f7131dcc10b98ea27d7f6',\n },\n tally_qv_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '2ec191d51bd4ac7cd65cb3dd2decfa4e56c4f167bbc40e2c9e1ca728f9bc5b0e2ed1c82319dc554aea5ff2ca05d6f4d4d61e8f059a8c05d4b4faabae5128a437',\n vk_ic1:\n '2f19db8f03b6b5896abc6989273371b14833356f45c12685e57bc292eccc53570cb629e551df179f73b9f3391946bad29739af8b808c80b0f057af45aea59849',\n },\n },\n },\n};\n\nexport const MACI_TYPE = {\n 'maci-1p1v': '0',\n 'maci-qv': '1',\n};\n\nexport const AMACI_TYPE = {\n 'amaci-1p1v': '0',\n 'amaci-qv': '1',\n};\n\nexport const PROOF_SYSTEM = {\n groth16: '0',\n plonk: '1',\n};\n\nexport const QTR_LIB = {\n zeros: [\n '0',\n '14655542659562014735865511769057053982292279840403315552050801315682099828156',\n '19261153649140605024552417994922546473530072875902678653210025980873274131905',\n '21526503558325068664033192388586640128492121680588893182274749683522508994597',\n '20017764101928005973906869479218555869286328459998999367935018992260318153770',\n '16998355316577652097112514691750893516081130026395813155204269482715045879598',\n '2612442706402737973181840577010736087708621987282725873936541279764292204086',\n '17716535433480122581515618850811568065658392066947958324371350481921422579201',\n '17437916409890180001398333108882255895598851862997171508841759030332444017770',\n ],\n};\n","import {\n MaciCertSystemType,\n MaciCircuitType,\n MaciRoundType,\n} from '../../types';\nimport { CIRCUIT_INFO } from './vars';\n\nexport function getCircuitType(circuitType: MaciCircuitType) {\n let maciVoteType = null;\n switch (circuitType) {\n case MaciCircuitType.IP1V:\n maciVoteType = '0';\n break;\n case MaciCircuitType.QV:\n maciVoteType = '1';\n break;\n default:\n throw new Error(\n `Invalid circuit type ${circuitType}, only support 1P1V and QV`\n );\n }\n return maciVoteType;\n}\n\nexport function getContractParams(\n type: MaciRoundType,\n circuitType: MaciCircuitType,\n proofSystem: MaciCertSystemType,\n maxVoter: number,\n maxOption: number\n) {\n let parameters: {\n state_tree_depth: string;\n int_state_tree_depth: string;\n vote_option_tree_depth: string;\n message_batch_size: string;\n };\n let groth16ProcessVkey = null;\n let groth16TallyVkey = null;\n let plonkProcessVkey = null;\n let plonkTallyVkey = null;\n let maciVoteType = null;\n let maciCertSystem = null;\n\n switch (circuitType) {\n case MaciCircuitType.IP1V:\n maciVoteType = '0';\n break;\n case MaciCircuitType.QV:\n maciVoteType = '1';\n break;\n default:\n throw new Error(\n `Invalid circuit type ${circuitType}, only support 1P1V and QV`\n );\n }\n\n switch (proofSystem) {\n case MaciCertSystemType.GROTH16:\n maciCertSystem = '0';\n break;\n case MaciCertSystemType.PLONK:\n maciCertSystem = '1';\n break;\n default:\n throw new Error(\n `Invalid proof system ${proofSystem}, only support GROTH16 and PLONK`\n );\n }\n\n if (maxVoter <= 25 && maxOption <= 5) {\n // state_tree_depth: 2\n // vote_option_tree_depth: 1\n parameters = CIRCUIT_INFO['2-1-1-5'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n groth16ProcessVkey = CIRCUIT_INFO['2-1-1-5']['groth16'].process_vkey;\n groth16TallyVkey = CIRCUIT_INFO['2-1-1-5']['groth16'].tally_vkey;\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n plonkProcessVkey = CIRCUIT_INFO['2-1-1-5']['plonk']?.process_vkey;\n plonkTallyVkey = CIRCUIT_INFO['2-1-1-5']['plonk']?.tally_vkey;\n }\n } else if (maxVoter <= 625 && maxOption <= 25) {\n // state_tree_depth: 4\n // vote_option_tree_depth: 2\n parameters = CIRCUIT_INFO['4-2-2-25'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n groth16ProcessVkey = CIRCUIT_INFO['4-2-2-25']['groth16'].process_vkey;\n groth16TallyVkey = CIRCUIT_INFO['4-2-2-25']['groth16'].tally_vkey;\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n plonkProcessVkey = CIRCUIT_INFO['4-2-2-25']['plonk']?.process_vkey;\n plonkTallyVkey = CIRCUIT_INFO['4-2-2-25']['plonk']?.tally_vkey;\n }\n } else if (maxVoter <= 15625 && maxOption <= 125) {\n // state_tree_depth: 6\n // vote_option_tree_depth: 3\n parameters = CIRCUIT_INFO['6-3-3-125'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n groth16ProcessVkey = CIRCUIT_INFO['6-3-3-125']['groth16'].process_vkey;\n groth16TallyVkey = CIRCUIT_INFO['6-3-3-125']['groth16'].tally_vkey;\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n plonkProcessVkey = CIRCUIT_INFO['6-3-3-125']['plonk']?.process_vkey;\n plonkTallyVkey = CIRCUIT_INFO['6-3-3-125']['plonk']?.tally_vkey;\n }\n } else if (maxVoter <= 1953125 && maxOption <= 125) {\n // state_tree_depth: 9\n // vote_option_tree_depth: 3\n parameters = CIRCUIT_INFO['9-4-3-625'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n if (circuitType === MaciCircuitType.IP1V) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_1p1v_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_1p1v_vkey;\n } else if (circuitType === MaciCircuitType.QV) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_qv_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_qv_vkey;\n }\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n throw new Error('PLONK is not supported for MACI-9');\n }\n } else {\n throw new Error('Number of voters or options is too large.');\n }\n switch (type) {\n case MaciRoundType.MACI:\n return {\n parameters,\n groth16ProcessVkey,\n groth16TallyVkey,\n plonkProcessVkey,\n plonkTallyVkey,\n maciVoteType,\n maciCertSystem,\n };\n case MaciRoundType.AMACI:\n return {\n // parameters,\n // groth16ProcessVkey,\n // groth16TallyVkey,\n // plonkProcessVkey,\n // plonkTallyVkey,\n };\n case MaciRoundType.ORACLE_MACI:\n if (circuitType === MaciCircuitType.IP1V) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_1p1v_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_1p1v_vkey;\n } else if (circuitType === MaciCircuitType.QV) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_qv_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_qv_vkey;\n }\n return {\n parameters: CIRCUIT_INFO['9-4-3-625'].parameter,\n groth16ProcessVkey,\n groth16TallyVkey,\n plonkProcessVkey: null,\n plonkTallyVkey: null,\n maciVoteType,\n maciCertSystem: '0',\n };\n }\n}\n\nexport function getAMaciRoundCircuitFee(\n network: 'mainnet' | 'testnet',\n maxVoter: number,\n maxOption: number\n) {\n let requiredFee = {\n denom: 'peaka',\n amount: '0',\n };\n if (maxVoter <= 25 && maxOption <= 5) {\n // state_tree_depth: 2\n // vote_option_tree_depth: 1\n if (network === 'mainnet') {\n requiredFee.amount = '20000000000000000000';\n } else {\n requiredFee.amount = '20000000000000000000';\n }\n } else if (maxVoter <= 625 && maxOption <= 25) {\n // state_tree_depth: 4\n // vote_option_tree_depth: 2\n if (network === 'mainnet') {\n requiredFee.amount = '750000000000000000000';\n } else {\n requiredFee.amount = '750000000000000000000';\n }\n } else {\n throw new Error('Number of voters or options is too large.');\n }\n\n return requiredFee;\n}\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport { ContractParams } from '../../types';\nimport {\n createAMaciClientBy,\n createApiMaciClientBy,\n createApiSaasClientBy,\n createContractClientByWallet,\n createMaciClientBy,\n createOracleMaciClientBy,\n createRegistryClientBy,\n createSaasClientBy,\n} from './config';\nimport {\n CreateAMaciRoundParams,\n CreateMaciRoundParams,\n CreateOracleMaciRoundParams,\n CreateSaasOracleMaciRoundParams,\n CreateApiSaasAmaciRoundParams,\n} from './types';\nimport { getAMaciRoundCircuitFee, getContractParams } from './utils';\nimport { QTR_LIB } from './vars';\nimport { MaciRoundType, MaciCertSystemType } from '../../types';\nimport { unpackPubKey } from '../crypto';\nimport { StdFee, GasPrice, calculateFee } from '@cosmjs/stargate';\n\nexport const prefix = 'dora';\n\nexport class Contract {\n public network: 'mainnet' | 'testnet';\n public rpcEndpoint: string;\n public registryAddress: string;\n public saasAddress: string;\n public apiSaasAddress: string;\n public maciCodeId: number;\n public oracleCodeId: number;\n public feegrantOperator: string;\n public whitelistBackendPubkey: string;\n\n constructor({\n network,\n rpcEndpoint,\n registryAddress,\n saasAddress,\n apiSaasAddress,\n maciCodeId,\n oracleCodeId,\n feegrantOperator,\n whitelistBackendPubkey,\n }: ContractParams) {\n this.network = network;\n this.rpcEndpoint = rpcEndpoint;\n this.registryAddress = registryAddress;\n this.saasAddress = saasAddress;\n this.apiSaasAddress = apiSaasAddress;\n this.maciCodeId = maciCodeId;\n this.oracleCodeId = oracleCodeId;\n this.feegrantOperator = feegrantOperator;\n this.whitelistBackendPubkey = whitelistBackendPubkey;\n }\n\n async createAMaciRound({\n signer,\n startVoting,\n endVoting,\n operator,\n whitelist,\n title,\n description,\n link,\n maxVoter,\n voteOptionMap,\n voiceCreditAmount,\n circuitType,\n preDeactivateRoot,\n preDeactivateCoordinator,\n oracleWhitelistPubkey,\n fee = 'auto',\n }: CreateAMaciRoundParams & { signer: OfflineSigner }) {\n const start_time = (startVoting.getTime() * 10 ** 6).toString();\n const end_time = (endVoting.getTime() * 10 ** 6).toString();\n const client = await createRegistryClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.registryAddress,\n });\n\n const requiredFee = getAMaciRoundCircuitFee(\n this.network,\n maxVoter,\n voteOptionMap.length\n );\n\n preDeactivateRoot = preDeactivateRoot || '0';\n\n // Convert preDeactivateCoordinator to {x, y} format if provided\n let preDeactivateCoordinatorPubKey: { x: string; y: string } | undefined =\n undefined;\n if (preDeactivateCoordinator !== undefined) {\n let coordinatorX: bigint;\n let coordinatorY: bigint;\n\n if (typeof preDeactivateCoordinator === 'bigint') {\n // If it's a packed bigint, unpack it\n [coordinatorX, coordinatorY] = unpackPubKey(preDeactivateCoordinator);\n } else {\n // If it's already a PubKey array [x, y]\n [coordinatorX, coordinatorY] = preDeactivateCoordinator;\n }\n\n preDeactivateCoordinatorPubKey = {\n x: coordinatorX.toString(),\n y: coordinatorY.toString(),\n };\n }\n\n const res = await client.createRound(\n {\n operator,\n preDeactivateRoot,\n preDeactivateCoordinator: preDeactivateCoordinatorPubKey,\n voiceCreditAmount,\n whitelist,\n roundInfo: {\n title,\n description: description || '',\n link: link || '',\n },\n votingTime: {\n start_time,\n end_time,\n },\n maxVoter: maxVoter.toString(),\n voteOptionMap,\n certificationSystem: '0',\n circuitType,\n oracleWhitelistPubkey,\n },\n fee,\n undefined,\n [requiredFee]\n );\n let contractAddress = '';\n res.events.map((event) => {\n if (event.type === 'wasm') {\n let actionEvent = event.attributes.find(\n (attr) => attr.key === 'action'\n )!;\n if (actionEvent.value === 'created_round') {\n contractAddress = event.attributes\n .find((attr) => attr.key === 'round_addr')!\n .value.toString();\n }\n }\n });\n return {\n ...res,\n contractAddress,\n };\n }\n\n async createMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n whitelist,\n title,\n description,\n link,\n maxVoter,\n maxOption,\n circuitType,\n certSystemType,\n fee = 'auto',\n }: CreateMaciRoundParams & { signer: OfflineSigner }) {\n const start_time = (startVoting.getTime() * 10 ** 6).toString();\n const end_time = (endVoting.getTime() * 10 ** 6).toString();\n const [{ address }] = await signer.getAccounts();\n const client = await createContractClientByWallet(this.rpcEndpoint, signer);\n const [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\n const {\n parameters,\n groth16ProcessVkey,\n groth16TallyVkey,\n plonkProcessVkey,\n plonkTallyVkey,\n maciVoteType,\n maciCertSystem,\n } = getContractParams(\n MaciRoundType.MACI,\n circuitType,\n certSystemType,\n maxVoter,\n maxOption\n );\n\n const instantiateResponse = await client.instantiate(\n address,\n this.maciCodeId,\n {\n round_info: { title, description: description || '', link: link || '' },\n voting_time: {\n start_time,\n end_time,\n },\n parameters,\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\n },\n groth16_process_vkey: groth16ProcessVkey,\n groth16_tally_vkey: groth16TallyVkey,\n plonk_process_vkey: plonkProcessVkey,\n plonk_tally_vkey: plonkTallyVkey,\n max_vote_options: maxOption.toString(),\n whitelist,\n circuit_type: maciVoteType,\n certification_system: maciCertSystem,\n qtr_lib: QTR_LIB,\n },\n `[MACI] ${title}`,\n fee\n );\n\n return instantiateResponse;\n }\n\n async createOracleMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n title,\n description,\n link,\n voteOptionMap,\n circuitType,\n whitelistEcosystem,\n whitelistSnapshotHeight,\n whitelistVotingPowerArgs,\n fee = 'auto',\n }: CreateOracleMaciRoundParams & { signer: OfflineSigner }) {\n const start_time = (startVoting.getTime() * 1_000_000).toString();\n const end_time = (endVoting.getTime() * 1_000_000).toString();\n const [{ address }] = await signer.getAccounts();\n const client = await createContractClientByWallet(this.rpcEndpoint, signer);\n const [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\n const { maciVoteType, maciCertSystem } = getContractParams(\n MaciRoundType.ORACLE_MACI,\n circuitType,\n MaciCertSystemType.GROTH16,\n 0,\n 0\n );\n\n const instantiateResponse = await client.instantiate(\n address,\n this.oracleCodeId,\n {\n round_info: { title, description: description || '', link: link || '' },\n voting_time: {\n start_time,\n end_time,\n },\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\n },\n vote_option_map: voteOptionMap,\n whitelist_backend_pubkey: this.whitelistBackendPubkey,\n whitelist_ecosystem: whitelistEcosystem,\n whitelist_snapshot_height: whitelistSnapshotHeight,\n whitelist_voting_power_args: whitelistVotingPowerArgs,\n circuit_type: maciVoteType,\n certification_system: maciCertSystem,\n feegrant_operator: this.feegrantOperator,\n },\n `[Oracle MACI] ${title}`,\n fee\n );\n\n return instantiateResponse;\n }\n\n async createSaasOracleMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n title,\n description,\n link,\n maxVoter,\n voteOptionMap,\n whitelistBackendPubkey,\n gasStation = false,\n fee = 1.8,\n }: CreateSaasOracleMaciRoundParams & { signer: OfflineSigner }) {\n const startTime = (startVoting.getTime() * 1_000_000).toString();\n const endTime = (endVoting.getTime() * 1_000_000).toString();\n\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n const [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\n\n const roundParams = {\n certificationSystem: '0',\n circuitType: '0',\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\n },\n maxVoters: maxVoter,\n roundInfo: {\n title,\n description: description || '',\n link: link || '',\n },\n startTime,\n endTime,\n voteOptionMap,\n whitelistBackendPubkey:\n whitelistBackendPubkey || this.whitelistBackendPubkey,\n };\n\n let createResponse;\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n create_oracle_maci_round: {\n certification_system: '0',\n circuit_type: '0',\n coordinator: roundParams.coordinator,\n max_voters: roundParams.maxVoters.toString(),\n round_info: roundParams.roundInfo,\n start_time: roundParams.startTime,\n end_time: roundParams.endTime,\n vote_option_map: roundParams.voteOptionMap,\n whitelist_backend_pubkey: roundParams.whitelistBackendPubkey,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n createResponse = await client.createOracleMaciRound(\n roundParams,\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n createResponse = await client.createOracleMaciRound(\n roundParams,\n grantFee\n );\n } else {\n createResponse = await client.createOracleMaciRound(roundParams, fee);\n }\n\n let contractAddress = '';\n createResponse.events.map((event) => {\n if (event.type === 'wasm') {\n let actionEvent = event.attributes.find(\n (attr) => attr.key === 'action'\n )!;\n if (actionEvent.value === 'created_oracle_maci_round') {\n contractAddress = event.attributes\n .find((attr) => attr.key === 'round_addr')!\n .value.toString();\n }\n }\n });\n return {\n ...createResponse,\n contractAddress,\n };\n }\n\n async setSaasOracleMaciRoundInfo({\n signer,\n contractAddress,\n title,\n description,\n link,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n title: string;\n description: string;\n link: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n const roundInfo = {\n title,\n description,\n link,\n };\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n set_round_info: {\n contract_addr: contractAddress,\n round_info: roundInfo,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n grantFee\n );\n }\n\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n fee\n );\n }\n\n async setSaasOracleMaciRoundVoteOptions({\n signer,\n contractAddress,\n voteOptionMap,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n voteOptionMap: string[];\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n set_vote_options_map: {\n contract_addr: contractAddress,\n vote_option_map: voteOptionMap,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n grantFee\n );\n }\n\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n fee\n );\n }\n\n async saasGrantToVoter({\n signer,\n baseAmount,\n contractAddress,\n grantee,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n baseAmount: string;\n contractAddress: string;\n grantee: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n grant_to_voter: {\n base_amount: baseAmount,\n contract_addr: contractAddress,\n grantee,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.grantToVoter(\n {\n baseAmount,\n contractAddr: contractAddress,\n grantee,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.grantToVoter(\n {\n baseAmount,\n contractAddr: contractAddress,\n grantee,\n },\n grantFee\n );\n }\n\n return client.grantToVoter(\n {\n baseAmount,\n contractAddr: contractAddress,\n grantee,\n },\n fee\n );\n }\n\n async addSaasOperator({\n signer,\n operator,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n operator: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n add_operator: {\n operator,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.addOperator({ operator }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.addOperator({ operator }, grantFee);\n }\n\n return client.addOperator({ operator }, fee);\n }\n\n async removeSaasOperator({\n signer,\n operator,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n operator: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n remove_operator: {\n operator,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.removeOperator({ operator }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.removeOperator({ operator }, grantFee);\n }\n\n return client.removeOperator({ operator }, fee);\n }\n\n async isSaasOperator({\n signer,\n operator,\n }: {\n signer: OfflineSigner;\n operator: string;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n return client.isOperator({ address: operator });\n }\n\n async depositSaas({\n signer,\n amount,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n amount: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n const funds = [\n {\n denom: 'peaka',\n amount: amount,\n },\n ];\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n deposit: {},\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n funds,\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.deposit(grantFee, undefined, funds);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.deposit(grantFee, undefined, funds);\n }\n\n return client.deposit(fee, undefined, funds);\n }\n\n async withdrawSaas({\n signer,\n amount,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n amount: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n withdraw: {\n amount,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.withdraw({ amount }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.withdraw({ amount }, grantFee);\n }\n\n return client.withdraw({ amount }, fee);\n }\n\n async queryRoundInfo({\n signer,\n roundAddress,\n }: {\n signer: OfflineSigner;\n roundAddress: string;\n }) {\n const client = await createMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: roundAddress,\n });\n const roundInfo = await client.getRoundInfo();\n return roundInfo;\n }\n\n async oracleMaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n const client = await createOracleMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n return client;\n }\n\n async registryClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createRegistryClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async maciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async amaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createAMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async apiMaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createApiMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async saasClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async apiSaasClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async contractClient({ signer }: { signer: OfflineSigner }) {\n return createContractClientByWallet(this.rpcEndpoint, signer);\n }\n\n async createApiSaasMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n title,\n description,\n link,\n maxVoter,\n voteOptionMap,\n whitelistBackendPubkey,\n gasStation = false,\n fee = 1.8,\n }: CreateSaasOracleMaciRoundParams & { signer: OfflineSigner }) {\n const startTime = (startVoting.getTime() * 1_000_000).toString();\n const endTime = (endVoting.getTime() * 1_000_000).toString();\n\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n const [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\n\n const roundParams = {\n certificationSystem: '0',\n circuitType: '0',\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\n },\n maxVoters: maxVoter,\n roundInfo: {\n title,\n description: description || '',\n link: link || '',\n },\n startTime,\n endTime,\n voteOptionMap,\n whitelistBackendPubkey:\n whitelistBackendPubkey || this.whitelistBackendPubkey,\n };\n\n let createResponse;\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n create_api_maci_round: {\n certification_system: '0',\n circuit_type: '0',\n coordinator: roundParams.coordinator,\n max_voters: roundParams.maxVoters.toString(),\n round_info: roundParams.roundInfo,\n start_time: roundParams.startTime,\n end_time: roundParams.endTime,\n vote_option_map: roundParams.voteOptionMap,\n whitelist_backend_pubkey: roundParams.whitelistBackendPubkey,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.apiSaasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.apiSaasAddress,\n };\n createResponse = await client.createMaciRound(roundParams, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.apiSaasAddress,\n };\n createResponse = await client.createMaciRound(roundParams, grantFee);\n } else {\n createResponse = await client.createMaciRound(roundParams, fee);\n }\n\n let contractAddress = '';\n createResponse.events.map((event) => {\n if (event.type === 'wasm') {\n let actionEvent = event.attributes.find(\n (attr) => attr.key === 'action'\n )!;\n if (actionEvent.value === 'created_maci_round') {\n contractAddress = event.attributes\n .find((attr) => attr.key === 'round_addr')!\n .value.toString();\n }\n }\n });\n return {\n ...createResponse,\n contractAddress,\n };\n }\n\n async setApiSaasMaciRoundInfo({\n signer,\n contractAddress,\n title,\n description,\n link,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n title: string;\n description: string;\n link: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n\n const roundInfo = {\n title,\n description,\n link,\n };\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n set_round_info: {\n contract_addr: contractAddress,\n round_info: roundInfo,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.apiSaasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.apiSaasAddress,\n };\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.apiSaasAddress,\n };\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n grantFee\n );\n }\n\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n fee\n );\n }\n\n async setApiSaasMaciRoundVoteOptions({\n signer,\n contractAddress,\n voteOptionMap,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n voteOptionMap: string[];\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n set_vote_options_map: {\n contract_addr: contractAddress,\n vote_option_map: voteOptionMap,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.apiSaasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.apiSaasAddress,\n };\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.apiSaasAddress,\n };\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n grantFee\n );\n }\n\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n fee\n );\n }\n\n async addApiSaasOperator({\n signer,\n operator,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n operator: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n add_operator: {\n operator,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.apiSaasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.apiSaasAddress,\n };\n return client.addOperator({ operator }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.apiSaasAddress,\n };\n return client.addOperator({ operator }, grantFee);\n }\n\n return client.addOperator({ operator }, fee);\n }\n\n async removeApiSaasOperator({\n signer,\n operator,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n operator: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n remove_operator: {\n operator,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.apiSaasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.apiSaasAddress,\n };\n return client.removeOperator({ operator }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.apiSaasAddress,\n };\n return client.removeOperator({ operator }, grantFee);\n }\n\n return client.removeOperator({ operator }, fee);\n }\n\n async isApiSaasOperator({\n signer,\n operator,\n }: {\n signer: OfflineSigner;\n operator: string;\n }) {\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n return client.isOperator({ address: operator });\n }\n\n async createApiSaasAmaciRound({\n signer,\n operator,\n startVoting,\n endVoting,\n title,\n description,\n link,\n maxVoter,\n voteOptionMap,\n whitelist,\n voiceCreditAmount,\n preDeactivateRoot,\n preDeactivateCoordinator,\n oracleWhitelistPubkey,\n circuitType,\n gasStation = false,\n fee = 1.8,\n }: CreateApiSaasAmaciRoundParams & { signer: OfflineSigner }) {\n const startTime = (startVoting.getTime() * 1_000_000).toString();\n const endTime = (endVoting.getTime() * 1_000_000).toString();\n\n const client = await createApiSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.apiSaasAddress,\n });\n\n // Convert preDeactivateCoordinator to {x, y} format if provided\n let preDeactivateCoordinatorPubKey: { x: string; y: string } | undefined =\n undefined;\n if (preDeactivateCoordinator !== undefined) {\n let coordinatorX: bigint;\n let coordinatorY: bigint;\n\n if (typeof preDeactivateCoordinator === 'bigint') {\n // If it's a packed bigint, unpack it\n [coordinatorX, coordinatorY] = unpackPubKey(preDeactivateCoordinator);\n } else {\n // If it's already a PubKey array [x, y]\n [coordinatorX, coordinatorY] = preDeactivateCoordinator;\n }\n\n preDeactivateCoordinatorPubKey = {\n x: coordinatorX.toString(),\n y: coordinatorY.toString(),\n };\n }\n\n const roundParams = {\n certificationSystem: '0',\n circuitType: circuitType.toString(),\n maxVoter: maxVoter.toString(),\n operator,\n oracleWhitelistPubkey,\n preDeactivateRoot: preDeactivateRoot || '0',\n preDeactivateCoordinator: preDeactivateCoordinatorPubKey,\n roundInfo: {\n title,\n description: description || '',\n link: link || '',\n },\n voiceCreditAmount,\n voteOptionMap,\n votingTime: {\n start_time: startTime,\n end_time: endTime,\n },\n whitelist,\n };\n\n let createResponse;\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n create_amaci_round: {\n certification_system: '0',\n circuit_type: circuitType.toString(),\n max_voter: maxVoter.toString(),\n operator,\n oracle_whitelist_pubkey: oracleWhitelistPubkey,\n pre_deactivate_root: preDeactivateRoot || '0',\n pre_deactivate_coordinator: preDeactivateCoordinatorPubKey,\n round_info: roundParams.roundInfo,\n voice_credit_amount: voiceCreditAmount,\n vote_option_map: voteOptionMap,\n voting_time: roundParams.votingTime,\n whitelist,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.apiSaasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.apiSaasAddress,\n };\n createResponse = await client.createAmaciRound(roundParams, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.apiSaasAddress,\n };\n createResponse = await client.createAmaciRound(roundParams, grantFee);\n } else {\n createResponse = await client.createAmaciRound(roundParams, fee);\n }\n\n let contractAddress = '';\n createResponse.events.map((event) => {\n if (event.type === 'wasm') {\n let actionEvent = event.attributes.find(\n (attr) => attr.key === 'action'\n );\n if (actionEvent && actionEvent.value === 'created_round') {\n const roundAddrEvent = event.attributes.find(\n (attr) => attr.key === 'round_addr'\n );\n if (roundAddrEvent) {\n contractAddress = roundAddrEvent.value.toString();\n }\n }\n }\n });\n return {\n ...createResponse,\n contractAddress,\n };\n }\n}\n","import { Http } from '../http';\nimport {\n OracleCertificateParams,\n SignatureRequest,\n SignatureResponse,\n FeegrantAllowanceResponse,\n EcosystemsResponse,\n} from './types';\n\nexport class OracleCertificate {\n private certificateApiEndpoint: string;\n private http: Http;\n\n constructor({ certificateApiEndpoint, http }: OracleCertificateParams) {\n this.certificateApiEndpoint = certificateApiEndpoint;\n this.http = http;\n }\n\n async sign(data: SignatureRequest): Promise<SignatureResponse> {\n const response = await this.http.fetch(\n `${this.certificateApiEndpoint}/${data.ecosystem}/sign`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n address: data.address,\n height: data.height,\n contractAddress: data.contractAddress,\n }),\n }\n );\n const signatureData = await response.json();\n\n return signatureData;\n }\n\n async feegrantAllowance(\n granter: string,\n grantee: string\n ): Promise<FeegrantAllowanceResponse> {\n const response = await this.http.fetchRest(\n `/cosmos/feegrant/v1beta1/allowance/${granter}/${grantee}`\n );\n\n return {\n granter,\n grantee,\n spend_limit: response.allowance.allowance.allowance.spend_limit,\n };\n }\n\n async listEcosystems(): Promise<EcosystemsResponse> {\n const response = await this.http.fetch(\n `${this.certificateApiEndpoint}/list`,\n {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n }\n );\n const signatureData = await response.json();\n\n return signatureData;\n }\n}\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n Keypair,\n batchGenMessage,\n PubKey,\n stringizing,\n genAddKeyInput,\n} from '../crypto';\nimport { Contract } from '../contract';\nimport { Indexer } from '../indexer';\nimport { OracleCertificate } from '../oracle-certificate';\nimport {\n MsgExecuteContractEncodeObject,\n SigningCosmWasmClient,\n} from '@cosmjs/cosmwasm-stargate';\nimport { GasPrice, calculateFee, StdFee } from '@cosmjs/stargate';\nimport { MsgExecuteContract } from 'cosmjs-types/cosmwasm/wasm/v1/tx.js';\nimport { CertificateEcosystem, ErrorResponse, RoundType } from '../../types';\nimport { SignatureResponse } from '../oracle-certificate/types';\nimport { OracleWhitelistConfig } from '../contract/ts/OracleMaci.types';\nimport { getAMaciRoundCircuitFee } from '../contract/utils';\nimport { Groth16ProofType } from '../contract/ts/Maci.types';\n\nexport function isErrorResponse(response: unknown): response is ErrorResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'error' in response &&\n typeof (response as ErrorResponse).error === 'object' &&\n 'message' in (response as ErrorResponse).error\n );\n}\n\nexport class MACI {\n public network: 'mainnet' | 'testnet';\n public contract: Contract;\n public indexer: Indexer;\n public oracleCertificate: OracleCertificate;\n public maciKeypair: Keypair;\n constructor({\n contract,\n indexer,\n oracleCertificate,\n maciKeypair,\n }: {\n contract: Contract;\n indexer: Indexer;\n oracleCertificate: OracleCertificate;\n maciKeypair: Keypair;\n }) {\n this.network = contract.network;\n this.contract = contract;\n this.indexer = indexer;\n this.oracleCertificate = oracleCertificate;\n this.maciKeypair = maciKeypair;\n }\n\n async getStateIdxInc({\n signer,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const client = await this.contract.maciClient({\n signer,\n contractAddress,\n });\n\n const stateIdx = await client.getStateIdxInc({ address });\n return stateIdx;\n }\n\n async getVoiceCreditBalance({\n signer,\n stateIdx,\n contractAddress,\n }: {\n signer: OfflineSigner;\n stateIdx: number;\n contractAddress: string;\n }) {\n const client = await this.contract.maciClient({\n signer,\n contractAddress,\n });\n\n const voiceCredit = await client.getVoiceCreditBalance({\n index: stateIdx.toString(),\n });\n return voiceCredit;\n }\n\n async getStateIdxByPubKey({\n contractAddress,\n pubKey,\n }: {\n contractAddress: string;\n pubKey: bigint[];\n }) {\n const response = await this.indexer.getSignUpEventByPubKey(\n contractAddress,\n pubKey\n );\n\n if (isErrorResponse(response)) {\n return -1;\n }\n return response.data.signUpEvents[0].stateIdx;\n }\n\n async feegrantAllowance({\n address,\n contractAddress,\n }: {\n address: string;\n contractAddress: string;\n }) {\n try {\n const response = await this.oracleCertificate.feegrantAllowance(\n contractAddress,\n address\n );\n return response;\n } catch (error) {\n return {\n granter: contractAddress,\n grantee: address,\n spend_limit: [],\n };\n }\n }\n\n async hasFeegrant({\n address,\n contractAddress,\n }: {\n address: string;\n contractAddress: string;\n }): Promise<boolean> {\n try {\n const response = await this.oracleCertificate.feegrantAllowance(\n contractAddress,\n address\n );\n return response.spend_limit.length > 0;\n } catch (error) {\n return false;\n }\n }\n\n // only for maci and oracle maci, amaci will set the voice credit when deploy the contract\n async queryWhitelistBalanceOf({\n signer,\n address,\n contractAddress,\n certificate,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n certificate?: {\n signature: string;\n amount: string;\n };\n }): Promise<string> {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'maciType',\n 'voiceCreditAmount',\n ]);\n\n if (isErrorResponse(round)) {\n throw new Error(\n `Failed to get round info: ${round.error.type} ${round.error.message}`\n );\n }\n\n if (round.data.round.maciType === 'aMACI') {\n const isWhiteListed = await this.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n\n if (isWhiteListed) {\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'voiceCreditAmount',\n ]);\n\n if (!isErrorResponse(round)) {\n if (round.data.round.voiceCreditAmount) {\n return round.data.round.voiceCreditAmount;\n } else {\n return '0';\n }\n } else {\n throw new Error(\n `Failed to query amaci voice credit: ${round.error.type} ${round.error.message}`\n );\n }\n } else {\n return '0';\n }\n }\n\n if (certificate) {\n const client = await this.contract.oracleMaciClient({\n signer,\n contractAddress,\n });\n\n const balance = await client.whiteBalanceOf({\n amount: certificate.amount,\n certificate: certificate.signature,\n sender: address,\n });\n\n return balance;\n } else {\n const client = await this.contract.maciClient({\n signer,\n contractAddress,\n });\n\n const balance = await client.whiteBalanceOf({\n sender: address,\n });\n\n return balance;\n }\n }\n\n async isWhitelisted({\n signer,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n const isWhitelisted = await client.isWhiteList({\n sender: address,\n });\n\n return isWhitelisted;\n }\n\n async getOracleWhitelistConfig({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }): Promise<OracleWhitelistConfig> {\n const client = await this.contract.oracleMaciClient({\n signer,\n contractAddress,\n });\n\n const snapshotHeight = await client.queryOracleWhitelistConfig();\n return snapshotHeight;\n }\n\n async getRoundInfo({ contractAddress }: { contractAddress: string }) {\n const roundInfo = await this.indexer.getRoundWithFields(contractAddress);\n\n if (isErrorResponse(roundInfo)) {\n throw new Error(\n `Failed to get round info: ${roundInfo.error.type} ${roundInfo.error.message}`\n );\n }\n\n return roundInfo.data.round as RoundType;\n }\n\n async getRoundCircuitType({ contractAddress }: { contractAddress: string }) {\n const roundInfo = await this.getRoundInfo({ contractAddress });\n\n return roundInfo.circuitType; // 0: 1p1v, 1: qv\n }\n\n async queryRoundIsQv({ contractAddress }: { contractAddress: string }) {\n const circuitType = await this.getRoundCircuitType({ contractAddress });\n\n return circuitType === '1';\n }\n\n async queryRoundClaimable({\n contractAddress,\n }: {\n contractAddress: string;\n }): Promise<{\n claimable: boolean | null;\n balance: string | null;\n }> {\n try {\n const roundInfo = await this.getRoundInfo({ contractAddress });\n\n if (roundInfo.maciType !== 'aMACI') {\n return {\n claimable: null,\n balance: null,\n };\n }\n\n const votingEndTime = new Date(Number(roundInfo.votingEnd) / 10 ** 6);\n const currentTime = new Date();\n const threeDaysInMs = 3 * 24 * 60 * 60 * 1000;\n\n if (currentTime.getTime() - votingEndTime.getTime() <= threeDaysInMs) {\n return {\n claimable: null,\n balance: null,\n };\n }\n\n const roundBalance = await this.indexer.balanceOf(contractAddress);\n if (isErrorResponse(roundBalance)) {\n throw new Error(\n `Failed to query round balance: ${roundBalance.error.type} ${roundBalance.error.message}`\n );\n }\n\n if (\n roundBalance.data.balance &&\n roundBalance.data.balance !== '0' &&\n roundBalance.data.balance !== ''\n ) {\n return {\n claimable: true,\n balance: roundBalance.data.balance,\n };\n }\n\n return {\n claimable: false,\n balance: roundBalance.data.balance,\n };\n } catch (error) {\n console.error('Error in queryRoundClaimable:', error);\n return {\n claimable: null,\n balance: null,\n };\n }\n }\n\n async queryAMaciChargeFee({\n maxVoter,\n maxOption,\n }: {\n maxVoter: number;\n maxOption: number;\n }) {\n const fee = getAMaciRoundCircuitFee(this.network, maxVoter, maxOption);\n return fee;\n }\n\n async queryRoundGasStation({ contractAddress }: { contractAddress: string }) {\n const roundInfo = await this.getRoundInfo({ contractAddress });\n\n return roundInfo.gasStationEnable;\n }\n\n parseRoundStatus(\n votingStart: number,\n votingEnd: number,\n status: string,\n currentTime: Date\n ): string {\n const startTime = new Date(votingStart / 10 ** 6);\n const endTime = new Date(votingEnd / 10 ** 6);\n\n // Inherit logic from Maci Explorer\n if (Number(votingStart) === 0) {\n return 'Created';\n }\n\n if (Number(votingEnd) === 0) {\n if (startTime < currentTime) {\n return 'Ongoing';\n }\n } else {\n if (startTime < currentTime && currentTime < endTime) {\n return 'Ongoing';\n }\n if (currentTime > endTime) {\n if (status !== 'Closed') {\n return 'Tallying';\n }\n }\n }\n\n return status;\n }\n\n async queryRoundBalance({ contractAddress }: { contractAddress: string }) {\n const roundBalance = await this.indexer.balanceOf(contractAddress);\n if (isErrorResponse(roundBalance)) {\n throw new Error(\n `Failed to query round balance: ${roundBalance.error.type} ${roundBalance.error.message}`\n );\n }\n\n return roundBalance.data.balance;\n }\n\n async requestOracleCertificate({\n signer,\n ecosystem,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n ecosystem: CertificateEcosystem;\n address?: string;\n contractAddress: string;\n }): Promise<SignatureResponse> {\n const oracleWhitelistConfig = await this.getOracleWhitelistConfig({\n signer,\n contractAddress,\n });\n\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const signResponse = await this.oracleCertificate.sign({\n ecosystem,\n address,\n contractAddress,\n height: oracleWhitelistConfig.snapshot_height,\n });\n\n return signResponse;\n }\n\n async signup({\n signer,\n address,\n contractAddress,\n maciKeypair,\n oracleCertificate,\n gasStation = false,\n fee,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n maciKeypair?: Keypair;\n oracleCertificate?: {\n amount?: string;\n signature: string;\n };\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n // maciKeypair = await this.crypto.genKeypairFromSign(signer, address);\n }\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n // If oracleCertificate has data and amount has data, use signupOracle\n if (oracleCertificate && oracleCertificate.amount) {\n return await this.signupOracle({\n client,\n address,\n pubKey: maciKeypair.pubKey,\n contractAddress,\n oracleCertificate: {\n amount: oracleCertificate.amount,\n signature: oracleCertificate.signature,\n },\n gasStation,\n fee,\n });\n } else {\n // If oracleCertificate has data but amount is missing, or oracleCertificate is missing, use signupSimple\n return await this.signupSimple({\n client,\n address,\n pubKey: maciKeypair.pubKey,\n contractAddress,\n certificate: oracleCertificate?.signature,\n gasStation,\n fee,\n });\n }\n } catch (error) {\n throw Error(`Signup failed! ${error}`);\n }\n }\n\n async rawSignup({\n signer,\n address,\n contractAddress,\n pubKey,\n oracleCertificate,\n gasStation = false,\n granter,\n fee,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n pubKey: PubKey;\n oracleCertificate?: {\n amount?: string;\n signature: string;\n };\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n // If oracleCertificate has data and amount has data, use signupOracle\n if (oracleCertificate && oracleCertificate.amount) {\n return await this.signupOracle({\n client,\n address,\n pubKey,\n contractAddress,\n oracleCertificate: {\n amount: oracleCertificate.amount,\n signature: oracleCertificate.signature,\n },\n gasStation,\n granter,\n fee,\n });\n } else {\n // If oracleCertificate has data but amount is missing, or oracleCertificate is missing, use signupSimple\n return await this.signupSimple({\n client,\n address,\n pubKey,\n contractAddress,\n certificate: oracleCertificate?.signature,\n gasStation,\n granter,\n fee,\n });\n }\n } catch (error) {\n throw Error(`Signup failed! ${error}`);\n }\n }\n\n private async processVoteOptions({\n selectedOptions,\n contractAddress,\n voiceCreditBalance,\n }: {\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n contractAddress: string;\n voiceCreditBalance: string;\n }) {\n // Check for duplicate options\n const idxSet = new Set();\n for (const option of selectedOptions) {\n if (idxSet.has(option.idx)) {\n throw new Error(\n `Duplicate option index (${option.idx}) is not allowed`\n );\n }\n idxSet.add(option.idx);\n }\n\n // Filter and sort options\n const options = selectedOptions\n .filter((o) => !!o.vc)\n .sort((a, b) => a.idx - b.idx);\n\n // Calculate used voice credits\n const isQv = await this.queryRoundIsQv({ contractAddress });\n const usedVc = options.reduce((s, o) => s + (isQv ? o.vc * o.vc : o.vc), 0);\n\n if (Number(voiceCreditBalance) < usedVc) {\n throw new Error('Insufficient voice credit balance');\n }\n\n return options;\n }\n\n async vote({\n signer,\n address,\n contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciKeypair,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n operatorCoordPubKey: PubKey;\n maciKeypair?: Keypair;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n }\n\n const stateIdx = await this.getStateIdxByPubKey({\n contractAddress,\n pubKey: maciKeypair.pubKey,\n });\n\n if (stateIdx === -1) {\n throw new Error(\n 'State index is not set, Please signup or addNewKey first'\n );\n }\n\n try {\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'maciType',\n 'voiceCreditAmount',\n ]);\n\n if (isErrorResponse(round)) {\n throw new Error(\n `Failed to get round info: ${round.error.type} ${round.error.message}`\n );\n }\n\n let voiceCreditBalance;\n if (round.data.round.maciType === 'aMACI') {\n const isWhiteListed = await this.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n\n if (isWhiteListed) {\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'voiceCreditAmount',\n ]);\n\n if (!isErrorResponse(round)) {\n if (round.data.round.voiceCreditAmount) {\n voiceCreditBalance = round.data.round.voiceCreditAmount;\n } else {\n voiceCreditBalance = '0';\n }\n } else {\n throw new Error(\n `Failed to query amaci voice credit: ${round.error.type} ${round.error.message}`\n );\n }\n } else {\n voiceCreditBalance = '0';\n }\n } else {\n voiceCreditBalance = await this.getVoiceCreditBalance({\n signer,\n stateIdx,\n contractAddress,\n });\n }\n\n const options = await this.processVoteOptions({\n selectedOptions,\n contractAddress,\n voiceCreditBalance,\n });\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const plan = options.map((o) => {\n return [o.idx, o.vc] as [number, number];\n });\n\n const payload = batchGenMessage(\n stateIdx,\n maciKeypair,\n operatorCoordPubKey,\n plan\n );\n const client = await this.contract.contractClient({\n signer,\n });\n\n return await this.publishMessage({\n client,\n address,\n payload,\n contractAddress,\n gasStation,\n fee,\n });\n } catch (error) {\n throw Error(`Vote failed! ${error}`);\n }\n }\n\n async rawVote({\n signer,\n address,\n contractAddress,\n payload,\n gasStation = false,\n granter,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n payload: {\n msg: bigint[];\n encPubkeys: PubKey;\n }[];\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n return await this.publishMessage({\n client,\n address,\n payload,\n contractAddress,\n gasStation,\n granter,\n fee,\n });\n } catch (error) {\n throw Error(`Vote failed! ${error}`);\n }\n }\n\n async publishMessage({\n client,\n address,\n payload,\n contractAddress,\n gasStation,\n granter,\n fee = 1.8,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n payload: {\n msg: bigint[];\n encPubkeys: PubKey;\n }[];\n contractAddress: string;\n gasStation: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n const msgs: MsgExecuteContractEncodeObject[] = payload.map(\n ({ msg, encPubkeys }) => ({\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: MsgExecuteContract.fromPartial({\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(\n JSON.stringify(\n stringizing({\n publish_message: {\n enc_pub_key: {\n x: encPubkeys[0],\n y: encPubkeys[1],\n },\n message: {\n data: msg,\n },\n },\n })\n )\n ),\n }),\n })\n );\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(address, msgs, '');\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: granter || contractAddress,\n };\n return client.signAndBroadcast(address, msgs, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: granter || contractAddress,\n };\n return client.signAndBroadcast(address, msgs, grantFee);\n }\n\n return client.signAndBroadcast(address, msgs, fee);\n }\n\n async signupSimple({\n client,\n address,\n pubKey,\n contractAddress,\n certificate,\n gasStation,\n granter,\n fee = 1.8,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n pubKey: PubKey;\n contractAddress: string;\n certificate?: string;\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n const msg = {\n sign_up: {\n certificate,\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n },\n };\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: granter || contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: granter || contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n }\n\n return client.execute(address, contractAddress, msg, fee);\n }\n\n async signupOracle({\n client,\n address,\n pubKey,\n contractAddress,\n oracleCertificate,\n gasStation,\n granter,\n fee = 1.8,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n pubKey: PubKey;\n contractAddress: string;\n oracleCertificate: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n const msg = {\n sign_up: {\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n amount: oracleCertificate.amount,\n certificate: oracleCertificate.signature,\n },\n };\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: granter || contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: granter || contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n }\n\n return client.execute(address, contractAddress, msg, fee);\n }\n\n async deactivate({\n signer,\n address,\n maciKeypair,\n contractAddress,\n gasStation,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n address?: string;\n maciKeypair?: Keypair;\n contractAddress: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n address = address || (await signer.getAccounts())[0].address;\n\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n }\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n const stateIdx = await this.getStateIdxInc({\n signer,\n address,\n contractAddress,\n });\n\n const operatorCoordPubKey = await this.getRoundInfo({\n contractAddress,\n });\n\n const payload = batchGenMessage(\n Number(stateIdx),\n maciKeypair,\n [\n BigInt(operatorCoordPubKey.coordinatorPubkeyX),\n BigInt(operatorCoordPubKey.coordinatorPubkeyY),\n ],\n [[0, 0]]\n );\n\n const { msg, encPubkeys } = payload[0];\n\n const deactivateMsg = stringizing({\n publish_deactivate_message: {\n enc_pub_key: {\n x: encPubkeys[0],\n y: encPubkeys[1],\n },\n message: {\n data: msg,\n },\n },\n });\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(deactivateMsg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n deactivateMsg,\n grantFee\n );\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n deactivateMsg,\n grantFee\n );\n }\n\n return client.execute(address, contractAddress, deactivateMsg, fee);\n } catch (error) {\n throw Error(`Submit deactivate failed! ${error}`);\n }\n }\n\n async rawDeactivate({\n signer,\n address,\n contractAddress,\n payload,\n gasStation = false,\n granter,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n payload: {\n msg: bigint[];\n encPubkeys: PubKey;\n };\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n address = address || (await signer.getAccounts())[0].address;\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n // const payload = batchGenMessage(\n // Number(stateIdx),\n // maciKeypair,\n // [\n // BigInt(operatorCoordPubKey.coordinatorPubkeyX),\n // BigInt(operatorCoordPubKey.coordinatorPubkeyY),\n // ],\n // [[0, 0]]\n // );\n\n const { msg, encPubkeys } = payload;\n\n const deactivateMsg = stringizing({\n publish_deactivate_message: {\n enc_pub_key: {\n x: encPubkeys[0],\n y: encPubkeys[1],\n },\n message: {\n data: msg,\n },\n },\n });\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(deactivateMsg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: granter || contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n deactivateMsg,\n grantFee\n );\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: granter || contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n deactivateMsg,\n grantFee\n );\n }\n\n return client.execute(address, contractAddress, deactivateMsg, fee);\n } catch (error) {\n throw Error(`Submit deactivate failed! ${error}`);\n }\n }\n\n async fetchAllDeactivateLogs({\n contractAddress,\n }: {\n contractAddress: string;\n }) {\n const deactivates =\n await this.indexer.fetchAllDeactivateLogs(contractAddress);\n return deactivates;\n }\n\n async genAddKeyInput({\n maciKeypair,\n contractAddress,\n }: {\n maciKeypair: Keypair;\n contractAddress: string;\n }) {\n const deactivates = await this.fetchAllDeactivateLogs({\n contractAddress,\n });\n\n const roundInfo = await this.getRoundInfo({\n contractAddress,\n });\n\n const circuitPower = roundInfo.circuitPower;\n const stateTreeDepth = Number(circuitPower.split('-')[0]);\n const inputObj = genAddKeyInput(stateTreeDepth + 2, {\n coordPubKey: [\n BigInt(roundInfo.coordinatorPubkeyX),\n BigInt(roundInfo.coordinatorPubkeyY),\n ],\n oldKey: maciKeypair,\n deactivates: deactivates.map((d: any) => d.map(BigInt)),\n });\n return inputObj;\n\n // 1. generate proof\n\n // 2. compress proof to vote proof\n\n // 3. send addNewKey tx\n }\n\n async addNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newMaciKeypair,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newMaciKeypair: Keypair;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n return await client.addNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newMaciKeypair.pubKey[0].toString(),\n y: newMaciKeypair.pubKey[1].toString(),\n },\n },\n fee\n );\n }\n\n async rawAddNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newPubkey,\n gasStation = false,\n granter,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newPubkey: PubKey;\n gasStation?: boolean;\n granter?: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contract.contractClient({ signer });\n\n const msg = {\n add_new_key: {\n d,\n groth16_proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n };\n\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: granter || contractAddress,\n };\n\n return await client.addNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n grantFee\n );\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: granter || contractAddress,\n };\n\n return await client.addNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n grantFee\n );\n }\n\n return await client.addNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n fee\n );\n }\n\n async rawPreAddNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newPubkey,\n gasStation = false,\n granter,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newPubkey: PubKey;\n gasStation?: boolean;\n granter?: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contract.contractClient({ signer });\n\n const msg = {\n pre_add_new_key: {\n d,\n groth16_proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n };\n\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: granter || contractAddress,\n };\n\n return await client.preAddNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n grantFee\n );\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: granter || contractAddress,\n };\n\n return await client.preAddNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n grantFee\n );\n }\n\n return await client.preAddNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newPubkey[0].toString(),\n y: newPubkey[1].toString(),\n },\n },\n fee\n );\n }\n\n async claimAMaciRound({\n signer,\n contractAddress,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n return client.claim(fee);\n }\n\n async getOracleCertificateConfig() {\n const ecosystems = await this.oracleCertificate.listEcosystems();\n return ecosystems;\n }\n\n /**\n * Batch grant with bond (for maci)\n * @param signer\n * @param contractAddress\n * @param address\n * @param amount\n * @returns\n */\n async batchGrantWithBond({\n signer,\n contractAddress,\n address,\n amount,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n amount: string;\n address?: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.contractClient({\n signer,\n });\n\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const msgs: MsgExecuteContractEncodeObject[] = [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: MsgExecuteContract.fromPartial({\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(\n JSON.stringify(\n stringizing({\n grant: {\n max_amount: BigInt('100000000000000000000000'),\n },\n })\n )\n ),\n }),\n },\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: MsgExecuteContract.fromPartial({\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(\n JSON.stringify(\n stringizing({\n bond: {},\n })\n )\n ),\n funds: [\n {\n denom: 'peaka',\n amount,\n },\n ],\n }),\n },\n ];\n\n try {\n const result = await client.signAndBroadcast(address, msgs, fee);\n return result;\n } catch (err) {\n throw err;\n }\n }\n\n /**\n * Batch revoke with withdraw (for maci)\n * @param client\n * @param contractAddress\n * @param address\n * @returns\n */\n async batchRevokeWithdraw({\n signer,\n contractAddress,\n address,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n address?: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.contractClient({\n signer,\n });\n\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const msgs: MsgExecuteContractEncodeObject[] = [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: MsgExecuteContract.fromPartial({\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(\n JSON.stringify(\n stringizing({\n withdraw: {},\n })\n )\n ),\n }),\n },\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: MsgExecuteContract.fromPartial({\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(\n JSON.stringify(\n stringizing({\n revoke: {},\n })\n )\n ),\n }),\n },\n ];\n\n try {\n const result = await client.signAndBroadcast(address, msgs, fee);\n return result;\n } catch (err) {\n throw err;\n }\n }\n}\n","import { ClientParams, CertificateEcosystem } from './types';\nimport { Http, Indexer, Contract, OracleCertificate, MACI } from './libs';\nimport { getDefaultParams } from './libs/const';\nimport {\n CreateAMaciRoundParams,\n CreateApiSaasAmaciRoundParams,\n CreateMaciRoundParams,\n CreateOracleMaciRoundParams,\n CreateSaasOracleMaciRoundParams,\n} from './libs/contract/types';\nimport { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n genKeypair,\n genKeypairFromSign,\n Keypair,\n packPubKey,\n PubKey,\n unpackPubKey,\n} from './libs/crypto';\nimport { OracleWhitelistConfig } from './libs/contract/ts/OracleMaci.types';\nimport { SignatureResponse } from './libs/oracle-certificate/types';\nimport { StdFee } from '@cosmjs/amino';\nimport { Groth16ProofType } from './libs/contract/ts/Maci.types';\nimport { isErrorResponse } from './libs/maci/maci';\n\n/**\n * @class MaciClient\n * @description This class is used to interact with Maci Client.\n */\nexport class MaciClient {\n public network: 'mainnet' | 'testnet';\n public rpcEndpoint: string;\n public restEndpoint: string;\n public apiEndpoint: string;\n public certificateApiEndpoint: string;\n\n public registryAddress: string;\n public saasAddress: string;\n public apiSaasAddress: string;\n public maciCodeId: number;\n public oracleCodeId: number;\n public feegrantOperator: string;\n public whitelistBackendPubkey: string;\n\n public http: Http;\n public indexer: Indexer;\n public contract: Contract;\n public oracleCertificate: OracleCertificate;\n public maci: MACI;\n public maciKeypair: Keypair;\n\n public signer?: OfflineSigner;\n\n /**\n * @constructor\n * @param {ClientParams} params - The parameters for the Maci Client instance.\n */\n constructor({\n signer,\n network,\n rpcEndpoint,\n restEndpoint,\n apiEndpoint,\n registryAddress,\n saasAddress,\n apiSaasAddress,\n maciCodeId,\n oracleCodeId,\n customFetch,\n defaultOptions,\n feegrantOperator,\n whitelistBackendPubkey,\n certificateApiEndpoint,\n maciKeypair,\n }: ClientParams) {\n this.signer = signer;\n this.network = network;\n const defaultParams = getDefaultParams(network);\n\n this.rpcEndpoint = rpcEndpoint || defaultParams.rpcEndpoint;\n this.restEndpoint = restEndpoint || defaultParams.restEndpoint;\n this.apiEndpoint = apiEndpoint || defaultParams.apiEndpoint;\n this.certificateApiEndpoint =\n certificateApiEndpoint || defaultParams.certificateApiEndpoint;\n this.registryAddress = registryAddress || defaultParams.registryAddress;\n this.saasAddress = saasAddress || defaultParams.saasAddress;\n this.apiSaasAddress = apiSaasAddress || defaultParams.apiSaasAddress;\n this.maciCodeId = maciCodeId || defaultParams.maciCodeId;\n this.oracleCodeId = oracleCodeId || defaultParams.oracleCodeId;\n this.feegrantOperator =\n feegrantOperator || defaultParams.oracleFeegrantOperator;\n this.whitelistBackendPubkey =\n whitelistBackendPubkey || defaultParams.oracleWhitelistBackendPubkey;\n this.maciKeypair = maciKeypair ?? genKeypair();\n\n this.http = new Http(\n this.apiEndpoint,\n this.restEndpoint,\n customFetch,\n defaultOptions\n );\n this.indexer = new Indexer({\n restEndpoint: this.restEndpoint,\n apiEndpoint: this.apiEndpoint,\n registryAddress: this.registryAddress,\n http: this.http,\n });\n this.contract = new Contract({\n network: this.network,\n rpcEndpoint: this.rpcEndpoint,\n registryAddress: this.registryAddress,\n saasAddress: this.saasAddress,\n apiSaasAddress: this.apiSaasAddress,\n maciCodeId: this.maciCodeId,\n oracleCodeId: this.oracleCodeId,\n feegrantOperator: this.feegrantOperator,\n whitelistBackendPubkey: this.whitelistBackendPubkey,\n });\n this.oracleCertificate = new OracleCertificate({\n certificateApiEndpoint: this.certificateApiEndpoint,\n http: this.http,\n });\n this.maci = new MACI({\n contract: this.contract,\n indexer: this.indexer,\n oracleCertificate: this.oracleCertificate,\n maciKeypair: this.maciKeypair,\n });\n }\n\n getSigner(signer?: OfflineSigner) {\n if (signer) {\n return signer;\n }\n if (this.signer) {\n return this.signer;\n }\n throw new Error('No signer provided, please provide a signer');\n }\n\n getMaciKeypair() {\n return this.maciKeypair;\n }\n\n getMaciPubkey() {\n return this.packMaciPubkey(this.maciKeypair.pubKey);\n }\n\n packMaciPubkey(pubkey?: PubKey) {\n return packPubKey(pubkey || this.maciKeypair.pubKey);\n }\n\n unpackMaciPubkey(pubkey: bigint | string) {\n return unpackPubKey(BigInt(pubkey));\n }\n\n async getAddress(signer?: OfflineSigner) {\n const [{ address }] = await this.getSigner(signer).getAccounts();\n return address;\n }\n\n async oracleMaciClient({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\n return await this.contract.oracleMaciClient({\n signer,\n contractAddress,\n });\n }\n\n async registryClient({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\n return await this.contract.registryClient({ signer, contractAddress });\n }\n\n async maciClient({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\n return await this.contract.maciClient({ signer, contractAddress });\n }\n\n async amaciClient({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\n return await this.contract.amaciClient({ signer, contractAddress });\n }\n\n async createAMaciRound(params: CreateAMaciRoundParams) {\n return await this.contract.createAMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createMaciRound(params: CreateMaciRoundParams) {\n return await this.contract.createMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createOracleMaciRound(params: CreateOracleMaciRoundParams) {\n return await this.contract.createOracleMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createSaasOracleMaciRound(params: CreateSaasOracleMaciRoundParams) {\n return await this.contract.createSaasOracleMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n async createApiSaasMaciRound(params: CreateSaasOracleMaciRoundParams) {\n return await this.contract.createApiSaasMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createApiSaasAmaciRound(params: CreateApiSaasAmaciRoundParams) {\n return await this.contract.createApiSaasAmaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async genKeypairFromSign({\n signer,\n address,\n }: {\n signer?: OfflineSigner;\n address?: string;\n } = {}) {\n return await genKeypairFromSign({\n signer: this.getSigner(signer),\n address,\n network: this.network,\n });\n }\n\n async getStateIdxInc({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n return await this.maci.getStateIdxInc({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n });\n }\n\n async getVoiceCreditBalance({\n signer,\n stateIdx,\n maciKeypair,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n stateIdx?: number;\n maciKeypair?: Keypair;\n contractAddress: string;\n }) {\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n }\n\n if (stateIdx === undefined) {\n stateIdx = await this.getStateIdxByPubKey({\n contractAddress,\n pubKey: maciKeypair.pubKey,\n });\n }\n\n return await this.maci.getVoiceCreditBalance({\n signer: this.getSigner(signer),\n stateIdx,\n contractAddress,\n });\n }\n\n async getStateIdxByPubKey({\n contractAddress,\n pubKey,\n }: {\n contractAddress: string;\n pubKey?: bigint[];\n }) {\n return await this.maci.getStateIdxByPubKey({\n contractAddress,\n pubKey: pubKey || this.maciKeypair.pubKey,\n });\n }\n\n async feegrantAllowance({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n address = await this.getAddress(signer);\n return await this.maci.feegrantAllowance({\n address,\n contractAddress,\n });\n }\n\n async hasFeegrant({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }): Promise<boolean> {\n if (address === undefined) {\n address = await this.getAddress(signer);\n }\n return await this.maci.hasFeegrant({\n address,\n contractAddress,\n });\n }\n\n async queryWhitelistBalanceOf({\n signer,\n address,\n contractAddress,\n certificate,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n certificate?: {\n signature: string;\n amount: string;\n };\n }): Promise<string> {\n signer = this.getSigner(signer);\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.queryWhitelistBalanceOf({\n signer,\n address,\n contractAddress,\n certificate,\n });\n }\n\n async isWhitelisted({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n }\n\n async getOracleWhitelistConfig({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }): Promise<OracleWhitelistConfig> {\n return await this.maci.getOracleWhitelistConfig({\n signer: this.getSigner(signer),\n contractAddress,\n });\n }\n\n async getRounds(after?: string, limit?: number) {\n const rounds = await this.indexer.getRounds(after || '', limit || 10);\n\n if (isErrorResponse(rounds)) {\n throw new Error(\n `Failed to get rounds: ${rounds.code} ${rounds.error.message}`\n );\n }\n\n return rounds;\n }\n\n async getRoundInfo({ contractAddress }: { contractAddress: string }) {\n return await this.maci.getRoundInfo({ contractAddress });\n }\n\n async getRoundCircuitType({ contractAddress }: { contractAddress: string }) {\n return await this.maci.getRoundCircuitType({ contractAddress });\n }\n\n async queryRoundIsQv({ contractAddress }: { contractAddress: string }) {\n return await this.maci.queryRoundIsQv({ contractAddress });\n }\n\n async queryRoundClaimable({\n contractAddress,\n }: {\n contractAddress: string;\n }): Promise<{\n claimable: boolean | null;\n balance: string | null;\n }> {\n return await this.maci.queryRoundClaimable({ contractAddress });\n }\n\n async queryAMaciChargeFee({\n maxVoter,\n maxOption,\n }: {\n maxVoter: number;\n maxOption: number;\n }) {\n return await this.maci.queryAMaciChargeFee({\n maxVoter,\n maxOption,\n });\n }\n\n async queryRoundGasStation({ contractAddress }: { contractAddress: string }) {\n return await this.maci.queryRoundGasStation({ contractAddress });\n }\n\n parseRoundStatus(\n votingStart: number,\n votingEnd: number,\n status: string,\n currentTime: Date\n ): string {\n return this.maci.parseRoundStatus(\n votingStart,\n votingEnd,\n status,\n currentTime\n );\n }\n\n async queryRoundBalance({ contractAddress }: { contractAddress: string }) {\n return await this.maci.queryRoundBalance({ contractAddress });\n }\n\n async requestOracleCertificate({\n signer,\n ecosystem,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n ecosystem: CertificateEcosystem;\n address?: string;\n contractAddress: string;\n }): Promise<SignatureResponse> {\n return await this.maci.requestOracleCertificate({\n signer: this.getSigner(signer),\n ecosystem,\n address,\n contractAddress,\n });\n }\n\n async signup({\n signer,\n address,\n contractAddress,\n maciKeypair,\n oracleCertificate,\n gasStation = false,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n maciKeypair?: Keypair;\n oracleCertificate?: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n fee?: StdFee;\n }) {\n return await this.maci.signup({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n maciKeypair,\n oracleCertificate,\n gasStation,\n fee,\n });\n }\n\n async vote({\n signer,\n address,\n contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciKeypair,\n gasStation = false,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n operatorCoordPubKey: PubKey;\n maciKeypair?: Keypair;\n gasStation?: boolean;\n }) {\n return await this.maci.vote({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciKeypair,\n gasStation,\n });\n }\n\n async deactivate({\n signer,\n address,\n contractAddress,\n gasStation = false,\n maciKeypair,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n gasStation?: boolean;\n maciKeypair?: Keypair;\n fee?: StdFee;\n }) {\n return await this.maci.deactivate({\n signer: this.getSigner(signer),\n address,\n maciKeypair,\n contractAddress,\n gasStation,\n fee,\n });\n }\n\n async genAddKeyInput({\n contractAddress,\n maciKeypair,\n }: {\n contractAddress: string;\n maciKeypair?: Keypair;\n }) {\n return await this.maci.genAddKeyInput({\n maciKeypair: maciKeypair || this.maciKeypair,\n contractAddress,\n });\n }\n\n async addNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newMaciKeypair,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newMaciKeypair: Keypair;\n fee?: number | StdFee | 'auto';\n }) {\n return await this.maci.addNewKey({\n signer: this.getSigner(signer),\n contractAddress,\n d,\n proof,\n nullifier,\n newMaciKeypair,\n fee,\n });\n }\n\n async claimAMaciRound({\n signer,\n contractAddress,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n fee?: number | StdFee | 'auto';\n }) {\n return await this.maci.claimAMaciRound({\n signer: this.getSigner(signer),\n contractAddress,\n fee,\n });\n }\n\n async getOracleCertificateConfig() {\n return await this.maci.getOracleCertificateConfig();\n }\n\n async batchGrantWithBond({\n signer,\n contractAddress,\n address,\n amount,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n address?: string;\n amount: string;\n fee?: number | StdFee | 'auto';\n }) {\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.batchGrantWithBond({\n signer: this.getSigner(signer),\n contractAddress,\n address,\n amount,\n fee,\n });\n }\n\n async batchRevokeWithdraw({\n signer,\n contractAddress,\n address,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n address?: string;\n fee?: number | StdFee | 'auto';\n }) {\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.batchRevokeWithdraw({\n signer: this.getSigner(signer),\n contractAddress,\n address,\n fee,\n });\n }\n\n async rawSignup({\n signer,\n address,\n contractAddress,\n pubKey,\n oracleCertificate,\n gasStation = false,\n granter,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n pubKey: PubKey;\n oracleCertificate?: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee;\n }) {\n return await this.maci.rawSignup({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n pubKey,\n oracleCertificate,\n gasStation,\n granter,\n fee,\n });\n }\n\n async rawVote({\n signer,\n address,\n contractAddress,\n payload,\n gasStation = false,\n granter,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n payload: {\n msg: bigint[];\n encPubkeys: PubKey;\n }[];\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n return await this.maci.rawVote({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n payload,\n gasStation,\n granter,\n fee,\n });\n }\n\n async getSignUpEventByPubKey(contractAddress: string, pubKey: bigint[]) {\n return await this.indexer.getSignUpEventByPubKey(contractAddress, pubKey);\n }\n\n async fetchAllDeactivateLogs(contractAddress: string) {\n return await this.indexer.fetchAllDeactivateLogs(contractAddress);\n }\n\n async rawDeactivate({\n signer,\n address,\n contractAddress,\n payload,\n gasStation = false,\n granter,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n payload: {\n msg: bigint[];\n encPubkeys: PubKey;\n };\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n return await this.maci.rawDeactivate({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n payload,\n gasStation,\n granter,\n fee,\n });\n }\n\n async rawAddNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newPubkey,\n gasStation = false,\n granter,\n fee,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newPubkey: PubKey;\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n return await this.maci.rawAddNewKey({\n signer: this.getSigner(signer),\n contractAddress,\n d,\n proof,\n nullifier,\n newPubkey,\n gasStation,\n granter,\n fee,\n });\n }\n\n async rawPreAddNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newPubkey,\n gasStation = false,\n granter,\n fee,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newPubkey: PubKey;\n gasStation?: boolean;\n granter?: string;\n fee?: StdFee | 'auto' | number;\n }) {\n return await this.maci.rawPreAddNewKey({\n signer: this.getSigner(signer),\n contractAddress,\n d,\n proof,\n nullifier,\n newPubkey,\n gasStation,\n granter,\n fee,\n });\n }\n}\n"],"mappings":"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","names":["MaciClient","signMessage","import_crypto_js","import_ethers","import_utils","import_sha256","import_eddsa_poseidon","bip39MnemonicToSeedSync","import_sha256","import_eddsa_poseidon","import_crypto_js","import_poseidon_cipher","import_ethers","import_baby_jubjub","import_eddsa_poseidon","import_ethers","import_assert","assert","assert","import_assert","assert","CryptoJS","SNARK_FIELD_SIZE","CryptoJS","signMessage","r","import_ffjavascript","BabyJub","import_baby_jubjub","import_bip39","genMnemonic","import_poseidon_cipher","CryptoJS","r","MaciCircuitType","MaciCertSystemType","MaciRoundType","import_stargate","import_stargate","round","MaciClient"]}
|