diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index fabab73..0000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,5 +0,0 @@ -## Proposed Changes - -- -- -- diff --git a/.github/workflows/check-python.yaml b/.github/workflows/check-python.yaml index 9cb918d..82a215a 100644 --- a/.github/workflows/check-python.yaml +++ b/.github/workflows/check-python.yaml @@ -51,6 +51,11 @@ jobs: - name: Run tests shell: bash + env: + FRONTEND_TEMPLATE_URL: gh:algorandfoundation/algokit-react-frontend-template # If not provided Defaults to algokit production template + FRONTEND_TEMPLATE_REF: prep/beta-release + PYTHON_CONTRACT_TEMPLATE_REF: prep/beta-release + TYPESCRIPT_CONTRACT_TEMPLATE_REF: prep/beta-release run: | set -o pipefail poetry run pytest --junitxml=pytest-junit.xml -n 1 diff --git a/copier.yaml b/copier.yaml index b5996b1..e0b3ea2 100644 --- a/copier.yaml +++ b/copier.yaml @@ -9,7 +9,10 @@ _tasks: -a include_github_workflow_template "no"' - "echo '==== 2/4 - Initializing frontend template ===='" - - 'algokit init -t react -n {{ project_name }}-frontend --no-git --no-ide --no-bootstrap + - 'algokit init {{ "--template-url \"" ~ (frontend_template_url if frontend_template_url else "gh:algorandfoundation/algokit-react-frontend-template") ~ "\" --UNSAFE-SECURITY-accept-template-url" if (frontend_template_url or frontend_template_ref) else "-t react" }} -n {{ project_name }}-frontend --no-git --no-ide --no-bootstrap + {% if frontend_template_ref %} + --template-url-ref "{{ frontend_template_ref }}" + {% endif %} -a author_email "{{ author_email }}" -a author_name "{{ author_name }}" -a preset_name "{{ preset_name }}" @@ -19,7 +22,10 @@ _tasks: -a use_github_actions "{{ use_github_actions }}"' - "echo '==== 3/4 - Initializing contract template ===='" - - 'algokit init -t {{ contract_template }} -n {{ project_name }}-contracts --no-git --no-ide --no-bootstrap + - 'algokit init {{ "--template-url \"" ~ (contract_template_url if contract_template_url else ("gh:algorandfoundation/algokit-python-template" if contract_template == "python" else "gh:algorandfoundation/algokit-typescript-template" if contract_template == "typescript" else "gh:algorand-devrel/tealscript-algokit-template")) ~ "\" --UNSAFE-SECURITY-accept-template-url" if (contract_template_url or contract_template_ref) else "-t " ~ contract_template }} -n {{ project_name }}-contracts --no-git --no-ide --no-bootstrap + {% if contract_template_ref %} + --template-url-ref "{{ contract_template_ref }}" + {% endif %} -a author_email "{{ author_email }}" -a author_name "{{ author_name }}" -a preset_name "{{ preset_name }}" @@ -50,6 +56,30 @@ contract_template: TealScript: tealscript default: python +frontend_template_url: + type: str + help: Override source URL for frontend child template. + when: false + default: '' + +frontend_template_ref: + type: str + help: Override git ref (branch/tag) for frontend child template. + when: false + default: '' + +contract_template_url: + type: str + help: Override source URL for contract child template. + when: false + default: '' + +contract_template_ref: + type: str + help: Override git ref (branch/tag) for contract child template. + when: false + default: '' + project_name: type: str help: Name for this project. diff --git a/examples/p-py/.algokit/.copier-answers.yml b/examples/p-py/.algokit/.copier-answers.yml index 24a5aee..63a5c4d 100644 --- a/examples/p-py/.algokit/.copier-answers.yml +++ b/examples/p-py/.algokit/.copier-answers.yml @@ -1,6 +1,6 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: -_src_path: +_commit: 2.1.8-10-g72c45ae +_src_path: /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpccp2c3vt/template author_email: None author_name: None cloud_provider: netlify diff --git a/examples/p-py/projects/p-py-contracts/.algokit/.copier-answers.yml b/examples/p-py/projects/p-py-contracts/.algokit/.copier-answers.yml index eb301fd..ac678d7 100644 --- a/examples/p-py/projects/p-py-contracts/.algokit/.copier-answers.yml +++ b/examples/p-py/projects/p-py-contracts/.algokit/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: 1.8.1 +_commit: 1.8.1-13-g270c4a5 _src_path: gh:algorandfoundation/algokit-python-template author_email: None author_name: None diff --git a/examples/p-py/projects/p-py-contracts/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/deploy_config.py.j2 b/examples/p-py/projects/p-py-contracts/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/deploy_config.py.j2 index a2ff46d..194ba5e 100644 --- a/examples/p-py/projects/p-py-contracts/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/deploy_config.py.j2 +++ b/examples/p-py/projects/p-py-contracts/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/deploy_config.py.j2 @@ -16,7 +16,7 @@ def deploy() -> None: deployer_ = algorand.account.from_environment("DEPLOYER") factory = algorand.client.get_typed_app_factory( - {{ contract_name.split('_')|map('capitalize')|join }}Factory, default_sender=deployer_.address + {{ contract_name.split('_')|map('capitalize')|join }}Factory, default_sender=deployer_.addr ) app_client, result = factory.deploy( @@ -31,7 +31,7 @@ def deploy() -> None: algorand.send.payment( algokit_utils.PaymentParams( amount=algokit_utils.AlgoAmount(algo=1), - sender=deployer_.address, + sender=deployer_.addr, receiver=app_client.app_address, ) ) diff --git a/examples/p-py/projects/p-py-contracts/pyproject.toml b/examples/p-py/projects/p-py-contracts/pyproject.toml index ad5bfb8..e8c0604 100644 --- a/examples/p-py/projects/p-py-contracts/pyproject.toml +++ b/examples/p-py/projects/p-py-contracts/pyproject.toml @@ -8,13 +8,13 @@ package-mode = false [tool.poetry.dependencies] python = "^3.12" -algokit-utils = "^4.0.0" +algokit-utils = "^5.0.0a13" python-dotenv = "^1.0.0" algorand-python = "^3" -algorand-python-testing = "^1" +algorand-python-testing = {git = "https://github.com/algorandfoundation/algorand-python-testing.git", branch = "refactor/util-v5"} [tool.poetry.group.dev.dependencies] -algokit-client-generator = "^2.1.0" +algokit-client-generator = "^3.0.0a3" black = {extras = ["d"], version = "*"} ruff = "^0.9.4" mypy = "^1" @@ -58,9 +58,8 @@ disallow_any_unimported = true disallow_any_expr = true disallow_any_decorated = true disallow_any_explicit = true -untyped_calls_exclude = ["algosdk"] # Remove if you prefer to use mypy's default behavior against -# untyped algosdk types +# untyped types [[tool.mypy.overrides]] module = "tests.*" disallow_any_expr = false diff --git a/examples/p-py/projects/p-py-contracts/smart_contracts/hello_world/deploy_config.py b/examples/p-py/projects/p-py-contracts/smart_contracts/hello_world/deploy_config.py index 364edf6..cf0bb15 100644 --- a/examples/p-py/projects/p-py-contracts/smart_contracts/hello_world/deploy_config.py +++ b/examples/p-py/projects/p-py-contracts/smart_contracts/hello_world/deploy_config.py @@ -16,7 +16,7 @@ def deploy() -> None: deployer_ = algorand.account.from_environment("DEPLOYER") factory = algorand.client.get_typed_app_factory( - HelloWorldFactory, default_sender=deployer_.address + HelloWorldFactory, default_sender=deployer_.addr ) app_client, result = factory.deploy( @@ -31,7 +31,7 @@ def deploy() -> None: algorand.send.payment( algokit_utils.PaymentParams( amount=algokit_utils.AlgoAmount(algo=1), - sender=deployer_.address, + sender=deployer_.addr, receiver=app_client.app_address, ) ) diff --git a/examples/p-py/projects/p-py-contracts/tests/hello_world_client_test.py b/examples/p-py/projects/p-py-contracts/tests/hello_world_client_test.py index 6a9c447..1ce278f 100644 --- a/examples/p-py/projects/p-py-contracts/tests/hello_world_client_test.py +++ b/examples/p-py/projects/p-py-contracts/tests/hello_world_client_test.py @@ -1,9 +1,9 @@ import algokit_utils import pytest from algokit_utils import ( + AddressWithSigners, AlgoAmount, AlgorandClient, - SigningAccount, ) from smart_contracts.artifacts.hello_world.hello_world_client import ( @@ -13,20 +13,20 @@ @pytest.fixture() -def deployer(algorand_client: AlgorandClient) -> SigningAccount: +def deployer(algorand_client: AlgorandClient) -> AddressWithSigners: account = algorand_client.account.from_environment("DEPLOYER") algorand_client.account.ensure_funded_from_environment( - account_to_fund=account.address, min_spending_balance=AlgoAmount.from_algo(10) + account_to_fund=account.addr, min_spending_balance=AlgoAmount.from_algo(10) ) return account @pytest.fixture() def hello_world_client( - algorand_client: AlgorandClient, deployer: SigningAccount + algorand_client: AlgorandClient, deployer: AddressWithSigners ) -> HelloWorldClient: factory = algorand_client.client.get_typed_app_factory( - HelloWorldFactory, default_sender=deployer.address + HelloWorldFactory, default_sender=deployer.addr ) client, _ = factory.deploy( @@ -52,4 +52,4 @@ def test_simulate_says_hello_with_correct_budget_consumed( ) assert result.returns[0].value == "Hello, World" assert result.returns[1].value == "Hello, Jane" - assert result.simulate_response["txn-groups"][0]["app-budget-consumed"] < 100 + assert result.simulate_response.txn_groups[0].app_budget_consumed < 100 diff --git a/examples/p-py/projects/p-py-frontend/.algokit/.copier-answers.yml b/examples/p-py/projects/p-py-frontend/.algokit/.copier-answers.yml index cfeea6e..7af32d8 100644 --- a/examples/p-py/projects/p-py-frontend/.algokit/.copier-answers.yml +++ b/examples/p-py/projects/p-py-frontend/.algokit/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: 1.1.1 +_commit: 1.1.1-13-gc5abe59 _src_path: gh:algorandfoundation/algokit-react-frontend-template author_email: None author_name: None diff --git a/examples/p-py/projects/p-py-frontend/.env.template b/examples/p-py/projects/p-py-frontend/.env.template index eb4b229..5dfbb2d 100644 --- a/examples/p-py/projects/p-py-frontend/.env.template +++ b/examples/p-py/projects/p-py-frontend/.env.template @@ -65,3 +65,6 @@ VITE_KMD_PASSWORD="" # VITE_INDEXER_SERVER="https://mainnet-idx.algonode.cloud" # VITE_INDEXER_PORT="" + +# Add your Web3Auth Client ID here if you want to test Web3Auth integration on TestNet or Mainnet +# VITE_WEB3_AUTH_CLIENT_ID="" \ No newline at end of file diff --git a/examples/p-py/projects/p-py-frontend/package.json b/examples/p-py/projects/p-py-frontend/package.json index bac0511..1704502 100644 --- a/examples/p-py/projects/p-py-frontend/package.json +++ b/examples/p-py/projects/p-py-frontend/package.json @@ -12,7 +12,7 @@ "npm": ">=9.0" }, "devDependencies": { - "@algorandfoundation/algokit-client-generator": "^5.0.0", + "@algorandfoundation/algokit-client-generator": "^7.0.0-alpha.5", "@types/node": "^18.17.14", "@types/react": "^18.2.11", "@types/react-dom": "^18.2.4", @@ -35,12 +35,12 @@ "vite-plugin-node-polyfills": "^0.22.0" }, "dependencies": { - "@algorandfoundation/algokit-utils": "^9.0.0", + "@algorandfoundation/algokit-utils": "^10.0.0-alpha.40", "@blockshake/defly-connect": "^1.2.1", "@perawallet/connect": "^1.4.1", - "@txnlab/use-wallet": "^4.0.0", - "@txnlab/use-wallet-react": "^4.0.0", - "algosdk": "^3.0.0", + "@txnlab/use-wallet": "^4.6.0", + "@txnlab/use-wallet-react": "^4.6.0", + "@web3auth/modal": "^9.7.0", "daisyui": "^4.0.0", "notistack": "^3.0.1", "react": "^18.2.0", diff --git a/examples/p-py/projects/p-py-frontend/src/components/AppCalls.tsx b/examples/p-py/projects/p-py-frontend/src/components/AppCalls.tsx index 1268994..55fb808 100644 --- a/examples/p-py/projects/p-py-frontend/src/components/AppCalls.tsx +++ b/examples/p-py/projects/p-py-frontend/src/components/AppCalls.tsx @@ -5,6 +5,7 @@ import { HelloWorldFactory } from '../contracts/HelloWorld' import { OnSchemaBreak, OnUpdate } from '@algorandfoundation/algokit-utils/types/app' import { getAlgodConfigFromViteEnvironment, getIndexerConfigFromViteEnvironment } from '../utils/network/getAlgoClientConfigs' import { AlgorandClient } from '@algorandfoundation/algokit-utils' +import { encodeTransactionRaw } from '@algorandfoundation/algokit-utils/transact' interface AppCallsInterface { openModal: boolean @@ -15,7 +16,7 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { const [loading, setLoading] = useState(false) const [contractInput, setContractInput] = useState('') const { enqueueSnackbar } = useSnackbar() - const { transactionSigner, activeAddress } = useWallet() + const { signTransactions, activeAddress } = useWallet() const algodConfig = getAlgodConfigFromViteEnvironment() const indexerConfig = getIndexerConfigFromViteEnvironment() @@ -23,7 +24,11 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { algodConfig, indexerConfig, }) - algorand.setDefaultSigner(transactionSigner) + algorand.setDefaultSigner(async (txnGroup, indexesToSign) => { + const encoded = txnGroup.map((txn) => encodeTransactionRaw(txn)) + const signed = await signTransactions(encoded, indexesToSign) + return signed.filter((s): s is Uint8Array => s !== null) + }) const sendAppCall = async () => { setLoading(true) diff --git a/examples/p-py/projects/p-py-frontend/src/components/Transact.tsx b/examples/p-py/projects/p-py-frontend/src/components/Transact.tsx index 2ba3e96..3f8191d 100644 --- a/examples/p-py/projects/p-py-frontend/src/components/Transact.tsx +++ b/examples/p-py/projects/p-py-frontend/src/components/Transact.tsx @@ -1,4 +1,5 @@ import { algo, AlgorandClient } from '@algorandfoundation/algokit-utils' +import { encodeTransactionRaw } from '@algorandfoundation/algokit-utils/transact' import { useWallet } from '@txnlab/use-wallet-react' import { useSnackbar } from 'notistack' import { useState } from 'react' @@ -18,12 +19,12 @@ const Transact = ({ openModal, setModalState }: TransactInterface) => { const { enqueueSnackbar } = useSnackbar() - const { transactionSigner, activeAddress } = useWallet() + const { signTransactions, activeAddress } = useWallet() const handleSubmitAlgo = async () => { setLoading(true) - if (!transactionSigner || !activeAddress) { + if (!signTransactions || !activeAddress) { enqueueSnackbar('Please connect wallet first', { variant: 'warning' }) return } @@ -31,7 +32,11 @@ const Transact = ({ openModal, setModalState }: TransactInterface) => { try { enqueueSnackbar('Sending transaction...', { variant: 'info' }) const result = await algorand.send.payment({ - signer: transactionSigner, + signer: async (txnGroup, indexesToSign) => { + const encoded = txnGroup.map((txn) => encodeTransactionRaw(txn)) + const signed = await signTransactions(encoded, indexesToSign) + return signed.filter((s): s is Uint8Array => s !== null) + }, sender: activeAddress, receiver: receiverAddress, amount: algo(1), diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/AppCall.ts b/examples/p-py/projects/p-py-frontend/src/contracts/AppCall.ts new file mode 100644 index 0000000..c61e144 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/AppCall.ts @@ -0,0 +1,558 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"AppCall","structs":{},"methods":[{"name":"some_value","args":[],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcmVhdGVkQXBwQXNzZXQvb3RoZXIucHk6NAogICAgLy8gY2xhc3MgQXBwQ2FsbChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVANQogICAgcHVzaGJ5dGVzIDB4ZDM0NzllNjUgLy8gbWV0aG9kICJzb21lX3ZhbHVlKCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3NvbWVfdmFsdWVfcm91dGVAMwogICAgZXJyCgptYWluX3NvbWVfdmFsdWVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcmVhdGVkQXBwQXNzZXQvb3RoZXIucHk6NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0CiAgICBiIHNvbWVfdmFsdWUKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVANToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkNyZWF0ZWRBcHBBc3NldC5vdGhlci5BcHBDYWxsLnNvbWVfdmFsdWVbcm91dGluZ10oKSAtPiB2b2lkOgpzb21lX3ZhbHVlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyZWF0ZWRBcHBBc3NldC9vdGhlci5weTo3CiAgICAvLyByZXR1cm4gR2xvYmFsLmdyb3VwX3NpemUgKiAoVHhuLmdyb3VwX2luZGV4ICsgMSkKICAgIGdsb2JhbCBHcm91cFNpemUKICAgIHR4biBHcm91cEluZGV4CiAgICBwdXNoaW50IDEKICAgICsKICAgICoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcmVhdGVkQXBwQXNzZXQvb3RoZXIucHk6NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcHVzaGludCAxCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CzEbQQAYgATTR55lNhoAjgEAAQAxGRQxGBBEQgAIMRkUMRgUEEMyBDEWgQEICxaABBUffHVMULCBAUM=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the AppCall contract + */ +export type AppCallArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'some_value()uint64': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'some_value()uint64': [] + } +} + +/** + * The return type for each method + */ +export type AppCallReturns = { + 'some_value()uint64': bigint +} + +/** + * Defines the types of available calls and state of the AppCall smart contract. + */ +export type AppCallTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'some_value()uint64' | 'some_value', { + argsObj: AppCallArgs['obj']['some_value()uint64'] + argsTuple: AppCallArgs['tuple']['some_value()uint64'] + returns: AppCallReturns['some_value()uint64'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type AppCallSignatures = keyof AppCallTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type AppCallNonVoidMethodSignatures = keyof AppCallTypes['methods'] extends infer T ? T extends keyof AppCallTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the AppCall smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = AppCallTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the AppCall smart contract to the method's return type + */ +export type MethodReturn = AppCallTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type AppCallCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type AppCallDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: AppCallCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the AppCall smart contract + */ +export abstract class AppCallParamsFactory { + /** + * Constructs a no op call for the some_value()uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static someValue(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'some_value()uint64' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } +} + +/** + * A factory to create and deploy one or more instance of the AppCall smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class AppCallFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `AppCallFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new AppCallClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new AppCallClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the AppCall smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: AppCallDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new AppCallClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the AppCall smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the AppCall smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the AppCall smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new AppCallClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the AppCall smart contract + */ +export class AppCallClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `AppCallClient` + * + * @param appClient An `AppClient` instance which has been created with the AppCall app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `AppCallClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `AppCallClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new AppCallClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `AppCallClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new AppCallClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the AppCall smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the AppCall smart contract using the `some_value()uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + someValue: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(AppCallParamsFactory.someValue(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the AppCall smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the AppCall smart contract using the `some_value()uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + someValue: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(AppCallParamsFactory.someValue(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the AppCall smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the AppCall smart contract using the `some_value()uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + someValue: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(AppCallParamsFactory.someValue(params)) + return {...result, return: result.return as unknown as (undefined | AppCallReturns['some_value()uint64'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new AppCallClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current AppCall app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): AppCallComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a some_value()uint64 method call against the AppCall contract + */ + someValue(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.someValue(params))) + return this + }, + /** + * Add a clear state call to the AppCall contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as AppCallComposer + } +} +export type AppCallComposer = { + /** + * Calls the some_value()uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + someValue(params?: CallParams): AppCallComposer<[...TReturns, AppCallReturns['some_value()uint64'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the AppCall smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): AppCallComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): AppCallComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type AppCallComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/AppExpectingEffects.ts b/examples/p-py/projects/p-py-frontend/src/contracts/AppExpectingEffects.ts new file mode 100644 index 0000000..1a953ef --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/AppExpectingEffects.ts @@ -0,0 +1,630 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"AppExpectingEffects","structs":{},"methods":[{"name":"create_group","args":[{"type":"acfg","name":"asset_create"},{"type":"appl","name":"app_create"}],"returns":{"type":"(uint64,uint64)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"log_group","args":[{"type":"appl","name":"app_call"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[159],"errorMessage":"application log value is not the result of an ABI return"},{"pc":[96],"errorMessage":"expected app created"},{"pc":[81],"errorMessage":"expected asset created"},{"pc":[105],"errorMessage":"expected correct app id"},{"pc":[90],"errorMessage":"expected correct asset id"},{"pc":[139],"errorMessage":"expected correct method called"},{"pc":[145],"errorMessage":"expected logs"},{"pc":[65],"errorMessage":"transaction type is acfg"},{"pc":[75,126],"errorMessage":"transaction type is appl"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDYKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyZWF0ZWRBcHBBc3NldC9jb250cmFjdC5weTo0CiAgICAvLyBjbGFzcyBBcHBFeHBlY3RpbmdFZmZlY3RzKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA5CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHg2ZDNhMDQzOSAweDYyYTBlZjYyIC8vIG1ldGhvZCAiY3JlYXRlX2dyb3VwKGFjZmcsYXBwbCkodWludDY0LHVpbnQ2NCkiLCBtZXRob2QgImxvZ19ncm91cChhcHBsKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVfZ3JvdXAgbG9nX2dyb3VwCiAgICBlcnIKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAOToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkNyZWF0ZWRBcHBBc3NldC5jb250cmFjdC5BcHBFeHBlY3RpbmdFZmZlY3RzLmNyZWF0ZV9ncm91cFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZV9ncm91cDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcmVhdGVkQXBwQXNzZXQvY29udHJhY3QucHk6NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGFjZmcKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIGFwcGwKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBhcHBsCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3JlYXRlZEFwcEFzc2V0L2NvbnRyYWN0LnB5OjExCiAgICAvLyBhc3NlcnQgYXNzZXRfY3JlYXRlLmNyZWF0ZWRfYXNzZXQuaWQsICJleHBlY3RlZCBhc3NldCBjcmVhdGVkIgogICAgZGlnIDEKICAgIGd0eG5zIENyZWF0ZWRBc3NldElECiAgICBkdXAKICAgIGFzc2VydCAvLyBleHBlY3RlZCBhc3NldCBjcmVhdGVkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3JlYXRlZEFwcEFzc2V0L2NvbnRyYWN0LnB5OjEzCiAgICAvLyBvcC5nYWlkKGFzc2V0X2NyZWF0ZS5ncm91cF9pbmRleCkgPT0gYXNzZXRfY3JlYXRlLmNyZWF0ZWRfYXNzZXQuaWQKICAgIHVuY292ZXIgMgogICAgZ3R4bnMgR3JvdXBJbmRleAogICAgZ2FpZHMKICAgIGRpZyAxCiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyZWF0ZWRBcHBBc3NldC9jb250cmFjdC5weToxMi0xNAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBvcC5nYWlkKGFzc2V0X2NyZWF0ZS5ncm91cF9pbmRleCkgPT0gYXNzZXRfY3JlYXRlLmNyZWF0ZWRfYXNzZXQuaWQKICAgIC8vICksICJleHBlY3RlZCBjb3JyZWN0IGFzc2V0IGlkIgogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGNvcnJlY3QgYXNzZXQgaWQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcmVhdGVkQXBwQXNzZXQvY29udHJhY3QucHk6MTUKICAgIC8vIGFzc2VydCBhcHBfY3JlYXRlLmNyZWF0ZWRfYXBwLmlkLCAiZXhwZWN0ZWQgYXBwIGNyZWF0ZWQiCiAgICBkaWcgMQogICAgZ3R4bnMgQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIGR1cAogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGFwcCBjcmVhdGVkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3JlYXRlZEFwcEFzc2V0L2NvbnRyYWN0LnB5OjE3CiAgICAvLyBvcC5nYWlkKGFwcF9jcmVhdGUuZ3JvdXBfaW5kZXgpID09IGFwcF9jcmVhdGUuY3JlYXRlZF9hcHAuaWQKICAgIHVuY292ZXIgMgogICAgZ3R4bnMgR3JvdXBJbmRleAogICAgZ2FpZHMKICAgIGRpZyAxCiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyZWF0ZWRBcHBBc3NldC9jb250cmFjdC5weToxNi0xOAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBvcC5nYWlkKGFwcF9jcmVhdGUuZ3JvdXBfaW5kZXgpID09IGFwcF9jcmVhdGUuY3JlYXRlZF9hcHAuaWQKICAgIC8vICksICJleHBlY3RlZCBjb3JyZWN0IGFwcCBpZCIKICAgIGFzc2VydCAvLyBleHBlY3RlZCBjb3JyZWN0IGFwcCBpZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyZWF0ZWRBcHBBc3NldC9jb250cmFjdC5weTo1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5DcmVhdGVkQXBwQXNzZXQuY29udHJhY3QuQXBwRXhwZWN0aW5nRWZmZWN0cy5sb2dfZ3JvdXBbcm91dGluZ10oKSAtPiB2b2lkOgpsb2dfZ3JvdXA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3JlYXRlZEFwcEFzc2V0L2NvbnRyYWN0LnB5OjIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIGFwcGwKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBhcHBsCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3JlYXRlZEFwcEFzc2V0L2NvbnRyYWN0LnB5OjI0CiAgICAvLyBhc3NlcnQgYXBwX2NhbGwuYXBwX2FyZ3MoMCkgPT0gYXJjNC5hcmM0X3NpZ25hdHVyZSgKICAgIGR1cAogICAgcHVzaGludCAwCiAgICBndHhuc2FzIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyZWF0ZWRBcHBBc3NldC9jb250cmFjdC5weToyNC0yNgogICAgLy8gYXNzZXJ0IGFwcF9jYWxsLmFwcF9hcmdzKDApID09IGFyYzQuYXJjNF9zaWduYXR1cmUoCiAgICAvLyAgICAgInNvbWVfdmFsdWUoKXVpbnQ2NCIKICAgIC8vICksICJleHBlY3RlZCBjb3JyZWN0IG1ldGhvZCBjYWxsZWQiCiAgICBwdXNoYnl0ZXMgMHhkMzQ3OWU2NSAvLyBtZXRob2QgInNvbWVfdmFsdWUoKXVpbnQ2NCIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgY29ycmVjdCBtZXRob2QgY2FsbGVkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3JlYXRlZEFwcEFzc2V0L2NvbnRyYWN0LnB5OjI3CiAgICAvLyBhc3NlcnQgYXBwX2NhbGwubnVtX2xvZ3MgPT0gMSwgImV4cGVjdGVkIGxvZ3MiCiAgICBkdXAKICAgIGd0eG5zIE51bUxvZ3MKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGxvZ3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcmVhdGVkQXBwQXNzZXQvY29udHJhY3QucHk6MjkKICAgIC8vIGFyYzQuVUludDY0LmZyb21fbG9nKGFwcF9jYWxsLmxhc3RfbG9nKQogICAgZHVwCiAgICBndHhucyBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGxvZyB2YWx1ZSBpcyBub3QgdGhlIHJlc3VsdCBvZiBhbiBBQkkgcmV0dXJuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3JlYXRlZEFwcEFzc2V0L2NvbnRyYWN0LnB5OjMwCiAgICAvLyA9PSAoYXBwX2NhbGwuZ3JvdXBfaW5kZXggKyAxKSAqIEdsb2JhbC5ncm91cF9zaXplCiAgICBzd2FwCiAgICBndHhucyBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgKgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyZWF0ZWRBcHBBc3NldC9jb250cmFjdC5weToyOS0zMAogICAgLy8gYXJjNC5VSW50NjQuZnJvbV9sb2coYXBwX2NhbGwubGFzdF9sb2cpCiAgICAvLyA9PSAoYXBwX2NhbGwuZ3JvdXBfaW5kZXggKyAxKSAqIEdsb2JhbC5ncm91cF9zaXplCiAgICBpdG9iCiAgICBiPT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcmVhdGVkQXBwQXNzZXQvY29udHJhY3QucHk6MjgtMzEKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgYXJjNC5VSW50NjQuZnJvbV9sb2coYXBwX2NhbGwubGFzdF9sb2cpCiAgICAvLyAgICAgPT0gKGFwcF9jYWxsLmdyb3VwX2luZGV4ICsgMSkgKiBHbG9iYWwuZ3JvdXBfc2l6ZQogICAgLy8gKQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3JlYXRlZEFwcEFzc2V0L2NvbnRyYWN0LnB5OjIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyACAQYmAQQVH3x1MRtBAB0xGRREMRhEggIEbToEOQRioO9iNhoAjgIACQBIADEZFDEYFBBDMRaBAglJOBCBAxJEMRYiCUk4ECMSREsBODxJRE8COBY9SwESREsBOD1JRE8COBY9SwESREwWTBZQKExQsCJDMRYiCUk4ECMSREmBAMIagATTR55lEkRJODsiEkRJOD5JVwQATFcABCgSREw4FiIIMgQLFqhEIkM=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the AppExpectingEffects contract + */ +export type AppExpectingEffectsArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'create_group(acfg,appl)(uint64,uint64)': { + assetCreate?: AppMethodCallTransactionArgument + appCreate: AppMethodCallTransactionArgument + } + 'log_group(appl)void': { + appCall: AppMethodCallTransactionArgument + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'create_group(acfg,appl)(uint64,uint64)': [assetCreate: AppMethodCallTransactionArgument | undefined, appCreate: AppMethodCallTransactionArgument] + 'log_group(appl)void': [appCall: AppMethodCallTransactionArgument] + } +} + +/** + * The return type for each method + */ +export type AppExpectingEffectsReturns = { + 'create_group(acfg,appl)(uint64,uint64)': [bigint, bigint] + 'log_group(appl)void': void +} + +/** + * Defines the types of available calls and state of the AppExpectingEffects smart contract. + */ +export type AppExpectingEffectsTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'create_group(acfg,appl)(uint64,uint64)' | 'create_group', { + argsObj: AppExpectingEffectsArgs['obj']['create_group(acfg,appl)(uint64,uint64)'] + argsTuple: AppExpectingEffectsArgs['tuple']['create_group(acfg,appl)(uint64,uint64)'] + returns: AppExpectingEffectsReturns['create_group(acfg,appl)(uint64,uint64)'] + }> + & Record<'log_group(appl)void' | 'log_group', { + argsObj: AppExpectingEffectsArgs['obj']['log_group(appl)void'] + argsTuple: AppExpectingEffectsArgs['tuple']['log_group(appl)void'] + returns: AppExpectingEffectsReturns['log_group(appl)void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type AppExpectingEffectsSignatures = keyof AppExpectingEffectsTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type AppExpectingEffectsNonVoidMethodSignatures = keyof AppExpectingEffectsTypes['methods'] extends infer T ? T extends keyof AppExpectingEffectsTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the AppExpectingEffects smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = AppExpectingEffectsTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the AppExpectingEffects smart contract to the method's return type + */ +export type MethodReturn = AppExpectingEffectsTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type AppExpectingEffectsCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type AppExpectingEffectsDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: AppExpectingEffectsCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the AppExpectingEffects smart contract + */ +export abstract class AppExpectingEffectsParamsFactory { + /** + * Constructs a no op call for the create_group(acfg,appl)(uint64,uint64) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static createGroup(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'create_group(acfg,appl)(uint64,uint64)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assetCreate, params.args.appCreate], + } + } + /** + * Constructs a no op call for the log_group(appl)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static logGroup(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'log_group(appl)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.appCall], + } + } +} + +/** + * A factory to create and deploy one or more instance of the AppExpectingEffects smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class AppExpectingEffectsFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `AppExpectingEffectsFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new AppExpectingEffectsClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new AppExpectingEffectsClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the AppExpectingEffects smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: AppExpectingEffectsDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new AppExpectingEffectsClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the AppExpectingEffects smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the AppExpectingEffects smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the AppExpectingEffects smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new AppExpectingEffectsClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the AppExpectingEffects smart contract + */ +export class AppExpectingEffectsClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `AppExpectingEffectsClient` + * + * @param appClient An `AppClient` instance which has been created with the AppExpectingEffects app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `AppExpectingEffectsClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `AppExpectingEffectsClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new AppExpectingEffectsClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `AppExpectingEffectsClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new AppExpectingEffectsClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the AppExpectingEffects smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the AppExpectingEffects smart contract using the `create_group(acfg,appl)(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + createGroup: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(AppExpectingEffectsParamsFactory.createGroup(params)) + }, + + /** + * Makes a call to the AppExpectingEffects smart contract using the `log_group(appl)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + logGroup: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(AppExpectingEffectsParamsFactory.logGroup(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the AppExpectingEffects smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the AppExpectingEffects smart contract using the `create_group(acfg,appl)(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + createGroup: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(AppExpectingEffectsParamsFactory.createGroup(params)) + }, + + /** + * Makes a call to the AppExpectingEffects smart contract using the `log_group(appl)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + logGroup: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(AppExpectingEffectsParamsFactory.logGroup(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the AppExpectingEffects smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the AppExpectingEffects smart contract using the `create_group(acfg,appl)(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + createGroup: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(AppExpectingEffectsParamsFactory.createGroup(params)) + return {...result, return: result.return as unknown as (undefined | AppExpectingEffectsReturns['create_group(acfg,appl)(uint64,uint64)'])} + }, + + /** + * Makes a call to the AppExpectingEffects smart contract using the `log_group(appl)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + logGroup: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(AppExpectingEffectsParamsFactory.logGroup(params)) + return {...result, return: result.return as unknown as (undefined | AppExpectingEffectsReturns['log_group(appl)void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new AppExpectingEffectsClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current AppExpectingEffects app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): AppExpectingEffectsComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a create_group(acfg,appl)(uint64,uint64) method call against the AppExpectingEffects contract + */ + createGroup(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createGroup(params))) + return this + }, + /** + * Add a log_group(appl)void method call against the AppExpectingEffects contract + */ + logGroup(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.logGroup(params))) + return this + }, + /** + * Add a clear state call to the AppExpectingEffects contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as AppExpectingEffectsComposer + } +} +export type AppExpectingEffectsComposer = { + /** + * Calls the create_group(acfg,appl)(uint64,uint64) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + createGroup(params?: CallParams): AppExpectingEffectsComposer<[...TReturns, AppExpectingEffectsReturns['create_group(acfg,appl)(uint64,uint64)'] | undefined]> + + /** + * Calls the log_group(appl)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + logGroup(params?: CallParams): AppExpectingEffectsComposer<[...TReturns, AppExpectingEffectsReturns['log_group(appl)void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the AppExpectingEffects smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): AppExpectingEffectsComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): AppExpectingEffectsComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type AppExpectingEffectsComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/Arc4InnerTxnsContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/Arc4InnerTxnsContract.ts new file mode 100644 index 0000000..afe3303 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/Arc4InnerTxnsContract.ts @@ -0,0 +1,556 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"Arc4InnerTxnsContract","structs":{},"methods":[{"name":"opt_in_dummy_asset","args":[{"type":"uint64","name":"asset"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0SW5uZXJUeG5zL2NvbnRyYWN0LnB5OjQKICAgIC8vIGNsYXNzIEFyYzRJbm5lclR4bnNDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVANQogICAgcHVzaGJ5dGVzIDB4YWIzOWM1NWEgLy8gbWV0aG9kICJvcHRfaW5fZHVtbXlfYXNzZXQodWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX29wdF9pbl9kdW1teV9hc3NldF9yb3V0ZUAzCiAgICBlcnIKCm1haW5fb3B0X2luX2R1bW15X2Fzc2V0X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNElubmVyVHhucy9jb250cmFjdC5weTo1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0CiAgICBiIG9wdF9pbl9kdW1teV9hc3NldAoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNElubmVyVHhucy5jb250cmFjdC5BcmM0SW5uZXJUeG5zQ29udHJhY3Qub3B0X2luX2R1bW15X2Fzc2V0W3JvdXRpbmddKCkgLT4gdm9pZDoKb3B0X2luX2R1bW15X2Fzc2V0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRJbm5lclR4bnMvY29udHJhY3QucHk6NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNElubmVyVHhucy9jb250cmFjdC5weTo3LTExCiAgICAvLyAjIFN1Ym1pdCBvcHQtaW4gdHJhbnNhY3Rpb246IDAgYXNzZXQgdHJhbnNmZXIgdG8gc2VsZgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0SW5uZXJUeG5zL2NvbnRyYWN0LnB5OjkKICAgIC8vIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRJbm5lclR4bnMvY29udHJhY3QucHk6Ny04CiAgICAvLyAjIFN1Ym1pdCBvcHQtaW4gdHJhbnNhY3Rpb246IDAgYXNzZXQgdHJhbnNmZXIgdG8gc2VsZgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBwdXNoaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNElubmVyVHhucy9jb250cmFjdC5weTo3LTExCiAgICAvLyAjIFN1Ym1pdCBvcHQtaW4gdHJhbnNhY3Rpb246IDAgYXNzZXQgdHJhbnNmZXIgdG8gc2VsZgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNElubmVyVHhucy9jb250cmFjdC5weTo1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CzEbQQAYgASrOcVaNhoAjgEAAQAxGRQxGBBEQgAIMRkUMRgUEEM2GgEXsTIKshSyEYEEshCBALIBs4EBQw==","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the Arc4InnerTxnsContract contract + */ +export type Arc4InnerTxnsContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'opt_in_dummy_asset(uint64)void': { + asset: bigint | number + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'opt_in_dummy_asset(uint64)void': [asset: bigint | number] + } +} + +/** + * The return type for each method + */ +export type Arc4InnerTxnsContractReturns = { + 'opt_in_dummy_asset(uint64)void': void +} + +/** + * Defines the types of available calls and state of the Arc4InnerTxnsContract smart contract. + */ +export type Arc4InnerTxnsContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'opt_in_dummy_asset(uint64)void' | 'opt_in_dummy_asset', { + argsObj: Arc4InnerTxnsContractArgs['obj']['opt_in_dummy_asset(uint64)void'] + argsTuple: Arc4InnerTxnsContractArgs['tuple']['opt_in_dummy_asset(uint64)void'] + returns: Arc4InnerTxnsContractReturns['opt_in_dummy_asset(uint64)void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type Arc4InnerTxnsContractSignatures = keyof Arc4InnerTxnsContractTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the Arc4InnerTxnsContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = Arc4InnerTxnsContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the Arc4InnerTxnsContract smart contract to the method's return type + */ +export type MethodReturn = Arc4InnerTxnsContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type Arc4InnerTxnsContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type Arc4InnerTxnsContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: Arc4InnerTxnsContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the Arc4InnerTxnsContract smart contract + */ +export abstract class Arc4InnerTxnsContractParamsFactory { + /** + * Constructs a no op call for the opt_in_dummy_asset(uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static optInDummyAsset(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'opt_in_dummy_asset(uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } +} + +/** + * A factory to create and deploy one or more instance of the Arc4InnerTxnsContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class Arc4InnerTxnsContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `Arc4InnerTxnsContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new Arc4InnerTxnsContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new Arc4InnerTxnsContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the Arc4InnerTxnsContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: Arc4InnerTxnsContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new Arc4InnerTxnsContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the Arc4InnerTxnsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the Arc4InnerTxnsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the Arc4InnerTxnsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new Arc4InnerTxnsContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the Arc4InnerTxnsContract smart contract + */ +export class Arc4InnerTxnsContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `Arc4InnerTxnsContractClient` + * + * @param appClient An `AppClient` instance which has been created with the Arc4InnerTxnsContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `Arc4InnerTxnsContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `Arc4InnerTxnsContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new Arc4InnerTxnsContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `Arc4InnerTxnsContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new Arc4InnerTxnsContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the Arc4InnerTxnsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the Arc4InnerTxnsContract smart contract using the `opt_in_dummy_asset(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + optInDummyAsset: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4InnerTxnsContractParamsFactory.optInDummyAsset(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the Arc4InnerTxnsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the Arc4InnerTxnsContract smart contract using the `opt_in_dummy_asset(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + optInDummyAsset: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4InnerTxnsContractParamsFactory.optInDummyAsset(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the Arc4InnerTxnsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the Arc4InnerTxnsContract smart contract using the `opt_in_dummy_asset(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + optInDummyAsset: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4InnerTxnsContractParamsFactory.optInDummyAsset(params)) + return {...result, return: result.return as unknown as (undefined | Arc4InnerTxnsContractReturns['opt_in_dummy_asset(uint64)void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new Arc4InnerTxnsContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current Arc4InnerTxnsContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): Arc4InnerTxnsContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a opt_in_dummy_asset(uint64)void method call against the Arc4InnerTxnsContract contract + */ + optInDummyAsset(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.optInDummyAsset(params))) + return this + }, + /** + * Add a clear state call to the Arc4InnerTxnsContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as Arc4InnerTxnsContractComposer + } +} +export type Arc4InnerTxnsContractComposer = { + /** + * Calls the opt_in_dummy_asset(uint64)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + optInDummyAsset(params?: CallParams): Arc4InnerTxnsContractComposer<[...TReturns, Arc4InnerTxnsContractReturns['opt_in_dummy_asset(uint64)void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the Arc4InnerTxnsContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): Arc4InnerTxnsContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): Arc4InnerTxnsContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type Arc4InnerTxnsContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/Arc4PrimitiveOpsContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/Arc4PrimitiveOpsContract.ts new file mode 100644 index 0000000..355f633 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/Arc4PrimitiveOpsContract.ts @@ -0,0 +1,3982 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"Arc4PrimitiveOpsContract","structs":{},"methods":[{"name":"verify_uintn_uintn_eq","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_uintn_eq","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_biguintn_eq","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_biguintn_eq","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_uintn_ne","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_uintn_ne","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_biguintn_ne","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_biguintn_ne","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_uintn_lt","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_uintn_lt","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_biguintn_lt","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_biguintn_lt","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_uintn_le","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_uintn_le","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_biguintn_le","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_biguintn_le","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_uintn_gt","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_uintn_gt","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_biguintn_gt","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_biguintn_gt","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_uintn_ge","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_uintn_ge","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_biguintn_ge","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_biguintn_ge","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_init","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"uint32"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_init","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"uint256"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_from_bytes","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"uint32"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_from_bytes","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"uint256"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn_from_log","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"uint32"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_from_log","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"uint256"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_as_uint64","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguintn_as_biguint","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"uint512"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn64_as_uint64","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uintn64_as_biguint","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"uint512"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_ufixednxm_bytes","args":[{"type":"ufixed32x8","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bigufixednxm_bytes","args":[{"type":"ufixed256x16","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_ufixednxm_from_bytes","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"ufixed32x8"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bigufixednxm_from_bytes","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"ufixed256x16"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_ufixednxm_from_log","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"ufixed32x8"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bigufixednxm_from_log","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"ufixed256x16"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_string_init","args":[{"type":"string","name":"a"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_string_add","args":[{"type":"string","name":"a"},{"type":"string","name":"b"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_string_eq","args":[{"type":"string","name":"a"},{"type":"string","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_string_bytes","args":[{"type":"string","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_string_from_bytes","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_string_from_log","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bool_bytes","args":[{"type":"bool","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bool_from_bytes","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bool_from_log","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_emit","args":[{"type":"string","name":"a"},{"type":"uint512","name":"b"},{"type":"uint64","name":"c"},{"type":"byte[]","name":"d"},{"type":"uint64","name":"e"},{"type":"bool","name":"f"},{"type":"byte[]","name":"g"},{"type":"string","name":"h"},{"type":"uint64","name":"m"},{"type":"uint256","name":"n"},{"type":"ufixed32x8","name":"o"},{"type":"ufixed256x16","name":"p"},{"type":"bool","name":"q"},{"type":"byte[]","name":"r"},{"type":"byte[]","name":"s"},{"type":"byte[]","name":"t"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[{"name":"SwappedArc4","args":[{"type":"uint64","name":"m"},{"type":"uint256","name":"n"},{"type":"ufixed32x8","name":"o"},{"type":"ufixed256x16","name":"p"},{"type":"bool","name":"q"},{"type":"uint8[3]","name":"r"},{"type":"uint16[]","name":"s"},{"type":"(uint32,uint64,string)","name":"t"}]},{"name":"Swapped","args":[{"type":"string","name":"field1"},{"type":"uint512","name":"field2"},{"type":"uint64","name":"field3"},{"type":"byte[]","name":"field4"},{"type":"uint64","name":"field5"},{"type":"bool","name":"field6"},{"type":"byte[]","name":"field7"},{"type":"string","name":"field8"},{"type":"uint64","name":"field9"},{"type":"uint256","name":"field10"},{"type":"ufixed32x8","name":"field11"},{"type":"ufixed256x16","name":"field12"},{"type":"bool","name":"field13"},{"type":"uint8[3]","name":"field14"},{"type":"uint16[]","name":"field15"},{"type":"(uint32,uint64,string)","name":"field16"}]}],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[1579,1599,1788,1808,1933,1982],"errorMessage":"application log value is not the result of an ABI return"},{"pc":[1855],"errorMessage":"max array length exceeded"},{"pc":[411,424,457,468,503,514,549,562,595,608,641,652,687,698,733,746,779,792,825,836,871,882,917,930,963,976,1009,1020,1055,1066,1101,1114,1147,1160,1193,1204,1239,1250,1285,1298,1331,1344,1377,1388,1423,1434,1469,1482,1509,1531,1617,1626,1650,1659,1679,1699,1707],"errorMessage":"overflow"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDggNjQgMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjYKICAgIC8vIGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVANTcKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDk2ZjE0MTE2IDB4ZWQ2NjYwOTYgMHgyY2EwMzUyYiAweDg1OTA3ZDQwIDB4MmNiZWM0NWIgMHgwNzY2NmZkOSAweDM3MGJhYmQzIDB4MmI2YjNlZjAgMHgzMzlkYTk3YyAweDc4OThlZDk3IDB4MWYxMzBjZWMgMHhjNzQ4NjY0ZSAweDdhNDYwY2IxIDB4ZGNhYjFmMDEgMHg5N2Q5MDY0ZCAweGNlMDZjMmEwIDB4ZGNkYmNlZTAgMHg3N2E0YjY4ZCAweDRmNTQwNjI2IDB4MDk1YWVkNDEgMHhlM2I3ZTkxOCAweDU1MzM3MDA4IDB4OWJiMWNkNjYgMHg4MTQ4NGQ5ZCAweDlhMDNkZjEwIDB4ZDNmMGU0NGIgMHg5ODJkYjIzMyAweGFmZmJkZjBlIDB4Mjg4YWY3NmUgMHg4YmQ4NGEwNCAweDMwMmI4YTBhIDB4MzM3YWUyMGIgMHg2ZTI1OTI3MCAweDc5ZTM1Zjc3IDB4MGYxNTc0ZmUgMHhiMmNiMTNiZSAweGQwNTllZWE3IDB4NGNjNGMxNTcgMHgzZDE3YWM2ZSAweGY3ZjNkNWZjIDB4ZjhjOGY4ZDUgMHg0M2Y3MTYyYSAweDQyZTA5MDc1IDB4ZDk1NmY1NzUgMHg2YzAxNjBkZiAweGE4OTAxNTBiIDB4MGIyZjRjM2YgMHg5ZGI5ZDMyNyAweGU0ZDk1MGExIDB4YjYwNWU4MGMgLy8gbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fZXEoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fZXEoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fZXEoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fZXEoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fbGUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fbGUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fbGUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fbGUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5faW5pdChieXRlW10pdWludDMyIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5faW5pdChieXRlW10pdWludDI1NiIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2Zyb21fYnl0ZXMoYnl0ZVtdKXVpbnQzMiIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2Zyb21fYnl0ZXMoYnl0ZVtdKXVpbnQyNTYiLCBtZXRob2QgInZlcmlmeV91aW50bl9mcm9tX2xvZyhieXRlW10pdWludDMyIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fZnJvbV9sb2coYnl0ZVtdKXVpbnQyNTYiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9hc191aW50NjQoYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2FzX2JpZ3VpbnQoYnl0ZVtdKXVpbnQ1MTIiLCBtZXRob2QgInZlcmlmeV91aW50bjY0X2FzX3VpbnQ2NChieXRlW10pdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludG42NF9hc19iaWd1aW50KGJ5dGVbXSl1aW50NTEyIiwgbWV0aG9kICJ2ZXJpZnlfdWZpeGVkbnhtX2J5dGVzKHVmaXhlZDMyeDgpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzKHVmaXhlZDI1NngxNilieXRlW10iLCBtZXRob2QgInZlcmlmeV91Zml4ZWRueG1fZnJvbV9ieXRlcyhieXRlW10pdWZpeGVkMzJ4OCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2J5dGVzKGJ5dGVbXSl1Zml4ZWQyNTZ4MTYiLCBtZXRob2QgInZlcmlmeV91Zml4ZWRueG1fZnJvbV9sb2coYnl0ZVtdKXVmaXhlZDMyeDgiLCBtZXRob2QgInZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2coYnl0ZVtdKXVmaXhlZDI1NngxNiIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19pbml0KHN0cmluZylzdHJpbmciLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfYWRkKHN0cmluZyxzdHJpbmcpc3RyaW5nIiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2VxKHN0cmluZyxzdHJpbmcpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19ieXRlcyhzdHJpbmcpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2Zyb21fYnl0ZXMoYnl0ZVtdKXN0cmluZyIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19mcm9tX2xvZyhieXRlW10pc3RyaW5nIiwgbWV0aG9kICJ2ZXJpZnlfYm9vbF9ieXRlcyhib29sKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2Jvb2xfZnJvbV9ieXRlcyhieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2Jvb2xfZnJvbV9sb2coYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9lbWl0KHN0cmluZyx1aW50NTEyLHVpbnQ2NCxieXRlW10sdWludDY0LGJvb2wsYnl0ZVtdLHN0cmluZyx1aW50NjQsdWludDI1Nix1Zml4ZWQzMng4LHVmaXhlZDI1NngxNixib29sLGJ5dGVbXSxieXRlW10sYnl0ZVtdKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCB2ZXJpZnlfdWludG5fdWludG5fZXEgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2VxIHZlcmlmeV91aW50bl9iaWd1aW50bl9lcSB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZXEgdmVyaWZ5X3VpbnRuX3VpbnRuX25lIHZlcmlmeV9iaWd1aW50bl91aW50bl9uZSB2ZXJpZnlfdWludG5fYmlndWludG5fbmUgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX25lIHZlcmlmeV91aW50bl91aW50bl9sdCB2ZXJpZnlfYmlndWludG5fdWludG5fbHQgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0IHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdCB2ZXJpZnlfdWludG5fdWludG5fbGUgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlIHZlcmlmeV91aW50bl9iaWd1aW50bl9sZSB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbGUgdmVyaWZ5X3VpbnRuX3VpbnRuX2d0IHZlcmlmeV9iaWd1aW50bl91aW50bl9ndCB2ZXJpZnlfdWludG5fYmlndWludG5fZ3QgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0IHZlcmlmeV91aW50bl91aW50bl9nZSB2ZXJpZnlfYmlndWludG5fdWludG5fZ2UgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2dlIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9nZSB2ZXJpZnlfdWludG5faW5pdCB2ZXJpZnlfYmlndWludG5faW5pdCB2ZXJpZnlfdWludG5fZnJvbV9ieXRlcyB2ZXJpZnlfYmlndWludG5fZnJvbV9ieXRlcyB2ZXJpZnlfdWludG5fZnJvbV9sb2cgdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nIHZlcmlmeV9iaWd1aW50bl9hc191aW50NjQgdmVyaWZ5X2JpZ3VpbnRuX2FzX2JpZ3VpbnQgdmVyaWZ5X3VpbnRuNjRfYXNfdWludDY0IHZlcmlmeV91aW50bjY0X2FzX2JpZ3VpbnQgdmVyaWZ5X3VmaXhlZG54bV9ieXRlcyB2ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzIHZlcmlmeV91Zml4ZWRueG1fZnJvbV9ieXRlcyB2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fYnl0ZXMgdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZyB2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nIHZlcmlmeV9zdHJpbmdfaW5pdCB2ZXJpZnlfc3RyaW5nX2FkZCB2ZXJpZnlfc3RyaW5nX2VxIHZlcmlmeV9zdHJpbmdfYnl0ZXMgdmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzIHZlcmlmeV9zdHJpbmdfZnJvbV9sb2cgdmVyaWZ5X2Jvb2xfYnl0ZXMgdmVyaWZ5X2Jvb2xfZnJvbV9ieXRlcyB2ZXJpZnlfYm9vbF9mcm9tX2xvZyB2ZXJpZnlfZW1pdAogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDU3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX2VxW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTEKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChhX2JpZ3VpbnQpID09IGFyYzQuVUludDY0KGJfYmlndWludCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgZGlnIDEKICAgIGJ8CiAgICBkaWcgMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgY292ZXIgMgogICAgYnwKICAgIGI9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9lcVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50bl91aW50bl9lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxNwogICAgLy8gcmV0dXJuIGFyYzQuVUludDUxMihhX2JpZ3VpbnQpID09IGFyYzQuVUludDY0KGJfYmlndWludCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBifAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBifAogICAgYj09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9iaWd1aW50bl9lcVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMwogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KGFfYmlndWludCkgPT0gYXJjNC5VSW50NTEyKGJfYmlndWludCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgYnwKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBifAogICAgYj09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyOQogICAgLy8gcmV0dXJuIGFyYzQuVUludDUxMihhX2JpZ3VpbnQpID09IGFyYzQuVUludDUxMihiX2JpZ3VpbnQpCiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgZGlnIDEKICAgIGJ8CiAgICBkaWcgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGNvdmVyIDIKICAgIGJ8CiAgICBiPT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX25lW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3VpbnRuX3VpbnRuX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjM1CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoYV9iaWd1aW50KSAhPSBhcmM0LlVJbnQ2NChiX2JpZ3VpbnQpCiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICB1bmNvdmVyIDIKICAgIGRpZyAxCiAgICBifAogICAgZGlnIDIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGNvdmVyIDIKICAgIGJ8CiAgICBiIT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjQxCiAgICAvLyByZXR1cm4gYXJjNC5VSW50NTEyKGFfYmlndWludCkgIT0gYXJjNC5VSW50NjQoYl9iaWd1aW50KQogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBiIT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6NDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoYV9iaWd1aW50KSAhPSBhcmM0LlVJbnQ1MTIoYl9iaWd1aW50KQogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBifAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBiIT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX25lW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6NDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjUzCiAgICAvLyByZXR1cm4gYXJjNC5VSW50NTEyKGFfYmlndWludCkgIT0gYXJjNC5VSW50NTEyKGJfYmlndWludCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBkaWcgMQogICAgYnwKICAgIGRpZyAyCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgY292ZXIgMgogICAgYnwKICAgIGIhPQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6NDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fdWludG5fbHRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludG5fdWludG5fbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6NTkKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChhX2JpZ3VpbnQpIDwgYXJjNC5VSW50NjQoYl9iaWd1aW50KQogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBkaWcgMQogICAgYnwKICAgIGRpZyAyCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBjb3ZlciAyCiAgICBifAogICAgYjwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6NjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjY1CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NTEyKGFfYmlndWludCkgPCBhcmM0LlVJbnQ2NChiX2JpZ3VpbnQpCiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgYnwKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgYnwKICAgIGI8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo2MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9iaWd1aW50bl9sdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9sdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo3MQogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KGFfYmlndWludCkgPCBhcmM0LlVJbnQ1MTIoYl9iaWd1aW50KQogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBifAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBiPAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6NjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fbHRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6NzcKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ1MTIoYV9iaWd1aW50KSA8IGFyYzQuVUludDUxMihiX2JpZ3VpbnQpCiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgZGlnIDEKICAgIGJ8CiAgICBkaWcgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGNvdmVyIDIKICAgIGJ8CiAgICBiPAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6NzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fdWludG5fbGVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludG5fdWludG5fbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6ODMKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChhX2JpZ3VpbnQpIDw9IGFyYzQuVUludDY0KGJfYmlndWludCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgZGlnIDEKICAgIGJ8CiAgICBkaWcgMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgY292ZXIgMgogICAgYnwKICAgIGI8PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6NzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fdWludG5fbGVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludG5fdWludG5fbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo4NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6ODkKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ1MTIoYV9iaWd1aW50KSA8PSBhcmM0LlVJbnQ2NChiX2JpZ3VpbnQpCiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgYnwKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgYnwKICAgIGI8PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6ODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fbGVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludG5fYmlndWludG5fbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6OTUKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChhX2JpZ3VpbnQpIDw9IGFyYzQuVUludDUxMihiX2JpZ3VpbnQpCiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgYnwKICAgIGI8PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fbGVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludG5fYmlndWludG5fbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTAxCiAgICAvLyByZXR1cm4gYXJjNC5VSW50NTEyKGFfYmlndWludCkgPD0gYXJjNC5VSW50NTEyKGJfYmlndWludCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBkaWcgMQogICAgYnwKICAgIGRpZyAyCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgY292ZXIgMgogICAgYnwKICAgIGI8PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6OTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fdWludG5fZ3Rbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludG5fdWludG5fZ3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEwNwogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KGFfYmlndWludCkgPiBhcmM0LlVJbnQ2NChiX2JpZ3VpbnQpCiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICB1bmNvdmVyIDIKICAgIGRpZyAxCiAgICBifAogICAgZGlnIDIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGNvdmVyIDIKICAgIGJ8CiAgICBiPgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMTMKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ1MTIoYV9iaWd1aW50KSA+IGFyYzQuVUludDY0KGJfYmlndWludCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBifAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBifAogICAgYj4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9iaWd1aW50bl9ndFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjExNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTE5CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoYV9iaWd1aW50KSA+IGFyYzQuVUludDUxMihiX2JpZ3VpbnQpCiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgYnwKICAgIGI+CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3Rbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEyNQogICAgLy8gcmV0dXJuIGFyYzQuVUludDUxMihhX2JpZ3VpbnQpID4gYXJjNC5VSW50NTEyKGJfYmlndWludCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBkaWcgMQogICAgYnwKICAgIGRpZyAyCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgY292ZXIgMgogICAgYnwKICAgIGI+CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fdWludG5fZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludG5fdWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEzMQogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KGFfYmlndWludCkgPj0gYXJjNC5VSW50NjQoYl9iaWd1aW50KQogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBkaWcgMQogICAgYnwKICAgIGRpZyAyCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBjb3ZlciAyCiAgICBifAogICAgYj49CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fdWludG5fZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludG5fdWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEzNwogICAgLy8gcmV0dXJuIGFyYzQuVUludDUxMihhX2JpZ3VpbnQpID49IGFyYzQuVUludDY0KGJfYmlndWludCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBifAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBifAogICAgYj49CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludG5fYmlndWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE0MwogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KGFfYmlndWludCkgPj0gYXJjNC5VSW50NTEyKGJfYmlndWludCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgYnwKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBifAogICAgYj49CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxNDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE0OQogICAgLy8gcmV0dXJuIGFyYzQuVUludDUxMihhX2JpZ3VpbnQpID49IGFyYzQuVUludDUxMihiX2JpZ3VpbnQpCiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgZGlnIDEKICAgIGJ8CiAgICBkaWcgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGNvdmVyIDIKICAgIGJ8CiAgICBiPj0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9pbml0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3VpbnRuX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxNTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTU0CiAgICAvLyByZXR1cm4gYXJjNC5VSW50MzIoYV9iaWd1aW50KQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgNAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgcHVzaGludCA0CiAgICBiemVybwogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2luaXRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludG5faW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxNTkKICAgIC8vIHJldHVybiBhcmM0LlVJbnQyNTYoYV9iaWd1aW50KQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHB1c2hpbnQgMzIKICAgIGJ6ZXJvCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTU2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fZnJvbV9ieXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50bl9mcm9tX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2Zyb21fYnl0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludG5fZnJvbV9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9mcm9tX2xvZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50bl9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE3MQogICAgLy8gcmV0dXJuIGFyYzQuVUludDMyLmZyb21fbG9nKGEpCiAgICBkdXAKICAgIGV4dHJhY3QgNiAwCiAgICBzd2FwCiAgICBleHRyYWN0IDIgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGxvZyB2YWx1ZSBpcyBub3QgdGhlIHJlc3VsdCBvZiBhbiBBQkkgcmV0dXJuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxNjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9mcm9tX2xvZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50bl9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE3NQogICAgLy8gcmV0dXJuIGFyYzQuVUludDI1Ni5mcm9tX2xvZyhhKQogICAgZHVwCiAgICBleHRyYWN0IDYgMAogICAgc3dhcAogICAgZXh0cmFjdCAyIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBsb2cgdmFsdWUgaXMgbm90IHRoZSByZXN1bHQgb2YgYW4gQUJJIHJldHVybgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYXNfdWludDY0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRuX2FzX3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxODAKICAgIC8vIHJldHVybiBhcmM0LlVJbnQyNTYoYV9iaWd1aW50KS5hc191aW50NjQoKQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHB1c2hpbnQgMzIKICAgIGJ6ZXJvCiAgICBifAogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICAtCiAgICBpbnRjXzEgLy8gOAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTc3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZXh0cmFjdDMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2FzX2JpZ3VpbnRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludG5fYXNfYmlndWludDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxODUKICAgIC8vIHJldHVybiBhcmM0LlVJbnQyNTYoYV9iaWd1aW50KS5hc19iaWd1aW50KCkKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBwdXNoaW50IDMyCiAgICBiemVybwogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGJ8CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bjY0X2FzX3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50bjY0X2FzX3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE4NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxOTAKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChhX2JpZ3VpbnQpLmFzX3VpbnQ2NCgpCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE4NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuNjRfYXNfYmlndWludFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50bjY0X2FzX2JpZ3VpbnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTk1CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoYV9iaWd1aW50KS5hc19iaWd1aW50KCkKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgYnwKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VmaXhlZG54bV9ieXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91Zml4ZWRueG1fYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxOTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VmaXhlZG54bV9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjIwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91Zml4ZWRueG1fZnJvbV9ieXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91Zml4ZWRueG1fZnJvbV9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjIwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9ieXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjIxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91Zml4ZWRueG1fZnJvbV9sb2dbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjI1CiAgICAvLyByZXR1cm4gYXJjNC5VRml4ZWROeE1bdHlwaW5nLkxpdGVyYWxbMzJdLCB0eXBpbmcuTGl0ZXJhbFs4XV0uZnJvbV9sb2coYSkKICAgIGR1cAogICAgZXh0cmFjdCA2IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMiA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gbG9nIHZhbHVlIGlzIG5vdCB0aGUgcmVzdWx0IG9mIGFuIEFCSSByZXR1cm4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjIyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMzEKICAgIC8vIHJldHVybiBhcmM0LkJpZ1VGaXhlZE54TVt0eXBpbmcuTGl0ZXJhbFsyNTZdLCB0eXBpbmcuTGl0ZXJhbFsxNl1dLmZyb21fbG9nKGEpCiAgICBkdXAKICAgIGV4dHJhY3QgNiAwCiAgICBzd2FwCiAgICBleHRyYWN0IDIgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGxvZyB2YWx1ZSBpcyBub3QgdGhlIHJlc3VsdCBvZiBhbiBBQkkgcmV0dXJuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfaW5pdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9zdHJpbmdfaW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjIzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjM1CiAgICAvLyByZXN1bHQgPSBhcmM0LlN0cmluZyhTdHJpbmcoIkhlbGxvLCAiKSArIGEpCiAgICBwdXNoYnl0ZXMgIkhlbGxvLCAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2FkZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9zdHJpbmdfYWRkOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI0MAogICAgLy8gcmVzdWx0ID0gYSArIGIKICAgIGV4dHJhY3QgMiAwCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjIzOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfZXFbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfc3RyaW5nX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjQ1CiAgICAvLyByZXR1cm4gYSA9PSBiCiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3N0cmluZ19ieXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9zdHJpbmdfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyNDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2Zyb21fYnl0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfc3RyaW5nX2Zyb21fYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyNTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2Zyb21fbG9nW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3N0cmluZ19mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI1OAogICAgLy8gcmV0dXJuIGFyYzQuU3RyaW5nLmZyb21fbG9nKGEpCiAgICBkdXAKICAgIGV4dHJhY3QgNiAwCiAgICBzd2FwCiAgICBleHRyYWN0IDIgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGxvZyB2YWx1ZSBpcyBub3QgdGhlIHJlc3VsdCBvZiBhbiBBQkkgcmV0dXJuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ib29sX2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2Jvb2xfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0UHJpbWl0aXZlT3BzLmNvbnRyYWN0LkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYm9vbF9mcm9tX2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2Jvb2xfZnJvbV9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI2NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFyYzRQcmltaXRpdmVPcHMuY29udHJhY3QuQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ib29sX2Zyb21fbG9nW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2Jvb2xfZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyNjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNFByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyNzAKICAgIC8vIHJldHVybiBhcmM0LkJvb2wuZnJvbV9sb2coYSkKICAgIGR1cAogICAgZXh0cmFjdCA2IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMiA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gbG9nIHZhbHVlIGlzIG5vdCB0aGUgcmVzdWx0IG9mIGFuIEFCSSByZXR1cm4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNFByaW1pdGl2ZU9wcy5jb250cmFjdC5BcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2VtaXRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfZW1pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI3MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxNAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDE1CiAgICBkdXAKICAgIGludGNfMyAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIHB1c2hpbnQgMgogICAgZXh0cmFjdF91aW50MTYKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxNQogICAgZHVwCiAgICBwdXNoaW50IDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6Mjk2CiAgICAvLyBhcmM0LmVtaXQoU3dhcHBlZEFyYzQobSwgbiwgbywgcCwgcSwgYXJjNF9yLCBhcmM0X3MsIGFyYzRfdCkpCiAgICBkaWcgNwogICAgZGlnIDcKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGNvbmNhdAogICAgZGlnIDUKICAgIGNvbmNhdAogICAgZGlnIDQKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDA1NAogICAgY29uY2F0CiAgICBkaWcgMgogICAgbGVuCiAgICBwdXNoaW50IDg0CiAgICBkaWcgMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg2NmJiMDMzMyAvLyBtZXRob2QgIlN3YXBwZWRBcmM0KHVpbnQ2NCx1aW50MjU2LHVmaXhlZDMyeDgsdWZpeGVkMjU2eDE2LGJvb2wsdWludDhbM10sdWludDE2W10sKHVpbnQzMix1aW50NjQsc3RyaW5nKSkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRQcmltaXRpdmVPcHMvY29udHJhY3QucHk6Mjk3LTMxNQogICAgLy8gYXJjNC5lbWl0KAogICAgLy8gICAgICJTd2FwcGVkIiwKICAgIC8vICAgICBhLAogICAgLy8gICAgIGIsCiAgICAvLyAgICAgYywKICAgIC8vICAgICBkLmNvcHkoKSwKICAgIC8vICAgICBlLAogICAgLy8gICAgIGYsCiAgICAvLyAgICAgZy5jb3B5KCksCiAgICAvLyAgICAgaCwKICAgIC8vICAgICBtLAogICAgLy8gICAgIG4sCiAgICAvLyAgICAgbywKICAgIC8vICAgICBwLAogICAgLy8gICAgIHEsCiAgICAvLyAgICAgYXJjNF9yLmNvcHkoKSwKICAgIC8vICAgICBhcmM0X3MuY29weSgpLAogICAgLy8gICAgIGFyYzRfdCwKICAgIC8vICkKICAgIGRpZyAxNgogICAgbGVuCiAgICBwdXNoaW50IDE3MwogICAgKwogICAgcHVzaGJ5dGVzIDB4MDBhZAogICAgdW5jb3ZlciAxNwogICAgY29uY2F0CiAgICB1bmNvdmVyIDE2CiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBkaWcgMTUKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBzd2FwCiAgICB1bmNvdmVyIDE0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMTMKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIGRpZyAxMgogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMTEKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBzd2FwCiAgICB1bmNvdmVyIDEwCiAgICBjb25jYXQKICAgIHVuY292ZXIgOQogICAgY29uY2F0CiAgICB1bmNvdmVyIDgKICAgIGNvbmNhdAogICAgdW5jb3ZlciA3CiAgICBjb25jYXQKICAgIHVuY292ZXIgNgogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIHVuY292ZXIgNQogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGVjMzMxOWJiIC8vIG1ldGhvZCAiU3dhcHBlZChzdHJpbmcsdWludDUxMix1aW50NjQsYnl0ZVtdLHVpbnQ2NCxib29sLGJ5dGVbXSxzdHJpbmcsdWludDY0LHVpbnQyNTYsdWZpeGVkMzJ4OCx1Zml4ZWQyNTZ4MTYsYm9vbCx1aW50OFszXSx1aW50MTZbXSwodWludDMyLHVpbnQ2NCxzdHJpbmcpKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBsb2cKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjMxNi0zMzQKICAgIC8vIGFyYzQuZW1pdCgKICAgIC8vICAgICAiU3dhcHBlZChzdHJpbmcsdWludDUxMix1aW50NjQsYnl0ZVtdLHVpbnQ2NCxib29sLGJ5dGVbXSxzdHJpbmcsdWludDY0LHVpbnQyNTYsdWZpeGVkMzJ4OCx1Zml4ZWQyNTZ4MTYsYm9vbCx1aW50OFszXSx1aW50MTZbXSwodWludDMyLHVpbnQ2NCxzdHJpbmcpKSIsCiAgICAvLyAgICAgYSwKICAgIC8vICAgICBiLAogICAgLy8gICAgIGMsCiAgICAvLyAgICAgZC5jb3B5KCksCiAgICAvLyAgICAgZSwKICAgIC8vICAgICBmLAogICAgLy8gICAgIGcuY29weSgpLAogICAgLy8gICAgIGgsCiAgICAvLyAgICAgbSwKICAgIC8vICAgICBuLAogICAgLy8gICAgIG8sCiAgICAvLyAgICAgcCwKICAgIC8vICAgICBxLAogICAgLy8gICAgIGFyYzRfci5jb3B5KCksCiAgICAvLyAgICAgYXJjNF9zLmNvcHkoKSwKICAgIC8vICAgICBhcmM0X3QsCiAgICAvLyApCiAgICBsb2cKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0UHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI3MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAEAQhAACYCBBUffHUBADEbQQFtMRkURDEYRIIyBJbxQRYE7WZglgQsoDUrBIWQfUAELL7EWwQHZm/ZBDcLq9MEK2s+8AQznal8BHiY7ZcEHxMM7ATHSGZOBHpGDLEE3KsfAQSX2QZNBM4GwqAE3NvO4AR3pLaNBE9UBiYECVrtQQTjt+kYBFUzcAgEm7HNZgSBSE2dBJoD3xAE0/DkSwSYLbIzBK/73w4EKIr3bgSL2EoEBDArigoEM3riCwRuJZJwBHnjX3cEDxV0/gSyyxO+BNBZ7qcETMTBVwQ9F6xuBPfz1fwE+Mj41QRD9xYqBELgkHUE2Vb1dQRsAWDfBKiQFQsECy9MPwSdudMnBOTZUKEEtgXoDDYaAI4yAAkANwBlAJMAwQDvAR0BSwF5AacB1QIDAjECXwKNArsC6QMXA0UDcwOhA88D/QQrBFkEbwSFBJEEnQSxBMUE5gUEBRgFNAVFBVYFYgVuBYIFlgW1BdAF4gXzBf8GEwYkBjAGRAAxGRQxGBQQQzYaAVcCADYaAlcCAEsBFSMORCOvTwJLAatLAhUjDkROAquoKSVPAlQoTFCwIkM2GgFXAgA2GgJXAgBLARUkDkQkr08Cq0sBFSMORCOvTwKrqCklTwJUKExQsCJDNhoBVwIANhoCVwIASwEVIw5EI69PAqtLARUkDkQkr08Cq6gpJU8CVChMULAiQzYaAVcCADYaAlcCAEsBFSQORCSvTwJLAatLAhUkDkROAquoKSVPAlQoTFCwIkM2GgFXAgA2GgJXAgBLARUjDkQjr08CSwGrSwIVIw5ETgKrqSklTwJUKExQsCJDNhoBVwIANhoCVwIASwEVJA5EJK9PAqtLARUjDkQjr08Cq6kpJU8CVChMULAiQzYaAVcCADYaAlcCAEsBFSMORCOvTwKrSwEVJA5EJK9PAqupKSVPAlQoTFCwIkM2GgFXAgA2GgJXAgBLARUkDkQkr08CSwGrSwIVJA5ETgKrqSklTwJUKExQsCJDNhoBVwIANhoCVwIASwEVIw5EI69PAksBq0sCFSMORE4Cq6QpJU8CVChMULAiQzYaAVcCADYaAlcCAEsBFSQORCSvTwKrSwEVIw5EI69PAqukKSVPAlQoTFCwIkM2GgFXAgA2GgJXAgBLARUjDkQjr08Cq0sBFSQORCSvTwKrpCklTwJUKExQsCJDNhoBVwIANhoCVwIASwEVJA5EJK9PAksBq0sCFSQORE4Cq6QpJU8CVChMULAiQzYaAVcCADYaAlcCAEsBFSMORCOvTwJLAatLAhUjDkROAqumKSVPAlQoTFCwIkM2GgFXAgA2GgJXAgBLARUkDkQkr08Cq0sBFSMORCOvTwKrpiklTwJUKExQsCJDNhoBVwIANhoCVwIASwEVIw5EI69PAqtLARUkDkQkr08Cq6YpJU8CVChMULAiQzYaAVcCADYaAlcCAEsBFSQORCSvTwJLAatLAhUkDkROAqumKSVPAlQoTFCwIkM2GgFXAgA2GgJXAgBLARUjDkQjr08CSwGrSwIVIw5ETgKrpSklTwJUKExQsCJDNhoBVwIANhoCVwIASwEVJA5EJK9PAqtLARUjDkQjr08Cq6UpJU8CVChMULAiQzYaAVcCADYaAlcCAEsBFSMORCOvTwKrSwEVJA5EJK9PAqulKSVPAlQoTFCwIkM2GgFXAgA2GgJXAgBLARUkDkQkr08CSwGrSwIVJA5ETgKrpSklTwJUKExQsCJDNhoBVwIANhoCVwIASwEVIw5EI69PAksBq0sCFSMORE4Cq6cpJU8CVChMULAiQzYaAVcCADYaAlcCAEsBFSQORCSvTwKrSwEVIw5EI69PAqunKSVPAlQoTFCwIkM2GgFXAgA2GgJXAgBLARUjDkQjr08Cq0sBFSQORCSvTwKrpyklTwJUKExQsCJDNhoBVwIANhoCVwIASwEVJA5EJK9PAksBq0sCFSQORE4Cq6cpJU8CVChMULAiQzYaAVcCAEkVgQQORIEEr6soTFCwIkM2GgFXAgBJFYEgDkSBIK+rKExQsCJDNhoBVwIAKExQsCJDNhoBVwIAKExQsCJDNhoBSVcGAExXAgQoEkQoTFCwIkM2GgFJVwYATFcCBCgSRChMULAiQzYaAVcCAEkVgSAORIEgr6tJkyQOREkVIwkjWChMULAiQzYaAVcCAEkVgSAORIEgr6tJFSQORCSvqyhMULAiQzYaAVcCAEkVIw5EI6+rKExQsCJDNhoBVwIASRUjDkQjr6tJFSQORCSvqyhMULAiQzYaAUkVFlcGAkxQKExQsCJDNhoBSRUWVwYCTFAoTFCwIkM2GgFXAgAoTFCwIkM2GgFXAgAoTFCwIkM2GgFJVwYATFcCBCgSRChMULAiQzYaAUlXBgBMVwIEKBJEKExQsCJDNhoBVwIAgAdIZWxsbywgTFBJFRZXBgJMUChMULAiQzYaATYaAlcCAFBJVwIAFRZXBgJcAChMULAiQzYaATYaAhIpJU8CVChMULAiQzYaAUkVFlcGAkxQKExQsCJDNhoBVwIAKExQsCJDNhoBSVcGAExXAgQoEkQoTFCwIkM2GgFJFRZXBgJMUChMULAiQzYaAVcCAChMULAiQzYaAUlXBgBMVwIEKBJEKExQsCJDNhoBNhoCNhoDNhoENhoFNhoGNhoHNhoINhoJNhoKNhoLNhoMNhoNNhoOVwIANhoPSSVZSwGBAllSVwIANhoPSYECWUsBFVJXAgBLB0sHUEsGUEsFUEsEUEsDUIACAFRQSwIVgVRLAQgWVwYCTwJMUEsDUEsCUIAEZrsDM0xQsEsQFYGtAQiAAgCtTxFQTxBQSwEWVwYCUEsPFU8CCExPDlBPDVBLARZXBgJQSwwVTwIISRZXBgJPAkxQSwsVTwIITE8KUE8JUE8IUE8HUE8GUE8FUEsBFlcGAlBMTwIIFlcGAlBPBlBPBVBPBFBPA1BPAlBMUIAE7DMZu0xQSbCwIkM=","clear":"C4EBQw=="},"events":[{"name":"SwappedArc4","args":[{"type":"uint64","name":"m"},{"type":"uint256","name":"n"},{"type":"ufixed32x8","name":"o"},{"type":"ufixed256x16","name":"p"},{"type":"bool","name":"q"},{"type":"uint8[3]","name":"r"},{"type":"uint16[]","name":"s"},{"type":"(uint32,uint64,string)","name":"t"}]},{"name":"Swapped","args":[{"type":"string","name":"field1"},{"type":"uint512","name":"field2"},{"type":"uint64","name":"field3"},{"type":"byte[]","name":"field4"},{"type":"uint64","name":"field5"},{"type":"bool","name":"field6"},{"type":"byte[]","name":"field7"},{"type":"string","name":"field8"},{"type":"uint64","name":"field9"},{"type":"uint256","name":"field10"},{"type":"ufixed32x8","name":"field11"},{"type":"ufixed256x16","name":"field12"},{"type":"bool","name":"field13"},{"type":"uint8[3]","name":"field14"},{"type":"uint16[]","name":"field15"},{"type":"(uint32,uint64,string)","name":"field16"}]}],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the Arc4PrimitiveOpsContract contract + */ +export type Arc4PrimitiveOpsContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'verify_uintn_uintn_eq(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguintn_uintn_eq(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_uintn_biguintn_eq(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguintn_biguintn_eq(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_uintn_uintn_ne(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguintn_uintn_ne(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_uintn_biguintn_ne(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguintn_biguintn_ne(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_uintn_uintn_lt(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguintn_uintn_lt(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_uintn_biguintn_lt(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguintn_biguintn_lt(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_uintn_uintn_le(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguintn_uintn_le(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_uintn_biguintn_le(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguintn_biguintn_le(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_uintn_uintn_gt(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguintn_uintn_gt(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_uintn_biguintn_gt(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguintn_biguintn_gt(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_uintn_uintn_ge(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguintn_uintn_ge(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_uintn_biguintn_ge(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguintn_biguintn_ge(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_uintn_init(byte[])uint32': { + a: Uint8Array + } + 'verify_biguintn_init(byte[])uint256': { + a: Uint8Array + } + 'verify_uintn_from_bytes(byte[])uint32': { + a: Uint8Array + } + 'verify_biguintn_from_bytes(byte[])uint256': { + a: Uint8Array + } + 'verify_uintn_from_log(byte[])uint32': { + a: Uint8Array + } + 'verify_biguintn_from_log(byte[])uint256': { + a: Uint8Array + } + 'verify_biguintn_as_uint64(byte[])uint64': { + a: Uint8Array + } + 'verify_biguintn_as_biguint(byte[])uint512': { + a: Uint8Array + } + 'verify_uintn64_as_uint64(byte[])uint64': { + a: Uint8Array + } + 'verify_uintn64_as_biguint(byte[])uint512': { + a: Uint8Array + } + 'verify_ufixednxm_bytes(ufixed32x8)byte[]': { + a: number + } + 'verify_bigufixednxm_bytes(ufixed256x16)byte[]': { + a: number + } + 'verify_ufixednxm_from_bytes(byte[])ufixed32x8': { + a: Uint8Array + } + 'verify_bigufixednxm_from_bytes(byte[])ufixed256x16': { + a: Uint8Array + } + 'verify_ufixednxm_from_log(byte[])ufixed32x8': { + a: Uint8Array + } + 'verify_bigufixednxm_from_log(byte[])ufixed256x16': { + a: Uint8Array + } + 'verify_string_init(string)string': { + a: string + } + 'verify_string_add(string,string)string': { + a: string + b: string + } + 'verify_string_eq(string,string)bool': { + a: string + b: string + } + 'verify_string_bytes(string)byte[]': { + a: string + } + 'verify_string_from_bytes(byte[])string': { + a: Uint8Array + } + 'verify_string_from_log(byte[])string': { + a: Uint8Array + } + 'verify_bool_bytes(bool)byte[]': { + a: boolean + } + 'verify_bool_from_bytes(byte[])bool': { + a: Uint8Array + } + 'verify_bool_from_log(byte[])bool': { + a: Uint8Array + } + 'verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void': { + a: string + b: bigint | number + c: bigint | number + d: Uint8Array + e: bigint | number + f: boolean + g: Uint8Array + h: string + m: bigint | number + n: bigint | number + o: number + p: number + q: boolean + r: Uint8Array + s: Uint8Array + t: Uint8Array + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'verify_uintn_uintn_eq(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguintn_uintn_eq(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_uintn_biguintn_eq(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguintn_biguintn_eq(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_uintn_uintn_ne(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguintn_uintn_ne(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_uintn_biguintn_ne(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguintn_biguintn_ne(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_uintn_uintn_lt(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguintn_uintn_lt(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_uintn_biguintn_lt(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguintn_biguintn_lt(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_uintn_uintn_le(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguintn_uintn_le(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_uintn_biguintn_le(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguintn_biguintn_le(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_uintn_uintn_gt(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguintn_uintn_gt(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_uintn_biguintn_gt(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguintn_biguintn_gt(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_uintn_uintn_ge(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguintn_uintn_ge(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_uintn_biguintn_ge(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguintn_biguintn_ge(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_uintn_init(byte[])uint32': [a: Uint8Array] + 'verify_biguintn_init(byte[])uint256': [a: Uint8Array] + 'verify_uintn_from_bytes(byte[])uint32': [a: Uint8Array] + 'verify_biguintn_from_bytes(byte[])uint256': [a: Uint8Array] + 'verify_uintn_from_log(byte[])uint32': [a: Uint8Array] + 'verify_biguintn_from_log(byte[])uint256': [a: Uint8Array] + 'verify_biguintn_as_uint64(byte[])uint64': [a: Uint8Array] + 'verify_biguintn_as_biguint(byte[])uint512': [a: Uint8Array] + 'verify_uintn64_as_uint64(byte[])uint64': [a: Uint8Array] + 'verify_uintn64_as_biguint(byte[])uint512': [a: Uint8Array] + 'verify_ufixednxm_bytes(ufixed32x8)byte[]': [a: number] + 'verify_bigufixednxm_bytes(ufixed256x16)byte[]': [a: number] + 'verify_ufixednxm_from_bytes(byte[])ufixed32x8': [a: Uint8Array] + 'verify_bigufixednxm_from_bytes(byte[])ufixed256x16': [a: Uint8Array] + 'verify_ufixednxm_from_log(byte[])ufixed32x8': [a: Uint8Array] + 'verify_bigufixednxm_from_log(byte[])ufixed256x16': [a: Uint8Array] + 'verify_string_init(string)string': [a: string] + 'verify_string_add(string,string)string': [a: string, b: string] + 'verify_string_eq(string,string)bool': [a: string, b: string] + 'verify_string_bytes(string)byte[]': [a: string] + 'verify_string_from_bytes(byte[])string': [a: Uint8Array] + 'verify_string_from_log(byte[])string': [a: Uint8Array] + 'verify_bool_bytes(bool)byte[]': [a: boolean] + 'verify_bool_from_bytes(byte[])bool': [a: Uint8Array] + 'verify_bool_from_log(byte[])bool': [a: Uint8Array] + 'verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void': [a: string, b: bigint | number, c: bigint | number, d: Uint8Array, e: bigint | number, f: boolean, g: Uint8Array, h: string, m: bigint | number, n: bigint | number, o: number, p: number, q: boolean, r: Uint8Array, s: Uint8Array, t: Uint8Array] + } +} + +/** + * The return type for each method + */ +export type Arc4PrimitiveOpsContractReturns = { + 'verify_uintn_uintn_eq(byte[],byte[])bool': boolean + 'verify_biguintn_uintn_eq(byte[],byte[])bool': boolean + 'verify_uintn_biguintn_eq(byte[],byte[])bool': boolean + 'verify_biguintn_biguintn_eq(byte[],byte[])bool': boolean + 'verify_uintn_uintn_ne(byte[],byte[])bool': boolean + 'verify_biguintn_uintn_ne(byte[],byte[])bool': boolean + 'verify_uintn_biguintn_ne(byte[],byte[])bool': boolean + 'verify_biguintn_biguintn_ne(byte[],byte[])bool': boolean + 'verify_uintn_uintn_lt(byte[],byte[])bool': boolean + 'verify_biguintn_uintn_lt(byte[],byte[])bool': boolean + 'verify_uintn_biguintn_lt(byte[],byte[])bool': boolean + 'verify_biguintn_biguintn_lt(byte[],byte[])bool': boolean + 'verify_uintn_uintn_le(byte[],byte[])bool': boolean + 'verify_biguintn_uintn_le(byte[],byte[])bool': boolean + 'verify_uintn_biguintn_le(byte[],byte[])bool': boolean + 'verify_biguintn_biguintn_le(byte[],byte[])bool': boolean + 'verify_uintn_uintn_gt(byte[],byte[])bool': boolean + 'verify_biguintn_uintn_gt(byte[],byte[])bool': boolean + 'verify_uintn_biguintn_gt(byte[],byte[])bool': boolean + 'verify_biguintn_biguintn_gt(byte[],byte[])bool': boolean + 'verify_uintn_uintn_ge(byte[],byte[])bool': boolean + 'verify_biguintn_uintn_ge(byte[],byte[])bool': boolean + 'verify_uintn_biguintn_ge(byte[],byte[])bool': boolean + 'verify_biguintn_biguintn_ge(byte[],byte[])bool': boolean + 'verify_uintn_init(byte[])uint32': number + 'verify_biguintn_init(byte[])uint256': bigint + 'verify_uintn_from_bytes(byte[])uint32': number + 'verify_biguintn_from_bytes(byte[])uint256': bigint + 'verify_uintn_from_log(byte[])uint32': number + 'verify_biguintn_from_log(byte[])uint256': bigint + 'verify_biguintn_as_uint64(byte[])uint64': bigint + 'verify_biguintn_as_biguint(byte[])uint512': bigint + 'verify_uintn64_as_uint64(byte[])uint64': bigint + 'verify_uintn64_as_biguint(byte[])uint512': bigint + 'verify_ufixednxm_bytes(ufixed32x8)byte[]': Uint8Array + 'verify_bigufixednxm_bytes(ufixed256x16)byte[]': Uint8Array + 'verify_ufixednxm_from_bytes(byte[])ufixed32x8': number + 'verify_bigufixednxm_from_bytes(byte[])ufixed256x16': number + 'verify_ufixednxm_from_log(byte[])ufixed32x8': number + 'verify_bigufixednxm_from_log(byte[])ufixed256x16': number + 'verify_string_init(string)string': string + 'verify_string_add(string,string)string': string + 'verify_string_eq(string,string)bool': boolean + 'verify_string_bytes(string)byte[]': Uint8Array + 'verify_string_from_bytes(byte[])string': string + 'verify_string_from_log(byte[])string': string + 'verify_bool_bytes(bool)byte[]': Uint8Array + 'verify_bool_from_bytes(byte[])bool': boolean + 'verify_bool_from_log(byte[])bool': boolean + 'verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void': void +} + +/** + * Defines the types of available calls and state of the Arc4PrimitiveOpsContract smart contract. + */ +export type Arc4PrimitiveOpsContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'verify_uintn_uintn_eq(byte[],byte[])bool' | 'verify_uintn_uintn_eq', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_uintn_eq(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_uintn_eq(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_eq(byte[],byte[])bool'] + }> + & Record<'verify_biguintn_uintn_eq(byte[],byte[])bool' | 'verify_biguintn_uintn_eq', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_uintn_eq(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_uintn_eq(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_eq(byte[],byte[])bool'] + }> + & Record<'verify_uintn_biguintn_eq(byte[],byte[])bool' | 'verify_uintn_biguintn_eq', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_biguintn_eq(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_biguintn_eq(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_eq(byte[],byte[])bool'] + }> + & Record<'verify_biguintn_biguintn_eq(byte[],byte[])bool' | 'verify_biguintn_biguintn_eq', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_biguintn_eq(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_biguintn_eq(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_eq(byte[],byte[])bool'] + }> + & Record<'verify_uintn_uintn_ne(byte[],byte[])bool' | 'verify_uintn_uintn_ne', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_uintn_ne(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_uintn_ne(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_ne(byte[],byte[])bool'] + }> + & Record<'verify_biguintn_uintn_ne(byte[],byte[])bool' | 'verify_biguintn_uintn_ne', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_uintn_ne(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_uintn_ne(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_ne(byte[],byte[])bool'] + }> + & Record<'verify_uintn_biguintn_ne(byte[],byte[])bool' | 'verify_uintn_biguintn_ne', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_biguintn_ne(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_biguintn_ne(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_ne(byte[],byte[])bool'] + }> + & Record<'verify_biguintn_biguintn_ne(byte[],byte[])bool' | 'verify_biguintn_biguintn_ne', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_biguintn_ne(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_biguintn_ne(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_ne(byte[],byte[])bool'] + }> + & Record<'verify_uintn_uintn_lt(byte[],byte[])bool' | 'verify_uintn_uintn_lt', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_uintn_lt(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_uintn_lt(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_lt(byte[],byte[])bool'] + }> + & Record<'verify_biguintn_uintn_lt(byte[],byte[])bool' | 'verify_biguintn_uintn_lt', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_uintn_lt(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_uintn_lt(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_lt(byte[],byte[])bool'] + }> + & Record<'verify_uintn_biguintn_lt(byte[],byte[])bool' | 'verify_uintn_biguintn_lt', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_biguintn_lt(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_biguintn_lt(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_lt(byte[],byte[])bool'] + }> + & Record<'verify_biguintn_biguintn_lt(byte[],byte[])bool' | 'verify_biguintn_biguintn_lt', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_biguintn_lt(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_biguintn_lt(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_lt(byte[],byte[])bool'] + }> + & Record<'verify_uintn_uintn_le(byte[],byte[])bool' | 'verify_uintn_uintn_le', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_uintn_le(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_uintn_le(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_le(byte[],byte[])bool'] + }> + & Record<'verify_biguintn_uintn_le(byte[],byte[])bool' | 'verify_biguintn_uintn_le', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_uintn_le(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_uintn_le(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_le(byte[],byte[])bool'] + }> + & Record<'verify_uintn_biguintn_le(byte[],byte[])bool' | 'verify_uintn_biguintn_le', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_biguintn_le(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_biguintn_le(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_le(byte[],byte[])bool'] + }> + & Record<'verify_biguintn_biguintn_le(byte[],byte[])bool' | 'verify_biguintn_biguintn_le', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_biguintn_le(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_biguintn_le(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_le(byte[],byte[])bool'] + }> + & Record<'verify_uintn_uintn_gt(byte[],byte[])bool' | 'verify_uintn_uintn_gt', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_uintn_gt(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_uintn_gt(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_gt(byte[],byte[])bool'] + }> + & Record<'verify_biguintn_uintn_gt(byte[],byte[])bool' | 'verify_biguintn_uintn_gt', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_uintn_gt(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_uintn_gt(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_gt(byte[],byte[])bool'] + }> + & Record<'verify_uintn_biguintn_gt(byte[],byte[])bool' | 'verify_uintn_biguintn_gt', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_biguintn_gt(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_biguintn_gt(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_gt(byte[],byte[])bool'] + }> + & Record<'verify_biguintn_biguintn_gt(byte[],byte[])bool' | 'verify_biguintn_biguintn_gt', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_biguintn_gt(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_biguintn_gt(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_gt(byte[],byte[])bool'] + }> + & Record<'verify_uintn_uintn_ge(byte[],byte[])bool' | 'verify_uintn_uintn_ge', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_uintn_ge(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_uintn_ge(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_ge(byte[],byte[])bool'] + }> + & Record<'verify_biguintn_uintn_ge(byte[],byte[])bool' | 'verify_biguintn_uintn_ge', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_uintn_ge(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_uintn_ge(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_ge(byte[],byte[])bool'] + }> + & Record<'verify_uintn_biguintn_ge(byte[],byte[])bool' | 'verify_uintn_biguintn_ge', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_biguintn_ge(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_biguintn_ge(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_ge(byte[],byte[])bool'] + }> + & Record<'verify_biguintn_biguintn_ge(byte[],byte[])bool' | 'verify_biguintn_biguintn_ge', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_biguintn_ge(byte[],byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_biguintn_ge(byte[],byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_ge(byte[],byte[])bool'] + }> + & Record<'verify_uintn_init(byte[])uint32' | 'verify_uintn_init', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_init(byte[])uint32'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_init(byte[])uint32'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_init(byte[])uint32'] + }> + & Record<'verify_biguintn_init(byte[])uint256' | 'verify_biguintn_init', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_init(byte[])uint256'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_init(byte[])uint256'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_init(byte[])uint256'] + }> + & Record<'verify_uintn_from_bytes(byte[])uint32' | 'verify_uintn_from_bytes', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_from_bytes(byte[])uint32'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_from_bytes(byte[])uint32'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_from_bytes(byte[])uint32'] + }> + & Record<'verify_biguintn_from_bytes(byte[])uint256' | 'verify_biguintn_from_bytes', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_from_bytes(byte[])uint256'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_from_bytes(byte[])uint256'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_from_bytes(byte[])uint256'] + }> + & Record<'verify_uintn_from_log(byte[])uint32' | 'verify_uintn_from_log', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn_from_log(byte[])uint32'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn_from_log(byte[])uint32'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn_from_log(byte[])uint32'] + }> + & Record<'verify_biguintn_from_log(byte[])uint256' | 'verify_biguintn_from_log', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_from_log(byte[])uint256'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_from_log(byte[])uint256'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_from_log(byte[])uint256'] + }> + & Record<'verify_biguintn_as_uint64(byte[])uint64' | 'verify_biguintn_as_uint64', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_as_uint64(byte[])uint64'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_as_uint64(byte[])uint64'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_as_uint64(byte[])uint64'] + }> + & Record<'verify_biguintn_as_biguint(byte[])uint512' | 'verify_biguintn_as_biguint', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_biguintn_as_biguint(byte[])uint512'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_biguintn_as_biguint(byte[])uint512'] + returns: Arc4PrimitiveOpsContractReturns['verify_biguintn_as_biguint(byte[])uint512'] + }> + & Record<'verify_uintn64_as_uint64(byte[])uint64' | 'verify_uintn64_as_uint64', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn64_as_uint64(byte[])uint64'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn64_as_uint64(byte[])uint64'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn64_as_uint64(byte[])uint64'] + }> + & Record<'verify_uintn64_as_biguint(byte[])uint512' | 'verify_uintn64_as_biguint', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_uintn64_as_biguint(byte[])uint512'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_uintn64_as_biguint(byte[])uint512'] + returns: Arc4PrimitiveOpsContractReturns['verify_uintn64_as_biguint(byte[])uint512'] + }> + & Record<'verify_ufixednxm_bytes(ufixed32x8)byte[]' | 'verify_ufixednxm_bytes', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_ufixednxm_bytes(ufixed32x8)byte[]'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_ufixednxm_bytes(ufixed32x8)byte[]'] + returns: Arc4PrimitiveOpsContractReturns['verify_ufixednxm_bytes(ufixed32x8)byte[]'] + }> + & Record<'verify_bigufixednxm_bytes(ufixed256x16)byte[]' | 'verify_bigufixednxm_bytes', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_bigufixednxm_bytes(ufixed256x16)byte[]'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_bigufixednxm_bytes(ufixed256x16)byte[]'] + returns: Arc4PrimitiveOpsContractReturns['verify_bigufixednxm_bytes(ufixed256x16)byte[]'] + }> + & Record<'verify_ufixednxm_from_bytes(byte[])ufixed32x8' | 'verify_ufixednxm_from_bytes', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_ufixednxm_from_bytes(byte[])ufixed32x8'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_ufixednxm_from_bytes(byte[])ufixed32x8'] + returns: Arc4PrimitiveOpsContractReturns['verify_ufixednxm_from_bytes(byte[])ufixed32x8'] + }> + & Record<'verify_bigufixednxm_from_bytes(byte[])ufixed256x16' | 'verify_bigufixednxm_from_bytes', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_bigufixednxm_from_bytes(byte[])ufixed256x16'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_bigufixednxm_from_bytes(byte[])ufixed256x16'] + returns: Arc4PrimitiveOpsContractReturns['verify_bigufixednxm_from_bytes(byte[])ufixed256x16'] + }> + & Record<'verify_ufixednxm_from_log(byte[])ufixed32x8' | 'verify_ufixednxm_from_log', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_ufixednxm_from_log(byte[])ufixed32x8'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_ufixednxm_from_log(byte[])ufixed32x8'] + returns: Arc4PrimitiveOpsContractReturns['verify_ufixednxm_from_log(byte[])ufixed32x8'] + }> + & Record<'verify_bigufixednxm_from_log(byte[])ufixed256x16' | 'verify_bigufixednxm_from_log', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_bigufixednxm_from_log(byte[])ufixed256x16'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_bigufixednxm_from_log(byte[])ufixed256x16'] + returns: Arc4PrimitiveOpsContractReturns['verify_bigufixednxm_from_log(byte[])ufixed256x16'] + }> + & Record<'verify_string_init(string)string' | 'verify_string_init', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_string_init(string)string'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_string_init(string)string'] + returns: Arc4PrimitiveOpsContractReturns['verify_string_init(string)string'] + }> + & Record<'verify_string_add(string,string)string' | 'verify_string_add', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_string_add(string,string)string'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_string_add(string,string)string'] + returns: Arc4PrimitiveOpsContractReturns['verify_string_add(string,string)string'] + }> + & Record<'verify_string_eq(string,string)bool' | 'verify_string_eq', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_string_eq(string,string)bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_string_eq(string,string)bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_string_eq(string,string)bool'] + }> + & Record<'verify_string_bytes(string)byte[]' | 'verify_string_bytes', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_string_bytes(string)byte[]'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_string_bytes(string)byte[]'] + returns: Arc4PrimitiveOpsContractReturns['verify_string_bytes(string)byte[]'] + }> + & Record<'verify_string_from_bytes(byte[])string' | 'verify_string_from_bytes', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_string_from_bytes(byte[])string'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_string_from_bytes(byte[])string'] + returns: Arc4PrimitiveOpsContractReturns['verify_string_from_bytes(byte[])string'] + }> + & Record<'verify_string_from_log(byte[])string' | 'verify_string_from_log', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_string_from_log(byte[])string'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_string_from_log(byte[])string'] + returns: Arc4PrimitiveOpsContractReturns['verify_string_from_log(byte[])string'] + }> + & Record<'verify_bool_bytes(bool)byte[]' | 'verify_bool_bytes', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_bool_bytes(bool)byte[]'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_bool_bytes(bool)byte[]'] + returns: Arc4PrimitiveOpsContractReturns['verify_bool_bytes(bool)byte[]'] + }> + & Record<'verify_bool_from_bytes(byte[])bool' | 'verify_bool_from_bytes', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_bool_from_bytes(byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_bool_from_bytes(byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_bool_from_bytes(byte[])bool'] + }> + & Record<'verify_bool_from_log(byte[])bool' | 'verify_bool_from_log', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_bool_from_log(byte[])bool'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_bool_from_log(byte[])bool'] + returns: Arc4PrimitiveOpsContractReturns['verify_bool_from_log(byte[])bool'] + }> + & Record<'verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void' | 'verify_emit', { + argsObj: Arc4PrimitiveOpsContractArgs['obj']['verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void'] + argsTuple: Arc4PrimitiveOpsContractArgs['tuple']['verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void'] + returns: Arc4PrimitiveOpsContractReturns['verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type Arc4PrimitiveOpsContractSignatures = keyof Arc4PrimitiveOpsContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type Arc4PrimitiveOpsContractNonVoidMethodSignatures = keyof Arc4PrimitiveOpsContractTypes['methods'] extends infer T ? T extends keyof Arc4PrimitiveOpsContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the Arc4PrimitiveOpsContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = Arc4PrimitiveOpsContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the Arc4PrimitiveOpsContract smart contract to the method's return type + */ +export type MethodReturn = Arc4PrimitiveOpsContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type Arc4PrimitiveOpsContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type Arc4PrimitiveOpsContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: Arc4PrimitiveOpsContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the Arc4PrimitiveOpsContract smart contract + */ +export abstract class Arc4PrimitiveOpsContractParamsFactory { + /** + * Constructs a no op call for the verify_uintn_uintn_eq(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnUintnEq(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_uintn_eq(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguintn_uintn_eq(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnUintnEq(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_uintn_eq(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uintn_biguintn_eq(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnBiguintnEq(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_biguintn_eq(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguintn_biguintn_eq(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnBiguintnEq(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_biguintn_eq(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uintn_uintn_ne(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnUintnNe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_uintn_ne(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguintn_uintn_ne(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnUintnNe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_uintn_ne(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uintn_biguintn_ne(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnBiguintnNe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_biguintn_ne(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguintn_biguintn_ne(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnBiguintnNe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_biguintn_ne(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uintn_uintn_lt(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnUintnLt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_uintn_lt(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguintn_uintn_lt(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnUintnLt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_uintn_lt(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uintn_biguintn_lt(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnBiguintnLt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_biguintn_lt(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguintn_biguintn_lt(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnBiguintnLt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_biguintn_lt(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uintn_uintn_le(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnUintnLe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_uintn_le(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguintn_uintn_le(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnUintnLe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_uintn_le(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uintn_biguintn_le(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnBiguintnLe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_biguintn_le(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguintn_biguintn_le(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnBiguintnLe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_biguintn_le(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uintn_uintn_gt(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnUintnGt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_uintn_gt(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguintn_uintn_gt(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnUintnGt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_uintn_gt(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uintn_biguintn_gt(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnBiguintnGt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_biguintn_gt(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguintn_biguintn_gt(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnBiguintnGt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_biguintn_gt(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uintn_uintn_ge(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnUintnGe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_uintn_ge(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguintn_uintn_ge(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnUintnGe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_uintn_ge(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uintn_biguintn_ge(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnBiguintnGe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_biguintn_ge(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguintn_biguintn_ge(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnBiguintnGe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_biguintn_ge(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uintn_init(byte[])uint32 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnInit(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_init(byte[])uint32' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_biguintn_init(byte[])uint256 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnInit(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_init(byte[])uint256' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_uintn_from_bytes(byte[])uint32 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnFromBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_from_bytes(byte[])uint32' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_biguintn_from_bytes(byte[])uint256 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnFromBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_from_bytes(byte[])uint256' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_uintn_from_log(byte[])uint32 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintnFromLog(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn_from_log(byte[])uint32' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_biguintn_from_log(byte[])uint256 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnFromLog(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_from_log(byte[])uint256' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_biguintn_as_uint64(byte[])uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnAsUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_as_uint64(byte[])uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_biguintn_as_biguint(byte[])uint512 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintnAsBiguint(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguintn_as_biguint(byte[])uint512' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_uintn64_as_uint64(byte[])uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintn64AsUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn64_as_uint64(byte[])uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_uintn64_as_biguint(byte[])uint512 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUintn64AsBiguint(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uintn64_as_biguint(byte[])uint512' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_ufixednxm_bytes(ufixed32x8)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUfixednxmBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_ufixednxm_bytes(ufixed32x8)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_bigufixednxm_bytes(ufixed256x16)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBigufixednxmBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bigufixednxm_bytes(ufixed256x16)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_ufixednxm_from_bytes(byte[])ufixed32x8 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUfixednxmFromBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_ufixednxm_from_bytes(byte[])ufixed32x8' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_bigufixednxm_from_bytes(byte[])ufixed256x16 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBigufixednxmFromBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bigufixednxm_from_bytes(byte[])ufixed256x16' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_ufixednxm_from_log(byte[])ufixed32x8 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUfixednxmFromLog(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_ufixednxm_from_log(byte[])ufixed32x8' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_bigufixednxm_from_log(byte[])ufixed256x16 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBigufixednxmFromLog(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bigufixednxm_from_log(byte[])ufixed256x16' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_string_init(string)string ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyStringInit(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_string_init(string)string' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_string_add(string,string)string ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyStringAdd(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_string_add(string,string)string' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_string_eq(string,string)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyStringEq(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_string_eq(string,string)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_string_bytes(string)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyStringBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_string_bytes(string)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_string_from_bytes(byte[])string ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyStringFromBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_string_from_bytes(byte[])string' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_string_from_log(byte[])string ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyStringFromLog(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_string_from_log(byte[])string' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_bool_bytes(bool)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBoolBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bool_bytes(bool)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_bool_from_bytes(byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBoolFromBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bool_from_bytes(byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_bool_from_log(byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBoolFromLog(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bool_from_log(byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyEmit(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c, params.args.d, params.args.e, params.args.f, params.args.g, params.args.h, params.args.m, params.args.n, params.args.o, params.args.p, params.args.q, params.args.r, params.args.s, params.args.t], + } + } +} + +/** + * A factory to create and deploy one or more instance of the Arc4PrimitiveOpsContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class Arc4PrimitiveOpsContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `Arc4PrimitiveOpsContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new Arc4PrimitiveOpsContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new Arc4PrimitiveOpsContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the Arc4PrimitiveOpsContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: Arc4PrimitiveOpsContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new Arc4PrimitiveOpsContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the Arc4PrimitiveOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the Arc4PrimitiveOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the Arc4PrimitiveOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new Arc4PrimitiveOpsContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the Arc4PrimitiveOpsContract smart contract + */ +export class Arc4PrimitiveOpsContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `Arc4PrimitiveOpsContractClient` + * + * @param appClient An `AppClient` instance which has been created with the Arc4PrimitiveOpsContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `Arc4PrimitiveOpsContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `Arc4PrimitiveOpsContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new Arc4PrimitiveOpsContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `Arc4PrimitiveOpsContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new Arc4PrimitiveOpsContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the Arc4PrimitiveOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnUintnEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnEq(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnUintnEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnEq(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnBiguintnEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnEq(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnBiguintnEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnEq(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnUintnNe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnNe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnUintnNe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnNe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnBiguintnNe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnNe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnBiguintnNe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnNe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnUintnLt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnLt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnUintnLt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnLt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnBiguintnLt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnLt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnBiguintnLt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnLt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnUintnLe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnLe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnUintnLe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnLe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnBiguintnLe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnLe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnBiguintnLe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnLe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnUintnGt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnGt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnUintnGt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnGt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnBiguintnGt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnGt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnBiguintnGt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnGt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnUintnGe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnGe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnUintnGe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnGe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnBiguintnGe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnGe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnBiguintnGe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnGe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_init(byte[])uint32` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnInit(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_init(byte[])uint256` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnInit(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_from_bytes(byte[])uint32` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnFromBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnFromBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_from_bytes(byte[])uint256` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnFromBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnFromBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_from_log(byte[])uint32` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintnFromLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnFromLog(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_from_log(byte[])uint256` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnFromLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnFromLog(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_as_uint64(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnAsUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnAsUint64(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_as_biguint(byte[])uint512` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintnAsBiguint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnAsBiguint(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn64_as_uint64(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintn64AsUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintn64AsUint64(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn64_as_biguint(byte[])uint512` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUintn64AsBiguint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintn64AsBiguint(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_ufixednxm_bytes(ufixed32x8)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUfixednxmBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUfixednxmBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bigufixednxm_bytes(ufixed256x16)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBigufixednxmBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBigufixednxmBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_ufixednxm_from_bytes(byte[])ufixed32x8` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUfixednxmFromBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUfixednxmFromBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bigufixednxm_from_bytes(byte[])ufixed256x16` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBigufixednxmFromBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBigufixednxmFromBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_ufixednxm_from_log(byte[])ufixed32x8` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUfixednxmFromLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyUfixednxmFromLog(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bigufixednxm_from_log(byte[])ufixed256x16` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBigufixednxmFromLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBigufixednxmFromLog(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_init(string)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyStringInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringInit(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_add(string,string)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyStringAdd: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringAdd(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_eq(string,string)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyStringEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringEq(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_bytes(string)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyStringBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_from_bytes(byte[])string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyStringFromBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringFromBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_from_log(byte[])string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyStringFromLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringFromLog(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bool_bytes(bool)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBoolBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBoolBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bool_from_bytes(byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBoolFromBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBoolFromBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bool_from_log(byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBoolFromLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyBoolFromLog(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyEmit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(Arc4PrimitiveOpsContractParamsFactory.verifyEmit(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the Arc4PrimitiveOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnUintnEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnEq(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnUintnEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnEq(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnBiguintnEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnEq(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnBiguintnEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnEq(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnUintnNe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnNe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnUintnNe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnNe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnBiguintnNe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnNe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnBiguintnNe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnNe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnUintnLt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnLt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnUintnLt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnLt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnBiguintnLt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnLt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnBiguintnLt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnLt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnUintnLe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnLe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnUintnLe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnLe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnBiguintnLe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnLe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnBiguintnLe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnLe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnUintnGt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnGt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnUintnGt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnGt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnBiguintnGt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnGt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnBiguintnGt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnGt(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnUintnGe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnGe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnUintnGe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnGe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnBiguintnGe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnGe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnBiguintnGe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnGe(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_init(byte[])uint32` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnInit(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_init(byte[])uint256` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnInit(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_from_bytes(byte[])uint32` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnFromBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnFromBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_from_bytes(byte[])uint256` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnFromBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnFromBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_from_log(byte[])uint32` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintnFromLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnFromLog(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_from_log(byte[])uint256` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnFromLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnFromLog(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_as_uint64(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnAsUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnAsUint64(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_as_biguint(byte[])uint512` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintnAsBiguint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnAsBiguint(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn64_as_uint64(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintn64AsUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintn64AsUint64(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn64_as_biguint(byte[])uint512` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUintn64AsBiguint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintn64AsBiguint(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_ufixednxm_bytes(ufixed32x8)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUfixednxmBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUfixednxmBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bigufixednxm_bytes(ufixed256x16)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBigufixednxmBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBigufixednxmBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_ufixednxm_from_bytes(byte[])ufixed32x8` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUfixednxmFromBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUfixednxmFromBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bigufixednxm_from_bytes(byte[])ufixed256x16` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBigufixednxmFromBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBigufixednxmFromBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_ufixednxm_from_log(byte[])ufixed32x8` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUfixednxmFromLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyUfixednxmFromLog(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bigufixednxm_from_log(byte[])ufixed256x16` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBigufixednxmFromLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBigufixednxmFromLog(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_init(string)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyStringInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringInit(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_add(string,string)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyStringAdd: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringAdd(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_eq(string,string)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyStringEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringEq(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_bytes(string)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyStringBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_from_bytes(byte[])string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyStringFromBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringFromBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_from_log(byte[])string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyStringFromLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringFromLog(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bool_bytes(bool)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBoolBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBoolBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bool_from_bytes(byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBoolFromBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBoolFromBytes(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bool_from_log(byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBoolFromLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyBoolFromLog(params)) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyEmit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(Arc4PrimitiveOpsContractParamsFactory.verifyEmit(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the Arc4PrimitiveOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnUintnEq: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnEq(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_eq(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnUintnEq: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnEq(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_eq(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnBiguintnEq: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnEq(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_eq(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnBiguintnEq: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnEq(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_eq(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnUintnNe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnNe(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_ne(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnUintnNe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnNe(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_ne(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnBiguintnNe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnNe(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_ne(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnBiguintnNe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnNe(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_ne(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnUintnLt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnLt(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_lt(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnUintnLt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnLt(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_lt(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnBiguintnLt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnLt(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_lt(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnBiguintnLt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnLt(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_lt(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnUintnLe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnLe(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_le(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnUintnLe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnLe(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_le(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnBiguintnLe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnLe(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_le(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnBiguintnLe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnLe(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_le(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnUintnGt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnGt(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_gt(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnUintnGt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnGt(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_gt(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnBiguintnGt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnGt(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_gt(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnBiguintnGt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnGt(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_gt(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_uintn_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnUintnGe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnUintnGe(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_ge(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_uintn_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnUintnGe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnUintnGe(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_ge(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_biguintn_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnBiguintnGe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnBiguintnGe(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_ge(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_biguintn_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnBiguintnGe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnBiguintnGe(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_ge(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_init(byte[])uint32` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnInit: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnInit(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_init(byte[])uint32'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_init(byte[])uint256` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnInit: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnInit(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_init(byte[])uint256'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_from_bytes(byte[])uint32` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnFromBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnFromBytes(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_from_bytes(byte[])uint32'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_from_bytes(byte[])uint256` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnFromBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnFromBytes(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_from_bytes(byte[])uint256'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn_from_log(byte[])uint32` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintnFromLog: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintnFromLog(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn_from_log(byte[])uint32'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_from_log(byte[])uint256` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnFromLog: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnFromLog(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_from_log(byte[])uint256'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_as_uint64(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnAsUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnAsUint64(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_as_uint64(byte[])uint64'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_biguintn_as_biguint(byte[])uint512` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintnAsBiguint: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBiguintnAsBiguint(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_biguintn_as_biguint(byte[])uint512'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn64_as_uint64(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintn64AsUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintn64AsUint64(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn64_as_uint64(byte[])uint64'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_uintn64_as_biguint(byte[])uint512` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUintn64AsBiguint: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUintn64AsBiguint(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_uintn64_as_biguint(byte[])uint512'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_ufixednxm_bytes(ufixed32x8)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUfixednxmBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUfixednxmBytes(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_ufixednxm_bytes(ufixed32x8)byte[]'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bigufixednxm_bytes(ufixed256x16)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBigufixednxmBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBigufixednxmBytes(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_bigufixednxm_bytes(ufixed256x16)byte[]'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_ufixednxm_from_bytes(byte[])ufixed32x8` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUfixednxmFromBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUfixednxmFromBytes(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_ufixednxm_from_bytes(byte[])ufixed32x8'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bigufixednxm_from_bytes(byte[])ufixed256x16` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBigufixednxmFromBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBigufixednxmFromBytes(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_bigufixednxm_from_bytes(byte[])ufixed256x16'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_ufixednxm_from_log(byte[])ufixed32x8` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUfixednxmFromLog: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyUfixednxmFromLog(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_ufixednxm_from_log(byte[])ufixed32x8'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bigufixednxm_from_log(byte[])ufixed256x16` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBigufixednxmFromLog: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBigufixednxmFromLog(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_bigufixednxm_from_log(byte[])ufixed256x16'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_init(string)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyStringInit: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringInit(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_string_init(string)string'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_add(string,string)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyStringAdd: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringAdd(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_string_add(string,string)string'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_eq(string,string)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyStringEq: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringEq(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_string_eq(string,string)bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_bytes(string)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyStringBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringBytes(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_string_bytes(string)byte[]'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_from_bytes(byte[])string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyStringFromBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringFromBytes(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_string_from_bytes(byte[])string'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_string_from_log(byte[])string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyStringFromLog: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyStringFromLog(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_string_from_log(byte[])string'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bool_bytes(bool)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBoolBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBoolBytes(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_bool_bytes(bool)byte[]'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bool_from_bytes(byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBoolFromBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBoolFromBytes(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_bool_from_bytes(byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_bool_from_log(byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBoolFromLog: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyBoolFromLog(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_bool_from_log(byte[])bool'])} + }, + + /** + * Makes a call to the Arc4PrimitiveOpsContract smart contract using the `verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyEmit: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(Arc4PrimitiveOpsContractParamsFactory.verifyEmit(params)) + return {...result, return: result.return as unknown as (undefined | Arc4PrimitiveOpsContractReturns['verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new Arc4PrimitiveOpsContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current Arc4PrimitiveOpsContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): Arc4PrimitiveOpsContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify_uintn_uintn_eq(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnUintnEq(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnUintnEq(params))) + return this + }, + /** + * Add a verify_biguintn_uintn_eq(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnUintnEq(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnUintnEq(params))) + return this + }, + /** + * Add a verify_uintn_biguintn_eq(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnBiguintnEq(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnBiguintnEq(params))) + return this + }, + /** + * Add a verify_biguintn_biguintn_eq(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnBiguintnEq(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnBiguintnEq(params))) + return this + }, + /** + * Add a verify_uintn_uintn_ne(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnUintnNe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnUintnNe(params))) + return this + }, + /** + * Add a verify_biguintn_uintn_ne(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnUintnNe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnUintnNe(params))) + return this + }, + /** + * Add a verify_uintn_biguintn_ne(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnBiguintnNe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnBiguintnNe(params))) + return this + }, + /** + * Add a verify_biguintn_biguintn_ne(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnBiguintnNe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnBiguintnNe(params))) + return this + }, + /** + * Add a verify_uintn_uintn_lt(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnUintnLt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnUintnLt(params))) + return this + }, + /** + * Add a verify_biguintn_uintn_lt(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnUintnLt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnUintnLt(params))) + return this + }, + /** + * Add a verify_uintn_biguintn_lt(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnBiguintnLt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnBiguintnLt(params))) + return this + }, + /** + * Add a verify_biguintn_biguintn_lt(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnBiguintnLt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnBiguintnLt(params))) + return this + }, + /** + * Add a verify_uintn_uintn_le(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnUintnLe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnUintnLe(params))) + return this + }, + /** + * Add a verify_biguintn_uintn_le(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnUintnLe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnUintnLe(params))) + return this + }, + /** + * Add a verify_uintn_biguintn_le(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnBiguintnLe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnBiguintnLe(params))) + return this + }, + /** + * Add a verify_biguintn_biguintn_le(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnBiguintnLe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnBiguintnLe(params))) + return this + }, + /** + * Add a verify_uintn_uintn_gt(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnUintnGt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnUintnGt(params))) + return this + }, + /** + * Add a verify_biguintn_uintn_gt(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnUintnGt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnUintnGt(params))) + return this + }, + /** + * Add a verify_uintn_biguintn_gt(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnBiguintnGt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnBiguintnGt(params))) + return this + }, + /** + * Add a verify_biguintn_biguintn_gt(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnBiguintnGt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnBiguintnGt(params))) + return this + }, + /** + * Add a verify_uintn_uintn_ge(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnUintnGe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnUintnGe(params))) + return this + }, + /** + * Add a verify_biguintn_uintn_ge(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnUintnGe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnUintnGe(params))) + return this + }, + /** + * Add a verify_uintn_biguintn_ge(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnBiguintnGe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnBiguintnGe(params))) + return this + }, + /** + * Add a verify_biguintn_biguintn_ge(byte[],byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnBiguintnGe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnBiguintnGe(params))) + return this + }, + /** + * Add a verify_uintn_init(byte[])uint32 method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnInit(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnInit(params))) + return this + }, + /** + * Add a verify_biguintn_init(byte[])uint256 method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnInit(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnInit(params))) + return this + }, + /** + * Add a verify_uintn_from_bytes(byte[])uint32 method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnFromBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnFromBytes(params))) + return this + }, + /** + * Add a verify_biguintn_from_bytes(byte[])uint256 method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnFromBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnFromBytes(params))) + return this + }, + /** + * Add a verify_uintn_from_log(byte[])uint32 method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintnFromLog(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintnFromLog(params))) + return this + }, + /** + * Add a verify_biguintn_from_log(byte[])uint256 method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnFromLog(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnFromLog(params))) + return this + }, + /** + * Add a verify_biguintn_as_uint64(byte[])uint64 method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnAsUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnAsUint64(params))) + return this + }, + /** + * Add a verify_biguintn_as_biguint(byte[])uint512 method call against the Arc4PrimitiveOpsContract contract + */ + verifyBiguintnAsBiguint(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintnAsBiguint(params))) + return this + }, + /** + * Add a verify_uintn64_as_uint64(byte[])uint64 method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintn64AsUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintn64AsUint64(params))) + return this + }, + /** + * Add a verify_uintn64_as_biguint(byte[])uint512 method call against the Arc4PrimitiveOpsContract contract + */ + verifyUintn64AsBiguint(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUintn64AsBiguint(params))) + return this + }, + /** + * Add a verify_ufixednxm_bytes(ufixed32x8)byte[] method call against the Arc4PrimitiveOpsContract contract + */ + verifyUfixednxmBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUfixednxmBytes(params))) + return this + }, + /** + * Add a verify_bigufixednxm_bytes(ufixed256x16)byte[] method call against the Arc4PrimitiveOpsContract contract + */ + verifyBigufixednxmBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBigufixednxmBytes(params))) + return this + }, + /** + * Add a verify_ufixednxm_from_bytes(byte[])ufixed32x8 method call against the Arc4PrimitiveOpsContract contract + */ + verifyUfixednxmFromBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUfixednxmFromBytes(params))) + return this + }, + /** + * Add a verify_bigufixednxm_from_bytes(byte[])ufixed256x16 method call against the Arc4PrimitiveOpsContract contract + */ + verifyBigufixednxmFromBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBigufixednxmFromBytes(params))) + return this + }, + /** + * Add a verify_ufixednxm_from_log(byte[])ufixed32x8 method call against the Arc4PrimitiveOpsContract contract + */ + verifyUfixednxmFromLog(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUfixednxmFromLog(params))) + return this + }, + /** + * Add a verify_bigufixednxm_from_log(byte[])ufixed256x16 method call against the Arc4PrimitiveOpsContract contract + */ + verifyBigufixednxmFromLog(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBigufixednxmFromLog(params))) + return this + }, + /** + * Add a verify_string_init(string)string method call against the Arc4PrimitiveOpsContract contract + */ + verifyStringInit(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyStringInit(params))) + return this + }, + /** + * Add a verify_string_add(string,string)string method call against the Arc4PrimitiveOpsContract contract + */ + verifyStringAdd(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyStringAdd(params))) + return this + }, + /** + * Add a verify_string_eq(string,string)bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyStringEq(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyStringEq(params))) + return this + }, + /** + * Add a verify_string_bytes(string)byte[] method call against the Arc4PrimitiveOpsContract contract + */ + verifyStringBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyStringBytes(params))) + return this + }, + /** + * Add a verify_string_from_bytes(byte[])string method call against the Arc4PrimitiveOpsContract contract + */ + verifyStringFromBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyStringFromBytes(params))) + return this + }, + /** + * Add a verify_string_from_log(byte[])string method call against the Arc4PrimitiveOpsContract contract + */ + verifyStringFromLog(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyStringFromLog(params))) + return this + }, + /** + * Add a verify_bool_bytes(bool)byte[] method call against the Arc4PrimitiveOpsContract contract + */ + verifyBoolBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBoolBytes(params))) + return this + }, + /** + * Add a verify_bool_from_bytes(byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBoolFromBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBoolFromBytes(params))) + return this + }, + /** + * Add a verify_bool_from_log(byte[])bool method call against the Arc4PrimitiveOpsContract contract + */ + verifyBoolFromLog(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBoolFromLog(params))) + return this + }, + /** + * Add a verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void method call against the Arc4PrimitiveOpsContract contract + */ + verifyEmit(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyEmit(params))) + return this + }, + /** + * Add a clear state call to the Arc4PrimitiveOpsContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as Arc4PrimitiveOpsContractComposer + } +} +export type Arc4PrimitiveOpsContractComposer = { + /** + * Calls the verify_uintn_uintn_eq(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnUintnEq(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_eq(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguintn_uintn_eq(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnUintnEq(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_eq(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_uintn_biguintn_eq(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnBiguintnEq(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_eq(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguintn_biguintn_eq(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnBiguintnEq(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_eq(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_uintn_uintn_ne(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnUintnNe(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_ne(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguintn_uintn_ne(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnUintnNe(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_ne(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_uintn_biguintn_ne(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnBiguintnNe(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_ne(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguintn_biguintn_ne(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnBiguintnNe(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_ne(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_uintn_uintn_lt(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnUintnLt(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_lt(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguintn_uintn_lt(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnUintnLt(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_lt(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_uintn_biguintn_lt(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnBiguintnLt(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_lt(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguintn_biguintn_lt(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnBiguintnLt(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_lt(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_uintn_uintn_le(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnUintnLe(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_le(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguintn_uintn_le(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnUintnLe(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_le(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_uintn_biguintn_le(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnBiguintnLe(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_le(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguintn_biguintn_le(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnBiguintnLe(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_le(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_uintn_uintn_gt(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnUintnGt(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_gt(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguintn_uintn_gt(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnUintnGt(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_gt(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_uintn_biguintn_gt(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnBiguintnGt(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_gt(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguintn_biguintn_gt(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnBiguintnGt(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_gt(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_uintn_uintn_ge(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnUintnGe(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_uintn_ge(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguintn_uintn_ge(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnUintnGe(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_uintn_ge(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_uintn_biguintn_ge(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnBiguintnGe(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_biguintn_ge(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguintn_biguintn_ge(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnBiguintnGe(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_biguintn_ge(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_uintn_init(byte[])uint32 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnInit(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_init(byte[])uint32'] | undefined]> + + /** + * Calls the verify_biguintn_init(byte[])uint256 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnInit(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_init(byte[])uint256'] | undefined]> + + /** + * Calls the verify_uintn_from_bytes(byte[])uint32 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnFromBytes(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_from_bytes(byte[])uint32'] | undefined]> + + /** + * Calls the verify_biguintn_from_bytes(byte[])uint256 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnFromBytes(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_from_bytes(byte[])uint256'] | undefined]> + + /** + * Calls the verify_uintn_from_log(byte[])uint32 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintnFromLog(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn_from_log(byte[])uint32'] | undefined]> + + /** + * Calls the verify_biguintn_from_log(byte[])uint256 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnFromLog(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_from_log(byte[])uint256'] | undefined]> + + /** + * Calls the verify_biguintn_as_uint64(byte[])uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnAsUint64(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_as_uint64(byte[])uint64'] | undefined]> + + /** + * Calls the verify_biguintn_as_biguint(byte[])uint512 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintnAsBiguint(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_biguintn_as_biguint(byte[])uint512'] | undefined]> + + /** + * Calls the verify_uintn64_as_uint64(byte[])uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintn64AsUint64(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn64_as_uint64(byte[])uint64'] | undefined]> + + /** + * Calls the verify_uintn64_as_biguint(byte[])uint512 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUintn64AsBiguint(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_uintn64_as_biguint(byte[])uint512'] | undefined]> + + /** + * Calls the verify_ufixednxm_bytes(ufixed32x8)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUfixednxmBytes(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_ufixednxm_bytes(ufixed32x8)byte[]'] | undefined]> + + /** + * Calls the verify_bigufixednxm_bytes(ufixed256x16)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBigufixednxmBytes(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_bigufixednxm_bytes(ufixed256x16)byte[]'] | undefined]> + + /** + * Calls the verify_ufixednxm_from_bytes(byte[])ufixed32x8 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUfixednxmFromBytes(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_ufixednxm_from_bytes(byte[])ufixed32x8'] | undefined]> + + /** + * Calls the verify_bigufixednxm_from_bytes(byte[])ufixed256x16 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBigufixednxmFromBytes(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_bigufixednxm_from_bytes(byte[])ufixed256x16'] | undefined]> + + /** + * Calls the verify_ufixednxm_from_log(byte[])ufixed32x8 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUfixednxmFromLog(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_ufixednxm_from_log(byte[])ufixed32x8'] | undefined]> + + /** + * Calls the verify_bigufixednxm_from_log(byte[])ufixed256x16 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBigufixednxmFromLog(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_bigufixednxm_from_log(byte[])ufixed256x16'] | undefined]> + + /** + * Calls the verify_string_init(string)string ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyStringInit(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_string_init(string)string'] | undefined]> + + /** + * Calls the verify_string_add(string,string)string ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyStringAdd(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_string_add(string,string)string'] | undefined]> + + /** + * Calls the verify_string_eq(string,string)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyStringEq(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_string_eq(string,string)bool'] | undefined]> + + /** + * Calls the verify_string_bytes(string)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyStringBytes(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_string_bytes(string)byte[]'] | undefined]> + + /** + * Calls the verify_string_from_bytes(byte[])string ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyStringFromBytes(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_string_from_bytes(byte[])string'] | undefined]> + + /** + * Calls the verify_string_from_log(byte[])string ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyStringFromLog(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_string_from_log(byte[])string'] | undefined]> + + /** + * Calls the verify_bool_bytes(bool)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBoolBytes(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_bool_bytes(bool)byte[]'] | undefined]> + + /** + * Calls the verify_bool_from_bytes(byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBoolFromBytes(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_bool_from_bytes(byte[])bool'] | undefined]> + + /** + * Calls the verify_bool_from_log(byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBoolFromLog(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_bool_from_log(byte[])bool'] | undefined]> + + /** + * Calls the verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyEmit(params?: CallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, Arc4PrimitiveOpsContractReturns['verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the Arc4PrimitiveOpsContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): Arc4PrimitiveOpsContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): Arc4PrimitiveOpsContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type Arc4PrimitiveOpsContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/BoxContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/BoxContract.ts new file mode 100644 index 0000000..146a2d5 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/BoxContract.ts @@ -0,0 +1,2352 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"BoxContract","structs":{"InnerStruct":[{"name":"c","type":"uint64"},{"name":"arrArr","type":"uint64[][]"},{"name":"d","type":"uint64"}],"LargeStruct":[{"name":"a","type":"byte[1024]"},{"name":"b","type":"byte[1024]"},{"name":"c","type":"byte[1024]"},{"name":"d","type":"byte[1024]"},{"name":"e","type":"uint64"},{"name":"f","type":"byte[1024]"},{"name":"g","type":"byte[1024]"},{"name":"h","type":"uint64"}],"NestedStruct":[{"name":"a","type":"uint64"},{"name":"inner","type":"InnerStruct"},{"name":"woah","type":"(uint64,uint64[][],uint64)[]"},{"name":"b","type":"uint64"}]},"methods":[{"name":"store_enums","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"read_enums","args":[],"returns":{"type":"(uint64,uint64)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_boxes","args":[{"type":"uint64","name":"a"},{"type":"byte[]","name":"b"},{"type":"string","name":"c"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"boxes_exist","args":[],"returns":{"type":"(bool,bool,bool,bool)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"check_keys","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"read_boxes","args":[],"returns":{"type":"(uint64,byte[],string,uint64)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"indirect_extract_and_replace","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"delete_boxes","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"slice_box","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"arc4_box","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"create_many_ints","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_many_ints","args":[{"type":"uint64","name":"index"},{"type":"uint64","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"sum_many_ints","args":[],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_box_ref","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_nested_struct","args":[{"type":"(uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64)","struct":"NestedStruct","name":"struct"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"nested_write","args":[{"type":"uint64","name":"index"},{"type":"uint64","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"nested_read","args":[{"type":"uint64","name":"i1"},{"type":"uint64","name":"i2"},{"type":"uint64","name":"i3"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"create_bools","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_bool","args":[{"type":"uint64","name":"index"},{"type":"bool","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"sum_bools","args":[{"type":"uint64","name":"stop_at_total"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"box_map_test","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"box_map_set","args":[{"type":"uint64","name":"key"},{"type":"string","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"box_map_get","args":[{"type":"uint64","name":"key"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"box_map_del","args":[{"type":"uint64","name":"key"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"box_map_exists","args":[{"type":"uint64","name":"key"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{"oca":{"keyType":"AVMString","valueType":"uint64","key":"b2Nh"},"txn":{"keyType":"AVMString","valueType":"uint64","key":"dHhu"},"box_a":{"keyType":"AVMString","valueType":"uint64","key":"Ym94X2E="},"box_b":{"keyType":"AVMString","valueType":"byte[]","key":"Yg=="},"box_c":{"keyType":"AVMBytes","valueType":"string","key":"Qk9YX0M="},"box_d":{"keyType":"AVMString","valueType":"AVMBytes","key":"Ym94X2Q="},"many_ints":{"keyType":"AVMString","valueType":"uint64[513]","key":"bWFueV9pbnRz"},"box_ref":{"keyType":"AVMString","valueType":"AVMBytes","key":"Ym94X3JlZg=="},"box_large":{"keyType":"AVMString","valueType":"LargeStruct","key":"Ym94X2xhcmdl"},"too_many_bools":{"keyType":"AVMString","valueType":"bool[33000]","key":"dG9vX21hbnlfYm9vbHM="}}},"maps":{"global":{},"local":{},"box":{"box_map":{"keyType":"uint64","valueType":"AVMString","prefix":""}}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[842],"errorMessage":"check Box exists"},{"pc":[486],"errorMessage":"check self.box_a exists"},{"pc":[851],"errorMessage":"check self.box_b exists"},{"pc":[514,857],"errorMessage":"check self.box_c exists"},{"pc":[1932],"errorMessage":"check self.box_map entry exists"},{"pc":[1178],"errorMessage":"check self.many_ints exists"},{"pc":[378],"errorMessage":"check self.oca exists"},{"pc":[1795],"errorMessage":"check self.too_many_bools exists"},{"pc":[390],"errorMessage":"check self.txn exists"},{"pc":[1773],"errorMessage":"index access is out of bounds"},{"pc":[1398,1425,1492,1517,1539,1587,1614,1660,1685,1710],"errorMessage":"index out of bounds"},{"pc":[1228],"errorMessage":"no data"},{"pc":[1329],"errorMessage":"struct.a is truthy"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDIgMCA4IDQwOTYgNDA5OCA0MTM4CiAgICBieXRlY2Jsb2NrICJib3giIDB4NDI0ZjU4NWY0MyAiYmxvYiIgImJveF9sYXJnZSIgMHgxNTFmN2M3NSAiYm94X2EiICJib3hfZCIgImIiICJ0b29fbWFueV9ib29scyIgIm1hbnlfaW50cyIgIjAiIDB4MDAwMjM0MzIgMHg2ODY1NmM2YzZmIDB4NmY2MzYxIDB4NzQ3ODZlIDB4MDY4MTAxICJib3hfcmVmIiAiZGVmYXVsdCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTo1OQogICAgLy8gY2xhc3MgQm94Q29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDM0CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHhmMjZjNmQ0MiAweGVmMTg2Y2Y3IDB4N2QzNzI5NmUgMHhmMTNkZDkzNyAweDMzMzI1ZDNkIDB4YTYxNzQ4MTIgMHhmYWJjYjg4NSAweGQ1NjZjNjMyIDB4MDRlZjQ5NzEgMHgyM2VjYjMyYyAweDAxOTk0MDhkIDB4NzcyMDU5Y2EgMHgwMTI2M2RmNiAweGVlZjc1ODE2IDB4OTk2NDk3YWUgMHg2Y2VjNzJmZiAweDZmOWQxMDc1IDB4NTllZjM3NjAgMHhhYTY2NmI5NiAweGRmYmRkNjM2IDB4YjUzMjkxM2EgMHhjMjlmMTY2OSAweDljODg4YzA5IDB4ZTZmNjg1MDYgMHg4ZWUyYzM2NCAvLyBtZXRob2QgInN0b3JlX2VudW1zKCl2b2lkIiwgbWV0aG9kICJyZWFkX2VudW1zKCkodWludDY0LHVpbnQ2NCkiLCBtZXRob2QgInNldF9ib3hlcyh1aW50NjQsYnl0ZVtdLHN0cmluZyl2b2lkIiwgbWV0aG9kICJib3hlc19leGlzdCgpKGJvb2wsYm9vbCxib29sLGJvb2wpIiwgbWV0aG9kICJjaGVja19rZXlzKCl2b2lkIiwgbWV0aG9kICJyZWFkX2JveGVzKCkodWludDY0LGJ5dGVbXSxzdHJpbmcsdWludDY0KSIsIG1ldGhvZCAiaW5kaXJlY3RfZXh0cmFjdF9hbmRfcmVwbGFjZSgpdm9pZCIsIG1ldGhvZCAiZGVsZXRlX2JveGVzKCl2b2lkIiwgbWV0aG9kICJzbGljZV9ib3goKXZvaWQiLCBtZXRob2QgImFyYzRfYm94KCl2b2lkIiwgbWV0aG9kICJjcmVhdGVfbWFueV9pbnRzKCl2b2lkIiwgbWV0aG9kICJzZXRfbWFueV9pbnRzKHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic3VtX21hbnlfaW50cygpdWludDY0IiwgbWV0aG9kICJ0ZXN0X2JveF9yZWYoKXZvaWQiLCBtZXRob2QgInNldF9uZXN0ZWRfc3RydWN0KCh1aW50NjQsKHVpbnQ2NCx1aW50NjRbXVtdLHVpbnQ2NCksKHVpbnQ2NCx1aW50NjRbXVtdLHVpbnQ2NClbXSx1aW50NjQpKXZvaWQiLCBtZXRob2QgIm5lc3RlZF93cml0ZSh1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgIm5lc3RlZF9yZWFkKHVpbnQ2NCx1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiY3JlYXRlX2Jvb2xzKCl2b2lkIiwgbWV0aG9kICJzZXRfYm9vbCh1aW50NjQsYm9vbCl2b2lkIiwgbWV0aG9kICJzdW1fYm9vbHModWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiYm94X21hcF90ZXN0KCl2b2lkIiwgbWV0aG9kICJib3hfbWFwX3NldCh1aW50NjQsc3RyaW5nKXZvaWQiLCBtZXRob2QgImJveF9tYXBfZ2V0KHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImJveF9tYXBfZGVsKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJib3hfbWFwX2V4aXN0cyh1aW50NjQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHN0b3JlX2VudW1zIHJlYWRfZW51bXMgc2V0X2JveGVzIGJveGVzX2V4aXN0IG1haW5fY2hlY2tfa2V5c19yb3V0ZUAxMCByZWFkX2JveGVzIGluZGlyZWN0X2V4dHJhY3RfYW5kX3JlcGxhY2UgZGVsZXRlX2JveGVzIHNsaWNlX2JveCBtYWluX2FyYzRfYm94X3JvdXRlQDE1IG1haW5fY3JlYXRlX21hbnlfaW50c19yb3V0ZUAxNiBzZXRfbWFueV9pbnRzIHN1bV9tYW55X2ludHMgdGVzdF9ib3hfcmVmIHNldF9uZXN0ZWRfc3RydWN0IG5lc3RlZF93cml0ZSBuZXN0ZWRfcmVhZCBtYWluX2NyZWF0ZV9ib29sc19yb3V0ZUAyMyBzZXRfYm9vbCBzdW1fYm9vbHMgYm94X21hcF90ZXN0IGJveF9tYXBfc2V0IGJveF9tYXBfZ2V0IGJveF9tYXBfZGVsIGJveF9tYXBfZXhpc3RzCiAgICBlcnIKCm1haW5fY3JlYXRlX2Jvb2xzX3JvdXRlQDIzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI4MQogICAgLy8gc2VsZi50b29fbWFueV9ib29scy5jcmVhdGUoKQogICAgYnl0ZWMgOCAvLyAidG9vX21hbnlfYm9vbHMiCiAgICBwdXNoaW50IDQxMjUKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NyZWF0ZV9tYW55X2ludHNfcm91dGVAMTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTgxCiAgICAvLyBzZWxmLm1hbnlfaW50cy5jcmVhdGUoKQogICAgYnl0ZWMgOSAvLyAibWFueV9pbnRzIgogICAgcHVzaGludCA0MTA0CiAgICBib3hfY3JlYXRlCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzRfYm94X3JvdXRlQDE1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjE3MS0xNzIKICAgIC8vIGJveF9kID0gQm94KFN0YXRpY0ludHMsIGtleT1CeXRlcyhiImQiKSkKICAgIC8vIGJveF9kLnZhbHVlID0gU3RhdGljSW50cyhhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDEpLCBhcmM0LlVJbnQ4KDIpLCBhcmM0LlVJbnQ4KDMpKQogICAgcHVzaGJ5dGVzcyAweDY0IDB4MDAwMTAyMDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxNzIKICAgIC8vIGJveF9kLnZhbHVlID0gU3RhdGljSW50cyhhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDEpLCBhcmM0LlVJbnQ4KDIpLCBhcmM0LlVJbnQ4KDMpKQogICAgYm94X3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjE2OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NoZWNrX2tleXNfcm91dGVAMTA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMzQ6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5Cb3hDb250cmFjdC5jb250cmFjdC5Cb3hDb250cmFjdC5zdG9yZV9lbnVtc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0b3JlX2VudW1zOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBzZWxmLm9jYS52YWx1ZSA9IE9uQ29tcGxldGVBY3Rpb24uT3B0SW4KICAgIGludGNfMCAvLyBPcHRJbgogICAgaXRvYgogICAgYnl0ZWMgMTMgLy8gIm9jYSIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTo3NgogICAgLy8gc2VsZi50eG4udmFsdWUgPSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXRvYgogICAgYnl0ZWMgMTQgLy8gInR4biIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTo3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQm94Q29udHJhY3QuY29udHJhY3QuQm94Q29udHJhY3QucmVhZF9lbnVtc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlYWRfZW51bXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6ODAKICAgIC8vIGFzc2VydCBvcC5Cb3guZ2V0KGIib2NhIilbMF0gPT0gb3AuaXRvYihzZWxmLm9jYS52YWx1ZSkKICAgIGJ5dGVjIDEzIC8vIDB4NmY2MzYxCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vY2EgZXhpc3RzCiAgICBkdXAKICAgIGJ0b2kKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6ODEKICAgIC8vIGFzc2VydCBvcC5Cb3guZ2V0KGIidHhuIilbMF0gPT0gb3AuaXRvYihzZWxmLnR4bi52YWx1ZSkKICAgIGJ5dGVjIDE0IC8vIDB4NzQ3ODZlCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50eG4gZXhpc3RzCiAgICBkdXAKICAgIGJ0b2kKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6ODMKICAgIC8vIHJldHVybiBhcmM0LlR1cGxlKChhcmM0LlVJbnQ2NChzZWxmLm9jYS52YWx1ZSksIGFyYzQuVUludDY0KHNlbGYudHhuLnZhbHVlKSkpCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTo3OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQm94Q29udHJhY3QuY29udHJhY3QuQm94Q29udHJhY3Quc2V0X2JveGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X2JveGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTo4NwogICAgLy8gc2VsZi5ib3hfYS52YWx1ZSA9IGEKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgYnl0ZWMgNSAvLyAiYm94X2EiCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6ODgKICAgIC8vIHNlbGYuYm94X2IudmFsdWUgPSBiLmNvcHkoKQogICAgYnl0ZWMgNyAvLyAiYiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgNyAvLyAiYiIKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6ODkKICAgIC8vIHNlbGYuYm94X2MudmFsdWUgPSBjCiAgICBieXRlY18xIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlY18xIC8vIDB4NDI0ZjU4NWY0MwogICAgZGlnIDEKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTo5MAogICAgLy8gc2VsZi5ib3hfZC52YWx1ZSA9IGIubmF0aXZlCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDYgLy8gImJveF9kIgogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyA2IC8vICJib3hfZCIKICAgIGRpZyAxCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6OTEKICAgIC8vIHNlbGYuYm94X2xhcmdlLmNyZWF0ZSgpCiAgICBieXRlY18zIC8vICJib3hfbGFyZ2UiCiAgICBwdXNoaW50IDYxNjAKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjkyCiAgICAvLyBzZWxmLmJveF9sYXJnZS52YWx1ZS5lID0gVUludDY0KDQyKQogICAgcHVzaGludCA0MgogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAiYm94X2xhcmdlIgogICAgaW50YyA0IC8vIDQwOTYKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTo5MwogICAgLy8gc2VsZi5ib3hfbGFyZ2UucmVwbGFjZShzaXplX29mKEJ5dGVzMTAyNCkgKiA0LCBhcmM0LlVJbnQ2NCg0MikuYnl0ZXMpCiAgICBieXRlY18zIC8vICJib3hfbGFyZ2UiCiAgICBpbnRjIDQgLy8gNDA5NgogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAwMDAwMDAyYQogICAgYm94X3JlcGxhY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTo5OAogICAgLy8gc2VsZi5ib3hfYS52YWx1ZSArPSAzCiAgICBieXRlYyA1IC8vICJib3hfYSIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9hIGV4aXN0cwogICAgYnRvaQogICAgcHVzaGludCAzCiAgICArCiAgICBpdG9iCiAgICBieXRlYyA1IC8vICJib3hfYSIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxMDAtMTAxCiAgICAvLyAjIHRlc3QgLmxlbmd0aAogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2EubGVuZ3RoID09IDgKICAgIGJ5dGVjIDUgLy8gImJveF9hIgogICAgYm94X2xlbgogICAgcG9wCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjEwMgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2IubGVuZ3RoID09IGIuYnl0ZXMubGVuZ3RoCiAgICBieXRlYyA3IC8vICJiIgogICAgYm94X2xlbgogICAgcG9wCiAgICBkaWcgMwogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTAzCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfYy5sZW5ndGggPT0gYy5ieXRlcy5sZW5ndGgKICAgIGJ5dGVjXzEgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfYyBleGlzdHMKICAgIGRpZyAyCiAgICBsZW4KICAgIGR1cDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxMDQKICAgIC8vIGFzc2VydCBzZWxmLmJveF9kLmxlbmd0aCA9PSBiLm5hdGl2ZS5sZW5ndGgKICAgIGJ5dGVjIDYgLy8gImJveF9kIgogICAgYm94X2xlbgogICAgcG9wCiAgICBkaWcgMwogICAgbGVuCiAgICBkdXAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTA2LTEwNwogICAgLy8gIyB0ZXN0IC52YWx1ZS5ieXRlcwogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2MudmFsdWUuYnl0ZXNbMF0gPT0gYy5ieXRlc1swXQogICAgYnl0ZWNfMSAvLyAweDQyNGY1ODVmNDMKICAgIGludGNfMiAvLyAwCiAgICBpbnRjXzAgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGRpZyA2CiAgICBleHRyYWN0IDAgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjEwOAogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2MudmFsdWUuYnl0ZXNbLTFdID09IGMuYnl0ZXNbLTFdCiAgICBkaWcgMwogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGJ5dGVjXzEgLy8gMHg0MjRmNTg1ZjQzCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGRpZyAzCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZGlnIDcKICAgIHN3YXAKICAgIGludGNfMCAvLyAxCiAgICBleHRyYWN0MwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjEwOQogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2MudmFsdWUuYnl0ZXNbOi0xXSA9PSBjLmJ5dGVzWzotMV0KICAgIGludGNfMCAvLyAxCiAgICBkaWcgNAogICAgPAogICAgZGlnIDQKICAgIGludGNfMCAvLyAxCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZGlnIDQKICAgIHN3YXAKICAgIC0KICAgIGJ5dGVjXzEgLy8gMHg0MjRmNTg1ZjQzCiAgICBpbnRjXzIgLy8gMAogICAgdW5jb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDEKICAgIGRpZyA0CiAgICA+PQogICAgaW50Y18wIC8vIDEKICAgIGRpZyA1CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZGlnIDQKICAgIHN3YXAKICAgIC0KICAgIGRpZyA3CiAgICBpbnRjXzIgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTEwCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfYy52YWx1ZS5ieXRlc1s6Ml0gPT0gYy5ieXRlc1s6Ml0KICAgIGludGNfMSAvLyAyCiAgICBkaWcgNAogICAgPAogICAgdW5jb3ZlciA0CiAgICBpbnRjXzEgLy8gMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGJ5dGVjXzEgLy8gMHg0MjRmNTg1ZjQzCiAgICBpbnRjXzIgLy8gMAogICAgdW5jb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18xIC8vIDIKICAgIGRpZyA0CiAgICA+PQogICAgaW50Y18xIC8vIDIKICAgIHVuY292ZXIgNQogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHVuY292ZXIgNQogICAgaW50Y18yIC8vIDAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjExMi0xMTMKICAgIC8vICMgdGVzdCAudmFsdWUgd2l0aCBCeXRlcyB0eXBlCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfZC52YWx1ZVswXSA9PSBiLm5hdGl2ZVswXQogICAgYnl0ZWMgNiAvLyAiYm94X2QiCiAgICBpbnRjXzIgLy8gMAogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICB1bmNvdmVyIDQKICAgIGV4dHJhY3QgMiAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTE0CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfZC52YWx1ZVstMV0gPT0gYi5uYXRpdmVbLTFdCiAgICBkaWcgMQogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGJ5dGVjIDYgLy8gImJveF9kIgogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBkaWcgMQogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGRpZyA0CiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMQogICAgZXh0cmFjdDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxMTUKICAgIC8vIGFzc2VydCBzZWxmLmJveF9kLnZhbHVlWzotMV0gPT0gYi5uYXRpdmVbOi0xXQogICAgaW50Y18wIC8vIDEKICAgIGRpZyAyCiAgICA8CiAgICBkaWcgMgogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMgogICAgc3dhcAogICAgLQogICAgYnl0ZWMgNiAvLyAiYm94X2QiCiAgICBpbnRjXzIgLy8gMAogICAgdW5jb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDEKICAgIGRpZyAyCiAgICA+PQogICAgaW50Y18wIC8vIDEKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZGlnIDIKICAgIHN3YXAKICAgIC0KICAgIGRpZyA0CiAgICBpbnRjXzIgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTE2CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfZC52YWx1ZVs6NV0gPT0gYi5uYXRpdmVbOjVdCiAgICBwdXNoaW50IDUKICAgIGRpZyAyCiAgICA8CiAgICBkaWcgMgogICAgcHVzaGludCA1CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgNiAvLyAiYm94X2QiCiAgICBpbnRjXzIgLy8gMAogICAgdW5jb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgcHVzaGludCA1CiAgICBkaWcgMgogICAgPj0KICAgIHB1c2hpbnQgNQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgNAogICAgaW50Y18yIC8vIDAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjExNwogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2QudmFsdWVbOiBVSW50NjQoMildID09IGIubmF0aXZlWzogVUludDY0KDIpXQogICAgaW50Y18xIC8vIDIKICAgIGRpZyAyCiAgICA8CiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgNiAvLyAiYm94X2QiCiAgICBpbnRjXzIgLy8gMAogICAgdW5jb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18xIC8vIDIKICAgIGRpZyAyCiAgICA+PQogICAgaW50Y18xIC8vIDIKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHVuY292ZXIgMgogICAgaW50Y18yIC8vIDAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjExOQogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2xhcmdlLmxlbmd0aCA9PSBzaXplX29mKExhcmdlU3RydWN0KQogICAgYnl0ZWNfMyAvLyAiYm94X2xhcmdlIgogICAgYm94X2xlbgogICAgcG9wCiAgICBwdXNoaW50IDYxNjAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTo4NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkJveENvbnRyYWN0LmNvbnRyYWN0LkJveENvbnRyYWN0LmJveGVzX2V4aXN0W3JvdXRpbmddKCkgLT4gdm9pZDoKYm94ZXNfZXhpc3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTIzCiAgICAvLyByZXR1cm4gYm9vbChzZWxmLmJveF9hKSwgYm9vbChzZWxmLmJveF9iKSwgYm9vbChzZWxmLmJveF9jKSwgYm9vbChzZWxmLmJveF9sYXJnZSkKICAgIGJ5dGVjIDUgLy8gImJveF9hIgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieXRlYyA3IC8vICJiIgogICAgYm94X2xlbgogICAgY292ZXIgMgogICAgcG9wCiAgICBieXRlY18xIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2xlbgogICAgY292ZXIgMwogICAgcG9wCiAgICBieXRlY18zIC8vICJib3hfbGFyZ2UiCiAgICBib3hfbGVuCiAgICBjb3ZlciA0CiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMiAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBpbnRjXzEgLy8gMgogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIHB1c2hpbnQgMwogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQm94Q29udHJhY3QuY29udHJhY3QuQm94Q29udHJhY3QucmVhZF9ib3hlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlYWRfYm94ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTM1CiAgICAvLyBnZXRfYm94X3ZhbHVlX3BsdXNfMShzZWxmLmJveF9hKSAtIDEsCiAgICBieXRlYyA1IC8vICJib3hfYSIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTozNDUKICAgIC8vIHJldHVybiBib3gudmFsdWUgKyAxCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94IGV4aXN0cwogICAgYnRvaQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxMzUKICAgIC8vIGdldF9ib3hfdmFsdWVfcGx1c18xKHNlbGYuYm94X2EpIC0gMSwKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTM2CiAgICAvLyBzZWxmLmJveF9iLnZhbHVlLm5hdGl2ZSwKICAgIGJ5dGVjIDcgLy8gImIiCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfYiBleGlzdHMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTM3CiAgICAvLyBzZWxmLmJveF9jLnZhbHVlLAogICAgYnl0ZWNfMSAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9jIGV4aXN0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjEzOAogICAgLy8gc2VsZi5ib3hfbGFyZ2UudmFsdWUuZSwKICAgIGJ5dGVjXzMgLy8gImJveF9sYXJnZSIKICAgIGludGMgNCAvLyA0MDk2CiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBkaWcgMwogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHN3YXAKICAgIHB1c2hieXRlcyAweDAwMTQKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgcHVzaGludCAyMAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkJveENvbnRyYWN0LmNvbnRyYWN0LkJveENvbnRyYWN0LmluZGlyZWN0X2V4dHJhY3RfYW5kX3JlcGxhY2Vbcm91dGluZ10oKSAtPiB2b2lkOgppbmRpcmVjdF9leHRyYWN0X2FuZF9yZXBsYWNlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjE0MwogICAgLy8gbGFyZ2UgPSBzZWxmLmJveF9sYXJnZS52YWx1ZS5jb3B5KCkKICAgIGJ5dGVjXzMgLy8gImJveF9sYXJnZSIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxNDMtMTQ0CiAgICAvLyBsYXJnZSA9IHNlbGYuYm94X2xhcmdlLnZhbHVlLmNvcHkoKQogICAgLy8gbGFyZ2UuZSArPSAxCiAgICBpbnRjIDQgLy8gNDA5NgogICAgaW50Y18zIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTQ0CiAgICAvLyBsYXJnZS5lICs9IDEKICAgIGJ0b2kKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTQ1CiAgICAvLyBzZWxmLmJveF9sYXJnZS52YWx1ZSA9IGxhcmdlLmNvcHkoKQogICAgYnl0ZWNfMyAvLyAiYm94X2xhcmdlIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjE0My0xNDUKICAgIC8vIGxhcmdlID0gc2VsZi5ib3hfbGFyZ2UudmFsdWUuY29weSgpCiAgICAvLyBsYXJnZS5lICs9IDEKICAgIC8vIHNlbGYuYm94X2xhcmdlLnZhbHVlID0gbGFyZ2UuY29weSgpCiAgICBpbnRjIDQgLy8gNDA5NgogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjE0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQm94Q29udHJhY3QuY29udHJhY3QuQm94Q29udHJhY3QuZGVsZXRlX2JveGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKZGVsZXRlX2JveGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjE0OQogICAgLy8gZGVsIHNlbGYuYm94X2EudmFsdWUKICAgIGJ5dGVjIDUgLy8gImJveF9hIgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTUwCiAgICAvLyBkZWwgc2VsZi5ib3hfYi52YWx1ZQogICAgYnl0ZWMgNyAvLyAiYiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjE1MQogICAgLy8gZGVsIHNlbGYuYm94X2MudmFsdWUKICAgIGJ5dGVjXzEgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxNTIKICAgIC8vIGFzc2VydCBzZWxmLmJveF9hLmdldChkZWZhdWx0PVVJbnQ2NCg0MikpID09IDQyCiAgICBieXRlYyA1IC8vICJib3hfYSIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHB1c2hpbnQgNDIKICAgIGRpZyAxCiAgICBkaWcgMwogICAgc2VsZWN0CiAgICBwdXNoaW50IDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTUzCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfYi5nZXQoZGVmYXVsdD1hcmM0LkR5bmFtaWNCeXRlcyhiIjQyIikpLm5hdGl2ZSA9PSBiIjQyIgogICAgYnl0ZWMgNyAvLyAiYiIKICAgIGJveF9nZXQKICAgIGJ5dGVjIDExIC8vIDB4MDAwMjM0MzIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgZXh0cmFjdCAyIDAKICAgIHB1c2hieXRlcyAweDM0MzIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxNTQKICAgIC8vIGFzc2VydCBzZWxmLmJveF9jLmdldChkZWZhdWx0PWFyYzQuU3RyaW5nKCI0MiIpKSA9PSAiNDIiCiAgICBieXRlY18xIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2dldAogICAgYnl0ZWMgMTEgLy8gMHgwMDAyMzQzMgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBieXRlYyAxMSAvLyAweDAwMDIzNDMyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTU2CiAgICAvLyBhc3NlcnQgbm90IGFfZXhpc3RzCiAgICBzd2FwCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxNTcKICAgIC8vIGFzc2VydCBhID09IDAKICAgICEKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjE1OAogICAgLy8gZGVsIHNlbGYuYm94X2xhcmdlLnZhbHVlCiAgICBieXRlY18zIC8vICJib3hfbGFyZ2UiCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxNDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5Cb3hDb250cmFjdC5jb250cmFjdC5Cb3hDb250cmFjdC5zbGljZV9ib3hbcm91dGluZ10oKSAtPiB2b2lkOgpzbGljZV9ib3g6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTYyCiAgICAvLyBib3hfMCA9IEJveChCeXRlcywga2V5PVN0cmluZygiMCIpKQogICAgYnl0ZWMgMTAgLy8gIjAiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTYzCiAgICAvLyBib3hfMC52YWx1ZSA9IEJ5dGVzKGIiVGVzdGluZyB0ZXN0aW5nIDEyMyIpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxNjIKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyAxMCAvLyAiMCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxNjMKICAgIC8vIGJveF8wLnZhbHVlID0gQnl0ZXMoYiJUZXN0aW5nIHRlc3RpbmcgMTIzIikKICAgIHB1c2hieXRlcyAweDU0NjU3Mzc0Njk2ZTY3MjA3NDY1NzM3NDY5NmU2NzIwMzEzMjMzCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTYyCiAgICAvLyBib3hfMCA9IEJveChCeXRlcywga2V5PVN0cmluZygiMCIpKQogICAgYnl0ZWMgMTAgLy8gIjAiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTY0CiAgICAvLyBhc3NlcnQgYm94XzAudmFsdWVbMDo3XSA9PSBiIlRlc3RpbmciCiAgICBib3hfbGVuCiAgICBwb3AKICAgIGR1cAogICAgaW50Y18yIC8vIDAKICAgIGRpZyAyCiAgICBzZWxlY3QKICAgIHB1c2hpbnQgNwogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA3CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZGlnIDEKICAgIC0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxNjIKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyAxMCAvLyAiMCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxNjQKICAgIC8vIGFzc2VydCBib3hfMC52YWx1ZVswOjddID09IGIiVGVzdGluZyIKICAgIGNvdmVyIDIKICAgIGJveF9leHRyYWN0CiAgICBwdXNoYnl0ZXMgMHg1NDY1NzM3NDY5NmU2NwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjE2NgogICAgLy8gc2VsZi5ib3hfYy52YWx1ZSA9IGFyYzQuU3RyaW5nKCJIZWxsbyIpCiAgICBieXRlY18xIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlY18xIC8vIDB4NDI0ZjU4NWY0MwogICAgcHVzaGJ5dGVzIDB4MDAwNTQ4NjU2YzZjNmYKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxNjcKICAgIC8vIGFzc2VydCBzZWxmLmJveF9jLnZhbHVlLmJ5dGVzWzI6MTBdID09IGIiSGVsbG8iCiAgICBieXRlY18xIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2xlbgogICAgcG9wCiAgICBpbnRjXzEgLy8gMgogICAgZGlnIDEKICAgIDwKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHB1c2hpbnQgMTAKICAgIGRpZyAyCiAgICA8CiAgICB1bmNvdmVyIDIKICAgIHB1c2hpbnQgMTAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMQogICAgLQogICAgYnl0ZWNfMSAvLyAweDQyNGY1ODVmNDMKICAgIGNvdmVyIDIKICAgIGJveF9leHRyYWN0CiAgICBwdXNoYnl0ZXMgMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQm94Q29udHJhY3QuY29udHJhY3QuQm94Q29udHJhY3Quc2V0X21hbnlfaW50c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9tYW55X2ludHM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjE4NQogICAgLy8gc2VsZi5tYW55X2ludHMudmFsdWVbaW5kZXhdID0gdmFsdWUKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBieXRlYyA5IC8vICJtYW55X2ludHMiCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5Cb3hDb250cmFjdC5jb250cmFjdC5Cb3hDb250cmFjdC5zdW1fbWFueV9pbnRzW3JvdXRpbmddKCkgLT4gdm9pZDoKc3VtX21hbnlfaW50czoKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCgpzdW1fbWFueV9pbnRzX3doaWxlX3RvcEA3OgogICAgcHVzaGludCAxMDUxMAogICAgZ2xvYmFsIE9wY29kZUJ1ZGdldAogICAgPgogICAgYnogc3VtX21hbnlfaW50c19hZnRlcl93aGlsZUAxMgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDE1IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgMTUgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGludGNfMiAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGIgc3VtX21hbnlfaW50c193aGlsZV90b3BANwoKc3VtX21hbnlfaW50c19hZnRlcl93aGlsZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxOTAKICAgIC8vIHRvdGFsID0gVUludDY0KDApCiAgICBpbnRjXzIgLy8gMAogICAgYnVyeSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTkxCiAgICAvLyBmb3IgdmFsIGluIHNlbGYubWFueV9pbnRzLnZhbHVlOgogICAgYnl0ZWMgOSAvLyAibWFueV9pbnRzIgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYW55X2ludHMgZXhpc3RzCiAgICBpbnRjXzIgLy8gMAogICAgYnVyeSAyCgpzdW1fbWFueV9pbnRzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxOTEKICAgIC8vIGZvciB2YWwgaW4gc2VsZi5tYW55X2ludHMudmFsdWU6CiAgICBkaWcgMQogICAgcHVzaGludCA1MTMKICAgIDwKICAgIGJ6IHN1bV9tYW55X2ludHNfYWZ0ZXJfZm9yQDUKICAgIGRpZyAxCiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBieXRlYyA5IC8vICJtYW55X2ludHMiCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxOTIKICAgIC8vIHRvdGFsID0gdG90YWwgKyB2YWwKICAgIGRpZyAyCiAgICArCiAgICBidXJ5IDIKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBidXJ5IDIKICAgIGIgc3VtX21hbnlfaW50c19mb3JfaGVhZGVyQDIKCnN1bV9tYW55X2ludHNfYWZ0ZXJfZm9yQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBpdG9iCiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkJveENvbnRyYWN0LmNvbnRyYWN0LkJveENvbnRyYWN0LnRlc3RfYm94X3JlZltyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfYm94X3JlZjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToxOTctMTk4CiAgICAvLyAjIGluaXQgcmVmLCB3aXRoIHZhbGlkIGtleSB0eXBlcwogICAgLy8gYm94X3JlZiA9IEJveChCeXRlcywga2V5PSJibG9iIikKICAgIGJ5dGVjXzIgLy8gImJsb2IiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MTk5CiAgICAvLyBhc3NlcnQgbm90IGJveF9yZWYsICJubyBkYXRhIgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gbm8gZGF0YQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIwNAogICAgLy8gYm94X3JlZiA9IEJveChCeXRlcywga2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMiAvLyAiYmxvYiIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyMDctMjA4CiAgICAvLyAjIGNyZWF0ZQogICAgLy8gYXNzZXJ0IGJveF9yZWYuY3JlYXRlKHNpemU9VUludDY0KDMyKSkKICAgIHB1c2hpbnQgMzIKICAgIGJveF9jcmVhdGUKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIxMS0yMTIKICAgIC8vICMgbWFuaXB1bGF0ZSBkYXRhCiAgICAvLyBzZW5kZXJfYnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjEzCiAgICAvLyBhcHBfYWRkcmVzcyA9IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MuYnl0ZXMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjA0CiAgICAvLyBib3hfcmVmID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18yIC8vICJibG9iIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIxNQogICAgLy8gYm94X3JlZi5yZXBsYWNlKDAsIHNlbmRlcl9ieXRlcykKICAgIGludGNfMiAvLyAwCiAgICBkaWcgMwogICAgYm94X3JlcGxhY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyMDQKICAgIC8vIGJveF9yZWYgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzIgLy8gImJsb2IiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjE2CiAgICAvLyBib3hfcmVmLnJlc2l6ZSg4MDAwKQogICAgcHVzaGludCA4MDAwCiAgICBib3hfcmVzaXplCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjA0CiAgICAvLyBib3hfcmVmID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18yIC8vICJibG9iIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIxNwogICAgLy8gYm94X3JlZi5zcGxpY2UoMCwgMCwgYXBwX2FkZHJlc3MpCiAgICBpbnRjXzIgLy8gMAogICAgZHVwCiAgICBkaWcgMwogICAgYm94X3NwbGljZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIwNAogICAgLy8gYm94X3JlZiA9IEJveChCeXRlcywga2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMiAvLyAiYmxvYiIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyMTgKICAgIC8vIGJveF9yZWYucmVwbGFjZSg2NCwgdmFsdWVfMykKICAgIHB1c2hpbnQgNjQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyMTQKICAgIC8vIHZhbHVlXzMgPSBCeXRlcyhiImhlbGxvIikKICAgIGJ5dGVjIDEyIC8vIDB4Njg2NTZjNmM2ZgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIxOAogICAgLy8gYm94X3JlZi5yZXBsYWNlKDY0LCB2YWx1ZV8zKQogICAgYm94X3JlcGxhY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyMDQKICAgIC8vIGJveF9yZWYgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzIgLy8gImJsb2IiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjE5CiAgICAvLyBwcmVmaXggPSBib3hfcmVmLmV4dHJhY3QoMCwgMzIgKiAyICsgdmFsdWVfMy5sZW5ndGgpCiAgICBpbnRjXzIgLy8gMAogICAgcHVzaGludCA2OQogICAgYm94X2V4dHJhY3QKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyMjAKICAgIC8vIGFzc2VydCBwcmVmaXggPT0gYXBwX2FkZHJlc3MgKyBzZW5kZXJfYnl0ZXMgKyB2YWx1ZV8zCiAgICBkaWcgMQogICAgZGlnIDMKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIxNAogICAgLy8gdmFsdWVfMyA9IEJ5dGVzKGIiaGVsbG8iKQogICAgYnl0ZWMgMTIgLy8gMHg2ODY1NmM2YzZmCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjIwCiAgICAvLyBhc3NlcnQgcHJlZml4ID09IGFwcF9hZGRyZXNzICsgc2VuZGVyX2J5dGVzICsgdmFsdWVfMwogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjA0CiAgICAvLyBib3hfcmVmID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18yIC8vICJibG9iIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIyMi0yMjMKICAgIC8vICMgZGVsZXRlCiAgICAvLyBkZWwgYm94X3JlZi52YWx1ZQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjA0CiAgICAvLyBib3hfcmVmID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18yIC8vICJibG9iIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIyNi0yMjcKICAgIC8vICMgcXVlcnkKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBib3hfcmVmLm1heWJlKCkKICAgIGJveF9nZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyMjgKICAgIC8vIGFzc2VydCBub3QgZXhpc3RzCiAgICBkdXAKICAgICEKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIyOQogICAgLy8gYXNzZXJ0IHZhbHVlID09IGIiIgogICAgZGlnIDEKICAgIHB1c2hieXRlcyAweAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIzMAogICAgLy8gYXNzZXJ0IGJveF9yZWYuZ2V0KGRlZmF1bHQ9c2VuZGVyX2J5dGVzKSA9PSBzZW5kZXJfYnl0ZXMKICAgIGRpZyAzCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjMyLTIzMwogICAgLy8gIyB1cGRhdGUKICAgIC8vIGJveF9yZWYudmFsdWUgPSBzZW5kZXJfYnl0ZXMgKyBhcHBfYWRkcmVzcwogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjA0CiAgICAvLyBib3hfcmVmID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18yIC8vICJibG9iIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIzMi0yMzMKICAgIC8vICMgdXBkYXRlCiAgICAvLyBib3hfcmVmLnZhbHVlID0gc2VuZGVyX2J5dGVzICsgYXBwX2FkZHJlc3MKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIwNAogICAgLy8gYm94X3JlZiA9IEJveChCeXRlcywga2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMiAvLyAiYmxvYiIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyMzItMjMzCiAgICAvLyAjIHVwZGF0ZQogICAgLy8gYm94X3JlZi52YWx1ZSA9IHNlbmRlcl9ieXRlcyArIGFwcF9hZGRyZXNzCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjA0CiAgICAvLyBib3hfcmVmID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18yIC8vICJibG9iIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIzNAogICAgLy8gYXNzZXJ0IGJveF9yZWYsICJCbG9iIGV4aXN0cyIKICAgIGJveF9sZW4KICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjIzNQogICAgLy8gYXNzZXJ0IGJveF9yZWYubGVuZ3RoID09IDY0CiAgICBwdXNoaW50IDY0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjM4LTIzOQogICAgLy8gIyBpbnN0YW5jZSBib3ggcmVmCiAgICAvLyBzZWxmLmJveF9yZWYuY3JlYXRlKHNpemU9VUludDY0KDMyKSkKICAgIGJ5dGVjIDE2IC8vICJib3hfcmVmIgogICAgcHVzaGludCAzMgogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjQxCiAgICAvLyBkZWwgc2VsZi5ib3hfcmVmLnZhbHVlCiAgICBieXRlYyAxNiAvLyAiYm94X3JlZiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjE5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkJveENvbnRyYWN0LmNvbnRyYWN0LkJveENvbnRyYWN0LnNldF9uZXN0ZWRfc3RydWN0W3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X25lc3RlZF9zdHJ1Y3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI0NgogICAgLy8gYXNzZXJ0IHN0cnVjdC5hLCAic3RydWN0LmEgaXMgdHJ1dGh5IgogICAgaW50Y18yIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBhc3NlcnQgLy8gc3RydWN0LmEgaXMgdHJ1dGh5CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjQ3CiAgICAvLyBzdHJ1Y3RfYnl0ZXMgPSBUeG4uYXBwbGljYXRpb25fYXJncygxKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI0OAogICAgLy8gc3RydWN0X3NpemUgPSBzdHJ1Y3RfYnl0ZXMubGVuZ3RoCiAgICBkdXAKICAgIGxlbgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI0OQogICAgLy8gdGFpbF9vZmZzZXQgPSBVSW50NjQoNDA5NiArIDIpCiAgICBpbnRjIDUgLy8gNDA5OAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI1MC0yNTEKICAgIC8vICMgaW5pdGlhbGl6ZSBib3ggdG8gemVybwogICAgLy8gYm94LmNyZWF0ZShzaXplPXRhaWxfb2Zmc2V0ICsgc3RydWN0X3NpemUpCiAgICArCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjQ1CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNTAtMjUxCiAgICAvLyAjIGluaXRpYWxpemUgYm94IHRvIHplcm8KICAgIC8vIGJveC5jcmVhdGUoc2l6ZT10YWlsX29mZnNldCArIHN0cnVjdF9zaXplKQogICAgc3dhcAogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjQ1CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNTItMjUzCiAgICAvLyAjIHNldCBjb3JyZWN0IG9mZnNldCBmb3IgZHluYW1pYyBwb3J0aW9uCiAgICAvLyBib3gucmVwbGFjZSh0YWlsX29mZnNldCAtIDIsIGFyYzQuVUludDE2KHRhaWxfb2Zmc2V0KS5ieXRlcykKICAgIGludGMgNCAvLyA0MDk2CiAgICBwdXNoYnl0ZXMgMHgxMDAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI0NQogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjQ5CiAgICAvLyB0YWlsX29mZnNldCA9IFVJbnQ2NCg0MDk2ICsgMikKICAgIGludGMgNSAvLyA0MDk4CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjU0LTI1NQogICAgLy8gIyBzZXQgZHluYW1pYyBkYXRhCiAgICAvLyBib3gucmVwbGFjZSh0YWlsX29mZnNldCwgc3RydWN0X2J5dGVzKQogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQm94Q29udHJhY3QuY29udHJhY3QuQm94Q29udHJhY3QubmVzdGVkX3dyaXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKbmVzdGVkX3dyaXRlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjYwCiAgICAvLyBib3gudmFsdWUubmVzdGVkLmEgPSB2YWx1ZQogICAgaW50YyA1IC8vIDQwOTgKICAgIHVuY292ZXIgMwogICAgYm94X3JlcGxhY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjEKICAgIC8vIGJveC52YWx1ZS5uZXN0ZWQuYiA9IHZhbHVlICsgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjYxCiAgICAvLyBib3gudmFsdWUubmVzdGVkLmIgPSB2YWx1ZSArIDEKICAgIHB1c2hpbnQgNDExMAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI2MgogICAgLy8gYm94LnZhbHVlLm5lc3RlZC5pbm5lci5hcnJfYXJyW2luZGV4XVtpbmRleF0gPSB2YWx1ZSArIDIKICAgIGR1cAogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNTkKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI2MgogICAgLy8gYm94LnZhbHVlLm5lc3RlZC5pbm5lci5hcnJfYXJyW2luZGV4XVtpbmRleF0gPSB2YWx1ZSArIDIKICAgIHB1c2hpbnQgNDEzNgogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkaWcgMwogICAgPgogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIGludGNfMSAvLyAyCiAgICBkaWcgMwogICAgKgogICAgaW50YyA2IC8vIDQxMzgKICAgIGRpZyAxCiAgICArCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjU5CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjIKICAgIC8vIGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuYXJyX2FycltpbmRleF1baW5kZXhdID0gdmFsdWUgKyAyCiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGludGMgNiAvLyA0MTM4CiAgICArCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjU5CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjIKICAgIC8vIGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuYXJyX2FycltpbmRleF1baW5kZXhdID0gdmFsdWUgKyAyCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkaWcgNQogICAgPgogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkaWcgNAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIHN3YXAKICAgIGRpZyAxCiAgICArCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjU5CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjIKICAgIC8vIGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuYXJyX2FycltpbmRleF1baW5kZXhdID0gdmFsdWUgKyAyCiAgICBzd2FwCiAgICB1bmNvdmVyIDQKICAgIGJveF9yZXBsYWNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjYzCiAgICAvLyBib3gudmFsdWUubmVzdGVkLmlubmVyLmMgPSB2YWx1ZSArIDMKICAgIGRpZyAyCiAgICBwdXNoaW50IDMKICAgICsKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNTkKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI2MwogICAgLy8gYm94LnZhbHVlLm5lc3RlZC5pbm5lci5jID0gdmFsdWUgKyAzCiAgICBwdXNoaW50IDQxMTgKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjQKICAgIC8vIGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuZCA9IHZhbHVlICsgNAogICAgZGlnIDIKICAgIHB1c2hpbnQgNAogICAgKwogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjY0CiAgICAvLyBib3gudmFsdWUubmVzdGVkLmlubmVyLmQgPSB2YWx1ZSArIDQKICAgIHB1c2hpbnQgNDEyOAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI2NQogICAgLy8gYm94LnZhbHVlLm5lc3RlZC53b2FoW2luZGV4XS5hcnJfYXJyW2luZGV4XVtpbmRleF0gPSB2YWx1ZSArIDUKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA1CiAgICArCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjU5CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjUKICAgIC8vIGJveC52YWx1ZS5uZXN0ZWQud29haFtpbmRleF0uYXJyX2FycltpbmRleF1baW5kZXhdID0gdmFsdWUgKyA1CiAgICBwdXNoaW50IDQxMDgKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaW50YyA1IC8vIDQwOTgKICAgICsKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNTkKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI2NQogICAgLy8gYm94LnZhbHVlLm5lc3RlZC53b2FoW2luZGV4XS5hcnJfYXJyW2luZGV4XVtpbmRleF0gPSB2YWx1ZSArIDUKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyA1CiAgICA+CiAgICBhc3NlcnQgLy8gaW5kZXggb3V0IG9mIGJvdW5kcwogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGR1cAogICAgZGlnIDQKICAgICsKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNTkKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI2NQogICAgLy8gYm94LnZhbHVlLm5lc3RlZC53b2FoW2luZGV4XS5hcnJfYXJyW2luZGV4XVtpbmRleF0gPSB2YWx1ZSArIDUKICAgIHN3YXAKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgKwogICAgcHVzaGludCAxOAogICAgKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjY1CiAgICAvLyBib3gudmFsdWUubmVzdGVkLndvYWhbaW5kZXhdLmFycl9hcnJbaW5kZXhdW2luZGV4XSA9IHZhbHVlICsgNQogICAgZGlnIDEKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZGlnIDUKICAgID4KICAgIGFzc2VydCAvLyBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZHVwCiAgICB1bmNvdmVyIDQKICAgICsKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNTkKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI2NQogICAgLy8gYm94LnZhbHVlLm5lc3RlZC53b2FoW2luZGV4XS5hcnJfYXJyW2luZGV4XVtpbmRleF0gPSB2YWx1ZSArIDUKICAgIHN3YXAKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjY1CiAgICAvLyBib3gudmFsdWUubmVzdGVkLndvYWhbaW5kZXhdLmFycl9hcnJbaW5kZXhdW2luZGV4XSA9IHZhbHVlICsgNQogICAgZGlnIDEKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgdW5jb3ZlciA0CiAgICA+CiAgICBhc3NlcnQgLy8gaW5kZXggb3V0IG9mIGJvdW5kcwogICAgaW50Y18xIC8vIDIKICAgICsKICAgIHVuY292ZXIgMgogICAgKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjY1CiAgICAvLyBib3gudmFsdWUubmVzdGVkLndvYWhbaW5kZXhdLmFycl9hcnJbaW5kZXhdW2luZGV4XSA9IHZhbHVlICsgNQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQm94Q29udHJhY3QuY29udHJhY3QuQm94Q29udHJhY3QubmVzdGVkX3JlYWRbcm91dGluZ10oKSAtPiB2b2lkOgpuZXN0ZWRfcmVhZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjY5CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNzAKICAgIC8vIGEgPSBib3gudmFsdWUubmVzdGVkLmEKICAgIGludGMgNSAvLyA0MDk4CiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjkKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI3MQogICAgLy8gYiA9IGJveC52YWx1ZS5uZXN0ZWQuYgogICAgcHVzaGludCA0MTEwCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjkKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI3MgogICAgLy8gYXJyX2FyciA9IGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuYXJyX2FycltpMV1baTJdCiAgICBwdXNoaW50IDQxMzYKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZGlnIDUKICAgID4KICAgIGFzc2VydCAvLyBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBpbnRjXzEgLy8gMgogICAgZGlnIDUKICAgICoKICAgIGludGMgNiAvLyA0MTM4CiAgICBkaWcgMQogICAgKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI2OQogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjcyCiAgICAvLyBhcnJfYXJyID0gYm94LnZhbHVlLm5lc3RlZC5pbm5lci5hcnJfYXJyW2kxXVtpMl0KICAgIHN3YXAKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaW50YyA2IC8vIDQxMzgKICAgICsKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjkKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI3MgogICAgLy8gYXJyX2FyciA9IGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuYXJyX2FycltpMV1baTJdCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkaWcgNgogICAgPgogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkaWcgNQogICAgaW50Y18zIC8vIDgKICAgICoKICAgICsKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjkKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI3MgogICAgLy8gYXJyX2FyciA9IGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuYXJyX2FycltpMV1baTJdCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjkKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI3MwogICAgLy8gYyA9IGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuYwogICAgcHVzaGludCA0MTE4CiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjkKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI3NAogICAgLy8gZCA9IGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuZAogICAgcHVzaGludCA0MTI4CiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjkKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI3NQogICAgLy8gd29haF9hcnJfYXJyID0gYm94LnZhbHVlLm5lc3RlZC53b2FoW2kxXS5hcnJfYXJyW2kyXVtpM10KICAgIHB1c2hpbnQgNDEwOAogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBpbnRjIDUgLy8gNDA5OAogICAgKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI2OQogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6Mjc1CiAgICAvLyB3b2FoX2Fycl9hcnIgPSBib3gudmFsdWUubmVzdGVkLndvYWhbaTFdLmFycl9hcnJbaTJdW2kzXQogICAgZGlnIDEKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgdW5jb3ZlciAxMAogICAgPgogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkdXAKICAgIHVuY292ZXIgNQogICAgKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI2OQogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6Mjc1CiAgICAvLyB3b2FoX2Fycl9hcnIgPSBib3gudmFsdWUubmVzdGVkLndvYWhbaTFdLmFycl9hcnJbaTJdW2kzXQogICAgc3dhcAogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICArCiAgICBwdXNoaW50IDE4CiAgICArCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjY5CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNzUKICAgIC8vIHdvYWhfYXJyX2FyciA9IGJveC52YWx1ZS5uZXN0ZWQud29haFtpMV0uYXJyX2FycltpMl1baTNdCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkaWcgOAogICAgPgogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBpbnRjXzEgLy8gMgogICAgdW5jb3ZlciA4CiAgICAqCiAgICBkaWcgMQogICAgKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI2OQogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6Mjc1CiAgICAvLyB3b2FoX2Fycl9hcnIgPSBib3gudmFsdWUubmVzdGVkLndvYWhbaTFdLmFycl9hcnJbaTJdW2kzXQogICAgc3dhcAogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICArCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjY5CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNzUKICAgIC8vIHdvYWhfYXJyX2FyciA9IGJveC52YWx1ZS5uZXN0ZWQud29haFtpMV0uYXJyX2FycltpMl1baTNdCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkaWcgNwogICAgPgogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIGludGNfMSAvLyAyCiAgICArCiAgICB1bmNvdmVyIDYKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICArCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjY5CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNzUKICAgIC8vIHdvYWhfYXJyX2FyciA9IGJveC52YWx1ZS5uZXN0ZWQud29haFtpMV0uYXJyX2FycltpMl1baTNdCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNzcKICAgIC8vIHJldHVybiBhICsgYiArIGFycl9hcnIgKyBjICsgZCArIHdvYWhfYXJyX2FycgogICAgdW5jb3ZlciA1CiAgICB1bmNvdmVyIDUKICAgICsKICAgIHVuY292ZXIgNAogICAgKwogICAgdW5jb3ZlciAzCiAgICArCiAgICB1bmNvdmVyIDIKICAgICsKICAgICsKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyNjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkJveENvbnRyYWN0LmNvbnRyYWN0LkJveENvbnRyYWN0LnNldF9ib29sW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGludGNfMiAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyODUKICAgIC8vIHNlbGYudG9vX21hbnlfYm9vbHMudmFsdWVbaW5kZXhdID0gdmFsdWUKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgLwogICAgdW5jb3ZlciAyCiAgICBpbnRjXzMgLy8gOAogICAgJQogICAgYnl0ZWMgOCAvLyAidG9vX21hbnlfYm9vbHMiCiAgICBkaWcgMgogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBkaWcgMQogICAgaW50Y18zIC8vIDgKICAgIDwKICAgIGFzc2VydCAvLyBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgc3dhcAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGJ5dGVjIDggLy8gInRvb19tYW55X2Jvb2xzIgogICAgY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5Cb3hDb250cmFjdC5jb250cmFjdC5Cb3hDb250cmFjdC5zdW1fYm9vbHNbcm91dGluZ10oKSAtPiB2b2lkOgpzdW1fYm9vbHM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6Mjg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI4OQogICAgLy8gdG90YWwgPSBVSW50NjQoKQogICAgaW50Y18yIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyOTAKICAgIC8vIGZvciB2YWx1ZSBpbiBzZWxmLnRvb19tYW55X2Jvb2xzLnZhbHVlOgogICAgYnl0ZWMgOCAvLyAidG9vX21hbnlfYm9vbHMiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvb19tYW55X2Jvb2xzIGV4aXN0cwogICAgaW50Y18yIC8vIDAKCnN1bV9ib29sc19mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjkwCiAgICAvLyBmb3IgdmFsdWUgaW4gc2VsZi50b29fbWFueV9ib29scy52YWx1ZToKICAgIGR1cAogICAgcHVzaGludCAzMzAwMAogICAgPAogICAgYnogc3VtX2Jvb2xzX2FmdGVyX2ZvckA5CiAgICBkdXBuIDIKICAgIGludGNfMyAvLyA4CiAgICAvCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgJQogICAgYnl0ZWMgOCAvLyAidG9vX21hbnlfYm9vbHMiCiAgICB1bmNvdmVyIDIKICAgIGludGNfMCAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgc3dhcAogICAgZ2V0Yml0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MjkxCiAgICAvLyBpZiB2YWx1ZToKICAgIGJ6IHN1bV9ib29sc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weToyOTIKICAgIC8vIHRvdGFsICs9IDEKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYnVyeSAyCgpzdW1fYm9vbHNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI5MwogICAgLy8gaWYgdG90YWwgPT0gc3RvcF9hdF90b3RhbDoKICAgIGRpZyAxCiAgICBkaWcgMwogICAgPT0KICAgIGJueiBzdW1fYm9vbHNfYWZ0ZXJfZm9yQDkKICAgIGR1cAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBzdW1fYm9vbHNfZm9yX2hlYWRlckAyCgpzdW1fYm9vbHNfYWZ0ZXJfZm9yQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6Mjg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZGlnIDEKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQm94Q29udHJhY3QuY29udHJhY3QuQm94Q29udHJhY3QuYm94X21hcF90ZXN0W3JvdXRpbmddKCkgLT4gdm9pZDoKYm94X21hcF90ZXN0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjI5OQogICAgLy8ga2V5XzAgPSBVSW50NjQoMCkKICAgIGludGNfMiAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MzAyCiAgICAvLyBzZWxmLmJveF9tYXBba2V5XzBdID0gdmFsdWUKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTozMDEKICAgIC8vIHZhbHVlID0gU3RyaW5nKCJIbW1tbW0iKQogICAgcHVzaGJ5dGVzICJIbW1tbW0iCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MzAyCiAgICAvLyBzZWxmLmJveF9tYXBba2V5XzBdID0gdmFsdWUKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTozMDUKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXBba2V5XzBdLmJ5dGVzLmxlbmd0aCA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGJveF9sZW4KICAgIHBvcAogICAgcHVzaGludCA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MzAwCiAgICAvLyBrZXlfMSA9IFVJbnQ2NCgxKQogICAgaW50Y18wIC8vIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTozMDkKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXAuZ2V0KGtleV8xLCBkZWZhdWx0PVN0cmluZygiZGVmYXVsdCIpKSA9PSBTdHJpbmcoImRlZmF1bHQiKQogICAgaXRvYgogICAgZHVwCiAgICBib3hfZ2V0CiAgICBieXRlYyAxNyAvLyAiZGVmYXVsdCIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgMTcgLy8gImRlZmF1bHQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MzEwCiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gc2VsZi5ib3hfbWFwLm1heWJlKGtleV8xKQogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTozMTEKICAgIC8vIGFzc2VydCBub3QgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTozMTcKICAgIC8vIHRtcF9ib3hfbWFwW2tleV8xXSA9IFN0cmluZygiaGVsbG8iKQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGR1cAogICAgYnl0ZWMgMTIgLy8gImhlbGxvIgogICAgYm94X3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjMxOQogICAgLy8gZGVsIHRtcF9ib3hfbWFwW2tleV8xXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6Mjk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQm94Q29udHJhY3QuY29udHJhY3QuQm94Q29udHJhY3QuYm94X21hcF9zZXRbcm91dGluZ10oKSAtPiB2b2lkOgpib3hfbWFwX3NldDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTozMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTozMjMKICAgIC8vIHNlbGYuYm94X21hcFtrZXldID0gdmFsdWUKICAgIHN3YXAKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MzIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQm94Q29udHJhY3QuY29udHJhY3QuQm94Q29udHJhY3QuYm94X21hcF9nZXRbcm91dGluZ10oKSAtPiB2b2lkOgpib3hfbWFwX2dldDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTozMjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjMyNwogICAgLy8gcmV0dXJuIHNlbGYuYm94X21hcFtrZXldCiAgICBpdG9iCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwIGVudHJ5IGV4aXN0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjMyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5Cb3hDb250cmFjdC5jb250cmFjdC5Cb3hDb250cmFjdC5ib3hfbWFwX2RlbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmJveF9tYXBfZGVsOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjMyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MzMxCiAgICAvLyBkZWwgc2VsZi5ib3hfbWFwW2tleV0KICAgIGl0b2IKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0JveENvbnRyYWN0L2NvbnRyYWN0LnB5OjMyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkJveENvbnRyYWN0LmNvbnRyYWN0LkJveENvbnRyYWN0LmJveF9tYXBfZXhpc3RzW3JvdXRpbmddKCkgLT4gdm9pZDoKYm94X21hcF9leGlzdHM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQm94Q29udHJhY3QvY29udHJhY3QucHk6MzMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTozMzUKICAgIC8vIHJldHVybiBrZXkgaW4gc2VsZi5ib3hfbWFwCiAgICBpdG9iCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9Cb3hDb250cmFjdC9jb250cmFjdC5weTozMzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMiAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAHAQIACIAggiCqICYSA2JveAVCT1hfQwRibG9iCWJveF9sYXJnZQQVH3x1BWJveF9hBWJveF9kAWIOdG9vX21hbnlfYm9vbHMJbWFueV9pbnRzATAEAAI0MgVoZWxsbwNvY2EDdHhuAwaBAQdib3hfcmVmB2RlZmF1bHQxG0EA3jEZFEQxGESCGQTybG1CBO8YbPcEfTcpbgTxPdk3BDMyXT0EphdIEgT6vLiFBNVmxjIEBO9JcQQj7LMsBAGZQI0EdyBZygQBJj32BO73WBYEmWSXrgRs7HL/BG+dEHUEWe83YASqZmuWBN+91jYEtTKROgTCnxZpBJyIjAkE5vaFBgSO4sNkNhoAjhkAKQA4AFgB2AAfAggCTgJfAqAAEwAKAx0DLwOIA+0EDwTRAAEFkwW6BgEGNAZHBl0GZgAnCIGdILlIIkMnCYGIILlIIkOCAgFkBAABAgO/IkMiQzEZFDEYFBBDIhYnDUy/gQYWJw5MvyJDJw2+REkXFkxLARJEJw6+REkXFkxLARJEUCcETFCwIkM2GgEXNhoCNhoDTwIWJwVMvycHvEgnB0sCvym8SClLAb9LAVcCACcGvEgnBksBvyuBkDC5SIEqFishBE8CuyshBIAIAAAAAAAAACq7JwW+RBeBAwgWJwVMvycFvUglEkQnB71ISwMVEkQpvURLAhVKEkQnBr1ISwMVShJEKSQiuksGVwABEkRLAyIJKUwiuksDIglLB0wiWBJEIksEDEsEIk8CTUsETAkpJE8CuiJLBA8iSwVPAk1LBEwJSwckTwJSEkQjSwQMTwQjTwJNKSRPArojSwQPI08FTwJNTwUkTwJSEkQnBiQiuk8EVwIBEkRLASIJJwZMIrpLASIJSwRMIlgSRCJLAgxLAiJPAk1LAkwJJwYkTwK6IksCDyJLA08CTUsCTAlLBCRPAlISRIEFSwIMSwKBBU8CTScGJE8CuoEFSwIPgQVLA08CTUsEJE8CUhJEI0sCDE8CI08CTScGJE8CuiNLAg8jTwNPAk1PAiRPAlISRCu9SIGQMBJEIkMnBb1FAScHvU4CSCm9TgNIK71OBEiAAQAkTwJUIk8CVCNPAlSBA08CVCcETFCwIkMnBb5EFyIIIgknB75EVwIAKb5EKyEEJboXTwMWSwMVFlcGAk8EUEyAAgAUUEsBFYEUCBZXBgJQTwIWUExQTFAnBExQsCJDKyEEJboXIggWKyEETwK7IkMnBbxIJwe8SCm8SCcFvkwXgSpLAUsDTYEqEkQnB74nC04CTVcCAIACNDISRCm+JwtOAk0nCxJETBREFEQrvEgiQycKvEgnCoATVGVzdGluZyB0ZXN0aW5nIDEyM78nCr1ISSRLAk2BB0sCDE8CgQdPAk1LAQknCk4CuoAHVGVzdGluZxJEKbxIKYAHAAVIZWxsb78pvUgjSwEMSwEjTwJNgQpLAgxPAoEKTwJNSwEJKU4CuoAFSGVsbG8SRCJDNhoBFzYaAkwlCycJTE8CuyJDgABJgY5SMgwNQQAYsYEGshCBBbIZJw+yHicPsh8ksgGzQv/fJEUBJwm9RQFEJEUCSwGBgQQMQQAXSwFJJQsnCUwluhdLAghFAiIIRQJC/+BJFicETFCwIkMqvUUBFEQqgSC5RDEAMgoqJEsDuyqBwD7TKiRJSwPSKoFAJwy7KiSBRbpLAUsDUCcMUBJEKrxIKr5JFERLAYAAEkRLA04CTUsCEkRQKrxIKky/Kr1IgUASRCcQgSC5SCcQvEgiQzYaASRbRDYaAUkVIQUIKEy5SCghBIACEAK7KCEFTwK7IkM2GgEXNhoCSRcoIQVPA7tJIggWKIGOIE8Cu0kjCBYogaggI7oXSwMNRCNLAwshBksBCChMI7oXIQYIKEsBI7oXSwUNRCMISwQlC0xLAQgoTE8Eu0sCgQMIFiiBliBPArtLAoEECBYogaAgTwK7TwKBBQgWKIGMICO6FyEFCChLASO6F0sFDUQjCElLBAgoTCO6FwiBEggoSwEjuhdLBQ1EIwhJTwQIKEwjuhcIKEsBI7oXTwQNRCMITwIIKExPArsiQzYaARc2GgIXNhoDFyghBSW6FyiBjiAluhcogaggI7oXSwUNRCNLBQshBksBCChMI7oXIQYIKEsBI7oXSwYNRCMISwUlCwgoTCW6FyiBliAluhcogaAgJboXKIGMICO6FyEFCChLASO6F08KDUQjCElPBQgoTCO6FwiBEggoSwEjuhdLCA1EIwgjTwgLSwEIKEwjuhcIKEsBI7oXSwcNRCMITwYlCwgoTCW6F08FTwUITwQITwMITwIICBYnBExQsCJDNhoBFzYaAiRTSwElCk8CJRgnCEsCIrpLASUMRExPA1QnCE4CuyJDNhoBFyQnCL1FAUQkSYHogQIMQQAoRwIlCkwlGCcITwIiukxTQQAGSwEiCEUCSwFLAxJAAAhJIghFAUL/z0sBFicETFCwIkMkFkm8SEmABkhtbW1tbb+9SIEGEkQiFkm+JxFOAk0nERJESb1FARRESbxISScMv7xIIkM2GgEXNhoCVwIATBZJvEhMvyJDNhoBFxa+REkVFlcGAkxQJwRMULAiQzYaARcWvEgiQzYaARcWvUUBgAEAJE8CVCcETFCwIkM=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +// Type definitions for ARC-56 structs + +export type InnerStruct = { + c: bigint, + arrArr: bigint[][], + d: bigint +} + + +/** + * Converts the ABI tuple representation of a InnerStruct to the struct representation + */ +export function InnerStructFromTuple(abiTuple: [bigint, bigint[][], bigint]) { + const abiStructType = ABIStructType.fromStruct('InnerStruct', APP_SPEC.structs) + return getStructValueFromTupleValue(abiStructType, abiTuple) as InnerStruct +} + +export type LargeStruct = { + a: Uint8Array, + b: Uint8Array, + c: Uint8Array, + d: Uint8Array, + e: bigint, + f: Uint8Array, + g: Uint8Array, + h: bigint +} + + +/** + * Converts the ABI tuple representation of a LargeStruct to the struct representation + */ +export function LargeStructFromTuple(abiTuple: [Uint8Array, Uint8Array, Uint8Array, Uint8Array, bigint, Uint8Array, Uint8Array, bigint]) { + const abiStructType = ABIStructType.fromStruct('LargeStruct', APP_SPEC.structs) + return getStructValueFromTupleValue(abiStructType, abiTuple) as LargeStruct +} + +export type NestedStruct = { + a: bigint, + inner: InnerStruct, + woah: [bigint, bigint[][], bigint][], + b: bigint +} + + +/** + * Converts the ABI tuple representation of a NestedStruct to the struct representation + */ +export function NestedStructFromTuple(abiTuple: [bigint, InnerStruct, [bigint, bigint[][], bigint][], bigint]) { + const abiStructType = ABIStructType.fromStruct('NestedStruct', APP_SPEC.structs) + return getStructValueFromTupleValue(abiStructType, abiTuple) as NestedStruct +} + +/** + * The argument types for the BoxContract contract + */ +export type BoxContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'store_enums()void': Record + 'read_enums()(uint64,uint64)': Record + 'set_boxes(uint64,byte[],string)void': { + a: bigint | number + b: Uint8Array + c: string + } + 'boxes_exist()(bool,bool,bool,bool)': Record + 'check_keys()void': Record + 'read_boxes()(uint64,byte[],string,uint64)': Record + 'indirect_extract_and_replace()void': Record + 'delete_boxes()void': Record + 'slice_box()void': Record + 'arc4_box()void': Record + 'create_many_ints()void': Record + 'set_many_ints(uint64,uint64)void': { + index: bigint | number + value: bigint | number + } + 'sum_many_ints()uint64': Record + 'test_box_ref()void': Record + 'set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void': { + struct: NestedStruct + } + 'nested_write(uint64,uint64)void': { + index: bigint | number + value: bigint | number + } + 'nested_read(uint64,uint64,uint64)uint64': { + i1: bigint | number + i2: bigint | number + i3: bigint | number + } + 'create_bools()void': Record + 'set_bool(uint64,bool)void': { + index: bigint | number + value: boolean + } + 'sum_bools(uint64)uint64': { + stopAtTotal: bigint | number + } + 'box_map_test()void': Record + 'box_map_set(uint64,string)void': { + key: bigint | number + value: string + } + 'box_map_get(uint64)string': { + key: bigint | number + } + 'box_map_del(uint64)void': { + key: bigint | number + } + 'box_map_exists(uint64)bool': { + key: bigint | number + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'store_enums()void': [] + 'read_enums()(uint64,uint64)': [] + 'set_boxes(uint64,byte[],string)void': [a: bigint | number, b: Uint8Array, c: string] + 'boxes_exist()(bool,bool,bool,bool)': [] + 'check_keys()void': [] + 'read_boxes()(uint64,byte[],string,uint64)': [] + 'indirect_extract_and_replace()void': [] + 'delete_boxes()void': [] + 'slice_box()void': [] + 'arc4_box()void': [] + 'create_many_ints()void': [] + 'set_many_ints(uint64,uint64)void': [index: bigint | number, value: bigint | number] + 'sum_many_ints()uint64': [] + 'test_box_ref()void': [] + 'set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void': [struct: NestedStruct] + 'nested_write(uint64,uint64)void': [index: bigint | number, value: bigint | number] + 'nested_read(uint64,uint64,uint64)uint64': [i1: bigint | number, i2: bigint | number, i3: bigint | number] + 'create_bools()void': [] + 'set_bool(uint64,bool)void': [index: bigint | number, value: boolean] + 'sum_bools(uint64)uint64': [stopAtTotal: bigint | number] + 'box_map_test()void': [] + 'box_map_set(uint64,string)void': [key: bigint | number, value: string] + 'box_map_get(uint64)string': [key: bigint | number] + 'box_map_del(uint64)void': [key: bigint | number] + 'box_map_exists(uint64)bool': [key: bigint | number] + } +} + +/** + * The return type for each method + */ +export type BoxContractReturns = { + 'store_enums()void': void + 'read_enums()(uint64,uint64)': [bigint, bigint] + 'set_boxes(uint64,byte[],string)void': void + 'boxes_exist()(bool,bool,bool,bool)': [boolean, boolean, boolean, boolean] + 'check_keys()void': void + 'read_boxes()(uint64,byte[],string,uint64)': [bigint, Uint8Array, string, bigint] + 'indirect_extract_and_replace()void': void + 'delete_boxes()void': void + 'slice_box()void': void + 'arc4_box()void': void + 'create_many_ints()void': void + 'set_many_ints(uint64,uint64)void': void + 'sum_many_ints()uint64': bigint + 'test_box_ref()void': void + 'set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void': void + 'nested_write(uint64,uint64)void': void + 'nested_read(uint64,uint64,uint64)uint64': bigint + 'create_bools()void': void + 'set_bool(uint64,bool)void': void + 'sum_bools(uint64)uint64': bigint + 'box_map_test()void': void + 'box_map_set(uint64,string)void': void + 'box_map_get(uint64)string': string + 'box_map_del(uint64)void': void + 'box_map_exists(uint64)bool': boolean +} + +/** + * Defines the types of available calls and state of the BoxContract smart contract. + */ +export type BoxContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'store_enums()void' | 'store_enums', { + argsObj: BoxContractArgs['obj']['store_enums()void'] + argsTuple: BoxContractArgs['tuple']['store_enums()void'] + returns: BoxContractReturns['store_enums()void'] + }> + & Record<'read_enums()(uint64,uint64)' | 'read_enums', { + argsObj: BoxContractArgs['obj']['read_enums()(uint64,uint64)'] + argsTuple: BoxContractArgs['tuple']['read_enums()(uint64,uint64)'] + returns: BoxContractReturns['read_enums()(uint64,uint64)'] + }> + & Record<'set_boxes(uint64,byte[],string)void' | 'set_boxes', { + argsObj: BoxContractArgs['obj']['set_boxes(uint64,byte[],string)void'] + argsTuple: BoxContractArgs['tuple']['set_boxes(uint64,byte[],string)void'] + returns: BoxContractReturns['set_boxes(uint64,byte[],string)void'] + }> + & Record<'boxes_exist()(bool,bool,bool,bool)' | 'boxes_exist', { + argsObj: BoxContractArgs['obj']['boxes_exist()(bool,bool,bool,bool)'] + argsTuple: BoxContractArgs['tuple']['boxes_exist()(bool,bool,bool,bool)'] + returns: BoxContractReturns['boxes_exist()(bool,bool,bool,bool)'] + }> + & Record<'check_keys()void' | 'check_keys', { + argsObj: BoxContractArgs['obj']['check_keys()void'] + argsTuple: BoxContractArgs['tuple']['check_keys()void'] + returns: BoxContractReturns['check_keys()void'] + }> + & Record<'read_boxes()(uint64,byte[],string,uint64)' | 'read_boxes', { + argsObj: BoxContractArgs['obj']['read_boxes()(uint64,byte[],string,uint64)'] + argsTuple: BoxContractArgs['tuple']['read_boxes()(uint64,byte[],string,uint64)'] + returns: BoxContractReturns['read_boxes()(uint64,byte[],string,uint64)'] + }> + & Record<'indirect_extract_and_replace()void' | 'indirect_extract_and_replace', { + argsObj: BoxContractArgs['obj']['indirect_extract_and_replace()void'] + argsTuple: BoxContractArgs['tuple']['indirect_extract_and_replace()void'] + returns: BoxContractReturns['indirect_extract_and_replace()void'] + }> + & Record<'delete_boxes()void' | 'delete_boxes', { + argsObj: BoxContractArgs['obj']['delete_boxes()void'] + argsTuple: BoxContractArgs['tuple']['delete_boxes()void'] + returns: BoxContractReturns['delete_boxes()void'] + }> + & Record<'slice_box()void' | 'slice_box', { + argsObj: BoxContractArgs['obj']['slice_box()void'] + argsTuple: BoxContractArgs['tuple']['slice_box()void'] + returns: BoxContractReturns['slice_box()void'] + }> + & Record<'arc4_box()void' | 'arc4_box', { + argsObj: BoxContractArgs['obj']['arc4_box()void'] + argsTuple: BoxContractArgs['tuple']['arc4_box()void'] + returns: BoxContractReturns['arc4_box()void'] + }> + & Record<'create_many_ints()void' | 'create_many_ints', { + argsObj: BoxContractArgs['obj']['create_many_ints()void'] + argsTuple: BoxContractArgs['tuple']['create_many_ints()void'] + returns: BoxContractReturns['create_many_ints()void'] + }> + & Record<'set_many_ints(uint64,uint64)void' | 'set_many_ints', { + argsObj: BoxContractArgs['obj']['set_many_ints(uint64,uint64)void'] + argsTuple: BoxContractArgs['tuple']['set_many_ints(uint64,uint64)void'] + returns: BoxContractReturns['set_many_ints(uint64,uint64)void'] + }> + & Record<'sum_many_ints()uint64' | 'sum_many_ints', { + argsObj: BoxContractArgs['obj']['sum_many_ints()uint64'] + argsTuple: BoxContractArgs['tuple']['sum_many_ints()uint64'] + returns: BoxContractReturns['sum_many_ints()uint64'] + }> + & Record<'test_box_ref()void' | 'test_box_ref', { + argsObj: BoxContractArgs['obj']['test_box_ref()void'] + argsTuple: BoxContractArgs['tuple']['test_box_ref()void'] + returns: BoxContractReturns['test_box_ref()void'] + }> + & Record<'set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void' | 'set_nested_struct', { + argsObj: BoxContractArgs['obj']['set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void'] + argsTuple: BoxContractArgs['tuple']['set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void'] + returns: BoxContractReturns['set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void'] + }> + & Record<'nested_write(uint64,uint64)void' | 'nested_write', { + argsObj: BoxContractArgs['obj']['nested_write(uint64,uint64)void'] + argsTuple: BoxContractArgs['tuple']['nested_write(uint64,uint64)void'] + returns: BoxContractReturns['nested_write(uint64,uint64)void'] + }> + & Record<'nested_read(uint64,uint64,uint64)uint64' | 'nested_read', { + argsObj: BoxContractArgs['obj']['nested_read(uint64,uint64,uint64)uint64'] + argsTuple: BoxContractArgs['tuple']['nested_read(uint64,uint64,uint64)uint64'] + returns: BoxContractReturns['nested_read(uint64,uint64,uint64)uint64'] + }> + & Record<'create_bools()void' | 'create_bools', { + argsObj: BoxContractArgs['obj']['create_bools()void'] + argsTuple: BoxContractArgs['tuple']['create_bools()void'] + returns: BoxContractReturns['create_bools()void'] + }> + & Record<'set_bool(uint64,bool)void' | 'set_bool', { + argsObj: BoxContractArgs['obj']['set_bool(uint64,bool)void'] + argsTuple: BoxContractArgs['tuple']['set_bool(uint64,bool)void'] + returns: BoxContractReturns['set_bool(uint64,bool)void'] + }> + & Record<'sum_bools(uint64)uint64' | 'sum_bools', { + argsObj: BoxContractArgs['obj']['sum_bools(uint64)uint64'] + argsTuple: BoxContractArgs['tuple']['sum_bools(uint64)uint64'] + returns: BoxContractReturns['sum_bools(uint64)uint64'] + }> + & Record<'box_map_test()void' | 'box_map_test', { + argsObj: BoxContractArgs['obj']['box_map_test()void'] + argsTuple: BoxContractArgs['tuple']['box_map_test()void'] + returns: BoxContractReturns['box_map_test()void'] + }> + & Record<'box_map_set(uint64,string)void' | 'box_map_set', { + argsObj: BoxContractArgs['obj']['box_map_set(uint64,string)void'] + argsTuple: BoxContractArgs['tuple']['box_map_set(uint64,string)void'] + returns: BoxContractReturns['box_map_set(uint64,string)void'] + }> + & Record<'box_map_get(uint64)string' | 'box_map_get', { + argsObj: BoxContractArgs['obj']['box_map_get(uint64)string'] + argsTuple: BoxContractArgs['tuple']['box_map_get(uint64)string'] + returns: BoxContractReturns['box_map_get(uint64)string'] + }> + & Record<'box_map_del(uint64)void' | 'box_map_del', { + argsObj: BoxContractArgs['obj']['box_map_del(uint64)void'] + argsTuple: BoxContractArgs['tuple']['box_map_del(uint64)void'] + returns: BoxContractReturns['box_map_del(uint64)void'] + }> + & Record<'box_map_exists(uint64)bool' | 'box_map_exists', { + argsObj: BoxContractArgs['obj']['box_map_exists(uint64)bool'] + argsTuple: BoxContractArgs['tuple']['box_map_exists(uint64)bool'] + returns: BoxContractReturns['box_map_exists(uint64)bool'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + box: { + keys: { + oca: bigint + txn: bigint + boxA: bigint + boxB: Uint8Array + boxC: string + boxD: BinaryState + manyInts: [bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint] + boxRef: BinaryState + boxLarge: LargeStruct + tooManyBools: [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean] + } + maps: { + boxMap: Map + } + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type BoxContractSignatures = keyof BoxContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type BoxContractNonVoidMethodSignatures = keyof BoxContractTypes['methods'] extends infer T ? T extends keyof BoxContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the BoxContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = BoxContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the BoxContract smart contract to the method's return type + */ +export type MethodReturn = BoxContractTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed box state of the application. + */ +export type BoxKeysState = BoxContractTypes['state']['box']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type BoxContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type BoxContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: BoxContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the BoxContract smart contract + */ +export abstract class BoxContractParamsFactory { + /** + * Constructs a no op call for the store_enums()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static storeEnums(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'store_enums()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the read_enums()(uint64,uint64) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static readEnums(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'read_enums()(uint64,uint64)' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the set_boxes(uint64,byte[],string)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setBoxes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_boxes(uint64,byte[],string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the boxes_exist()(bool,bool,bool,bool) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static boxesExist(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'boxes_exist()(bool,bool,bool,bool)' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the check_keys()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static checkKeys(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'check_keys()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the read_boxes()(uint64,byte[],string,uint64) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static readBoxes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'read_boxes()(uint64,byte[],string,uint64)' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the indirect_extract_and_replace()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static indirectExtractAndReplace(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'indirect_extract_and_replace()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the delete_boxes()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static deleteBoxes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'delete_boxes()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the slice_box()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static sliceBox(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'slice_box()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the arc4_box()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc4Box(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc4_box()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the create_many_ints()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static createManyInts(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'create_many_ints()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the set_many_ints(uint64,uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setManyInts(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_many_ints(uint64,uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.index, params.args.value], + } + } + /** + * Constructs a no op call for the sum_many_ints()uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static sumManyInts(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'sum_many_ints()uint64' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_box_ref()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_box_ref()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setNestedStruct(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.struct], + } + } + /** + * Constructs a no op call for the nested_write(uint64,uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static nestedWrite(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'nested_write(uint64,uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.index, params.args.value], + } + } + /** + * Constructs a no op call for the nested_read(uint64,uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static nestedRead(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'nested_read(uint64,uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.i1, params.args.i2, params.args.i3], + } + } + /** + * Constructs a no op call for the create_bools()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static createBools(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'create_bools()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the set_bool(uint64,bool)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setBool(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_bool(uint64,bool)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.index, params.args.value], + } + } + /** + * Constructs a no op call for the sum_bools(uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static sumBools(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'sum_bools(uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.stopAtTotal], + } + } + /** + * Constructs a no op call for the box_map_test()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static boxMapTest(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'box_map_test()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the box_map_set(uint64,string)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static boxMapSet(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'box_map_set(uint64,string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key, params.args.value], + } + } + /** + * Constructs a no op call for the box_map_get(uint64)string ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static boxMapGet(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'box_map_get(uint64)string' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key], + } + } + /** + * Constructs a no op call for the box_map_del(uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static boxMapDel(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'box_map_del(uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key], + } + } + /** + * Constructs a no op call for the box_map_exists(uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static boxMapExists(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'box_map_exists(uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key], + } + } +} + +/** + * A factory to create and deploy one or more instance of the BoxContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class BoxContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `BoxContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new BoxContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new BoxContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the BoxContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: BoxContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new BoxContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the BoxContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the BoxContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the BoxContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new BoxContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the BoxContract smart contract + */ +export class BoxContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `BoxContractClient` + * + * @param appClient An `AppClient` instance which has been created with the BoxContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `BoxContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `BoxContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new BoxContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `BoxContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new BoxContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the BoxContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the BoxContract smart contract using the `store_enums()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + storeEnums: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.storeEnums(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `read_enums()(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + readEnums: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.readEnums(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `set_boxes(uint64,byte[],string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setBoxes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(BoxContractParamsFactory.setBoxes(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `boxes_exist()(bool,bool,bool,bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + boxesExist: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.boxesExist(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `check_keys()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + checkKeys: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.checkKeys(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `read_boxes()(uint64,byte[],string,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + readBoxes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.readBoxes(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `indirect_extract_and_replace()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + indirectExtractAndReplace: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.indirectExtractAndReplace(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `delete_boxes()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + deleteBoxes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.deleteBoxes(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `slice_box()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + sliceBox: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.sliceBox(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `arc4_box()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc4Box: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.arc4Box(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `create_many_ints()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + createManyInts: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.createManyInts(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `set_many_ints(uint64,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setManyInts: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(BoxContractParamsFactory.setManyInts(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `sum_many_ints()uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + sumManyInts: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.sumManyInts(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `test_box_ref()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testBoxRef: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.testBoxRef(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setNestedStruct: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(BoxContractParamsFactory.setNestedStruct(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `nested_write(uint64,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + nestedWrite: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(BoxContractParamsFactory.nestedWrite(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `nested_read(uint64,uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + nestedRead: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(BoxContractParamsFactory.nestedRead(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `create_bools()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + createBools: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.createBools(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `set_bool(uint64,bool)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setBool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(BoxContractParamsFactory.setBool(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `sum_bools(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + sumBools: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(BoxContractParamsFactory.sumBools(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_test()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + boxMapTest: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(BoxContractParamsFactory.boxMapTest(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_set(uint64,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + boxMapSet: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(BoxContractParamsFactory.boxMapSet(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_get(uint64)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + boxMapGet: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(BoxContractParamsFactory.boxMapGet(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_del(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + boxMapDel: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(BoxContractParamsFactory.boxMapDel(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_exists(uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + boxMapExists: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(BoxContractParamsFactory.boxMapExists(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the BoxContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the BoxContract smart contract using the `store_enums()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + storeEnums: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.storeEnums(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `read_enums()(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + readEnums: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.readEnums(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `set_boxes(uint64,byte[],string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setBoxes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.setBoxes(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `boxes_exist()(bool,bool,bool,bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + boxesExist: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.boxesExist(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `check_keys()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + checkKeys: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.checkKeys(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `read_boxes()(uint64,byte[],string,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + readBoxes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.readBoxes(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `indirect_extract_and_replace()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + indirectExtractAndReplace: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.indirectExtractAndReplace(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `delete_boxes()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + deleteBoxes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.deleteBoxes(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `slice_box()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + sliceBox: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.sliceBox(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `arc4_box()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc4Box: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.arc4Box(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `create_many_ints()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + createManyInts: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.createManyInts(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `set_many_ints(uint64,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setManyInts: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.setManyInts(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `sum_many_ints()uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + sumManyInts: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.sumManyInts(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `test_box_ref()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testBoxRef: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.testBoxRef(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setNestedStruct: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.setNestedStruct(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `nested_write(uint64,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + nestedWrite: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.nestedWrite(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `nested_read(uint64,uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + nestedRead: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.nestedRead(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `create_bools()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + createBools: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.createBools(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `set_bool(uint64,bool)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setBool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.setBool(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `sum_bools(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + sumBools: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.sumBools(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_test()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + boxMapTest: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.boxMapTest(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_set(uint64,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + boxMapSet: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.boxMapSet(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_get(uint64)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + boxMapGet: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.boxMapGet(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_del(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + boxMapDel: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.boxMapDel(params)) + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_exists(uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + boxMapExists: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(BoxContractParamsFactory.boxMapExists(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the BoxContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the BoxContract smart contract using the `store_enums()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + storeEnums: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.storeEnums(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['store_enums()void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `read_enums()(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + readEnums: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.readEnums(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['read_enums()(uint64,uint64)'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `set_boxes(uint64,byte[],string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setBoxes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.setBoxes(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['set_boxes(uint64,byte[],string)void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `boxes_exist()(bool,bool,bool,bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + boxesExist: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.boxesExist(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['boxes_exist()(bool,bool,bool,bool)'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `check_keys()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + checkKeys: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.checkKeys(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['check_keys()void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `read_boxes()(uint64,byte[],string,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + readBoxes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.readBoxes(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['read_boxes()(uint64,byte[],string,uint64)'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `indirect_extract_and_replace()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + indirectExtractAndReplace: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.indirectExtractAndReplace(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['indirect_extract_and_replace()void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `delete_boxes()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + deleteBoxes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.deleteBoxes(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['delete_boxes()void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `slice_box()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + sliceBox: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.sliceBox(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['slice_box()void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `arc4_box()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc4Box: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.arc4Box(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['arc4_box()void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `create_many_ints()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + createManyInts: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.createManyInts(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['create_many_ints()void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `set_many_ints(uint64,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setManyInts: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.setManyInts(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['set_many_ints(uint64,uint64)void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `sum_many_ints()uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + sumManyInts: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.sumManyInts(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['sum_many_ints()uint64'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `test_box_ref()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testBoxRef: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.testBoxRef(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['test_box_ref()void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setNestedStruct: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.setNestedStruct(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `nested_write(uint64,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + nestedWrite: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.nestedWrite(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['nested_write(uint64,uint64)void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `nested_read(uint64,uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + nestedRead: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.nestedRead(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['nested_read(uint64,uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `create_bools()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + createBools: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.createBools(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['create_bools()void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `set_bool(uint64,bool)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setBool: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.setBool(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['set_bool(uint64,bool)void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `sum_bools(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + sumBools: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.sumBools(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['sum_bools(uint64)uint64'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_test()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + boxMapTest: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.boxMapTest(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['box_map_test()void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_set(uint64,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + boxMapSet: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.boxMapSet(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['box_map_set(uint64,string)void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_get(uint64)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + boxMapGet: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.boxMapGet(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['box_map_get(uint64)string'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_del(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + boxMapDel: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.boxMapDel(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['box_map_del(uint64)void'])} + }, + + /** + * Makes a call to the BoxContract smart contract using the `box_map_exists(uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + boxMapExists: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(BoxContractParamsFactory.boxMapExists(params)) + return {...result, return: result.return as unknown as (undefined | BoxContractReturns['box_map_exists(uint64)bool'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new BoxContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current BoxContract app + */ + state = { + /** + * Methods to access box state for the current BoxContract app + */ + box: { + /** + * Get all current keyed values from box state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.box.getAll() + return { + oca: result.oca, + txn: result.txn, + boxA: result.box_a, + boxB: result.box_b, + boxC: result.box_c, + boxD: new BinaryStateValue(result.box_d), + manyInts: result.many_ints, + boxRef: new BinaryStateValue(result.box_ref), + boxLarge: result.box_large, + tooManyBools: result.too_many_bools, + } + }, + /** + * Get the current value of the oca key in box state + */ + oca: async (): Promise => { return (await this.appClient.state.box.getValue("oca")) as bigint | undefined }, + /** + * Get the current value of the txn key in box state + */ + txn: async (): Promise => { return (await this.appClient.state.box.getValue("txn")) as bigint | undefined }, + /** + * Get the current value of the box_a key in box state + */ + boxA: async (): Promise => { return (await this.appClient.state.box.getValue("box_a")) as bigint | undefined }, + /** + * Get the current value of the box_b key in box state + */ + boxB: async (): Promise => { return (await this.appClient.state.box.getValue("box_b")) as Uint8Array | undefined }, + /** + * Get the current value of the box_c key in box state + */ + boxC: async (): Promise => { return (await this.appClient.state.box.getValue("box_c")) as string | undefined }, + /** + * Get the current value of the box_d key in box state + */ + boxD: async (): Promise => { return new BinaryStateValue((await this.appClient.state.box.getValue("box_d")) as Uint8Array | undefined) }, + /** + * Get the current value of the many_ints key in box state + */ + manyInts: async (): Promise<[bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint] | undefined> => { return (await this.appClient.state.box.getValue("many_ints")) as [bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint] | undefined }, + /** + * Get the current value of the box_ref key in box state + */ + boxRef: async (): Promise => { return new BinaryStateValue((await this.appClient.state.box.getValue("box_ref")) as Uint8Array | undefined) }, + /** + * Get the current value of the box_large key in box state + */ + boxLarge: async (): Promise => { return (await this.appClient.state.box.getValue("box_large")) as LargeStruct | undefined }, + /** + * Get the current value of the too_many_bools key in box state + */ + tooManyBools: async (): Promise<[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean] | undefined> => { return (await this.appClient.state.box.getValue("too_many_bools")) as [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean] | undefined }, + /** + * Get values from the box_map map in box state + */ + boxMap: { + /** + * Get all current values of the box_map map in box state + */ + getMap: async (): Promise> => { return (await this.appClient.state.box.getMap("box_map")) as Map }, + /** + * Get a current value of the box_map map by key from box state + */ + value: async (key: bigint | number): Promise => { return await this.appClient.state.box.getMapValue("box_map", key) as string | undefined }, + }, + }, + } + + public newGroup(composerConfig?: TransactionComposerConfig): BoxContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a store_enums()void method call against the BoxContract contract + */ + storeEnums(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.storeEnums(params))) + return this + }, + /** + * Add a read_enums()(uint64,uint64) method call against the BoxContract contract + */ + readEnums(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.readEnums(params))) + return this + }, + /** + * Add a set_boxes(uint64,byte[],string)void method call against the BoxContract contract + */ + setBoxes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBoxes(params))) + return this + }, + /** + * Add a boxes_exist()(bool,bool,bool,bool) method call against the BoxContract contract + */ + boxesExist(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxesExist(params))) + return this + }, + /** + * Add a check_keys()void method call against the BoxContract contract + */ + checkKeys(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.checkKeys(params))) + return this + }, + /** + * Add a read_boxes()(uint64,byte[],string,uint64) method call against the BoxContract contract + */ + readBoxes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.readBoxes(params))) + return this + }, + /** + * Add a indirect_extract_and_replace()void method call against the BoxContract contract + */ + indirectExtractAndReplace(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.indirectExtractAndReplace(params))) + return this + }, + /** + * Add a delete_boxes()void method call against the BoxContract contract + */ + deleteBoxes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.deleteBoxes(params))) + return this + }, + /** + * Add a slice_box()void method call against the BoxContract contract + */ + sliceBox(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.sliceBox(params))) + return this + }, + /** + * Add a arc4_box()void method call against the BoxContract contract + */ + arc4Box(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc4Box(params))) + return this + }, + /** + * Add a create_many_ints()void method call against the BoxContract contract + */ + createManyInts(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createManyInts(params))) + return this + }, + /** + * Add a set_many_ints(uint64,uint64)void method call against the BoxContract contract + */ + setManyInts(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setManyInts(params))) + return this + }, + /** + * Add a sum_many_ints()uint64 method call against the BoxContract contract + */ + sumManyInts(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.sumManyInts(params))) + return this + }, + /** + * Add a test_box_ref()void method call against the BoxContract contract + */ + testBoxRef(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testBoxRef(params))) + return this + }, + /** + * Add a set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void method call against the BoxContract contract + */ + setNestedStruct(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setNestedStruct(params))) + return this + }, + /** + * Add a nested_write(uint64,uint64)void method call against the BoxContract contract + */ + nestedWrite(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.nestedWrite(params))) + return this + }, + /** + * Add a nested_read(uint64,uint64,uint64)uint64 method call against the BoxContract contract + */ + nestedRead(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.nestedRead(params))) + return this + }, + /** + * Add a create_bools()void method call against the BoxContract contract + */ + createBools(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createBools(params))) + return this + }, + /** + * Add a set_bool(uint64,bool)void method call against the BoxContract contract + */ + setBool(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBool(params))) + return this + }, + /** + * Add a sum_bools(uint64)uint64 method call against the BoxContract contract + */ + sumBools(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.sumBools(params))) + return this + }, + /** + * Add a box_map_test()void method call against the BoxContract contract + */ + boxMapTest(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapTest(params))) + return this + }, + /** + * Add a box_map_set(uint64,string)void method call against the BoxContract contract + */ + boxMapSet(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapSet(params))) + return this + }, + /** + * Add a box_map_get(uint64)string method call against the BoxContract contract + */ + boxMapGet(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapGet(params))) + return this + }, + /** + * Add a box_map_del(uint64)void method call against the BoxContract contract + */ + boxMapDel(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapDel(params))) + return this + }, + /** + * Add a box_map_exists(uint64)bool method call against the BoxContract contract + */ + boxMapExists(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapExists(params))) + return this + }, + /** + * Add a clear state call to the BoxContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as BoxContractComposer + } +} +export type BoxContractComposer = { + /** + * Calls the store_enums()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + storeEnums(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['store_enums()void'] | undefined]> + + /** + * Calls the read_enums()(uint64,uint64) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + readEnums(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['read_enums()(uint64,uint64)'] | undefined]> + + /** + * Calls the set_boxes(uint64,byte[],string)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setBoxes(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['set_boxes(uint64,byte[],string)void'] | undefined]> + + /** + * Calls the boxes_exist()(bool,bool,bool,bool) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + boxesExist(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['boxes_exist()(bool,bool,bool,bool)'] | undefined]> + + /** + * Calls the check_keys()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + checkKeys(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['check_keys()void'] | undefined]> + + /** + * Calls the read_boxes()(uint64,byte[],string,uint64) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + readBoxes(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['read_boxes()(uint64,byte[],string,uint64)'] | undefined]> + + /** + * Calls the indirect_extract_and_replace()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + indirectExtractAndReplace(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['indirect_extract_and_replace()void'] | undefined]> + + /** + * Calls the delete_boxes()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + deleteBoxes(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['delete_boxes()void'] | undefined]> + + /** + * Calls the slice_box()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + sliceBox(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['slice_box()void'] | undefined]> + + /** + * Calls the arc4_box()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc4Box(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['arc4_box()void'] | undefined]> + + /** + * Calls the create_many_ints()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + createManyInts(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['create_many_ints()void'] | undefined]> + + /** + * Calls the set_many_ints(uint64,uint64)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setManyInts(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['set_many_ints(uint64,uint64)void'] | undefined]> + + /** + * Calls the sum_many_ints()uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + sumManyInts(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['sum_many_ints()uint64'] | undefined]> + + /** + * Calls the test_box_ref()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testBoxRef(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['test_box_ref()void'] | undefined]> + + /** + * Calls the set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setNestedStruct(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['set_nested_struct((uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64))void'] | undefined]> + + /** + * Calls the nested_write(uint64,uint64)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + nestedWrite(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['nested_write(uint64,uint64)void'] | undefined]> + + /** + * Calls the nested_read(uint64,uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + nestedRead(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['nested_read(uint64,uint64,uint64)uint64'] | undefined]> + + /** + * Calls the create_bools()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + createBools(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['create_bools()void'] | undefined]> + + /** + * Calls the set_bool(uint64,bool)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setBool(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['set_bool(uint64,bool)void'] | undefined]> + + /** + * Calls the sum_bools(uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + sumBools(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['sum_bools(uint64)uint64'] | undefined]> + + /** + * Calls the box_map_test()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + boxMapTest(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['box_map_test()void'] | undefined]> + + /** + * Calls the box_map_set(uint64,string)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + boxMapSet(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['box_map_set(uint64,string)void'] | undefined]> + + /** + * Calls the box_map_get(uint64)string ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + boxMapGet(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['box_map_get(uint64)string'] | undefined]> + + /** + * Calls the box_map_del(uint64)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + boxMapDel(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['box_map_del(uint64)void'] | undefined]> + + /** + * Calls the box_map_exists(uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + boxMapExists(params?: CallParams): BoxContractComposer<[...TReturns, BoxContractReturns['box_map_exists(uint64)bool'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the BoxContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): BoxContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): BoxContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type BoxContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/Contract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/Contract.ts new file mode 100644 index 0000000..aa62d61 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/Contract.ts @@ -0,0 +1,621 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"Contract","structs":{},"methods":[{"name":"test_falcon_verify","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_reject_version","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[138,226],"errorMessage":"application exists"},{"pc":[140],"errorMessage":"should be version 0"},{"pc":[229],"errorMessage":"should be version 1"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDYgMAogICAgYnl0ZWNibG9jayBiYXNlNjQoRElFQlF3PT0pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6NAogICAgLy8gY2xhc3MgQ29udHJhY3QoQVJDNENvbnRyYWN0LCBhdm1fdmVyc2lvbj0xMik6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA5CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHhiZTU2NDk5YyAweGFjOGFhYjQyIC8vIG1ldGhvZCAidGVzdF9mYWxjb25fdmVyaWZ5KCl2b2lkIiwgbWV0aG9kICJ0ZXN0X3JlamVjdF92ZXJzaW9uKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggdGVzdF9mYWxjb25fdmVyaWZ5IHRlc3RfcmVqZWN0X3ZlcnNpb24KICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA5OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQVZNMTIuY29udHJhY3QuQ29udHJhY3QudGVzdF9mYWxjb25fdmVyaWZ5W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9mYWxjb25fdmVyaWZ5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FWTTEyL2NvbnRyYWN0LnB5OjcKICAgIC8vIGFzc2VydCBub3Qgb3AuZmFsY29uX3ZlcmlmeShiIiIsIGIiIiwgb3AuYnplcm8oMTc5MykpCiAgICBwdXNoaW50IDE3OTMKICAgIGJ6ZXJvCiAgICBwdXNoYnl0ZXMgMHgKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBmYWxjb25fdmVyaWZ5CiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BVk0xMi9jb250cmFjdC5weTo1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQVZNMTIuY29udHJhY3QuQ29udHJhY3QudGVzdF9yZWplY3RfdmVyc2lvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfcmVqZWN0X3ZlcnNpb246CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6MTEKICAgIC8vIGFwcF92MF90eG4gPSBhcmM0LmFyYzRfY3JlYXRlKENvbnRyYWN0VjApCiAgICBpdHhuX2JlZ2luCiAgICBieXRlY18wIC8vIGJhc2U2NChESUVCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChEREViUVFBYWdBU2c2Qmh5TmhvQWpnRUFBUUF4R1lFRUVqRVlFRVJDQUFneEdSUXhHQlFRUXpGRWdRRVNSSUVCUXc9PSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6MTMKICAgIC8vIGFzc2VydCBhcHAudmVyc2lvbiA9PSAwLCAic2hvdWxkIGJlIHZlcnNpb24gMCIKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwVmVyc2lvbgogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIHNob3VsZCBiZSB2ZXJzaW9uIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BVk0xMi9jb250cmFjdC5weToxNS0xNwogICAgLy8gYXJjNC5hcmM0X3VwZGF0ZSgKICAgIC8vICAgICBDb250cmFjdFYwLnVwZGF0ZSwgYXBwX2lkPWFwcCwgcmVqZWN0X3ZlcnNpb249MSwgY29tcGlsZWQ9Y29tcGlsZV9jb250cmFjdChDb250cmFjdFYxKQogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FWTTEyL2NvbnRyYWN0LnB5OjE2CiAgICAvLyBDb250cmFjdFYwLnVwZGF0ZSwgYXBwX2lkPWFwcCwgcmVqZWN0X3ZlcnNpb249MSwgY29tcGlsZWQ9Y29tcGlsZV9jb250cmFjdChDb250cmFjdFYxKQogICAgYnl0ZWNfMCAvLyBiYXNlNjQoRElFQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoRERFYlFRQWFnQVFrTjQwOE5ob0FqZ0VBQVFBeEdZRUZFakVZRUVSQ0FBZ3hHUlF4R0JRUVF6RkVnUUlTUklFQlF3PT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6MTUtMTcKICAgIC8vIGFyYzQuYXJjNF91cGRhdGUoCiAgICAvLyAgICAgQ29udHJhY3RWMC51cGRhdGUsIGFwcF9pZD1hcHAsIHJlamVjdF92ZXJzaW9uPTEsIGNvbXBpbGVkPWNvbXBpbGVfY29udHJhY3QoQ29udHJhY3RWMSkKICAgIC8vICkKICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BVk0xMi9jb250cmFjdC5weToxNgogICAgLy8gQ29udHJhY3RWMC51cGRhdGUsIGFwcF9pZD1hcHAsIHJlamVjdF92ZXJzaW9uPTEsIGNvbXBpbGVkPWNvbXBpbGVfY29udHJhY3QoQ29udHJhY3RWMSkKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIFJlamVjdFZlcnNpb24KICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6MTUtMTcKICAgIC8vIGFyYzQuYXJjNF91cGRhdGUoCiAgICAvLyAgICAgQ29udHJhY3RWMC51cGRhdGUsIGFwcF9pZD1hcHAsIHJlamVjdF92ZXJzaW9uPTEsIGNvbXBpbGVkPWNvbXBpbGVfY29udHJhY3QoQ29udHJhY3RWMSkKICAgIC8vICkKICAgIHB1c2hieXRlcyAweGEwZTgxODcyIC8vIG1ldGhvZCAidXBkYXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6MTgKICAgIC8vIGFzc2VydCBhcHAudmVyc2lvbiA9PSAxLCAic2hvdWxkIGJlIHZlcnNpb24gMSIKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwVmVyc2lvbgogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gc2hvdWxkIGJlIHZlcnNpb24gMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FWTTEyL2NvbnRyYWN0LnB5OjIwLTI5CiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfYXJncz0oCiAgICAvLyAgICAgICAgIGFyYzQuYXJjNF9zaWduYXR1cmUoCiAgICAvLyAgICAgICAgICAgICBDb250cmFjdFYxLmRlbGV0ZSwKICAgIC8vICAgICAgICAgKSwKICAgIC8vICAgICApLAogICAgLy8gICAgIG9uX2NvbXBsZXRpb249T25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gICAgIHJlamVjdF92ZXJzaW9uPTIsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6MjgKICAgIC8vIHJlamVjdF92ZXJzaW9uPTIsCiAgICBwdXNoaW50IDIKICAgIGl0eG5fZmllbGQgUmVqZWN0VmVyc2lvbgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6MjYKICAgIC8vIG9uX2NvbXBsZXRpb249T25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BVk0xMi9jb250cmFjdC5weToyMi0yNAogICAgLy8gYXJjNC5hcmM0X3NpZ25hdHVyZSgKICAgIC8vICAgICBDb250cmFjdFYxLmRlbGV0ZSwKICAgIC8vICksCiAgICBwdXNoYnl0ZXMgMHgyNDM3OGQzYyAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6MjAKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMiAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FWTTEyL2NvbnRyYWN0LnB5OjIwLTI5CiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfYXJncz0oCiAgICAvLyAgICAgICAgIGFyYzQuYXJjNF9zaWduYXR1cmUoCiAgICAvLyAgICAgICAgICAgICBDb250cmFjdFYxLmRlbGV0ZSwKICAgIC8vICAgICAgICAgKSwKICAgIC8vICAgICApLAogICAgLy8gICAgIG9uX2NvbXBsZXRpb249T25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gICAgIHJlamVjdF92ZXJzaW9uPTIsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FWTTEyL2NvbnRyYWN0LnB5OjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"DCADAQYAJgEEDIEBQzEbQQAdMRkURDEYRIICBL5WSZwErIqrQjYaAI4CAAkAFwAxGRQxGBQQQ4GBDq+AAElPAoUURCJDsSiyQoAxDDEbQQAagASg6BhyNhoAjgEAAQAxGYEEEjEYEERCAAgxGRQxGBQQQzFEgQESRIEBQ7JAI7IQJLIBs7Q9SXIJRBREsSiyQoAxDDEbQQAagAQkN408NhoAjgEAAQAxGYEFEjEYEERCAAgxGRQxGBQQQzFEgQISRIEBQ7JAgQSyGSKyREmyGIAEoOgYcrIaI7IQJLIBs0lyCUQiEkSxgQKyRLIYgQWyGYAEJDeNPLIaI7IQJLIBsyJD","clear":"DIEBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the Contract contract + */ +export type ContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'test_falcon_verify()void': Record + 'test_reject_version()void': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'test_falcon_verify()void': [] + 'test_reject_version()void': [] + } +} + +/** + * The return type for each method + */ +export type ContractReturns = { + 'test_falcon_verify()void': void + 'test_reject_version()void': void +} + +/** + * Defines the types of available calls and state of the Contract smart contract. + */ +export type ContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'test_falcon_verify()void' | 'test_falcon_verify', { + argsObj: ContractArgs['obj']['test_falcon_verify()void'] + argsTuple: ContractArgs['tuple']['test_falcon_verify()void'] + returns: ContractReturns['test_falcon_verify()void'] + }> + & Record<'test_reject_version()void' | 'test_reject_version', { + argsObj: ContractArgs['obj']['test_reject_version()void'] + argsTuple: ContractArgs['tuple']['test_reject_version()void'] + returns: ContractReturns['test_reject_version()void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type ContractSignatures = keyof ContractTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the Contract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = ContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the Contract smart contract to the method's return type + */ +export type MethodReturn = ContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type ContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type ContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: ContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the Contract smart contract + */ +export abstract class ContractParamsFactory { + /** + * Constructs a no op call for the test_falcon_verify()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testFalconVerify(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_falcon_verify()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_reject_version()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testRejectVersion(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_reject_version()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } +} + +/** + * A factory to create and deploy one or more instance of the Contract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class ContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `ContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new ContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new ContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the Contract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: ContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new ContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the Contract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the Contract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the Contract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new ContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the Contract smart contract + */ +export class ContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `ContractClient` + * + * @param appClient An `AppClient` instance which has been created with the Contract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `ContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `ContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new ContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `ContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new ContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the Contract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the Contract smart contract using the `test_falcon_verify()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testFalconVerify: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ContractParamsFactory.testFalconVerify(params)) + }, + + /** + * Makes a call to the Contract smart contract using the `test_reject_version()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testRejectVersion: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ContractParamsFactory.testRejectVersion(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the Contract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the Contract smart contract using the `test_falcon_verify()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testFalconVerify: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ContractParamsFactory.testFalconVerify(params)) + }, + + /** + * Makes a call to the Contract smart contract using the `test_reject_version()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testRejectVersion: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ContractParamsFactory.testRejectVersion(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the Contract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the Contract smart contract using the `test_falcon_verify()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testFalconVerify: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ContractParamsFactory.testFalconVerify(params)) + return {...result, return: result.return as unknown as (undefined | ContractReturns['test_falcon_verify()void'])} + }, + + /** + * Makes a call to the Contract smart contract using the `test_reject_version()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testRejectVersion: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ContractParamsFactory.testRejectVersion(params)) + return {...result, return: result.return as unknown as (undefined | ContractReturns['test_reject_version()void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new ContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current Contract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): ContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a test_falcon_verify()void method call against the Contract contract + */ + testFalconVerify(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testFalconVerify(params))) + return this + }, + /** + * Add a test_reject_version()void method call against the Contract contract + */ + testRejectVersion(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testRejectVersion(params))) + return this + }, + /** + * Add a clear state call to the Contract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as ContractComposer + } +} +export type ContractComposer = { + /** + * Calls the test_falcon_verify()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testFalconVerify(params?: CallParams): ContractComposer<[...TReturns, ContractReturns['test_falcon_verify()void'] | undefined]> + + /** + * Calls the test_reject_version()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testRejectVersion(params?: CallParams): ContractComposer<[...TReturns, ContractReturns['test_reject_version()void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the Contract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): ContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): ContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type ContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/ContractV0.ts b/examples/p-py/projects/p-py-frontend/src/contracts/ContractV0.ts new file mode 100644 index 0000000..4c42a4d --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/ContractV0.ts @@ -0,0 +1,621 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"ContractV0","structs":{},"methods":[{"name":"update","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["UpdateApplication"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[45],"errorMessage":"can only update if caller expects this to be currently be v0"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BVk0xMi9jb250cmFjdC5weTozMgogICAgLy8gY2xhc3MgQ29udHJhY3RWMChBUkM0Q29udHJhY3QsIGF2bV92ZXJzaW9uPTEyKToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDUKICAgIHB1c2hieXRlcyAweGEwZTgxODcyIC8vIG1ldGhvZCAidXBkYXRlKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl91cGRhdGVfcm91dGVAMwogICAgZXJyCgptYWluX3VwZGF0ZV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FWTTEyL2NvbnRyYWN0LnB5OjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoYWxsb3dfYWN0aW9ucz0oIlVwZGF0ZUFwcGxpY2F0aW9uIiwpKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQKICAgIGIgdXBkYXRlCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDU6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BVk0xMi5jb250cmFjdC5Db250cmFjdFYwLnVwZGF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BVk0xMi9jb250cmFjdC5weTozNgogICAgLy8gVHhuLnJlamVjdF92ZXJzaW9uID09IDEKICAgIHR4biBSZWplY3RWZXJzaW9uCiAgICBwdXNoaW50IDEKICAgID09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6MzUtMzcKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgVHhuLnJlamVjdF92ZXJzaW9uID09IDEKICAgIC8vICksICJjYW4gb25seSB1cGRhdGUgaWYgY2FsbGVyIGV4cGVjdHMgdGhpcyB0byBiZSBjdXJyZW50bHkgYmUgdjAiCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgdXBkYXRlIGlmIGNhbGxlciBleHBlY3RzIHRoaXMgdG8gYmUgY3VycmVudGx5IGJlIHYwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPSgiVXBkYXRlQXBwbGljYXRpb24iLCkpCiAgICBwdXNoaW50IDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"DDEbQQAagASg6BhyNhoAjgEAAQAxGYEEEjEYEERCAAgxGRQxGBQQQzFEgQESRIEBQw==","clear":"DIEBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the ContractV0 contract + */ +export type ContractV0Args = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'update()void': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'update()void': [] + } +} + +/** + * The return type for each method + */ +export type ContractV0Returns = { + 'update()void': void +} + +/** + * Defines the types of available calls and state of the ContractV0 smart contract. + */ +export type ContractV0Types = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'update()void' | 'update', { + argsObj: ContractV0Args['obj']['update()void'] + argsTuple: ContractV0Args['tuple']['update()void'] + returns: ContractV0Returns['update()void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type ContractV0Signatures = keyof ContractV0Types['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the ContractV0 smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = ContractV0Types['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the ContractV0 smart contract to the method's return type + */ +export type MethodReturn = ContractV0Types['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type ContractV0CreateCallParams = + | Expand +/** + * Defines supported update method params for this smart contract + */ +export type ContractV0UpdateCallParams = + | Expand & {method: 'update'}> + | Expand & {method: 'update()void'}> +/** + * Defines arguments required for the deploy method. + */ +export type ContractV0DeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: ContractV0CreateCallParams + /** + * Update transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + updateParams?: ContractV0UpdateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the ContractV0 smart contract + */ +export abstract class ContractV0ParamsFactory { + /** + * Gets available update ABI call param factories + */ + static get update() { + return { + _resolveByMethod(params: TParams) { + switch(params.method) { + case 'update': + case 'update()void': + return ContractV0ParamsFactory.update.update(params) + } + throw new Error(`Unknown ' + verb + ' method`) + }, + + /** + * Constructs update ABI call params for the ContractV0 smart contract using the update()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + update(params: CallParams & AppClientCompilationParams): AppClientMethodCallParams & AppClientCompilationParams { + return { + ...params, + method: 'update()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + }, + } + } + +} + +/** + * A factory to create and deploy one or more instance of the ContractV0 smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class ContractV0Factory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `ContractV0Factory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new ContractV0Client(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new ContractV0Client(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the ContractV0 smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: ContractV0DeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + updateParams: params.updateParams?.method ? ContractV0ParamsFactory.update._resolveByMethod(params.updateParams) : params.updateParams ? params.updateParams as (ContractV0UpdateCallParams & { args: Uint8Array[] }) : undefined, + }) + return { result: result.result, appClient: new ContractV0Client(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ContractV0 smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + /** + * Gets available deployUpdate methods + */ + deployUpdate: { + /** + * Updates an existing instance of the ContractV0 smart contract using the update()void ABI method. + * + * @param params The params for the smart contract call + * @returns The deployUpdate params + */ + update: (params: CallParams & AppClientCompilationParams = {args: []}) => { + return this.appFactory.params.deployUpdate(ContractV0ParamsFactory.update.update(params)) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ContractV0 smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ContractV0 smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new ContractV0Client(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the ContractV0 smart contract + */ +export class ContractV0Client { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `ContractV0Client` + * + * @param appClient An `AppClient` instance which has been created with the ContractV0 app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `ContractV0Client` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `ContractV0Client` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new ContractV0Client(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `ContractV0Client` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new ContractV0Client(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available update methods + */ + update: { + /** + * Updates an existing instance of the ContractV0 smart contract using the `update()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The update params + */ + update: (params: CallParams & AppClientCompilationParams & { onComplete?: OnApplicationComplete.UpdateApplication } = {args: []}) => { + return this.appClient.params.update(ContractV0ParamsFactory.update.update(params)) + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the ContractV0 smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available update methods + */ + update: { + /** + * Updates an existing instance of the ContractV0 smart contract using the `update()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The update transaction + */ + update: (params: CallParams & AppClientCompilationParams & { onComplete?: OnApplicationComplete.UpdateApplication } = {args: []}) => { + return this.appClient.createTransaction.update(ContractV0ParamsFactory.update.update(params)) + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the ContractV0 smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available update methods + */ + update: { + /** + * Updates an existing instance of the ContractV0 smart contract using the `update()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The update result + */ + update: async (params: CallParams & AppClientCompilationParams & SendParams & { onComplete?: OnApplicationComplete.UpdateApplication } = {args: []}) => { + const result = await this.appClient.send.update(ContractV0ParamsFactory.update.update(params)) + return {...result, return: result.return as unknown as (undefined | ContractV0Returns['update()void'])} + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the ContractV0 smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new ContractV0Client(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current ContractV0 app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): ContractV0Composer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + get update() { + return { + update: (params: CallParams & AppClientCompilationParams) => { + promiseChain = promiseChain.then(async () => composer.addAppUpdateMethodCall(await client.params.update.update(params))) + return this + }, + } + }, + /** + * Add a clear state call to the ContractV0 contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as ContractV0Composer + } +} +export type ContractV0Composer = { + /** + * Gets available update methods + */ + readonly update: { + /** + * Updates an existing instance of the ContractV0 smart contract using the update()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + update(params?: CallParams): ContractV0Composer<[...TReturns, ContractV0Returns['update()void'] | undefined]> + } + + /** + * Makes a clear_state call to an existing instance of the ContractV0 smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): ContractV0Composer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): ContractV0Composer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type ContractV0ComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/ContractV1.ts b/examples/p-py/projects/p-py-frontend/src/contracts/ContractV1.ts new file mode 100644 index 0000000..7f5e963 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/ContractV1.ts @@ -0,0 +1,621 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"ContractV1","structs":{},"methods":[{"name":"delete","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["DeleteApplication"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[45],"errorMessage":"can only update if caller expects this to be currently be v1"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BVk0xMi9jb250cmFjdC5weTo0MAogICAgLy8gY2xhc3MgQ29udHJhY3RWMShBUkM0Q29udHJhY3QsIGF2bV92ZXJzaW9uPTEyKToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDUKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9kZWxldGVfcm91dGVAMwogICAgZXJyCgptYWluX2RlbGV0ZV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FWTTEyL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoYWxsb3dfYWN0aW9ucz0oIkRlbGV0ZUFwcGxpY2F0aW9uIiwpKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQKICAgIGIgZGVsZXRlCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDU6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BVk0xMi5jb250cmFjdC5Db250cmFjdFYxLmRlbGV0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlbGV0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BVk0xMi9jb250cmFjdC5weTo0NAogICAgLy8gVHhuLnJlamVjdF92ZXJzaW9uID09IDIKICAgIHR4biBSZWplY3RWZXJzaW9uCiAgICBwdXNoaW50IDIKICAgID09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6NDMtNDUKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgVHhuLnJlamVjdF92ZXJzaW9uID09IDIKICAgIC8vICksICJjYW4gb25seSB1cGRhdGUgaWYgY2FsbGVyIGV4cGVjdHMgdGhpcyB0byBiZSBjdXJyZW50bHkgYmUgdjEiCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgdXBkYXRlIGlmIGNhbGxlciBleHBlY3RzIHRoaXMgdG8gYmUgY3VycmVudGx5IGJlIHYxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQVZNMTIvY29udHJhY3QucHk6NDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPSgiRGVsZXRlQXBwbGljYXRpb24iLCkpCiAgICBwdXNoaW50IDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"DDEbQQAagAQkN408NhoAjgEAAQAxGYEFEjEYEERCAAgxGRQxGBQQQzFEgQISRIEBQw==","clear":"DIEBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the ContractV1 contract + */ +export type ContractV1Args = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'delete()void': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'delete()void': [] + } +} + +/** + * The return type for each method + */ +export type ContractV1Returns = { + 'delete()void': void +} + +/** + * Defines the types of available calls and state of the ContractV1 smart contract. + */ +export type ContractV1Types = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'delete()void' | 'delete', { + argsObj: ContractV1Args['obj']['delete()void'] + argsTuple: ContractV1Args['tuple']['delete()void'] + returns: ContractV1Returns['delete()void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type ContractV1Signatures = keyof ContractV1Types['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the ContractV1 smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = ContractV1Types['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the ContractV1 smart contract to the method's return type + */ +export type MethodReturn = ContractV1Types['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type ContractV1CreateCallParams = + | Expand +/** + * Defines supported delete method params for this smart contract + */ +export type ContractV1DeleteCallParams = + | Expand & {method: 'delete'}> + | Expand & {method: 'delete()void'}> +/** + * Defines arguments required for the deploy method. + */ +export type ContractV1DeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: ContractV1CreateCallParams + /** + * Delete transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + deleteParams?: ContractV1DeleteCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the ContractV1 smart contract + */ +export abstract class ContractV1ParamsFactory { + /** + * Gets available delete ABI call param factories + */ + static get delete() { + return { + _resolveByMethod(params: TParams) { + switch(params.method) { + case 'delete': + case 'delete()void': + return ContractV1ParamsFactory.delete.delete(params) + } + throw new Error(`Unknown ' + verb + ' method`) + }, + + /** + * Constructs delete ABI call params for the ContractV1 smart contract using the delete()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + delete(params: CallParams): AppClientMethodCallParams { + return { + ...params, + method: 'delete()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + }, + } + } + +} + +/** + * A factory to create and deploy one or more instance of the ContractV1 smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class ContractV1Factory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `ContractV1Factory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new ContractV1Client(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new ContractV1Client(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the ContractV1 smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: ContractV1DeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + deleteParams: params.deleteParams?.method ? ContractV1ParamsFactory.delete._resolveByMethod(params.deleteParams) : params.deleteParams ? params.deleteParams as (ContractV1DeleteCallParams & { args: Uint8Array[] }) : undefined, + }) + return { result: result.result, appClient: new ContractV1Client(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ContractV1 smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + /** + * Gets available deployDelete methods + */ + deployDelete: { + /** + * Deletes an existing instance of the ContractV1 smart contract using the delete()void ABI method. + * + * @param params The params for the smart contract call + * @returns The deployDelete params + */ + delete: (params: CallParams = {args: []}) => { + return this.appFactory.params.deployDelete(ContractV1ParamsFactory.delete.delete(params)) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ContractV1 smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ContractV1 smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new ContractV1Client(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the ContractV1 smart contract + */ +export class ContractV1Client { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `ContractV1Client` + * + * @param appClient An `AppClient` instance which has been created with the ContractV1 app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `ContractV1Client` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `ContractV1Client` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new ContractV1Client(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `ContractV1Client` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new ContractV1Client(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available delete methods + */ + delete: { + /** + * Deletes an existing instance of the ContractV1 smart contract using the `delete()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The delete params + */ + delete: (params: CallParams & { onComplete?: OnApplicationComplete.DeleteApplication } = {args: []}) => { + return this.appClient.params.delete(ContractV1ParamsFactory.delete.delete(params)) + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the ContractV1 smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available delete methods + */ + delete: { + /** + * Deletes an existing instance of the ContractV1 smart contract using the `delete()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The delete transaction + */ + delete: (params: CallParams & { onComplete?: OnApplicationComplete.DeleteApplication } = {args: []}) => { + return this.appClient.createTransaction.delete(ContractV1ParamsFactory.delete.delete(params)) + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the ContractV1 smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available delete methods + */ + delete: { + /** + * Deletes an existing instance of the ContractV1 smart contract using the `delete()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The delete result + */ + delete: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.DeleteApplication } = {args: []}) => { + const result = await this.appClient.send.delete(ContractV1ParamsFactory.delete.delete(params)) + return {...result, return: result.return as unknown as (undefined | ContractV1Returns['delete()void'])} + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the ContractV1 smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new ContractV1Client(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current ContractV1 app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): ContractV1Composer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + get delete() { + return { + delete: (params: CallParams) => { + promiseChain = promiseChain.then(async () => composer.addAppDeleteMethodCall(await client.params.delete.delete(params))) + return this + }, + } + }, + /** + * Add a clear state call to the ContractV1 contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as ContractV1Composer + } +} +export type ContractV1Composer = { + /** + * Gets available delete methods + */ + readonly delete: { + /** + * Deletes an existing instance of the ContractV1 smart contract using the delete()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + delete(params?: CallParams): ContractV1Composer<[...TReturns, ContractV1Returns['delete()void'] | undefined]> + } + + /** + * Makes a clear_state call to an existing instance of the ContractV1 smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): ContractV1Composer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): ContractV1Composer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type ContractV1ComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/CryptoOpsContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/CryptoOpsContract.ts new file mode 100644 index 0000000..d63f44a --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/CryptoOpsContract.ts @@ -0,0 +1,1422 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"CryptoOpsContract","structs":{},"methods":[{"name":"verify_sha256","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"pad_size"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_sha3_256","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"pad_size"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_keccak_256","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"pad_size"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_sha512_256","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"pad_size"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_ed25519verify","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"},{"type":"byte[]","name":"c"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_ed25519verify_bare","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"},{"type":"byte[]","name":"c"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_ecdsa_verify_k1","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"},{"type":"byte[]","name":"c"},{"type":"byte[]","name":"d"},{"type":"byte[]","name":"e"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_ecdsa_verify_r1","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"},{"type":"byte[]","name":"c"},{"type":"byte[]","name":"d"},{"type":"byte[]","name":"e"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_ecdsa_recover_k1","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"},{"type":"byte[]","name":"c"},{"type":"byte[]","name":"d"}],"returns":{"type":"(byte[],byte[])"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_ecdsa_recover_r1","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"},{"type":"byte[]","name":"c"},{"type":"byte[]","name":"d"}],"returns":{"type":"(byte[],byte[])"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Must fail, AVM does not support Secp256r1 for recover","events":[],"recommendations":{}},{"name":"verify_ecdsa_decompress_k1","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"(byte[],byte[])"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_ecdsa_decompress_r1","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"(byte[],byte[])"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_vrf_verify","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"},{"type":"byte[]","name":"c"}],"returns":{"type":"(byte[],bool)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMzAwMCA0CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMCAweDE1MWY3Yzc1MDAyMCAweDAwMDQgMHgwNjgxMDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6NAogICAgLy8gY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDIwCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHgzNDU2YzRjMyAweGU4NDQyYjg0IDB4NjVmNTY3YWEgMHgyNTg0NTViMSAweDM1YWYwZjM4IDB4NjU4MmM5OTcgMHg2Mjk4ZmZiYiAweDM4ODViNTRmIDB4MjE2NGUwYmYgMHg3NTViNzlhNSAweGYwNmJiMDc3IDB4MTMzZjhjY2MgMHgyZjdjNjhhOSAvLyBtZXRob2QgInZlcmlmeV9zaGEyNTYoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9zaGEzXzI1NihieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2tlY2Nha18yNTYoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9zaGE1MTJfMjU2KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfZWQyNTUxOXZlcmlmeShieXRlW10sYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfZWQyNTUxOXZlcmlmeV9iYXJlKGJ5dGVbXSxieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9lY2RzYV92ZXJpZnlfazEoYnl0ZVtdLGJ5dGVbXSxieXRlW10sYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfZWNkc2FfdmVyaWZ5X3IxKGJ5dGVbXSxieXRlW10sYnl0ZVtdLGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2VjZHNhX3JlY292ZXJfazEoYnl0ZVtdLHVpbnQ2NCxieXRlW10sYnl0ZVtdKShieXRlW10sYnl0ZVtdKSIsIG1ldGhvZCAidmVyaWZ5X2VjZHNhX3JlY292ZXJfcjEoYnl0ZVtdLHVpbnQ2NCxieXRlW10sYnl0ZVtdKShieXRlW10sYnl0ZVtdKSIsIG1ldGhvZCAidmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazEoYnl0ZVtdKShieXRlW10sYnl0ZVtdKSIsIG1ldGhvZCAidmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfcjEoYnl0ZVtdKShieXRlW10sYnl0ZVtdKSIsIG1ldGhvZCAidmVyaWZ5X3ZyZl92ZXJpZnkoYnl0ZVtdLGJ5dGVbXSxieXRlW10pKGJ5dGVbXSxib29sKSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHZlcmlmeV9zaGEyNTYgdmVyaWZ5X3NoYTNfMjU2IHZlcmlmeV9rZWNjYWtfMjU2IHZlcmlmeV9zaGE1MTJfMjU2IHZlcmlmeV9lZDI1NTE5dmVyaWZ5IHZlcmlmeV9lZDI1NTE5dmVyaWZ5X2JhcmUgdmVyaWZ5X2VjZHNhX3ZlcmlmeV9rMSB2ZXJpZnlfZWNkc2FfdmVyaWZ5X3IxIHZlcmlmeV9lY2RzYV9yZWNvdmVyX2sxIHZlcmlmeV9lY2RzYV9yZWNvdmVyX3IxIHZlcmlmeV9lY2RzYV9kZWNvbXByZXNzX2sxIHZlcmlmeV9lY2RzYV9kZWNvbXByZXNzX3IxIHZlcmlmeV92cmZfdmVyaWZ5CiAgICBlcnIKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMjA6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDQgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlYyA0IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCiAgICBmcmFtZV9kaWcgLTEKICAgIHN3aXRjaCBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMyBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzFANAoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDU6CiAgICBpdHhuX3N1Ym1pdAogICAgYiBlbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxCgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzFANDoKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMzoKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANQoKZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA2OgogICAgcmV0c3ViCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkNyeXB0b09wcy5jb250cmFjdC5DcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfc2hhMjU2W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3NoYTI1NjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjcKICAgIC8vIGEgPSBvcC5iemVybyhwYWRfc2l6ZSkgKyBhCiAgICBiemVybwogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjgKICAgIC8vIHJlc3VsdCA9IG9wLnNoYTI1NihhKQogICAgc2hhMjU2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUwMDIwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5DcnlwdG9PcHMuY29udHJhY3QuQ3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X3NoYTNfMjU2W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3NoYTNfMjU2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weToxMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjEzCiAgICAvLyBhID0gb3AuYnplcm8ocGFkX3NpemUpICsgYQogICAgYnplcm8KICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weToxNAogICAgLy8gcmVzdWx0ID0gb3Auc2hhM18yNTYoYSkKICAgIHNoYTNfMjU2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1MDAyMAogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQ3J5cHRvT3BzLmNvbnRyYWN0LkNyeXB0b09wc0NvbnRyYWN0LnZlcmlmeV9rZWNjYWtfMjU2W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2tlY2Nha18yNTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6MTkKICAgIC8vIGEgPSBvcC5iemVybyhwYWRfc2l6ZSkgKyBhCiAgICBiemVybwogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjIwCiAgICAvLyByZXN1bHQgPSBvcC5rZWNjYWsyNTYoYSkKICAgIGtlY2NhazI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weToxNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NTAwMjAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkNyeXB0b09wcy5jb250cmFjdC5DcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfc2hhNTEyXzI1Nltyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9zaGE1MTJfMjU2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weToyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBhID0gb3AuYnplcm8ocGFkX3NpemUpICsgYQogICAgYnplcm8KICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weToyNgogICAgLy8gcmVzdWx0ID0gb3Auc2hhNTEyXzI1NihhKQogICAgc2hhNTEyXzI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weToyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NTAwMjAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkNyeXB0b09wcy5jb250cmFjdC5DcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWQyNTUxOXZlcmlmeVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9lZDI1NTE5dmVyaWZ5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weToyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6MzEKICAgIC8vIGVuc3VyZV9idWRnZXQoMTkwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIHB1c2hpbnQgMTkwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTozMgogICAgLy8gcmVzdWx0ID0gb3AuZWQyNTUxOXZlcmlmeShhLCBiLCBjKQogICAgZWQyNTUxOXZlcmlmeQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTozMwogICAgLy8gcmV0dXJuIGFyYzQuQm9vbChyZXN1bHQpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weToyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQ3J5cHRvT3BzLmNvbnRyYWN0LkNyeXB0b09wc0NvbnRyYWN0LnZlcmlmeV9lZDI1NTE5dmVyaWZ5X2JhcmVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfZWQyNTUxOXZlcmlmeV9iYXJlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTozNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6MzcKICAgIC8vIGVuc3VyZV9idWRnZXQoMTkwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIHB1c2hpbnQgMTkwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTozOAogICAgLy8gcmVzdWx0ID0gb3AuZWQyNTUxOXZlcmlmeV9iYXJlKGEsIGIsIGMpCiAgICBlZDI1NTE5dmVyaWZ5X2JhcmUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6MzkKICAgIC8vIHJldHVybiBhcmM0LkJvb2wocmVzdWx0KQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6MzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkNyeXB0b09wcy5jb250cmFjdC5DcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWNkc2FfdmVyaWZ5X2sxW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2VjZHNhX3ZlcmlmeV9rMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6NDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6NDMKICAgIC8vIGVuc3VyZV9idWRnZXQoMzAwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIGludGNfMiAvLyAzMDAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyByZXN1bHRfazEgPSBvcC5lY2RzYV92ZXJpZnkob3AuRUNEU0EuU2VjcDI1NmsxLCBhLCBiLCBjLCBkLCBlKQogICAgZWNkc2FfdmVyaWZ5IFNlY3AyNTZrMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTo0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkNyeXB0b09wcy5jb250cmFjdC5DcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWNkc2FfdmVyaWZ5X3IxW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2VjZHNhX3ZlcmlmeV9yMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6NDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6NDkKICAgIC8vIGVuc3VyZV9idWRnZXQoMzAwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIGludGNfMiAvLyAzMDAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjUwCiAgICAvLyByZXN1bHRfcjEgPSBvcC5lY2RzYV92ZXJpZnkob3AuRUNEU0EuU2VjcDI1NnIxLCBhLCBiLCBjLCBkLCBlKQogICAgZWNkc2FfdmVyaWZ5IFNlY3AyNTZyMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTo0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkNyeXB0b09wcy5jb250cmFjdC5DcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWNkc2FfcmVjb3Zlcl9rMVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9lY2RzYV9yZWNvdmVyX2sxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6NTcKICAgIC8vIGVuc3VyZV9idWRnZXQoMzAwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIGludGNfMiAvLyAzMDAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjU4CiAgICAvLyByZXR1cm4gb3AuZWNkc2FfcGtfcmVjb3ZlcihvcC5FQ0RTQS5TZWNwMjU2azEsIGEsIGIsIGMsIGQpCiAgICBlY2RzYV9wa19yZWNvdmVyIFNlY3AyNTZrMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA0CiAgICArCiAgICBkaWcgMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18zIC8vIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkNyeXB0b09wcy5jb250cmFjdC5DcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWNkc2FfcmVjb3Zlcl9yMVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9lY2RzYV9yZWNvdmVyX3IxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTo2MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6NjcKICAgIC8vIGVuc3VyZV9idWRnZXQoMzAwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIGludGNfMiAvLyAzMDAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjY4CiAgICAvLyByZXR1cm4gb3AuZWNkc2FfcGtfcmVjb3ZlcihvcC5FQ0RTQS5TZWNwMjU2cjEsIGEsIGIsIGMsIGQpCiAgICBlY2RzYV9wa19yZWNvdmVyIFNlY3AyNTZyMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTo2MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA0CiAgICArCiAgICBkaWcgMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18zIC8vIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkNyeXB0b09wcy5jb250cmFjdC5DcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19rMVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9lY2RzYV9kZWNvbXByZXNzX2sxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTo3MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjcyCiAgICAvLyBlbnN1cmVfYnVkZ2V0KDcwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIHB1c2hpbnQgNzAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjczCiAgICAvLyByZXR1cm4gb3AuZWNkc2FfcGtfZGVjb21wcmVzcyhvcC5FQ0RTQS5TZWNwMjU2azEsIGEpCiAgICBlY2RzYV9wa19kZWNvbXByZXNzIFNlY3AyNTZrMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTo3MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA0CiAgICArCiAgICBkaWcgMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18zIC8vIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkNyeXB0b09wcy5jb250cmFjdC5DcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19yMVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9lY2RzYV9kZWNvbXByZXNzX3IxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5Ojc3CiAgICAvLyBlbnN1cmVfYnVkZ2V0KDcwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIHB1c2hpbnQgNzAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5Ojc4CiAgICAvLyByZXR1cm4gb3AuZWNkc2FfcGtfZGVjb21wcmVzcyhvcC5FQ0RTQS5TZWNwMjU2cjEsIGEpCiAgICBlY2RzYV9wa19kZWNvbXByZXNzIFNlY3AyNTZyMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA0CiAgICArCiAgICBkaWcgMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18zIC8vIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkNyeXB0b09wcy5jb250cmFjdC5DcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfdnJmX3ZlcmlmeVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV92cmZfdmVyaWZ5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTo4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9DcnlwdG9PcHMvY29udHJhY3QucHk6ODIKICAgIC8vIGVuc3VyZV9idWRnZXQoNTcwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIHB1c2hpbnQgNTcwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0NyeXB0b09wcy9jb250cmFjdC5weTo4MwogICAgLy8gcmVzdWx0ID0gb3AudnJmX3ZlcmlmeShvcC5WcmZWZXJpZnkuVnJmQWxnb3JhbmQsIGEsIGIsIGMpCiAgICB2cmZfdmVyaWZ5IFZyZkFsZ29yYW5kCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQ3J5cHRvT3BzL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgcHVzaGJ5dGVzIDB4MDAwMwogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAEAAG4FwQmBQQVH3x1AQAGFR98dQAgAgAEAwaBATEbQQBqMRkURDEYRIINBDRWxMME6EQrhARl9WeqBCWEVbEENa8POARlgsmXBGKY/7sEOIW1TwQhZOC/BHVbeaUE8GuwdwQTP4zMBC98aKk2GgCODQBEAFgAbACAAJQAuQDeAQ4BPgGGAc4CCAJCADEZFDEYFBBDigIAi/6BCgiLADIMDUEAKrGBBrIQgQWyGScEsh4nBLIfi/+NAgALAASzQv/bMgCyAUL/9SKyAUL/74k2GgFXAgA2GgIXr0xQASpMULAjQzYaAVcCADYaAhevTFCYKkxQsCNDNhoBVwIANhoCF69MUAIqTFCwI0M2GgFXAgA2GgIXr0xQAypMULAjQzYaAVcCADYaAlcCADYaA1cCAIHsDiKI/1wEKSJPAlQoTFCwI0M2GgFXAgA2GgJXAgA2GgNXAgCB7A4iiP83hCkiTwJUKExQsCNDNhoBVwIANhoCVwIANhoDVwIANhoEVwIANhoFVwIAJCKI/wgFACkiTwJUKExQsCNDNhoBVwIANhoCVwIANhoDVwIANhoEVwIANhoFVwIAJCKI/tgFASkiTwJUKExQsCNDNhoBVwIANhoCFzYaA1cCADYaBFcCACQiiP6wBwBLARUWVwYCTwJQSRUlCEsCFRZXBgJPA1BMFlcGAitMUE8CUExQKExQsCNDNhoBVwIANhoCFzYaA1cCADYaBFcCACQiiP5oBwFLARUWVwYCTwJQSRUlCEsCFRZXBgJPA1BMFlcGAitMUE8CUExQKExQsCNDNhoBVwIAgbwFIoj+LgYASwEVFlcGAk8CUEkVJQhLAhUWVwYCTwNQTBZXBgIrTFBPAlBMUChMULAjQzYaAVcCAIG8BSKI/fQGAUsBFRZXBgJPAlBJFSUISwIVFlcGAk8DUEwWVwYCK0xQTwJQTFAoTFCwI0M2GgFXAgA2GgJXAgA2GgNXAgCBxCwiiP2u0ABLARUWVwYCTwJQKSJPA1SAAgADTFBMUChMULAjQw==","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the CryptoOpsContract contract + */ +export type CryptoOpsContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'verify_sha256(byte[],uint64)byte[]': { + a: Uint8Array + padSize: bigint | number + } + 'verify_sha3_256(byte[],uint64)byte[]': { + a: Uint8Array + padSize: bigint | number + } + 'verify_keccak_256(byte[],uint64)byte[]': { + a: Uint8Array + padSize: bigint | number + } + 'verify_sha512_256(byte[],uint64)byte[]': { + a: Uint8Array + padSize: bigint | number + } + 'verify_ed25519verify(byte[],byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + c: Uint8Array + } + 'verify_ed25519verify_bare(byte[],byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + c: Uint8Array + } + 'verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + c: Uint8Array + d: Uint8Array + e: Uint8Array + } + 'verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + c: Uint8Array + d: Uint8Array + e: Uint8Array + } + 'verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])': { + a: Uint8Array + b: bigint | number + c: Uint8Array + d: Uint8Array + } + 'verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])': { + a: Uint8Array + b: bigint | number + c: Uint8Array + d: Uint8Array + } + 'verify_ecdsa_decompress_k1(byte[])(byte[],byte[])': { + a: Uint8Array + } + 'verify_ecdsa_decompress_r1(byte[])(byte[],byte[])': { + a: Uint8Array + } + 'verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)': { + a: Uint8Array + b: Uint8Array + c: Uint8Array + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'verify_sha256(byte[],uint64)byte[]': [a: Uint8Array, padSize: bigint | number] + 'verify_sha3_256(byte[],uint64)byte[]': [a: Uint8Array, padSize: bigint | number] + 'verify_keccak_256(byte[],uint64)byte[]': [a: Uint8Array, padSize: bigint | number] + 'verify_sha512_256(byte[],uint64)byte[]': [a: Uint8Array, padSize: bigint | number] + 'verify_ed25519verify(byte[],byte[],byte[])bool': [a: Uint8Array, b: Uint8Array, c: Uint8Array] + 'verify_ed25519verify_bare(byte[],byte[],byte[])bool': [a: Uint8Array, b: Uint8Array, c: Uint8Array] + 'verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool': [a: Uint8Array, b: Uint8Array, c: Uint8Array, d: Uint8Array, e: Uint8Array] + 'verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool': [a: Uint8Array, b: Uint8Array, c: Uint8Array, d: Uint8Array, e: Uint8Array] + 'verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])': [a: Uint8Array, b: bigint | number, c: Uint8Array, d: Uint8Array] + 'verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])': [a: Uint8Array, b: bigint | number, c: Uint8Array, d: Uint8Array] + 'verify_ecdsa_decompress_k1(byte[])(byte[],byte[])': [a: Uint8Array] + 'verify_ecdsa_decompress_r1(byte[])(byte[],byte[])': [a: Uint8Array] + 'verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)': [a: Uint8Array, b: Uint8Array, c: Uint8Array] + } +} + +/** + * The return type for each method + */ +export type CryptoOpsContractReturns = { + 'verify_sha256(byte[],uint64)byte[]': Uint8Array + 'verify_sha3_256(byte[],uint64)byte[]': Uint8Array + 'verify_keccak_256(byte[],uint64)byte[]': Uint8Array + 'verify_sha512_256(byte[],uint64)byte[]': Uint8Array + 'verify_ed25519verify(byte[],byte[],byte[])bool': boolean + 'verify_ed25519verify_bare(byte[],byte[],byte[])bool': boolean + 'verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool': boolean + 'verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool': boolean + 'verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])': [Uint8Array, Uint8Array] + 'verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])': [Uint8Array, Uint8Array] + 'verify_ecdsa_decompress_k1(byte[])(byte[],byte[])': [Uint8Array, Uint8Array] + 'verify_ecdsa_decompress_r1(byte[])(byte[],byte[])': [Uint8Array, Uint8Array] + 'verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)': [Uint8Array, boolean] +} + +/** + * Defines the types of available calls and state of the CryptoOpsContract smart contract. + */ +export type CryptoOpsContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'verify_sha256(byte[],uint64)byte[]' | 'verify_sha256', { + argsObj: CryptoOpsContractArgs['obj']['verify_sha256(byte[],uint64)byte[]'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_sha256(byte[],uint64)byte[]'] + returns: CryptoOpsContractReturns['verify_sha256(byte[],uint64)byte[]'] + }> + & Record<'verify_sha3_256(byte[],uint64)byte[]' | 'verify_sha3_256', { + argsObj: CryptoOpsContractArgs['obj']['verify_sha3_256(byte[],uint64)byte[]'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_sha3_256(byte[],uint64)byte[]'] + returns: CryptoOpsContractReturns['verify_sha3_256(byte[],uint64)byte[]'] + }> + & Record<'verify_keccak_256(byte[],uint64)byte[]' | 'verify_keccak_256', { + argsObj: CryptoOpsContractArgs['obj']['verify_keccak_256(byte[],uint64)byte[]'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_keccak_256(byte[],uint64)byte[]'] + returns: CryptoOpsContractReturns['verify_keccak_256(byte[],uint64)byte[]'] + }> + & Record<'verify_sha512_256(byte[],uint64)byte[]' | 'verify_sha512_256', { + argsObj: CryptoOpsContractArgs['obj']['verify_sha512_256(byte[],uint64)byte[]'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_sha512_256(byte[],uint64)byte[]'] + returns: CryptoOpsContractReturns['verify_sha512_256(byte[],uint64)byte[]'] + }> + & Record<'verify_ed25519verify(byte[],byte[],byte[])bool' | 'verify_ed25519verify', { + argsObj: CryptoOpsContractArgs['obj']['verify_ed25519verify(byte[],byte[],byte[])bool'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_ed25519verify(byte[],byte[],byte[])bool'] + returns: CryptoOpsContractReturns['verify_ed25519verify(byte[],byte[],byte[])bool'] + }> + & Record<'verify_ed25519verify_bare(byte[],byte[],byte[])bool' | 'verify_ed25519verify_bare', { + argsObj: CryptoOpsContractArgs['obj']['verify_ed25519verify_bare(byte[],byte[],byte[])bool'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_ed25519verify_bare(byte[],byte[],byte[])bool'] + returns: CryptoOpsContractReturns['verify_ed25519verify_bare(byte[],byte[],byte[])bool'] + }> + & Record<'verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool' | 'verify_ecdsa_verify_k1', { + argsObj: CryptoOpsContractArgs['obj']['verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool'] + returns: CryptoOpsContractReturns['verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool'] + }> + & Record<'verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool' | 'verify_ecdsa_verify_r1', { + argsObj: CryptoOpsContractArgs['obj']['verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool'] + returns: CryptoOpsContractReturns['verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool'] + }> + & Record<'verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])' | 'verify_ecdsa_recover_k1', { + argsObj: CryptoOpsContractArgs['obj']['verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])'] + returns: CryptoOpsContractReturns['verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])'] + }> + & Record<'verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])' | 'verify_ecdsa_recover_r1', { + argsObj: CryptoOpsContractArgs['obj']['verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])'] + returns: CryptoOpsContractReturns['verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])'] + }> + & Record<'verify_ecdsa_decompress_k1(byte[])(byte[],byte[])' | 'verify_ecdsa_decompress_k1', { + argsObj: CryptoOpsContractArgs['obj']['verify_ecdsa_decompress_k1(byte[])(byte[],byte[])'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_ecdsa_decompress_k1(byte[])(byte[],byte[])'] + returns: CryptoOpsContractReturns['verify_ecdsa_decompress_k1(byte[])(byte[],byte[])'] + }> + & Record<'verify_ecdsa_decompress_r1(byte[])(byte[],byte[])' | 'verify_ecdsa_decompress_r1', { + argsObj: CryptoOpsContractArgs['obj']['verify_ecdsa_decompress_r1(byte[])(byte[],byte[])'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_ecdsa_decompress_r1(byte[])(byte[],byte[])'] + returns: CryptoOpsContractReturns['verify_ecdsa_decompress_r1(byte[])(byte[],byte[])'] + }> + & Record<'verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)' | 'verify_vrf_verify', { + argsObj: CryptoOpsContractArgs['obj']['verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)'] + argsTuple: CryptoOpsContractArgs['tuple']['verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)'] + returns: CryptoOpsContractReturns['verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type CryptoOpsContractSignatures = keyof CryptoOpsContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type CryptoOpsContractNonVoidMethodSignatures = keyof CryptoOpsContractTypes['methods'] extends infer T ? T extends keyof CryptoOpsContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the CryptoOpsContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = CryptoOpsContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the CryptoOpsContract smart contract to the method's return type + */ +export type MethodReturn = CryptoOpsContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type CryptoOpsContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type CryptoOpsContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: CryptoOpsContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the CryptoOpsContract smart contract + */ +export abstract class CryptoOpsContractParamsFactory { + /** + * Constructs a no op call for the verify_sha256(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifySha256(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_sha256(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.padSize], + } + } + /** + * Constructs a no op call for the verify_sha3_256(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifySha3_256(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_sha3_256(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.padSize], + } + } + /** + * Constructs a no op call for the verify_keccak_256(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyKeccak_256(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_keccak_256(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.padSize], + } + } + /** + * Constructs a no op call for the verify_sha512_256(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifySha512_256(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_sha512_256(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.padSize], + } + } + /** + * Constructs a no op call for the verify_ed25519verify(byte[],byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyEd25519verify(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_ed25519verify(byte[],byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_ed25519verify_bare(byte[],byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyEd25519verifyBare(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_ed25519verify_bare(byte[],byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyEcdsaVerifyK1(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c, params.args.d, params.args.e], + } + } + /** + * Constructs a no op call for the verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyEcdsaVerifyR1(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c, params.args.d, params.args.e], + } + } + /** + * Constructs a no op call for the verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[]) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyEcdsaRecoverK1(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c, params.args.d], + } + } + /** + * Constructs a no op call for the verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[]) ABI method + * + * Must fail, AVM does not support Secp256r1 for recover + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyEcdsaRecoverR1(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c, params.args.d], + } + } + /** + * Constructs a no op call for the verify_ecdsa_decompress_k1(byte[])(byte[],byte[]) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyEcdsaDecompressK1(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_ecdsa_decompress_k1(byte[])(byte[],byte[])' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_ecdsa_decompress_r1(byte[])(byte[],byte[]) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyEcdsaDecompressR1(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_ecdsa_decompress_r1(byte[])(byte[],byte[])' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_vrf_verify(byte[],byte[],byte[])(byte[],bool) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyVrfVerify(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } +} + +/** + * A factory to create and deploy one or more instance of the CryptoOpsContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class CryptoOpsContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `CryptoOpsContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new CryptoOpsContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new CryptoOpsContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the CryptoOpsContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: CryptoOpsContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new CryptoOpsContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the CryptoOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the CryptoOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the CryptoOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new CryptoOpsContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the CryptoOpsContract smart contract + */ +export class CryptoOpsContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `CryptoOpsContractClient` + * + * @param appClient An `AppClient` instance which has been created with the CryptoOpsContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `CryptoOpsContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `CryptoOpsContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new CryptoOpsContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `CryptoOpsContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new CryptoOpsContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the CryptoOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_sha256(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifySha256: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifySha256(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_sha3_256(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifySha3_256: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifySha3_256(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_keccak_256(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyKeccak_256: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifyKeccak_256(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_sha512_256(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifySha512_256: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifySha512_256(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ed25519verify(byte[],byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyEd25519verify: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifyEd25519verify(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ed25519verify_bare(byte[],byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyEd25519verifyBare: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifyEd25519verifyBare(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyEcdsaVerifyK1: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifyEcdsaVerifyK1(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyEcdsaVerifyR1: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifyEcdsaVerifyR1(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyEcdsaRecoverK1: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifyEcdsaRecoverK1(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])` ABI method. + * + * Must fail, AVM does not support Secp256r1 for recover + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyEcdsaRecoverR1: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifyEcdsaRecoverR1(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_decompress_k1(byte[])(byte[],byte[])` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyEcdsaDecompressK1: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifyEcdsaDecompressK1(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_decompress_r1(byte[])(byte[],byte[])` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyEcdsaDecompressR1: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifyEcdsaDecompressR1(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyVrfVerify: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(CryptoOpsContractParamsFactory.verifyVrfVerify(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the CryptoOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_sha256(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifySha256: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifySha256(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_sha3_256(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifySha3_256: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifySha3_256(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_keccak_256(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyKeccak_256: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifyKeccak_256(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_sha512_256(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifySha512_256: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifySha512_256(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ed25519verify(byte[],byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyEd25519verify: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifyEd25519verify(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ed25519verify_bare(byte[],byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyEd25519verifyBare: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifyEd25519verifyBare(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyEcdsaVerifyK1: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifyEcdsaVerifyK1(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyEcdsaVerifyR1: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifyEcdsaVerifyR1(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyEcdsaRecoverK1: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifyEcdsaRecoverK1(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])` ABI method. + * + * Must fail, AVM does not support Secp256r1 for recover + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyEcdsaRecoverR1: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifyEcdsaRecoverR1(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_decompress_k1(byte[])(byte[],byte[])` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyEcdsaDecompressK1: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifyEcdsaDecompressK1(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_decompress_r1(byte[])(byte[],byte[])` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyEcdsaDecompressR1: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifyEcdsaDecompressR1(params)) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyVrfVerify: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(CryptoOpsContractParamsFactory.verifyVrfVerify(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the CryptoOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_sha256(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifySha256: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifySha256(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_sha256(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_sha3_256(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifySha3_256: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifySha3_256(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_sha3_256(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_keccak_256(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyKeccak_256: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifyKeccak_256(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_keccak_256(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_sha512_256(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifySha512_256: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifySha512_256(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_sha512_256(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ed25519verify(byte[],byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyEd25519verify: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifyEd25519verify(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_ed25519verify(byte[],byte[],byte[])bool'])} + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ed25519verify_bare(byte[],byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyEd25519verifyBare: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifyEd25519verifyBare(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_ed25519verify_bare(byte[],byte[],byte[])bool'])} + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyEcdsaVerifyK1: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifyEcdsaVerifyK1(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool'])} + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyEcdsaVerifyR1: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifyEcdsaVerifyR1(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool'])} + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyEcdsaRecoverK1: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifyEcdsaRecoverK1(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])'])} + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])` ABI method. + * + * Must fail, AVM does not support Secp256r1 for recover + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyEcdsaRecoverR1: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifyEcdsaRecoverR1(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])'])} + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_decompress_k1(byte[])(byte[],byte[])` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyEcdsaDecompressK1: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifyEcdsaDecompressK1(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_ecdsa_decompress_k1(byte[])(byte[],byte[])'])} + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_ecdsa_decompress_r1(byte[])(byte[],byte[])` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyEcdsaDecompressR1: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifyEcdsaDecompressR1(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_ecdsa_decompress_r1(byte[])(byte[],byte[])'])} + }, + + /** + * Makes a call to the CryptoOpsContract smart contract using the `verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyVrfVerify: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(CryptoOpsContractParamsFactory.verifyVrfVerify(params)) + return {...result, return: result.return as unknown as (undefined | CryptoOpsContractReturns['verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new CryptoOpsContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current CryptoOpsContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): CryptoOpsContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify_sha256(byte[],uint64)byte[] method call against the CryptoOpsContract contract + */ + verifySha256(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifySha256(params))) + return this + }, + /** + * Add a verify_sha3_256(byte[],uint64)byte[] method call against the CryptoOpsContract contract + */ + verifySha3_256(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifySha3_256(params))) + return this + }, + /** + * Add a verify_keccak_256(byte[],uint64)byte[] method call against the CryptoOpsContract contract + */ + verifyKeccak_256(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyKeccak_256(params))) + return this + }, + /** + * Add a verify_sha512_256(byte[],uint64)byte[] method call against the CryptoOpsContract contract + */ + verifySha512_256(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifySha512_256(params))) + return this + }, + /** + * Add a verify_ed25519verify(byte[],byte[],byte[])bool method call against the CryptoOpsContract contract + */ + verifyEd25519verify(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyEd25519verify(params))) + return this + }, + /** + * Add a verify_ed25519verify_bare(byte[],byte[],byte[])bool method call against the CryptoOpsContract contract + */ + verifyEd25519verifyBare(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyEd25519verifyBare(params))) + return this + }, + /** + * Add a verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool method call against the CryptoOpsContract contract + */ + verifyEcdsaVerifyK1(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyEcdsaVerifyK1(params))) + return this + }, + /** + * Add a verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool method call against the CryptoOpsContract contract + */ + verifyEcdsaVerifyR1(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyEcdsaVerifyR1(params))) + return this + }, + /** + * Add a verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[]) method call against the CryptoOpsContract contract + */ + verifyEcdsaRecoverK1(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyEcdsaRecoverK1(params))) + return this + }, + /** + * Add a verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[]) method call against the CryptoOpsContract contract + */ + verifyEcdsaRecoverR1(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyEcdsaRecoverR1(params))) + return this + }, + /** + * Add a verify_ecdsa_decompress_k1(byte[])(byte[],byte[]) method call against the CryptoOpsContract contract + */ + verifyEcdsaDecompressK1(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyEcdsaDecompressK1(params))) + return this + }, + /** + * Add a verify_ecdsa_decompress_r1(byte[])(byte[],byte[]) method call against the CryptoOpsContract contract + */ + verifyEcdsaDecompressR1(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyEcdsaDecompressR1(params))) + return this + }, + /** + * Add a verify_vrf_verify(byte[],byte[],byte[])(byte[],bool) method call against the CryptoOpsContract contract + */ + verifyVrfVerify(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyVrfVerify(params))) + return this + }, + /** + * Add a clear state call to the CryptoOpsContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as CryptoOpsContractComposer + } +} +export type CryptoOpsContractComposer = { + /** + * Calls the verify_sha256(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifySha256(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_sha256(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_sha3_256(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifySha3_256(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_sha3_256(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_keccak_256(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyKeccak_256(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_keccak_256(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_sha512_256(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifySha512_256(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_sha512_256(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_ed25519verify(byte[],byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyEd25519verify(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_ed25519verify(byte[],byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_ed25519verify_bare(byte[],byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyEd25519verifyBare(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_ed25519verify_bare(byte[],byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyEcdsaVerifyK1(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyEcdsaVerifyR1(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[]) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyEcdsaRecoverK1(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])'] | undefined]> + + /** + * Calls the verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[]) ABI method. + * + * Must fail, AVM does not support Secp256r1 for recover + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyEcdsaRecoverR1(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])'] | undefined]> + + /** + * Calls the verify_ecdsa_decompress_k1(byte[])(byte[],byte[]) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyEcdsaDecompressK1(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_ecdsa_decompress_k1(byte[])(byte[],byte[])'] | undefined]> + + /** + * Calls the verify_ecdsa_decompress_r1(byte[])(byte[],byte[]) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyEcdsaDecompressR1(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_ecdsa_decompress_r1(byte[])(byte[],byte[])'] | undefined]> + + /** + * Calls the verify_vrf_verify(byte[],byte[],byte[])(byte[],bool) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyVrfVerify(params?: CallParams): CryptoOpsContractComposer<[...TReturns, CryptoOpsContractReturns['verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the CryptoOpsContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): CryptoOpsContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): CryptoOpsContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type CryptoOpsContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/DynamicArrayInitContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/DynamicArrayInitContract.ts new file mode 100644 index 0000000..3ed4087 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/DynamicArrayInitContract.ts @@ -0,0 +1,755 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"DynamicArrayInitContract","structs":{},"methods":[{"name":"test_immutable_array_init","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_immutable_array_init_without_type_generic","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_reference_array_init","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_reference_array_init_without_type_generic","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDggMyAwCiAgICBieXRlY2Jsb2NrIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0ODAKICAgIC8vIGNsYXNzIER5bmFtaWNBcnJheUluaXRDb250cmFjdChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4ODQzNGJhMmEgMHg2M2FhYmJhMCAweGRiYWYwMzRlIDB4YTlkMTQ1NTQgLy8gbWV0aG9kICJ0ZXN0X2ltbXV0YWJsZV9hcnJheV9pbml0KCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2ltbXV0YWJsZV9hcnJheV9pbml0X3dpdGhvdXRfdHlwZV9nZW5lcmljKCl2b2lkIiwgbWV0aG9kICJ0ZXN0X3JlZmVyZW5jZV9hcnJheV9pbml0KCl2b2lkIiwgbWV0aG9kICJ0ZXN0X3JlZmVyZW5jZV9hcnJheV9pbml0X3dpdGhvdXRfdHlwZV9nZW5lcmljKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggdGVzdF9pbW11dGFibGVfYXJyYXlfaW5pdCB0ZXN0X2ltbXV0YWJsZV9hcnJheV9pbml0X3dpdGhvdXRfdHlwZV9nZW5lcmljIHRlc3RfcmVmZXJlbmNlX2FycmF5X2luaXQgdGVzdF9yZWZlcmVuY2VfYXJyYXlfaW5pdF93aXRob3V0X3R5cGVfZ2VuZXJpYwogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDExOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5EeW5hbWljQXJyYXlJbml0Q29udHJhY3QudGVzdF9pbW11dGFibGVfYXJyYXlfaW5pdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfaW1tdXRhYmxlX2FycmF5X2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0ODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuRHluYW1pY0FycmF5SW5pdENvbnRyYWN0LnRlc3RfaW1tdXRhYmxlX2FycmF5X2luaXRfd2l0aG91dF90eXBlX2dlbmVyaWNbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2ltbXV0YWJsZV9hcnJheV9pbml0X3dpdGhvdXRfdHlwZV9nZW5lcmljOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkR5bmFtaWNBcnJheUluaXRDb250cmFjdC50ZXN0X3JlZmVyZW5jZV9hcnJheV9pbml0W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9yZWZlcmVuY2VfYXJyYXlfaW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjUyNwogICAgLy8gYTEgPSBSZWZlcmVuY2VBcnJheVtVSW50NjRdKChVSW50NjQoMSksIFVJbnQ2NCgyKSwgVUludDY0KDMpKSkKICAgIGJ5dGVjXzAgLy8gMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjUzMAogICAgLy8gYXNzZXJ0IGExLmxlbmd0aCA9PSBhMi5sZW5ndGgKICAgIGR1cG4gMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgLwogICAgaW50Y18yIC8vIDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjUzMQogICAgLy8gYXNzZXJ0IGExWzBdID09IGEyWzBdCiAgICBkdXAKICAgIGludGNfMyAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjUzMgogICAgLy8gYXNzZXJ0IGExWzFdID09IGEyWzFdCiAgICBkdXAKICAgIGludGNfMSAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgcHVzaGludCAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1MzMKICAgIC8vIGFzc2VydCBhMVsyXSA9PSBhMlsyXQogICAgcHVzaGludCAxNgogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMiAvLyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICBkdXBuIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjUzNwogICAgLy8gYXNzZXJ0IGExWzBdID09IGEzWzBdCiAgICBpbnRjXzMgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1MzgKICAgIC8vIGFzc2VydCBhMVsxXSA9PSBhM1sxXQogICAgZHVwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIHB1c2hpbnQgMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTM5CiAgICAvLyBhc3NlcnQgYTFbMl0gPT0gYTNbMl0KICAgIHB1c2hpbnQgMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzIgLy8gMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTQyCiAgICAvLyBhc3NlcnQgYTEubGVuZ3RoID09IGE0Lmxlbmd0aAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICAvCiAgICBpbnRjXzIgLy8gMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTQzCiAgICAvLyBhc3NlcnQgYTFbMF0gPT0gYTRbMF0KICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTQ0CiAgICAvLyBhc3NlcnQgYTFbMV0gPT0gYTRbMV0KICAgIGR1cAogICAgaW50Y18xIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU0NQogICAgLy8gYXNzZXJ0IGExWzJdID09IGE0WzJdCiAgICBwdXNoaW50IDE2CiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18yIC8vIDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjUyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5EeW5hbWljQXJyYXlJbml0Q29udHJhY3QudGVzdF9yZWZlcmVuY2VfYXJyYXlfaW5pdF93aXRob3V0X3R5cGVfZ2VuZXJpY1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfcmVmZXJlbmNlX2FycmF5X2luaXRfd2l0aG91dF90eXBlX2dlbmVyaWM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NDkKICAgIC8vIGExID0gUmVmZXJlbmNlQXJyYXkoKFVJbnQ2NCgxKSwgVUludDY0KDIpLCBVSW50NjQoMykpKQogICAgYnl0ZWNfMCAvLyAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTUyCiAgICAvLyBhc3NlcnQgYTEubGVuZ3RoID09IGEyLmxlbmd0aAogICAgZHVwbiAyCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICAvCiAgICBpbnRjXzIgLy8gMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTUzCiAgICAvLyBhc3NlcnQgYTFbMF0gPT0gYTJbMF0KICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTU0CiAgICAvLyBhc3NlcnQgYTFbMV0gPT0gYTJbMV0KICAgIGR1cAogICAgaW50Y18xIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU1NQogICAgLy8gYXNzZXJ0IGExWzJdID09IGEyWzJdCiAgICBwdXNoaW50IDE2CiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18yIC8vIDMKICAgID09CiAgICBhc3NlcnQKICAgIGR1cG4gMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTU5CiAgICAvLyBhc3NlcnQgYTFbMF0gPT0gYTNbMF0KICAgIGludGNfMyAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU2MAogICAgLy8gYXNzZXJ0IGExWzFdID09IGEzWzFdCiAgICBkdXAKICAgIGludGNfMSAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgcHVzaGludCAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NjEKICAgIC8vIGFzc2VydCBhMVsyXSA9PSBhM1syXQogICAgcHVzaGludCAxNgogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMiAvLyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NjQKICAgIC8vIGFzc2VydCBhMS5sZW5ndGggPT0gYTQubGVuZ3RoCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIC8KICAgIGludGNfMiAvLyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NjUKICAgIC8vIGFzc2VydCBhMVswXSA9PSBhNFswXQogICAgZHVwCiAgICBpbnRjXzMgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NjYKICAgIC8vIGFzc2VydCBhMVsxXSA9PSBhNFsxXQogICAgZHVwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIHB1c2hpbnQgMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTY3CiAgICAvLyBhc3NlcnQgYTFbMl0gPT0gYTRbMl0KICAgIHB1c2hpbnQgMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzIgLy8gMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAEAQgDACYBGAAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAzEbQQArMRkURDEYRIIEBIQ0uioEY6q7oATbrwNOBKnRRVQ2GgCOBAAJAAsADQBZADEZFDEYFBBDIkMiQyhHAhUjCiQSREklWyISREkjW4ECEkSBEFskEkRHAiVbIhJESSNbgQISRIEQWyQSREkVIwokEkRJJVsiEkRJI1uBAhJEgRBbJBJEIkMoRwIVIwokEkRJJVsiEkRJI1uBAhJEgRBbJBJERwIlWyISREkjW4ECEkSBEFskEkRJFSMKJBJESSVbIhJESSNbgQISRIEQWyQSRCJD","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the DynamicArrayInitContract contract + */ +export type DynamicArrayInitContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'test_immutable_array_init()void': Record + 'test_immutable_array_init_without_type_generic()void': Record + 'test_reference_array_init()void': Record + 'test_reference_array_init_without_type_generic()void': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'test_immutable_array_init()void': [] + 'test_immutable_array_init_without_type_generic()void': [] + 'test_reference_array_init()void': [] + 'test_reference_array_init_without_type_generic()void': [] + } +} + +/** + * The return type for each method + */ +export type DynamicArrayInitContractReturns = { + 'test_immutable_array_init()void': void + 'test_immutable_array_init_without_type_generic()void': void + 'test_reference_array_init()void': void + 'test_reference_array_init_without_type_generic()void': void +} + +/** + * Defines the types of available calls and state of the DynamicArrayInitContract smart contract. + */ +export type DynamicArrayInitContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'test_immutable_array_init()void' | 'test_immutable_array_init', { + argsObj: DynamicArrayInitContractArgs['obj']['test_immutable_array_init()void'] + argsTuple: DynamicArrayInitContractArgs['tuple']['test_immutable_array_init()void'] + returns: DynamicArrayInitContractReturns['test_immutable_array_init()void'] + }> + & Record<'test_immutable_array_init_without_type_generic()void' | 'test_immutable_array_init_without_type_generic', { + argsObj: DynamicArrayInitContractArgs['obj']['test_immutable_array_init_without_type_generic()void'] + argsTuple: DynamicArrayInitContractArgs['tuple']['test_immutable_array_init_without_type_generic()void'] + returns: DynamicArrayInitContractReturns['test_immutable_array_init_without_type_generic()void'] + }> + & Record<'test_reference_array_init()void' | 'test_reference_array_init', { + argsObj: DynamicArrayInitContractArgs['obj']['test_reference_array_init()void'] + argsTuple: DynamicArrayInitContractArgs['tuple']['test_reference_array_init()void'] + returns: DynamicArrayInitContractReturns['test_reference_array_init()void'] + }> + & Record<'test_reference_array_init_without_type_generic()void' | 'test_reference_array_init_without_type_generic', { + argsObj: DynamicArrayInitContractArgs['obj']['test_reference_array_init_without_type_generic()void'] + argsTuple: DynamicArrayInitContractArgs['tuple']['test_reference_array_init_without_type_generic()void'] + returns: DynamicArrayInitContractReturns['test_reference_array_init_without_type_generic()void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type DynamicArrayInitContractSignatures = keyof DynamicArrayInitContractTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the DynamicArrayInitContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = DynamicArrayInitContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the DynamicArrayInitContract smart contract to the method's return type + */ +export type MethodReturn = DynamicArrayInitContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type DynamicArrayInitContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type DynamicArrayInitContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: DynamicArrayInitContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the DynamicArrayInitContract smart contract + */ +export abstract class DynamicArrayInitContractParamsFactory { + /** + * Constructs a no op call for the test_immutable_array_init()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testImmutableArrayInit(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_immutable_array_init()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_immutable_array_init_without_type_generic()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testImmutableArrayInitWithoutTypeGeneric(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_immutable_array_init_without_type_generic()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_reference_array_init()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testReferenceArrayInit(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_reference_array_init()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_reference_array_init_without_type_generic()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testReferenceArrayInitWithoutTypeGeneric(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_reference_array_init_without_type_generic()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } +} + +/** + * A factory to create and deploy one or more instance of the DynamicArrayInitContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class DynamicArrayInitContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `DynamicArrayInitContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new DynamicArrayInitContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new DynamicArrayInitContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the DynamicArrayInitContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: DynamicArrayInitContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new DynamicArrayInitContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the DynamicArrayInitContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the DynamicArrayInitContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the DynamicArrayInitContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new DynamicArrayInitContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the DynamicArrayInitContract smart contract + */ +export class DynamicArrayInitContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `DynamicArrayInitContractClient` + * + * @param appClient An `AppClient` instance which has been created with the DynamicArrayInitContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `DynamicArrayInitContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `DynamicArrayInitContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new DynamicArrayInitContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `DynamicArrayInitContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new DynamicArrayInitContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the DynamicArrayInitContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the DynamicArrayInitContract smart contract using the `test_immutable_array_init()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testImmutableArrayInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(DynamicArrayInitContractParamsFactory.testImmutableArrayInit(params)) + }, + + /** + * Makes a call to the DynamicArrayInitContract smart contract using the `test_immutable_array_init_without_type_generic()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testImmutableArrayInitWithoutTypeGeneric: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(DynamicArrayInitContractParamsFactory.testImmutableArrayInitWithoutTypeGeneric(params)) + }, + + /** + * Makes a call to the DynamicArrayInitContract smart contract using the `test_reference_array_init()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testReferenceArrayInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(DynamicArrayInitContractParamsFactory.testReferenceArrayInit(params)) + }, + + /** + * Makes a call to the DynamicArrayInitContract smart contract using the `test_reference_array_init_without_type_generic()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testReferenceArrayInitWithoutTypeGeneric: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(DynamicArrayInitContractParamsFactory.testReferenceArrayInitWithoutTypeGeneric(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the DynamicArrayInitContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the DynamicArrayInitContract smart contract using the `test_immutable_array_init()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testImmutableArrayInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(DynamicArrayInitContractParamsFactory.testImmutableArrayInit(params)) + }, + + /** + * Makes a call to the DynamicArrayInitContract smart contract using the `test_immutable_array_init_without_type_generic()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testImmutableArrayInitWithoutTypeGeneric: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(DynamicArrayInitContractParamsFactory.testImmutableArrayInitWithoutTypeGeneric(params)) + }, + + /** + * Makes a call to the DynamicArrayInitContract smart contract using the `test_reference_array_init()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testReferenceArrayInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(DynamicArrayInitContractParamsFactory.testReferenceArrayInit(params)) + }, + + /** + * Makes a call to the DynamicArrayInitContract smart contract using the `test_reference_array_init_without_type_generic()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testReferenceArrayInitWithoutTypeGeneric: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(DynamicArrayInitContractParamsFactory.testReferenceArrayInitWithoutTypeGeneric(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the DynamicArrayInitContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the DynamicArrayInitContract smart contract using the `test_immutable_array_init()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testImmutableArrayInit: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(DynamicArrayInitContractParamsFactory.testImmutableArrayInit(params)) + return {...result, return: result.return as unknown as (undefined | DynamicArrayInitContractReturns['test_immutable_array_init()void'])} + }, + + /** + * Makes a call to the DynamicArrayInitContract smart contract using the `test_immutable_array_init_without_type_generic()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testImmutableArrayInitWithoutTypeGeneric: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(DynamicArrayInitContractParamsFactory.testImmutableArrayInitWithoutTypeGeneric(params)) + return {...result, return: result.return as unknown as (undefined | DynamicArrayInitContractReturns['test_immutable_array_init_without_type_generic()void'])} + }, + + /** + * Makes a call to the DynamicArrayInitContract smart contract using the `test_reference_array_init()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testReferenceArrayInit: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(DynamicArrayInitContractParamsFactory.testReferenceArrayInit(params)) + return {...result, return: result.return as unknown as (undefined | DynamicArrayInitContractReturns['test_reference_array_init()void'])} + }, + + /** + * Makes a call to the DynamicArrayInitContract smart contract using the `test_reference_array_init_without_type_generic()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testReferenceArrayInitWithoutTypeGeneric: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(DynamicArrayInitContractParamsFactory.testReferenceArrayInitWithoutTypeGeneric(params)) + return {...result, return: result.return as unknown as (undefined | DynamicArrayInitContractReturns['test_reference_array_init_without_type_generic()void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new DynamicArrayInitContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current DynamicArrayInitContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): DynamicArrayInitContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a test_immutable_array_init()void method call against the DynamicArrayInitContract contract + */ + testImmutableArrayInit(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testImmutableArrayInit(params))) + return this + }, + /** + * Add a test_immutable_array_init_without_type_generic()void method call against the DynamicArrayInitContract contract + */ + testImmutableArrayInitWithoutTypeGeneric(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testImmutableArrayInitWithoutTypeGeneric(params))) + return this + }, + /** + * Add a test_reference_array_init()void method call against the DynamicArrayInitContract contract + */ + testReferenceArrayInit(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testReferenceArrayInit(params))) + return this + }, + /** + * Add a test_reference_array_init_without_type_generic()void method call against the DynamicArrayInitContract contract + */ + testReferenceArrayInitWithoutTypeGeneric(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testReferenceArrayInitWithoutTypeGeneric(params))) + return this + }, + /** + * Add a clear state call to the DynamicArrayInitContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as DynamicArrayInitContractComposer + } +} +export type DynamicArrayInitContractComposer = { + /** + * Calls the test_immutable_array_init()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testImmutableArrayInit(params?: CallParams): DynamicArrayInitContractComposer<[...TReturns, DynamicArrayInitContractReturns['test_immutable_array_init()void'] | undefined]> + + /** + * Calls the test_immutable_array_init_without_type_generic()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testImmutableArrayInitWithoutTypeGeneric(params?: CallParams): DynamicArrayInitContractComposer<[...TReturns, DynamicArrayInitContractReturns['test_immutable_array_init_without_type_generic()void'] | undefined]> + + /** + * Calls the test_reference_array_init()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testReferenceArrayInit(params?: CallParams): DynamicArrayInitContractComposer<[...TReturns, DynamicArrayInitContractReturns['test_reference_array_init()void'] | undefined]> + + /** + * Calls the test_reference_array_init_without_type_generic()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testReferenceArrayInitWithoutTypeGeneric(params?: CallParams): DynamicArrayInitContractComposer<[...TReturns, DynamicArrayInitContractReturns['test_reference_array_init_without_type_generic()void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the DynamicArrayInitContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): DynamicArrayInitContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): DynamicArrayInitContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type DynamicArrayInitContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/DynamicItxnGroup.ts b/examples/p-py/projects/p-py-frontend/src/contracts/DynamicItxnGroup.ts new file mode 100644 index 0000000..8c63c52 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/DynamicItxnGroup.ts @@ -0,0 +1,629 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"DynamicItxnGroup","structs":{},"methods":[{"name":"test_firstly","args":[{"type":"address[]","name":"addresses"},{"type":"pay","name":"funds"},{"type":"uint64","name":"verifier"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_looply","args":[{"type":"address[]","name":"addresses"},{"type":"pay","name":"funds"},{"type":"uint64","name":"verifier"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[85,217],"errorMessage":"Funds must be sent to app"},{"pc":[141,250],"errorMessage":"index access is out of bounds"},{"pc":[89,220],"errorMessage":"invalid array length header"},{"pc":[94,225],"errorMessage":"must provide some accounts"},{"pc":[72,204],"errorMessage":"transaction type is pay"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMzIgNgogICAgYnl0ZWNibG9jayAweDY1YTlhZWNjICJhYmMiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjEzCiAgICAvLyBjbGFzcyBEeW5hbWljSXR4bkdyb3VwKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA5CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHgxNzM5MTc4NCAweDNmMTBhZWE3IC8vIG1ldGhvZCAidGVzdF9maXJzdGx5KGFkZHJlc3NbXSxwYXksdWludDY0KXZvaWQiLCBtZXRob2QgInRlc3RfbG9vcGx5KGFkZHJlc3NbXSxwYXksdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCB0ZXN0X2ZpcnN0bHkgdGVzdF9sb29wbHkKICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA5OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuZHluYW1pY19pdHhuX2dyb3VwLmNvbnRyYWN0LkR5bmFtaWNJdHhuR3JvdXAudGVzdF9maXJzdGx5W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9maXJzdGx5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2R5bmFtaWNfaXR4bl9ncm91cC9jb250cmFjdC5weToxNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIGNvdmVyIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvY29udHJhY3QucHk6MTgKICAgIC8vIGFzc2VydCBmdW5kcy5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLCAiRnVuZHMgbXVzdCBiZSBzZW50IHRvIGFwcCIKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEZ1bmRzIG11c3QgYmUgc2VudCB0byBhcHAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvY29udHJhY3QucHk6MjAKICAgIC8vIGFzc2VydCBhZGRyZXNzZXMubGVuZ3RoLCAibXVzdCBwcm92aWRlIHNvbWUgYWNjb3VudHMiCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBhc3NlcnQgLy8gbXVzdCBwcm92aWRlIHNvbWUgYWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvY29udHJhY3QucHk6MjIKICAgIC8vIHNoYXJlID0gZnVuZHMuYW1vdW50IC8vIGFkZHJlc3Nlcy5sZW5ndGgKICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgc3dhcAogICAgLwogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjI0CiAgICAvLyBpdHhuLlBheW1lbnQoYW1vdW50PXNoYXJlLCByZWNlaXZlcj1hZGRyZXNzZXNbMF0ubmF0aXZlKS5zdGFnZShiZWdpbl9ncm91cD1UcnVlKQogICAgaXR4bl9iZWdpbgogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBjb3ZlciAyCiAgICBzd2FwCiAgICBleHRyYWN0IDIgMzIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzAgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvY29udHJhY3QucHk6MjYKICAgIC8vIGZvciBpIGluIHVyYW5nZSgxLCBhZGRyZXNzZXMubGVuZ3RoKToKICAgIGludGNfMCAvLyAxCgp0ZXN0X2ZpcnN0bHlfZm9yX2hlYWRlckAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2R5bmFtaWNfaXR4bl9ncm91cC9jb250cmFjdC5weToyNgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDEsIGFkZHJlc3Nlcy5sZW5ndGgpOgogICAgZHVwCiAgICBkaWcgNAogICAgPAogICAgYnogdGVzdF9maXJzdGx5X2FmdGVyX2ZvckA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjI3CiAgICAvLyBhZGRyID0gYWRkcmVzc2VzW2ldCiAgICBkdXBuIDIKICAgIGludGNfMiAvLyAzMgogICAgKgogICAgZGlnIDMKICAgIHN3YXAKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBpdHhuLlBheW1lbnQoYW1vdW50PXNoYXJlLCByZWNlaXZlcj1hZGRyLm5hdGl2ZSkuc3RhZ2UoKQogICAgaXR4bl9uZXh0CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludGNfMCAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2R5bmFtaWNfaXR4bl9ncm91cC9jb250cmFjdC5weToyNgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDEsIGFkZHJlc3Nlcy5sZW5ndGgpOgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2ZpcnN0bHlfZm9yX2hlYWRlckAyCgp0ZXN0X2ZpcnN0bHlfYWZ0ZXJfZm9yQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjMwLTMyCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9dmVyaWZpZXIuaWQsIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJ2ZXJpZnkoKXZvaWQiKSwpCiAgICAvLyApLnN0YWdlKCkKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2R5bmFtaWNfaXR4bl9ncm91cC9jb250cmFjdC5weTozMQogICAgLy8gYXBwX2lkPXZlcmlmaWVyLmlkLCBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgidmVyaWZ5KCl2b2lkIiksKQogICAgYnl0ZWNfMCAvLyBtZXRob2QgInZlcmlmeSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgNAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjMwCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIGludGNfMyAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvY29udHJhY3QucHk6MzQKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoYXNzZXRfbmFtZT0iYWJjIikuc3RhZ2UoKQogICAgaXR4bl9uZXh0CiAgICBieXRlY18xIC8vICJhYmMiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgcHVzaGludCAzIC8vIGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2R5bmFtaWNfaXR4bl9ncm91cC9jb250cmFjdC5weTozNgogICAgLy8gaXR4bi5zdWJtaXRfc3RhZ2VkKCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuZHluYW1pY19pdHhuX2dyb3VwLmNvbnRyYWN0LkR5bmFtaWNJdHhuR3JvdXAudGVzdF9sb29wbHlbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2xvb3BseToKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICBjb3ZlciAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjQ1CiAgICAvLyBhc3NlcnQgZnVuZHMucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgIkZ1bmRzIG11c3QgYmUgc2VudCB0byBhcHAiCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBGdW5kcyBtdXN0IGJlIHNlbnQgdG8gYXBwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyBhc3NlcnQgYWRkcmVzc2VzLmxlbmd0aCwgIm11c3QgcHJvdmlkZSBzb21lIGFjY291bnRzIgogICAgc3dhcAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBhc3NlcnQgLy8gbXVzdCBwcm92aWRlIHNvbWUgYWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvY29udHJhY3QucHk6NDkKICAgIC8vIHNoYXJlID0gZnVuZHMuYW1vdW50IC8vIGFkZHJlc3Nlcy5sZW5ndGgKICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgc3dhcAogICAgLwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2R5bmFtaWNfaXR4bl9ncm91cC9jb250cmFjdC5weTo1MQogICAgLy8gaXNfZmlyc3QgPSBUcnVlCiAgICBpbnRjXzAgLy8gMQogICAgaW50Y18xIC8vIDAKCnRlc3RfbG9vcGx5X2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvY29udHJhY3QucHk6NTIKICAgIC8vIGZvciBhZGRyIGluIGFkZHJlc3NlczoKICAgIGR1cAogICAgZGlnIDQKICAgIDwKICAgIGJ6IHRlc3RfbG9vcGx5X2FmdGVyX2ZvckA4CiAgICBkaWcgNQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidXJ5IDcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvY29udHJhY3QucHk6NTQKICAgIC8vIG15X3R4bi5zdGFnZShiZWdpbl9ncm91cD1pc19maXJzdCkKICAgIGRpZyAxCiAgICBieiB0ZXN0X2xvb3BseV9pdHhuX25leHRANQogICAgaXR4bl9iZWdpbgoKdGVzdF9sb29wbHlfYWZ0ZXJfaXR4bl9iZWdpbl9uZXh0QDY6CiAgICBkaWcgNgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgZGlnIDIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjUzCiAgICAvLyBteV90eG4gPSBpdHhuLlBheW1lbnQoYW1vdW50PXNoYXJlLCByZWNlaXZlcj1hZGRyLm5hdGl2ZSkKICAgIGludGNfMCAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2R5bmFtaWNfaXR4bl9ncm91cC9jb250cmFjdC5weTo1NQogICAgLy8gaXNfZmlyc3QgPSBGYWxzZQogICAgaW50Y18xIC8vIDAKICAgIGJ1cnkgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIHRlc3RfbG9vcGx5X2Zvcl9oZWFkZXJAMgoKdGVzdF9sb29wbHlfaXR4bl9uZXh0QDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjU0CiAgICAvLyBteV90eG4uc3RhZ2UoYmVnaW5fZ3JvdXA9aXNfZmlyc3QpCiAgICBpdHhuX25leHQKICAgIGIgdGVzdF9sb29wbHlfYWZ0ZXJfaXR4bl9iZWdpbl9uZXh0QDYKCnRlc3RfbG9vcGx5X2FmdGVyX2ZvckA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2R5bmFtaWNfaXR4bl9ncm91cC9jb250cmFjdC5weTo1Ny01OQogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2lkPXZlcmlmaWVyLmlkLCBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgidmVyaWZ5KCl2b2lkIiksKQogICAgLy8gKS5zdGFnZSgpCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvY29udHJhY3QucHk6NTgKICAgIC8vIGFwcF9pZD12ZXJpZmllci5pZCwgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoInZlcmlmeSgpdm9pZCIpLCkKICAgIGJ5dGVjXzAgLy8gbWV0aG9kICJ2ZXJpZnkoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZGlnIDQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2R5bmFtaWNfaXR4bl9ncm91cC9jb250cmFjdC5weTo1NwogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzMgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL2NvbnRyYWN0LnB5OjYxCiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKGFzc2V0X25hbWU9ImFiYyIpLnN0YWdlKCkKICAgIGl0eG5fbmV4dAogICAgYnl0ZWNfMSAvLyAiYWJjIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvY29udHJhY3QucHk6NjMKICAgIC8vIGl0eG4uc3VibWl0X3N0YWdlZCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2R5bmFtaWNfaXR4bl9ncm91cC9jb250cmFjdC5weTozOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAEAQAgBiYCBGWprswDYWJjMRtBAB0xGRREMRhEggIEFzkXhAQ/EK6nNhoAjgIACQCLADEZFDEYFBBDNhoBMRYiCUk4ECISRDYaAhdOAkk4BzIKEkRLASNZSU4DSURMOAhMCklOArFLAVcCAE4CTFcCILIHsggishAjsgEiSUsEDEEAHUcCJAtLA0wkWLayB0sDsggishAjsgEiCEUBQv/ctiiyGksEshglshAjsgG2KbImgQOyECOyAbMiQyM2GgFJMRYiCUk4ECISRDYaAhdOAkk4BzIKEkRMI1lJTgJJREw4CEwKIiNJSwQMQQAwSwVXAgBLASQLJFhFB0sBQQAasUsGsgdLArIIIrIQI7IBI0UCSSIIRQFC/822Qv/jtiiyGksEshglshAjsgG2KbImgQOyECOyAbMiQw==","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the DynamicItxnGroup contract + */ +export type DynamicItxnGroupArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'test_firstly(address[],pay,uint64)void': { + addresses: string[] + funds: AppMethodCallTransactionArgument + verifier: bigint | number + } + 'test_looply(address[],pay,uint64)void': { + addresses: string[] + funds: AppMethodCallTransactionArgument + verifier: bigint | number + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'test_firstly(address[],pay,uint64)void': [addresses: string[], funds: AppMethodCallTransactionArgument, verifier: bigint | number] + 'test_looply(address[],pay,uint64)void': [addresses: string[], funds: AppMethodCallTransactionArgument, verifier: bigint | number] + } +} + +/** + * The return type for each method + */ +export type DynamicItxnGroupReturns = { + 'test_firstly(address[],pay,uint64)void': void + 'test_looply(address[],pay,uint64)void': void +} + +/** + * Defines the types of available calls and state of the DynamicItxnGroup smart contract. + */ +export type DynamicItxnGroupTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'test_firstly(address[],pay,uint64)void' | 'test_firstly', { + argsObj: DynamicItxnGroupArgs['obj']['test_firstly(address[],pay,uint64)void'] + argsTuple: DynamicItxnGroupArgs['tuple']['test_firstly(address[],pay,uint64)void'] + returns: DynamicItxnGroupReturns['test_firstly(address[],pay,uint64)void'] + }> + & Record<'test_looply(address[],pay,uint64)void' | 'test_looply', { + argsObj: DynamicItxnGroupArgs['obj']['test_looply(address[],pay,uint64)void'] + argsTuple: DynamicItxnGroupArgs['tuple']['test_looply(address[],pay,uint64)void'] + returns: DynamicItxnGroupReturns['test_looply(address[],pay,uint64)void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type DynamicItxnGroupSignatures = keyof DynamicItxnGroupTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the DynamicItxnGroup smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = DynamicItxnGroupTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the DynamicItxnGroup smart contract to the method's return type + */ +export type MethodReturn = DynamicItxnGroupTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type DynamicItxnGroupCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type DynamicItxnGroupDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: DynamicItxnGroupCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the DynamicItxnGroup smart contract + */ +export abstract class DynamicItxnGroupParamsFactory { + /** + * Constructs a no op call for the test_firstly(address[],pay,uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testFirstly(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_firstly(address[],pay,uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.addresses, params.args.funds, params.args.verifier], + } + } + /** + * Constructs a no op call for the test_looply(address[],pay,uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testLooply(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_looply(address[],pay,uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.addresses, params.args.funds, params.args.verifier], + } + } +} + +/** + * A factory to create and deploy one or more instance of the DynamicItxnGroup smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class DynamicItxnGroupFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `DynamicItxnGroupFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new DynamicItxnGroupClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new DynamicItxnGroupClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the DynamicItxnGroup smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: DynamicItxnGroupDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new DynamicItxnGroupClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the DynamicItxnGroup smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the DynamicItxnGroup smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the DynamicItxnGroup smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new DynamicItxnGroupClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the DynamicItxnGroup smart contract + */ +export class DynamicItxnGroupClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `DynamicItxnGroupClient` + * + * @param appClient An `AppClient` instance which has been created with the DynamicItxnGroup app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `DynamicItxnGroupClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `DynamicItxnGroupClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new DynamicItxnGroupClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `DynamicItxnGroupClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new DynamicItxnGroupClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the DynamicItxnGroup smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the DynamicItxnGroup smart contract using the `test_firstly(address[],pay,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testFirstly: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(DynamicItxnGroupParamsFactory.testFirstly(params)) + }, + + /** + * Makes a call to the DynamicItxnGroup smart contract using the `test_looply(address[],pay,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testLooply: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(DynamicItxnGroupParamsFactory.testLooply(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the DynamicItxnGroup smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the DynamicItxnGroup smart contract using the `test_firstly(address[],pay,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testFirstly: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(DynamicItxnGroupParamsFactory.testFirstly(params)) + }, + + /** + * Makes a call to the DynamicItxnGroup smart contract using the `test_looply(address[],pay,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testLooply: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(DynamicItxnGroupParamsFactory.testLooply(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the DynamicItxnGroup smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the DynamicItxnGroup smart contract using the `test_firstly(address[],pay,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testFirstly: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(DynamicItxnGroupParamsFactory.testFirstly(params)) + return {...result, return: result.return as unknown as (undefined | DynamicItxnGroupReturns['test_firstly(address[],pay,uint64)void'])} + }, + + /** + * Makes a call to the DynamicItxnGroup smart contract using the `test_looply(address[],pay,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testLooply: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(DynamicItxnGroupParamsFactory.testLooply(params)) + return {...result, return: result.return as unknown as (undefined | DynamicItxnGroupReturns['test_looply(address[],pay,uint64)void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new DynamicItxnGroupClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current DynamicItxnGroup app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): DynamicItxnGroupComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a test_firstly(address[],pay,uint64)void method call against the DynamicItxnGroup contract + */ + testFirstly(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testFirstly(params))) + return this + }, + /** + * Add a test_looply(address[],pay,uint64)void method call against the DynamicItxnGroup contract + */ + testLooply(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testLooply(params))) + return this + }, + /** + * Add a clear state call to the DynamicItxnGroup contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as DynamicItxnGroupComposer + } +} +export type DynamicItxnGroupComposer = { + /** + * Calls the test_firstly(address[],pay,uint64)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testFirstly(params?: CallParams): DynamicItxnGroupComposer<[...TReturns, DynamicItxnGroupReturns['test_firstly(address[],pay,uint64)void'] | undefined]> + + /** + * Calls the test_looply(address[],pay,uint64)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testLooply(params?: CallParams): DynamicItxnGroupComposer<[...TReturns, DynamicItxnGroupReturns['test_looply(address[],pay,uint64)void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the DynamicItxnGroup smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): DynamicItxnGroupComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): DynamicItxnGroupComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type DynamicItxnGroupComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/GlobalStateContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/GlobalStateContract.ts new file mode 100644 index 0000000..0d69d22 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/GlobalStateContract.ts @@ -0,0 +1,2649 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"GlobalStateContract","structs":{},"methods":[{"name":"get_implicit_key_arc4_uint","args":[],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_string","args":[],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_byte","args":[],"returns":{"type":"byte"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_bool","args":[],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_address","args":[],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_uint128","args":[],"returns":{"type":"uint128"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_dynamic_bytes","args":[],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_tuple","args":[],"returns":{"type":"(uint64,byte[],bool)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_uint","args":[],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_string","args":[],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_byte","args":[],"returns":{"type":"byte"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_bool","args":[],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_address","args":[],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_uint128","args":[],"returns":{"type":"uint128"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_dynamic_bytes","args":[],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_implicit_key_arc4_uint","args":[{"type":"uint64","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_implicit_key_arc4_string","args":[{"type":"string","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_implicit_key_arc4_byte","args":[{"type":"byte","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_implicit_key_arc4_bool","args":[{"type":"bool","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_implicit_key_arc4_address","args":[{"type":"address","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_implicit_key_arc4_uint128","args":[{"type":"uint128","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_implicit_key_arc4_dynamic_bytes","args":[{"type":"byte[]","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_implicit_key_tuple","args":[{"type":"(uint64,byte[],bool)","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_arc4_uint","args":[{"type":"uint64","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_arc4_string","args":[{"type":"string","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_arc4_byte","args":[{"type":"byte","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_arc4_bool","args":[{"type":"bool","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_arc4_address","args":[{"type":"address","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_arc4_uint128","args":[{"type":"uint128","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"set_arc4_dynamic_bytes","args":[{"type":"byte[]","name":"value"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":15},"local":{"ints":0,"bytes":0}},"keys":{"global":{"implicit_key_arc4_uint":{"keyType":"AVMString","valueType":"uint64","key":"aW1wbGljaXRfa2V5X2FyYzRfdWludA=="},"implicit_key_arc4_string":{"keyType":"AVMString","valueType":"string","key":"aW1wbGljaXRfa2V5X2FyYzRfc3RyaW5n"},"implicit_key_arc4_byte":{"keyType":"AVMString","valueType":"byte","key":"aW1wbGljaXRfa2V5X2FyYzRfYnl0ZQ=="},"implicit_key_arc4_bool":{"keyType":"AVMString","valueType":"bool","key":"aW1wbGljaXRfa2V5X2FyYzRfYm9vbA=="},"implicit_key_arc4_address":{"keyType":"AVMString","valueType":"address","key":"aW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcw=="},"implicit_key_arc4_uint128":{"keyType":"AVMString","valueType":"uint128","key":"aW1wbGljaXRfa2V5X2FyYzRfdWludDEyOA=="},"implicit_key_arc4_dynamic_bytes":{"keyType":"AVMString","valueType":"byte[]","key":"aW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcw=="},"implicit_key_tuple":{"keyType":"AVMString","valueType":"(uint64,byte[],bool)","key":"aW1wbGljaXRfa2V5X3R1cGxl"},"arc4_uint":{"keyType":"AVMString","valueType":"uint64","key":"ZXhwbGljaXRfa2V5X2FyYzRfdWludA=="},"arc4_string":{"keyType":"AVMString","valueType":"string","key":"ZXhwbGljaXRfa2V5X2FyYzRfc3RyaW5n"},"arc4_byte":{"keyType":"AVMString","valueType":"byte","key":"ZXhwbGljaXRfa2V5X2FyYzRfYnl0ZQ=="},"arc4_bool":{"keyType":"AVMString","valueType":"bool","key":"ZXhwbGljaXRfa2V5X2FyYzRfYm9vbA=="},"arc4_address":{"keyType":"AVMString","valueType":"address","key":"ZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcw=="},"arc4_uint128":{"keyType":"AVMString","valueType":"uint128","key":"ZXhwbGljaXRfa2V5X2FyYzRfdWludDEyOA=="},"arc4_dynamic_bytes":{"keyType":"AVMString","valueType":"byte[]","key":"ZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcw=="}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[906],"errorMessage":"check self.arc4_address exists"},{"pc":[895],"errorMessage":"check self.arc4_bool exists"},{"pc":[884],"errorMessage":"check self.arc4_byte exists"},{"pc":[928],"errorMessage":"check self.arc4_dynamic_bytes exists"},{"pc":[873],"errorMessage":"check self.arc4_string exists"},{"pc":[862],"errorMessage":"check self.arc4_uint exists"},{"pc":[917],"errorMessage":"check self.arc4_uint128 exists"},{"pc":[818],"errorMessage":"check self.implicit_key_arc4_address exists"},{"pc":[807],"errorMessage":"check self.implicit_key_arc4_bool exists"},{"pc":[796],"errorMessage":"check self.implicit_key_arc4_byte exists"},{"pc":[840],"errorMessage":"check self.implicit_key_arc4_dynamic_bytes exists"},{"pc":[786],"errorMessage":"check self.implicit_key_arc4_string exists"},{"pc":[776],"errorMessage":"check self.implicit_key_arc4_uint exists"},{"pc":[829],"errorMessage":"check self.implicit_key_arc4_uint128 exists"},{"pc":[851],"errorMessage":"check self.implicit_key_tuple exists"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiaW1wbGljaXRfa2V5X2FyYzRfdWludCIgImltcGxpY2l0X2tleV9hcmM0X3N0cmluZyIgImltcGxpY2l0X2tleV9hcmM0X2J5dGUiICJpbXBsaWNpdF9rZXlfYXJjNF9ib29sIiAiaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIgImltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjgiICJpbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIiAiaW1wbGljaXRfa2V5X3R1cGxlIiAiZXhwbGljaXRfa2V5X2FyYzRfdWludCIgImV4cGxpY2l0X2tleV9hcmM0X3N0cmluZyIgImV4cGxpY2l0X2tleV9hcmM0X2J5dGUiICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIiAiZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIgImV4cGxpY2l0X2tleV9hcmM0X3VpbnQxMjgiICJleHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIiAweDAwMDAwMDAwMDAwMDA1MzkgMHgwMDA1NDg2NTZjNmM2ZiAweDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDB4MDAwZDY0Nzk2ZTYxNmQ2OTYzMjA2Mjc5NzQ2NTczCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTE1LTUxNgogICAgLy8gIyBJbXBsaWNpdCBrZXkgc3RhdGUgdmFyaWFibGVzCiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X3VpbnQgPSBHbG9iYWxTdGF0ZShhcmM0LlVJbnQ2NCgxMzM3KSkKICAgIGJ5dGVjXzEgLy8gImltcGxpY2l0X2tleV9hcmM0X3VpbnQiCiAgICBieXRlYyAxNiAvLyAweDAwMDAwMDAwMDAwMDA1MzkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTE3CiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X3N0cmluZyA9IEdsb2JhbFN0YXRlKGFyYzQuU3RyaW5nKCJIZWxsbyIpKQogICAgYnl0ZWNfMiAvLyAiaW1wbGljaXRfa2V5X2FyYzRfc3RyaW5nIgogICAgYnl0ZWMgMTcgLy8gMHgwMDA1NDg2NTZjNmM2ZgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MTgKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYnl0ZSA9IEdsb2JhbFN0YXRlKGFyYzQuQnl0ZSgwKSkKICAgIGJ5dGVjXzMgLy8gImltcGxpY2l0X2tleV9hcmM0X2J5dGUiCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MTkKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYm9vbCA9IEdsb2JhbFN0YXRlKGFyYzQuQm9vbChUcnVlKSkKICAgIGJ5dGVjIDQgLy8gImltcGxpY2l0X2tleV9hcmM0X2Jvb2wiCiAgICBwdXNoYnl0ZXMgMHg4MAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MjAKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcyA9IEdsb2JhbFN0YXRlKGFyYzQuQWRkcmVzcyhHbG9iYWwuY3JlYXRvcl9hZGRyZXNzKSkKICAgIGJ5dGVjIDUgLy8gImltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3MiCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTIxCiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjggPSBHbG9iYWxTdGF0ZShhcmM0LlVJbnQxMjgoMioqMTAwKSkKICAgIGJ5dGVjIDYgLy8gImltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjgiCiAgICBieXRlYyAxOCAvLyAweDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjUyMgogICAgLy8gc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzID0gR2xvYmFsU3RhdGUoYXJjNC5EeW5hbWljQnl0ZXMoYiJkeW5hbWljIGJ5dGVzIikpCiAgICBieXRlYyA3IC8vICJpbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIgogICAgYnl0ZWMgMTkgLy8gMHgwMDBkNjQ3OTZlNjE2ZDY5NjMyMDYyNzk3NDY1NzMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTIzCiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV90dXBsZSA9IEdsb2JhbFN0YXRlKChVSW50NjQoMTApLCBCeXRlcyhiInRlc3QiKSwgRmFsc2UpKQogICAgYnl0ZWMgOCAvLyAiaW1wbGljaXRfa2V5X3R1cGxlIgogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAwMDAwMDAwYTAwMGIwMDAwMDQ3NDY1NzM3NAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MjUtNTI2CiAgICAvLyAjIEV4cGxpY2l0IGtleSBzdGF0ZSB2YXJpYWJsZXMKICAgIC8vIHNlbGYuYXJjNF91aW50ID0gR2xvYmFsU3RhdGUoYXJjNC5VSW50NjQoMTMzNyksIGtleT0iZXhwbGljaXRfa2V5X2FyYzRfdWludCIpCiAgICBieXRlYyA5IC8vICJleHBsaWNpdF9rZXlfYXJjNF91aW50IgogICAgYnl0ZWMgMTYgLy8gMHgwMDAwMDAwMDAwMDAwNTM5CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjUyNwogICAgLy8gc2VsZi5hcmM0X3N0cmluZyA9IEdsb2JhbFN0YXRlKGFyYzQuU3RyaW5nKCJIZWxsbyIpLCBrZXk9ImV4cGxpY2l0X2tleV9hcmM0X3N0cmluZyIpCiAgICBieXRlYyAxMCAvLyAiZXhwbGljaXRfa2V5X2FyYzRfc3RyaW5nIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjUxNwogICAgLy8gc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9zdHJpbmcgPSBHbG9iYWxTdGF0ZShhcmM0LlN0cmluZygiSGVsbG8iKSkKICAgIGJ5dGVjIDE3IC8vIDB4MDAwNTQ4NjU2YzZjNmYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MjcKICAgIC8vIHNlbGYuYXJjNF9zdHJpbmcgPSBHbG9iYWxTdGF0ZShhcmM0LlN0cmluZygiSGVsbG8iKSwga2V5PSJleHBsaWNpdF9rZXlfYXJjNF9zdHJpbmciKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MjgKICAgIC8vIHNlbGYuYXJjNF9ieXRlID0gR2xvYmFsU3RhdGUoYXJjNC5CeXRlKDApLCBrZXk9ImV4cGxpY2l0X2tleV9hcmM0X2J5dGUiKQogICAgYnl0ZWMgMTEgLy8gImV4cGxpY2l0X2tleV9hcmM0X2J5dGUiCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MjkKICAgIC8vIHNlbGYuYXJjNF9ib29sID0gR2xvYmFsU3RhdGUoYXJjNC5Cb29sKFRydWUpLCBrZXk9ImV4cGxpY2l0X2tleV9hcmM0X2Jvb2wiKQogICAgYnl0ZWMgMTIgLy8gImV4cGxpY2l0X2tleV9hcmM0X2Jvb2wiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTE5CiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X2Jvb2wgPSBHbG9iYWxTdGF0ZShhcmM0LkJvb2woVHJ1ZSkpCiAgICBwdXNoYnl0ZXMgMHg4MAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjUyOQogICAgLy8gc2VsZi5hcmM0X2Jvb2wgPSBHbG9iYWxTdGF0ZShhcmM0LkJvb2woVHJ1ZSksIGtleT0iZXhwbGljaXRfa2V5X2FyYzRfYm9vbCIpCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjUzMQogICAgLy8gYXJjNC5BZGRyZXNzKEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MpLCBrZXk9ImV4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MiCiAgICBieXRlYyAxMyAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjUzMC01MzIKICAgIC8vIHNlbGYuYXJjNF9hZGRyZXNzID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgYXJjNC5BZGRyZXNzKEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MpLCBrZXk9ImV4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MiCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjUzMwogICAgLy8gc2VsZi5hcmM0X3VpbnQxMjggPSBHbG9iYWxTdGF0ZShhcmM0LlVJbnQxMjgoMioqMTAwKSwga2V5PSJleHBsaWNpdF9rZXlfYXJjNF91aW50MTI4IikKICAgIGJ5dGVjIDE0IC8vICJleHBsaWNpdF9rZXlfYXJjNF91aW50MTI4IgogICAgYnl0ZWMgMTggLy8gMHgwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MzUKICAgIC8vIGFyYzQuRHluYW1pY0J5dGVzKGIiZHluYW1pYyBieXRlcyIpLCBrZXk9ImV4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMiCiAgICBieXRlYyAxNSAvLyAiZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MjIKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyA9IEdsb2JhbFN0YXRlKGFyYzQuRHluYW1pY0J5dGVzKGIiZHluYW1pYyBieXRlcyIpKQogICAgYnl0ZWMgMTkgLy8gMHgwMDBkNjQ3OTZlNjE2ZDY5NjMyMDYyNzk3NDY1NzMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MzQtNTM2CiAgICAvLyBzZWxmLmFyYzRfZHluYW1pY19ieXRlcyA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIGFyYzQuRHluYW1pY0J5dGVzKGIiZHluYW1pYyBieXRlcyIpLCBrZXk9ImV4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMiCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTEzCiAgICAvLyBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAzOQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4MWNjOTY2ZWUgMHgyMzY3Y2Q0YiAweDY5MTI4ZTkwIDB4NjhkNTkwZTIgMHg0NGVmMDY4MSAweDFjZDI5NGVjIDB4YWFjOGVjYjEgMHgxNjZjNmFmZCAweDNjYzNiYjdiIDB4OWE2OTQ2YWQgMHhkZWQ3NTAzMyAweDY2Mjc5ZTkzIDB4MDk2ZTkyN2IgMHg5NzUzMWZiYyAweDZlYTNmOTk2IDB4YTdmNGY0MDIgMHhhYWRkY2M0YyAweDVlYzMxMTZkIDB4MjBmNTZlZWUgMHgxYzE0OWE0MyAweGE1NzVhYzdkIDB4ODdmMDg2OWIgMHg0NjFhZmM2ZCAweDA0ODExNmVhIDB4MzBlMzRhOTMgMHhkMmU2NDZlZiAweGU2NzRhMjcwIDB4YTg3ZTU0MGQgMHg3MjBhM2NhMCAweDI1NzcwOGY3IC8vIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnQoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cmluZygpc3RyaW5nIiwgbWV0aG9kICJnZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZSgpYnl0ZSIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2woKWJvb2wiLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKClhZGRyZXNzIiwgbWV0aG9kICJnZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludDEyOCgpdWludDEyOCIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMoKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV90dXBsZSgpKHVpbnQ2NCxieXRlW10sYm9vbCkiLCBtZXRob2QgImdldF9hcmM0X3VpbnQoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2FyYzRfc3RyaW5nKClzdHJpbmciLCBtZXRob2QgImdldF9hcmM0X2J5dGUoKWJ5dGUiLCBtZXRob2QgImdldF9hcmM0X2Jvb2woKWJvb2wiLCBtZXRob2QgImdldF9hcmM0X2FkZHJlc3MoKWFkZHJlc3MiLCBtZXRob2QgImdldF9hcmM0X3VpbnQxMjgoKXVpbnQxMjgiLCBtZXRob2QgImdldF9hcmM0X2R5bmFtaWNfYnl0ZXMoKWJ5dGVbXSIsIG1ldGhvZCAic2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnQodWludDY0KXZvaWQiLCBtZXRob2QgInNldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHJpbmcoc3RyaW5nKXZvaWQiLCBtZXRob2QgInNldF9pbXBsaWNpdF9rZXlfYXJjNF9ieXRlKGJ5dGUpdm9pZCIsIG1ldGhvZCAic2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2woYm9vbCl2b2lkIiwgbWV0aG9kICJzZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcyhhZGRyZXNzKXZvaWQiLCBtZXRob2QgInNldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50MTI4KHVpbnQxMjgpdm9pZCIsIG1ldGhvZCAic2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMoYnl0ZVtdKXZvaWQiLCBtZXRob2QgInNldF9pbXBsaWNpdF9rZXlfdHVwbGUoKHVpbnQ2NCxieXRlW10sYm9vbCkpdm9pZCIsIG1ldGhvZCAic2V0X2FyYzRfdWludCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0X2FyYzRfc3RyaW5nKHN0cmluZyl2b2lkIiwgbWV0aG9kICJzZXRfYXJjNF9ieXRlKGJ5dGUpdm9pZCIsIG1ldGhvZCAic2V0X2FyYzRfYm9vbChib29sKXZvaWQiLCBtZXRob2QgInNldF9hcmM0X2FkZHJlc3MoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRfYXJjNF91aW50MTI4KHVpbnQxMjgpdm9pZCIsIG1ldGhvZCAic2V0X2FyYzRfZHluYW1pY19ieXRlcyhieXRlW10pdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50IGdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHJpbmcgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2wgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3MgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjggZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMgZ2V0X2ltcGxpY2l0X2tleV90dXBsZSBnZXRfYXJjNF91aW50IGdldF9hcmM0X3N0cmluZyBnZXRfYXJjNF9ieXRlIGdldF9hcmM0X2Jvb2wgZ2V0X2FyYzRfYWRkcmVzcyBnZXRfYXJjNF91aW50MTI4IGdldF9hcmM0X2R5bmFtaWNfYnl0ZXMgc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnQgc2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cmluZyBzZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZSBzZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbCBzZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcyBzZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludDEyOCBzZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyBzZXRfaW1wbGljaXRfa2V5X3R1cGxlIHNldF9hcmM0X3VpbnQgc2V0X2FyYzRfc3RyaW5nIHNldF9hcmM0X2J5dGUgc2V0X2FyYzRfYm9vbCBzZXRfYXJjNF9hZGRyZXNzIHNldF9hcmM0X3VpbnQxMjggc2V0X2FyYzRfZHluYW1pY19ieXRlcwogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDM5OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuR2xvYmFsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU0MQogICAgLy8gcmV0dXJuIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfdWludC52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjXzEgLy8gImltcGxpY2l0X2tleV9hcmM0X3VpbnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfdWludCBleGlzdHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MzgtNTM5CiAgICAvLyAjIEdldHRlciBtZXRob2RzIGZvciBpbXBsaWNpdCBrZXkgc3RhdGUgdmFyaWFibGVzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHJpbmdbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyaW5nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU0NQogICAgLy8gcmV0dXJuIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfc3RyaW5nLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWNfMiAvLyAiaW1wbGljaXRfa2V5X2FyYzRfc3RyaW5nIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmltcGxpY2l0X2tleV9hcmM0X3N0cmluZyBleGlzdHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1NDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0Lkdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGVbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1NDkKICAgIC8vIHJldHVybiBzZWxmLmltcGxpY2l0X2tleV9hcmM0X2J5dGUudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICBieXRlY18zIC8vICJpbXBsaWNpdF9rZXlfYXJjNF9ieXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmltcGxpY2l0X2tleV9hcmM0X2J5dGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTUzCiAgICAvLyByZXR1cm4gc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9ib29sLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgNCAvLyAiaW1wbGljaXRfa2V5X2FyYzRfYm9vbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9ib29sIGV4aXN0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuR2xvYmFsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU1NwogICAgLy8gcmV0dXJuIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcy52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDUgLy8gImltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3MiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcyBleGlzdHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1NTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0Lkdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjhbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludDEyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1NjEKICAgIC8vIHJldHVybiBzZWxmLmltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjgudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICBieXRlYyA2IC8vICJpbXBsaWNpdF9rZXlfYXJjNF91aW50MTI4IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjggZXhpc3RzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTY1CiAgICAvLyByZXR1cm4gc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgNyAvLyAiaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIGV4aXN0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuR2xvYmFsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X3R1cGxlW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2ltcGxpY2l0X2tleV90dXBsZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1NjkKICAgIC8vIHJldHVybiBzZWxmLmltcGxpY2l0X2tleV90dXBsZS52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDggLy8gImltcGxpY2l0X2tleV90dXBsZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbXBsaWNpdF9rZXlfdHVwbGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X3VpbnRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXJjNF91aW50OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU3NAogICAgLy8gcmV0dXJuIHNlbGYuYXJjNF91aW50LnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgOSAvLyAiZXhwbGljaXRfa2V5X2FyYzRfdWludCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hcmM0X3VpbnQgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTcxLTU3MgogICAgLy8gIyBHZXR0ZXIgbWV0aG9kcyBmb3IgZXhwbGljaXQga2V5IHN0YXRlIHZhcmlhYmxlcwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuR2xvYmFsU3RhdGVDb250cmFjdC5nZXRfYXJjNF9zdHJpbmdbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXJjNF9zdHJpbmc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTc4CiAgICAvLyByZXR1cm4gc2VsZi5hcmM0X3N0cmluZy52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDEwIC8vICJleHBsaWNpdF9rZXlfYXJjNF9zdHJpbmciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJjNF9zdHJpbmcgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X2J5dGVbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXJjNF9ieXRlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU4MgogICAgLy8gcmV0dXJuIHNlbGYuYXJjNF9ieXRlLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgMTEgLy8gImV4cGxpY2l0X2tleV9hcmM0X2J5dGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJjNF9ieXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuR2xvYmFsU3RhdGVDb250cmFjdC5nZXRfYXJjNF9ib29sW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2FyYzRfYm9vbDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1ODYKICAgIC8vIHJldHVybiBzZWxmLmFyYzRfYm9vbC52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDEyIC8vICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFyYzRfYm9vbCBleGlzdHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1ODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0Lkdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfYWRkcmVzc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9hcmM0X2FkZHJlc3M6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTkwCiAgICAvLyByZXR1cm4gc2VsZi5hcmM0X2FkZHJlc3MudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICBieXRlYyAxMyAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hcmM0X2FkZHJlc3MgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X3VpbnQxMjhbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXJjNF91aW50MTI4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU5NAogICAgLy8gcmV0dXJuIHNlbGYuYXJjNF91aW50MTI4LnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgMTQgLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnQxMjgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJjNF91aW50MTI4IGV4aXN0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuR2xvYmFsU3RhdGVDb250cmFjdC5nZXRfYXJjNF9keW5hbWljX2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2FyYzRfZHluYW1pY19ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1OTgKICAgIC8vIHJldHVybiBzZWxmLmFyYzRfZHluYW1pY19ieXRlcy52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDE1IC8vICJleHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFyYzRfZHluYW1pY19ieXRlcyBleGlzdHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1OTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0Lkdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MDMKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfdWludC52YWx1ZSA9IHZhbHVlCiAgICBieXRlY18xIC8vICJpbXBsaWNpdF9rZXlfYXJjNF91aW50IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYwMC02MDEKICAgIC8vICMgU2V0dGVyIG1ldGhvZHMgZm9yIGltcGxpY2l0IGtleSBzdGF0ZSB2YXJpYWJsZXMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjAzCiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X3VpbnQudmFsdWUgPSB2YWx1ZQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MDAtNjAxCiAgICAvLyAjIFNldHRlciBtZXRob2RzIGZvciBpbXBsaWNpdCBrZXkgc3RhdGUgdmFyaWFibGVzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHJpbmdbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyaW5nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYwNwogICAgLy8gc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9zdHJpbmcudmFsdWUgPSB2YWx1ZQogICAgYnl0ZWNfMiAvLyAiaW1wbGljaXRfa2V5X2FyYzRfc3RyaW5nIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MDcKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfc3RyaW5nLnZhbHVlID0gdmFsdWUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9pbXBsaWNpdF9rZXlfYXJjNF9ieXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjExCiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X2J5dGUudmFsdWUgPSB2YWx1ZQogICAgYnl0ZWNfMyAvLyAiaW1wbGljaXRfa2V5X2FyYzRfYnl0ZSIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjExCiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X2J5dGUudmFsdWUgPSB2YWx1ZQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0Lkdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2xbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MTUKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYm9vbC52YWx1ZSA9IHZhbHVlCiAgICBieXRlYyA0IC8vICJpbXBsaWNpdF9rZXlfYXJjNF9ib29sIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYxMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MTUKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYm9vbC52YWx1ZSA9IHZhbHVlCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYxMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuR2xvYmFsU3RhdGVDb250cmFjdC5zZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYxOQogICAgLy8gc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzLnZhbHVlID0gdmFsdWUKICAgIGJ5dGVjIDUgLy8gImltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3MiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYxOQogICAgLy8gc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzLnZhbHVlID0gdmFsdWUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50MTI4W3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjIzCiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjgudmFsdWUgPSB2YWx1ZQogICAgYnl0ZWMgNiAvLyAiaW1wbGljaXRfa2V5X2FyYzRfdWludDEyOCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjIzCiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjgudmFsdWUgPSB2YWx1ZQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0Lkdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MjcKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcy52YWx1ZSA9IHZhbHVlLmNvcHkoKQogICAgYnl0ZWMgNyAvLyAiaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjI3CiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9pbXBsaWNpdF9rZXlfdHVwbGVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfaW1wbGljaXRfa2V5X3R1cGxlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYzMQogICAgLy8gc2VsZi5pbXBsaWNpdF9rZXlfdHVwbGUudmFsdWUgPSB2YWx1ZQogICAgYnl0ZWMgOCAvLyAiaW1wbGljaXRfa2V5X3R1cGxlIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MzEKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X3R1cGxlLnZhbHVlID0gdmFsdWUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9hcmM0X3VpbnRbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfYXJjNF91aW50OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYzNgogICAgLy8gc2VsZi5hcmM0X3VpbnQudmFsdWUgPSB2YWx1ZQogICAgYnl0ZWMgOSAvLyAiZXhwbGljaXRfa2V5X2FyYzRfdWludCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MzMtNjM0CiAgICAvLyAjIFNldHRlciBtZXRob2RzIGZvciBleHBsaWNpdCBrZXkgc3RhdGUgdmFyaWFibGVzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYzNgogICAgLy8gc2VsZi5hcmM0X3VpbnQudmFsdWUgPSB2YWx1ZQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MzMtNjM0CiAgICAvLyAjIFNldHRlciBtZXRob2RzIGZvciBleHBsaWNpdCBrZXkgc3RhdGUgdmFyaWFibGVzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9hcmM0X3N0cmluZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9hcmM0X3N0cmluZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2NDAKICAgIC8vIHNlbGYuYXJjNF9zdHJpbmcudmFsdWUgPSB2YWx1ZQogICAgYnl0ZWMgMTAgLy8gImV4cGxpY2l0X2tleV9hcmM0X3N0cmluZyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjQwCiAgICAvLyBzZWxmLmFyYzRfc3RyaW5nLnZhbHVlID0gdmFsdWUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9hcmM0X2J5dGVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfYXJjNF9ieXRlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjY0NAogICAgLy8gc2VsZi5hcmM0X2J5dGUudmFsdWUgPSB2YWx1ZQogICAgYnl0ZWMgMTEgLy8gImV4cGxpY2l0X2tleV9hcmM0X2J5dGUiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjY0NAogICAgLy8gc2VsZi5hcmM0X2J5dGUudmFsdWUgPSB2YWx1ZQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2NDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0Lkdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2FyYzRfYm9vbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9hcmM0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjQ4CiAgICAvLyBzZWxmLmFyYzRfYm9vbC52YWx1ZSA9IHZhbHVlCiAgICBieXRlYyAxMiAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYm9vbCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2NDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjQ4CiAgICAvLyBzZWxmLmFyYzRfYm9vbC52YWx1ZSA9IHZhbHVlCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjY0NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuR2xvYmFsU3RhdGVDb250cmFjdC5zZXRfYXJjNF9hZGRyZXNzW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X2FyYzRfYWRkcmVzczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2NTIKICAgIC8vIHNlbGYuYXJjNF9hZGRyZXNzLnZhbHVlID0gdmFsdWUKICAgIGJ5dGVjIDEzIC8vICJleHBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjY1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2NTIKICAgIC8vIHNlbGYuYXJjNF9hZGRyZXNzLnZhbHVlID0gdmFsdWUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjUwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5HbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9hcmM0X3VpbnQxMjhbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfYXJjNF91aW50MTI4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjY1NgogICAgLy8gc2VsZi5hcmM0X3VpbnQxMjgudmFsdWUgPSB2YWx1ZQogICAgYnl0ZWMgMTQgLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnQxMjgiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjY1NgogICAgLy8gc2VsZi5hcmM0X3VpbnQxMjgudmFsdWUgPSB2YWx1ZQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2NTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0Lkdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2FyYzRfZHluYW1pY19ieXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9hcmM0X2R5bmFtaWNfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjYwCiAgICAvLyBzZWxmLmFyYzRfZHluYW1pY19ieXRlcy52YWx1ZSA9IHZhbHVlLmNvcHkoKQogICAgYnl0ZWMgMTUgLy8gImV4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjY2MAogICAgLy8gc2VsZi5hcmM0X2R5bmFtaWNfYnl0ZXMudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyACAQAmFAQVH3x1FmltcGxpY2l0X2tleV9hcmM0X3VpbnQYaW1wbGljaXRfa2V5X2FyYzRfc3RyaW5nFmltcGxpY2l0X2tleV9hcmM0X2J5dGUWaW1wbGljaXRfa2V5X2FyYzRfYm9vbBlpbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzGWltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjgfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcxJpbXBsaWNpdF9rZXlfdHVwbGUWZXhwbGljaXRfa2V5X2FyYzRfdWludBhleHBsaWNpdF9rZXlfYXJjNF9zdHJpbmcWZXhwbGljaXRfa2V5X2FyYzRfYnl0ZRZleHBsaWNpdF9rZXlfYXJjNF9ib29sGWV4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MZZXhwbGljaXRfa2V5X2FyYzRfdWludDEyOB9leHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzCAAAAAAAAAU5BwAFSGVsbG8QAAAAEAAAAAAAAAAAAAAAAA8ADWR5bmFtaWMgYnl0ZXMxGEAAXSknEGcqJxFnK4ABAGcnBIABgGcnBTIJZycGJxJnJwcnE2cnCIARAAAAAAAAAAoACwAABHRlc3RnJwknEGcnCicRZycLgAEAZycMgAGAZycNMglnJw4nEmcnDycTZzEbQQDhMRkURDEYRIIeBBzJZu4EI2fNSwRpEo6QBGjVkOIERO8GgQQc0pTsBKrI7LEEFmxq/QQ8w7t7BJppRq0E3tdQMwRmJ56TBAluknsEl1MfvARuo/mWBKf09AIEqt3MTARewxFtBCD1bu4EHBSaQwSldax9BIfwhpsERhr8bQQEgRbqBDDjSpME0uZG7wTmdKJwBKh+VA0Ecgo8oAQldwj3NhoAjh4ACQATAB0AJwAyAD0ASABTAF4AaQB0AH8AigCVAKAAqwCyALkAwADIANAA2ADgAOgA8AD4AQABCAEQARgAMRkUMRgUEEMjKWVEKExQsCJDIyplRChMULAiQyMrZUQoTFCwIkMjJwRlRChMULAiQyMnBWVEKExQsCJDIycGZUQoTFCwIkMjJwdlRChMULAiQyMnCGVEKExQsCJDIycJZUQoTFCwIkMjJwplRChMULAiQyMnC2VEKExQsCJDIycMZUQoTFCwIkMjJw1lRChMULAiQyMnDmVEKExQsCJDIycPZUQoTFCwIkMpNhoBZyJDKjYaAWciQys2GgFnIkMnBDYaAWciQycFNhoBZyJDJwY2GgFnIkMnBzYaAWciQycINhoBZyJDJwk2GgFnIkMnCjYaAWciQycLNhoBZyJDJww2GgFnIkMnDTYaAWciQycONhoBZyJDJw82GgFnIkM=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the GlobalStateContract contract + */ +export type GlobalStateContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'get_implicit_key_arc4_uint()uint64': Record + 'get_implicit_key_arc4_string()string': Record + 'get_implicit_key_arc4_byte()byte': Record + 'get_implicit_key_arc4_bool()bool': Record + 'get_implicit_key_arc4_address()address': Record + 'get_implicit_key_arc4_uint128()uint128': Record + 'get_implicit_key_arc4_dynamic_bytes()byte[]': Record + 'get_implicit_key_tuple()(uint64,byte[],bool)': Record + 'get_arc4_uint()uint64': Record + 'get_arc4_string()string': Record + 'get_arc4_byte()byte': Record + 'get_arc4_bool()bool': Record + 'get_arc4_address()address': Record + 'get_arc4_uint128()uint128': Record + 'get_arc4_dynamic_bytes()byte[]': Record + 'set_implicit_key_arc4_uint(uint64)void': { + value: bigint | number + } + 'set_implicit_key_arc4_string(string)void': { + value: string + } + 'set_implicit_key_arc4_byte(byte)void': { + value: number + } + 'set_implicit_key_arc4_bool(bool)void': { + value: boolean + } + 'set_implicit_key_arc4_address(address)void': { + value: string + } + 'set_implicit_key_arc4_uint128(uint128)void': { + value: bigint | number + } + 'set_implicit_key_arc4_dynamic_bytes(byte[])void': { + value: Uint8Array + } + 'set_implicit_key_tuple((uint64,byte[],bool))void': { + value: [bigint | number, Uint8Array, boolean] + } + 'set_arc4_uint(uint64)void': { + value: bigint | number + } + 'set_arc4_string(string)void': { + value: string + } + 'set_arc4_byte(byte)void': { + value: number + } + 'set_arc4_bool(bool)void': { + value: boolean + } + 'set_arc4_address(address)void': { + value: string + } + 'set_arc4_uint128(uint128)void': { + value: bigint | number + } + 'set_arc4_dynamic_bytes(byte[])void': { + value: Uint8Array + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'get_implicit_key_arc4_uint()uint64': [] + 'get_implicit_key_arc4_string()string': [] + 'get_implicit_key_arc4_byte()byte': [] + 'get_implicit_key_arc4_bool()bool': [] + 'get_implicit_key_arc4_address()address': [] + 'get_implicit_key_arc4_uint128()uint128': [] + 'get_implicit_key_arc4_dynamic_bytes()byte[]': [] + 'get_implicit_key_tuple()(uint64,byte[],bool)': [] + 'get_arc4_uint()uint64': [] + 'get_arc4_string()string': [] + 'get_arc4_byte()byte': [] + 'get_arc4_bool()bool': [] + 'get_arc4_address()address': [] + 'get_arc4_uint128()uint128': [] + 'get_arc4_dynamic_bytes()byte[]': [] + 'set_implicit_key_arc4_uint(uint64)void': [value: bigint | number] + 'set_implicit_key_arc4_string(string)void': [value: string] + 'set_implicit_key_arc4_byte(byte)void': [value: number] + 'set_implicit_key_arc4_bool(bool)void': [value: boolean] + 'set_implicit_key_arc4_address(address)void': [value: string] + 'set_implicit_key_arc4_uint128(uint128)void': [value: bigint | number] + 'set_implicit_key_arc4_dynamic_bytes(byte[])void': [value: Uint8Array] + 'set_implicit_key_tuple((uint64,byte[],bool))void': [value: [bigint | number, Uint8Array, boolean]] + 'set_arc4_uint(uint64)void': [value: bigint | number] + 'set_arc4_string(string)void': [value: string] + 'set_arc4_byte(byte)void': [value: number] + 'set_arc4_bool(bool)void': [value: boolean] + 'set_arc4_address(address)void': [value: string] + 'set_arc4_uint128(uint128)void': [value: bigint | number] + 'set_arc4_dynamic_bytes(byte[])void': [value: Uint8Array] + } +} + +/** + * The return type for each method + */ +export type GlobalStateContractReturns = { + 'get_implicit_key_arc4_uint()uint64': bigint + 'get_implicit_key_arc4_string()string': string + 'get_implicit_key_arc4_byte()byte': number + 'get_implicit_key_arc4_bool()bool': boolean + 'get_implicit_key_arc4_address()address': string + 'get_implicit_key_arc4_uint128()uint128': bigint + 'get_implicit_key_arc4_dynamic_bytes()byte[]': Uint8Array + 'get_implicit_key_tuple()(uint64,byte[],bool)': [bigint, Uint8Array, boolean] + 'get_arc4_uint()uint64': bigint + 'get_arc4_string()string': string + 'get_arc4_byte()byte': number + 'get_arc4_bool()bool': boolean + 'get_arc4_address()address': string + 'get_arc4_uint128()uint128': bigint + 'get_arc4_dynamic_bytes()byte[]': Uint8Array + 'set_implicit_key_arc4_uint(uint64)void': void + 'set_implicit_key_arc4_string(string)void': void + 'set_implicit_key_arc4_byte(byte)void': void + 'set_implicit_key_arc4_bool(bool)void': void + 'set_implicit_key_arc4_address(address)void': void + 'set_implicit_key_arc4_uint128(uint128)void': void + 'set_implicit_key_arc4_dynamic_bytes(byte[])void': void + 'set_implicit_key_tuple((uint64,byte[],bool))void': void + 'set_arc4_uint(uint64)void': void + 'set_arc4_string(string)void': void + 'set_arc4_byte(byte)void': void + 'set_arc4_bool(bool)void': void + 'set_arc4_address(address)void': void + 'set_arc4_uint128(uint128)void': void + 'set_arc4_dynamic_bytes(byte[])void': void +} + +/** + * Defines the types of available calls and state of the GlobalStateContract smart contract. + */ +export type GlobalStateContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'get_implicit_key_arc4_uint()uint64' | 'get_implicit_key_arc4_uint', { + argsObj: GlobalStateContractArgs['obj']['get_implicit_key_arc4_uint()uint64'] + argsTuple: GlobalStateContractArgs['tuple']['get_implicit_key_arc4_uint()uint64'] + returns: GlobalStateContractReturns['get_implicit_key_arc4_uint()uint64'] + }> + & Record<'get_implicit_key_arc4_string()string' | 'get_implicit_key_arc4_string', { + argsObj: GlobalStateContractArgs['obj']['get_implicit_key_arc4_string()string'] + argsTuple: GlobalStateContractArgs['tuple']['get_implicit_key_arc4_string()string'] + returns: GlobalStateContractReturns['get_implicit_key_arc4_string()string'] + }> + & Record<'get_implicit_key_arc4_byte()byte' | 'get_implicit_key_arc4_byte', { + argsObj: GlobalStateContractArgs['obj']['get_implicit_key_arc4_byte()byte'] + argsTuple: GlobalStateContractArgs['tuple']['get_implicit_key_arc4_byte()byte'] + returns: GlobalStateContractReturns['get_implicit_key_arc4_byte()byte'] + }> + & Record<'get_implicit_key_arc4_bool()bool' | 'get_implicit_key_arc4_bool', { + argsObj: GlobalStateContractArgs['obj']['get_implicit_key_arc4_bool()bool'] + argsTuple: GlobalStateContractArgs['tuple']['get_implicit_key_arc4_bool()bool'] + returns: GlobalStateContractReturns['get_implicit_key_arc4_bool()bool'] + }> + & Record<'get_implicit_key_arc4_address()address' | 'get_implicit_key_arc4_address', { + argsObj: GlobalStateContractArgs['obj']['get_implicit_key_arc4_address()address'] + argsTuple: GlobalStateContractArgs['tuple']['get_implicit_key_arc4_address()address'] + returns: GlobalStateContractReturns['get_implicit_key_arc4_address()address'] + }> + & Record<'get_implicit_key_arc4_uint128()uint128' | 'get_implicit_key_arc4_uint128', { + argsObj: GlobalStateContractArgs['obj']['get_implicit_key_arc4_uint128()uint128'] + argsTuple: GlobalStateContractArgs['tuple']['get_implicit_key_arc4_uint128()uint128'] + returns: GlobalStateContractReturns['get_implicit_key_arc4_uint128()uint128'] + }> + & Record<'get_implicit_key_arc4_dynamic_bytes()byte[]' | 'get_implicit_key_arc4_dynamic_bytes', { + argsObj: GlobalStateContractArgs['obj']['get_implicit_key_arc4_dynamic_bytes()byte[]'] + argsTuple: GlobalStateContractArgs['tuple']['get_implicit_key_arc4_dynamic_bytes()byte[]'] + returns: GlobalStateContractReturns['get_implicit_key_arc4_dynamic_bytes()byte[]'] + }> + & Record<'get_implicit_key_tuple()(uint64,byte[],bool)' | 'get_implicit_key_tuple', { + argsObj: GlobalStateContractArgs['obj']['get_implicit_key_tuple()(uint64,byte[],bool)'] + argsTuple: GlobalStateContractArgs['tuple']['get_implicit_key_tuple()(uint64,byte[],bool)'] + returns: GlobalStateContractReturns['get_implicit_key_tuple()(uint64,byte[],bool)'] + }> + & Record<'get_arc4_uint()uint64' | 'get_arc4_uint', { + argsObj: GlobalStateContractArgs['obj']['get_arc4_uint()uint64'] + argsTuple: GlobalStateContractArgs['tuple']['get_arc4_uint()uint64'] + returns: GlobalStateContractReturns['get_arc4_uint()uint64'] + }> + & Record<'get_arc4_string()string' | 'get_arc4_string', { + argsObj: GlobalStateContractArgs['obj']['get_arc4_string()string'] + argsTuple: GlobalStateContractArgs['tuple']['get_arc4_string()string'] + returns: GlobalStateContractReturns['get_arc4_string()string'] + }> + & Record<'get_arc4_byte()byte' | 'get_arc4_byte', { + argsObj: GlobalStateContractArgs['obj']['get_arc4_byte()byte'] + argsTuple: GlobalStateContractArgs['tuple']['get_arc4_byte()byte'] + returns: GlobalStateContractReturns['get_arc4_byte()byte'] + }> + & Record<'get_arc4_bool()bool' | 'get_arc4_bool', { + argsObj: GlobalStateContractArgs['obj']['get_arc4_bool()bool'] + argsTuple: GlobalStateContractArgs['tuple']['get_arc4_bool()bool'] + returns: GlobalStateContractReturns['get_arc4_bool()bool'] + }> + & Record<'get_arc4_address()address' | 'get_arc4_address', { + argsObj: GlobalStateContractArgs['obj']['get_arc4_address()address'] + argsTuple: GlobalStateContractArgs['tuple']['get_arc4_address()address'] + returns: GlobalStateContractReturns['get_arc4_address()address'] + }> + & Record<'get_arc4_uint128()uint128' | 'get_arc4_uint128', { + argsObj: GlobalStateContractArgs['obj']['get_arc4_uint128()uint128'] + argsTuple: GlobalStateContractArgs['tuple']['get_arc4_uint128()uint128'] + returns: GlobalStateContractReturns['get_arc4_uint128()uint128'] + }> + & Record<'get_arc4_dynamic_bytes()byte[]' | 'get_arc4_dynamic_bytes', { + argsObj: GlobalStateContractArgs['obj']['get_arc4_dynamic_bytes()byte[]'] + argsTuple: GlobalStateContractArgs['tuple']['get_arc4_dynamic_bytes()byte[]'] + returns: GlobalStateContractReturns['get_arc4_dynamic_bytes()byte[]'] + }> + & Record<'set_implicit_key_arc4_uint(uint64)void' | 'set_implicit_key_arc4_uint', { + argsObj: GlobalStateContractArgs['obj']['set_implicit_key_arc4_uint(uint64)void'] + argsTuple: GlobalStateContractArgs['tuple']['set_implicit_key_arc4_uint(uint64)void'] + returns: GlobalStateContractReturns['set_implicit_key_arc4_uint(uint64)void'] + }> + & Record<'set_implicit_key_arc4_string(string)void' | 'set_implicit_key_arc4_string', { + argsObj: GlobalStateContractArgs['obj']['set_implicit_key_arc4_string(string)void'] + argsTuple: GlobalStateContractArgs['tuple']['set_implicit_key_arc4_string(string)void'] + returns: GlobalStateContractReturns['set_implicit_key_arc4_string(string)void'] + }> + & Record<'set_implicit_key_arc4_byte(byte)void' | 'set_implicit_key_arc4_byte', { + argsObj: GlobalStateContractArgs['obj']['set_implicit_key_arc4_byte(byte)void'] + argsTuple: GlobalStateContractArgs['tuple']['set_implicit_key_arc4_byte(byte)void'] + returns: GlobalStateContractReturns['set_implicit_key_arc4_byte(byte)void'] + }> + & Record<'set_implicit_key_arc4_bool(bool)void' | 'set_implicit_key_arc4_bool', { + argsObj: GlobalStateContractArgs['obj']['set_implicit_key_arc4_bool(bool)void'] + argsTuple: GlobalStateContractArgs['tuple']['set_implicit_key_arc4_bool(bool)void'] + returns: GlobalStateContractReturns['set_implicit_key_arc4_bool(bool)void'] + }> + & Record<'set_implicit_key_arc4_address(address)void' | 'set_implicit_key_arc4_address', { + argsObj: GlobalStateContractArgs['obj']['set_implicit_key_arc4_address(address)void'] + argsTuple: GlobalStateContractArgs['tuple']['set_implicit_key_arc4_address(address)void'] + returns: GlobalStateContractReturns['set_implicit_key_arc4_address(address)void'] + }> + & Record<'set_implicit_key_arc4_uint128(uint128)void' | 'set_implicit_key_arc4_uint128', { + argsObj: GlobalStateContractArgs['obj']['set_implicit_key_arc4_uint128(uint128)void'] + argsTuple: GlobalStateContractArgs['tuple']['set_implicit_key_arc4_uint128(uint128)void'] + returns: GlobalStateContractReturns['set_implicit_key_arc4_uint128(uint128)void'] + }> + & Record<'set_implicit_key_arc4_dynamic_bytes(byte[])void' | 'set_implicit_key_arc4_dynamic_bytes', { + argsObj: GlobalStateContractArgs['obj']['set_implicit_key_arc4_dynamic_bytes(byte[])void'] + argsTuple: GlobalStateContractArgs['tuple']['set_implicit_key_arc4_dynamic_bytes(byte[])void'] + returns: GlobalStateContractReturns['set_implicit_key_arc4_dynamic_bytes(byte[])void'] + }> + & Record<'set_implicit_key_tuple((uint64,byte[],bool))void' | 'set_implicit_key_tuple', { + argsObj: GlobalStateContractArgs['obj']['set_implicit_key_tuple((uint64,byte[],bool))void'] + argsTuple: GlobalStateContractArgs['tuple']['set_implicit_key_tuple((uint64,byte[],bool))void'] + returns: GlobalStateContractReturns['set_implicit_key_tuple((uint64,byte[],bool))void'] + }> + & Record<'set_arc4_uint(uint64)void' | 'set_arc4_uint', { + argsObj: GlobalStateContractArgs['obj']['set_arc4_uint(uint64)void'] + argsTuple: GlobalStateContractArgs['tuple']['set_arc4_uint(uint64)void'] + returns: GlobalStateContractReturns['set_arc4_uint(uint64)void'] + }> + & Record<'set_arc4_string(string)void' | 'set_arc4_string', { + argsObj: GlobalStateContractArgs['obj']['set_arc4_string(string)void'] + argsTuple: GlobalStateContractArgs['tuple']['set_arc4_string(string)void'] + returns: GlobalStateContractReturns['set_arc4_string(string)void'] + }> + & Record<'set_arc4_byte(byte)void' | 'set_arc4_byte', { + argsObj: GlobalStateContractArgs['obj']['set_arc4_byte(byte)void'] + argsTuple: GlobalStateContractArgs['tuple']['set_arc4_byte(byte)void'] + returns: GlobalStateContractReturns['set_arc4_byte(byte)void'] + }> + & Record<'set_arc4_bool(bool)void' | 'set_arc4_bool', { + argsObj: GlobalStateContractArgs['obj']['set_arc4_bool(bool)void'] + argsTuple: GlobalStateContractArgs['tuple']['set_arc4_bool(bool)void'] + returns: GlobalStateContractReturns['set_arc4_bool(bool)void'] + }> + & Record<'set_arc4_address(address)void' | 'set_arc4_address', { + argsObj: GlobalStateContractArgs['obj']['set_arc4_address(address)void'] + argsTuple: GlobalStateContractArgs['tuple']['set_arc4_address(address)void'] + returns: GlobalStateContractReturns['set_arc4_address(address)void'] + }> + & Record<'set_arc4_uint128(uint128)void' | 'set_arc4_uint128', { + argsObj: GlobalStateContractArgs['obj']['set_arc4_uint128(uint128)void'] + argsTuple: GlobalStateContractArgs['tuple']['set_arc4_uint128(uint128)void'] + returns: GlobalStateContractReturns['set_arc4_uint128(uint128)void'] + }> + & Record<'set_arc4_dynamic_bytes(byte[])void' | 'set_arc4_dynamic_bytes', { + argsObj: GlobalStateContractArgs['obj']['set_arc4_dynamic_bytes(byte[])void'] + argsTuple: GlobalStateContractArgs['tuple']['set_arc4_dynamic_bytes(byte[])void'] + returns: GlobalStateContractReturns['set_arc4_dynamic_bytes(byte[])void'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + global: { + keys: { + implicitKeyArc4Uint: bigint + implicitKeyArc4String: string + implicitKeyArc4Byte: number + implicitKeyArc4Bool: boolean + implicitKeyArc4Address: string + implicitKeyArc4Uint128: bigint + implicitKeyArc4DynamicBytes: Uint8Array + implicitKeyTuple: [bigint, Uint8Array, boolean] + arc4Uint: bigint + arc4String: string + arc4Byte: number + arc4Bool: boolean + arc4Address: string + arc4Uint128: bigint + arc4DynamicBytes: Uint8Array + } + maps: {} + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type GlobalStateContractSignatures = keyof GlobalStateContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type GlobalStateContractNonVoidMethodSignatures = keyof GlobalStateContractTypes['methods'] extends infer T ? T extends keyof GlobalStateContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the GlobalStateContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = GlobalStateContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the GlobalStateContract smart contract to the method's return type + */ +export type MethodReturn = GlobalStateContractTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed global state of the application. + */ +export type GlobalKeysState = GlobalStateContractTypes['state']['global']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type GlobalStateContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type GlobalStateContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: GlobalStateContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the GlobalStateContract smart contract + */ +export abstract class GlobalStateContractParamsFactory { + /** + * Constructs a no op call for the get_implicit_key_arc4_uint()uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4Uint(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_uint()uint64' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_implicit_key_arc4_string()string ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4String(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_string()string' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_implicit_key_arc4_byte()byte ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4Byte(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_byte()byte' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_implicit_key_arc4_bool()bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4Bool(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_bool()bool' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_implicit_key_arc4_address()address ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4Address(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_address()address' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_implicit_key_arc4_uint128()uint128 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4Uint128(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_uint128()uint128' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_implicit_key_arc4_dynamic_bytes()byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4DynamicBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_dynamic_bytes()byte[]' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_implicit_key_tuple()(uint64,byte[],bool) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyTuple(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_tuple()(uint64,byte[],bool)' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_arc4_uint()uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4Uint(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_uint()uint64' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_arc4_string()string ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4String(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_string()string' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_arc4_byte()byte ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4Byte(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_byte()byte' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_arc4_bool()bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4Bool(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_bool()bool' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_arc4_address()address ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4Address(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_address()address' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_arc4_uint128()uint128 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4Uint128(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_uint128()uint128' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get_arc4_dynamic_bytes()byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4DynamicBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_dynamic_bytes()byte[]' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the set_implicit_key_arc4_uint(uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setImplicitKeyArc4Uint(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_implicit_key_arc4_uint(uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_implicit_key_arc4_string(string)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setImplicitKeyArc4String(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_implicit_key_arc4_string(string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_implicit_key_arc4_byte(byte)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setImplicitKeyArc4Byte(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_implicit_key_arc4_byte(byte)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_implicit_key_arc4_bool(bool)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setImplicitKeyArc4Bool(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_implicit_key_arc4_bool(bool)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_implicit_key_arc4_address(address)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setImplicitKeyArc4Address(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_implicit_key_arc4_address(address)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_implicit_key_arc4_uint128(uint128)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setImplicitKeyArc4Uint128(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_implicit_key_arc4_uint128(uint128)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_implicit_key_arc4_dynamic_bytes(byte[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setImplicitKeyArc4DynamicBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_implicit_key_arc4_dynamic_bytes(byte[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_implicit_key_tuple((uint64,byte[],bool))void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setImplicitKeyTuple(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_implicit_key_tuple((uint64,byte[],bool))void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_arc4_uint(uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setArc4Uint(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_arc4_uint(uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_arc4_string(string)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setArc4String(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_arc4_string(string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_arc4_byte(byte)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setArc4Byte(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_arc4_byte(byte)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_arc4_bool(bool)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setArc4Bool(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_arc4_bool(bool)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_arc4_address(address)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setArc4Address(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_arc4_address(address)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_arc4_uint128(uint128)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setArc4Uint128(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_arc4_uint128(uint128)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } + /** + * Constructs a no op call for the set_arc4_dynamic_bytes(byte[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static setArc4DynamicBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'set_arc4_dynamic_bytes(byte[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], + } + } +} + +/** + * A factory to create and deploy one or more instance of the GlobalStateContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class GlobalStateContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `GlobalStateContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new GlobalStateContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new GlobalStateContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the GlobalStateContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: GlobalStateContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new GlobalStateContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the GlobalStateContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the GlobalStateContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the GlobalStateContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new GlobalStateContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the GlobalStateContract smart contract + */ +export class GlobalStateContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `GlobalStateContractClient` + * + * @param appClient An `AppClient` instance which has been created with the GlobalStateContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `GlobalStateContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `GlobalStateContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new GlobalStateContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `GlobalStateContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new GlobalStateContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the GlobalStateContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_uint()uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4Uint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Uint(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_string()string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4String: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getImplicitKeyArc4String(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_byte()byte` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4Byte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Byte(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_bool()bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Bool(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_address()address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4Address: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Address(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_uint128()uint128` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4Uint128: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Uint128(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_dynamic_bytes()byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4DynamicBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getImplicitKeyArc4DynamicBytes(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_tuple()(uint64,byte[],bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyTuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getImplicitKeyTuple(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_uint()uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4Uint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getArc4Uint(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_string()string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4String: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getArc4String(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_byte()byte` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4Byte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getArc4Byte(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_bool()bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getArc4Bool(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_address()address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4Address: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getArc4Address(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_uint128()uint128` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4Uint128: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getArc4Uint128(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_dynamic_bytes()byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4DynamicBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.getArc4DynamicBytes(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_uint(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setImplicitKeyArc4Uint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Uint(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_string(string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setImplicitKeyArc4String: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setImplicitKeyArc4String(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_byte(byte)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setImplicitKeyArc4Byte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Byte(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_bool(bool)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setImplicitKeyArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Bool(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_address(address)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setImplicitKeyArc4Address: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Address(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_uint128(uint128)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setImplicitKeyArc4Uint128: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Uint128(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_dynamic_bytes(byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setImplicitKeyArc4DynamicBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setImplicitKeyArc4DynamicBytes(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_tuple((uint64,byte[],bool))void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setImplicitKeyTuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setImplicitKeyTuple(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_uint(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setArc4Uint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setArc4Uint(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_string(string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setArc4String: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setArc4String(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_byte(byte)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setArc4Byte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setArc4Byte(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_bool(bool)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setArc4Bool(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_address(address)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setArc4Address: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setArc4Address(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_uint128(uint128)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setArc4Uint128: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setArc4Uint128(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_dynamic_bytes(byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + setArc4DynamicBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateContractParamsFactory.setArc4DynamicBytes(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the GlobalStateContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_uint()uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4Uint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Uint(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_string()string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4String: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getImplicitKeyArc4String(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_byte()byte` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4Byte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Byte(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_bool()bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Bool(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_address()address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4Address: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Address(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_uint128()uint128` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4Uint128: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Uint128(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_dynamic_bytes()byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4DynamicBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getImplicitKeyArc4DynamicBytes(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_tuple()(uint64,byte[],bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyTuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getImplicitKeyTuple(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_uint()uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4Uint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getArc4Uint(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_string()string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4String: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getArc4String(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_byte()byte` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4Byte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getArc4Byte(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_bool()bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getArc4Bool(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_address()address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4Address: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getArc4Address(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_uint128()uint128` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4Uint128: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getArc4Uint128(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_dynamic_bytes()byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4DynamicBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.getArc4DynamicBytes(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_uint(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setImplicitKeyArc4Uint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Uint(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_string(string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setImplicitKeyArc4String: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setImplicitKeyArc4String(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_byte(byte)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setImplicitKeyArc4Byte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Byte(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_bool(bool)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setImplicitKeyArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Bool(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_address(address)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setImplicitKeyArc4Address: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Address(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_uint128(uint128)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setImplicitKeyArc4Uint128: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Uint128(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_dynamic_bytes(byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setImplicitKeyArc4DynamicBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setImplicitKeyArc4DynamicBytes(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_tuple((uint64,byte[],bool))void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setImplicitKeyTuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setImplicitKeyTuple(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_uint(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setArc4Uint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setArc4Uint(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_string(string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setArc4String: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setArc4String(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_byte(byte)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setArc4Byte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setArc4Byte(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_bool(bool)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setArc4Bool(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_address(address)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setArc4Address: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setArc4Address(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_uint128(uint128)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setArc4Uint128: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setArc4Uint128(params)) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_dynamic_bytes(byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + setArc4DynamicBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateContractParamsFactory.setArc4DynamicBytes(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the GlobalStateContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_uint()uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4Uint: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Uint(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_implicit_key_arc4_uint()uint64'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_string()string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4String: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getImplicitKeyArc4String(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_implicit_key_arc4_string()string'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_byte()byte` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4Byte: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Byte(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_implicit_key_arc4_byte()byte'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_bool()bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4Bool: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Bool(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_implicit_key_arc4_bool()bool'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_address()address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4Address: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Address(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_implicit_key_arc4_address()address'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_uint128()uint128` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4Uint128: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getImplicitKeyArc4Uint128(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_implicit_key_arc4_uint128()uint128'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_arc4_dynamic_bytes()byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4DynamicBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getImplicitKeyArc4DynamicBytes(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_implicit_key_arc4_dynamic_bytes()byte[]'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_implicit_key_tuple()(uint64,byte[],bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyTuple: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getImplicitKeyTuple(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_implicit_key_tuple()(uint64,byte[],bool)'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_uint()uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4Uint: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getArc4Uint(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_arc4_uint()uint64'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_string()string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4String: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getArc4String(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_arc4_string()string'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_byte()byte` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4Byte: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getArc4Byte(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_arc4_byte()byte'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_bool()bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4Bool: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getArc4Bool(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_arc4_bool()bool'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_address()address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4Address: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getArc4Address(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_arc4_address()address'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_uint128()uint128` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4Uint128: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getArc4Uint128(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_arc4_uint128()uint128'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `get_arc4_dynamic_bytes()byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4DynamicBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.getArc4DynamicBytes(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['get_arc4_dynamic_bytes()byte[]'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_uint(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setImplicitKeyArc4Uint: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Uint(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_implicit_key_arc4_uint(uint64)void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_string(string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setImplicitKeyArc4String: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setImplicitKeyArc4String(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_implicit_key_arc4_string(string)void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_byte(byte)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setImplicitKeyArc4Byte: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Byte(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_implicit_key_arc4_byte(byte)void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_bool(bool)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setImplicitKeyArc4Bool: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Bool(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_implicit_key_arc4_bool(bool)void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_address(address)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setImplicitKeyArc4Address: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Address(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_implicit_key_arc4_address(address)void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_uint128(uint128)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setImplicitKeyArc4Uint128: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setImplicitKeyArc4Uint128(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_implicit_key_arc4_uint128(uint128)void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_arc4_dynamic_bytes(byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setImplicitKeyArc4DynamicBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setImplicitKeyArc4DynamicBytes(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_implicit_key_arc4_dynamic_bytes(byte[])void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_implicit_key_tuple((uint64,byte[],bool))void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setImplicitKeyTuple: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setImplicitKeyTuple(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_implicit_key_tuple((uint64,byte[],bool))void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_uint(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setArc4Uint: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setArc4Uint(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_arc4_uint(uint64)void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_string(string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setArc4String: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setArc4String(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_arc4_string(string)void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_byte(byte)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setArc4Byte: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setArc4Byte(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_arc4_byte(byte)void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_bool(bool)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setArc4Bool: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setArc4Bool(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_arc4_bool(bool)void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_address(address)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setArc4Address: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setArc4Address(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_arc4_address(address)void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_uint128(uint128)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setArc4Uint128: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setArc4Uint128(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_arc4_uint128(uint128)void'])} + }, + + /** + * Makes a call to the GlobalStateContract smart contract using the `set_arc4_dynamic_bytes(byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + setArc4DynamicBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateContractParamsFactory.setArc4DynamicBytes(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateContractReturns['set_arc4_dynamic_bytes(byte[])void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new GlobalStateContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current GlobalStateContract app + */ + state = { + /** + * Methods to access global state for the current GlobalStateContract app + */ + global: { + /** + * Get all current keyed values from global state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.global.getAll() + return { + implicitKeyArc4Uint: result.implicit_key_arc4_uint, + implicitKeyArc4String: result.implicit_key_arc4_string, + implicitKeyArc4Byte: result.implicit_key_arc4_byte, + implicitKeyArc4Bool: result.implicit_key_arc4_bool, + implicitKeyArc4Address: result.implicit_key_arc4_address, + implicitKeyArc4Uint128: result.implicit_key_arc4_uint128, + implicitKeyArc4DynamicBytes: result.implicit_key_arc4_dynamic_bytes, + implicitKeyTuple: result.implicit_key_tuple, + arc4Uint: result.arc4_uint, + arc4String: result.arc4_string, + arc4Byte: result.arc4_byte, + arc4Bool: result.arc4_bool, + arc4Address: result.arc4_address, + arc4Uint128: result.arc4_uint128, + arc4DynamicBytes: result.arc4_dynamic_bytes, + } + }, + /** + * Get the current value of the implicit_key_arc4_uint key in global state + */ + implicitKeyArc4Uint: async (): Promise => { return (await this.appClient.state.global.getValue("implicit_key_arc4_uint")) as bigint | undefined }, + /** + * Get the current value of the implicit_key_arc4_string key in global state + */ + implicitKeyArc4String: async (): Promise => { return (await this.appClient.state.global.getValue("implicit_key_arc4_string")) as string | undefined }, + /** + * Get the current value of the implicit_key_arc4_byte key in global state + */ + implicitKeyArc4Byte: async (): Promise => { return (await this.appClient.state.global.getValue("implicit_key_arc4_byte")) as number | undefined }, + /** + * Get the current value of the implicit_key_arc4_bool key in global state + */ + implicitKeyArc4Bool: async (): Promise => { return (await this.appClient.state.global.getValue("implicit_key_arc4_bool")) as boolean | undefined }, + /** + * Get the current value of the implicit_key_arc4_address key in global state + */ + implicitKeyArc4Address: async (): Promise => { return (await this.appClient.state.global.getValue("implicit_key_arc4_address")) as string | undefined }, + /** + * Get the current value of the implicit_key_arc4_uint128 key in global state + */ + implicitKeyArc4Uint128: async (): Promise => { return (await this.appClient.state.global.getValue("implicit_key_arc4_uint128")) as bigint | undefined }, + /** + * Get the current value of the implicit_key_arc4_dynamic_bytes key in global state + */ + implicitKeyArc4DynamicBytes: async (): Promise => { return (await this.appClient.state.global.getValue("implicit_key_arc4_dynamic_bytes")) as Uint8Array | undefined }, + /** + * Get the current value of the implicit_key_tuple key in global state + */ + implicitKeyTuple: async (): Promise<[bigint, Uint8Array, boolean] | undefined> => { return (await this.appClient.state.global.getValue("implicit_key_tuple")) as [bigint, Uint8Array, boolean] | undefined }, + /** + * Get the current value of the arc4_uint key in global state + */ + arc4Uint: async (): Promise => { return (await this.appClient.state.global.getValue("arc4_uint")) as bigint | undefined }, + /** + * Get the current value of the arc4_string key in global state + */ + arc4String: async (): Promise => { return (await this.appClient.state.global.getValue("arc4_string")) as string | undefined }, + /** + * Get the current value of the arc4_byte key in global state + */ + arc4Byte: async (): Promise => { return (await this.appClient.state.global.getValue("arc4_byte")) as number | undefined }, + /** + * Get the current value of the arc4_bool key in global state + */ + arc4Bool: async (): Promise => { return (await this.appClient.state.global.getValue("arc4_bool")) as boolean | undefined }, + /** + * Get the current value of the arc4_address key in global state + */ + arc4Address: async (): Promise => { return (await this.appClient.state.global.getValue("arc4_address")) as string | undefined }, + /** + * Get the current value of the arc4_uint128 key in global state + */ + arc4Uint128: async (): Promise => { return (await this.appClient.state.global.getValue("arc4_uint128")) as bigint | undefined }, + /** + * Get the current value of the arc4_dynamic_bytes key in global state + */ + arc4DynamicBytes: async (): Promise => { return (await this.appClient.state.global.getValue("arc4_dynamic_bytes")) as Uint8Array | undefined }, + }, + } + + public newGroup(composerConfig?: TransactionComposerConfig): GlobalStateContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a get_implicit_key_arc4_uint()uint64 method call against the GlobalStateContract contract + */ + getImplicitKeyArc4Uint(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4Uint(params))) + return this + }, + /** + * Add a get_implicit_key_arc4_string()string method call against the GlobalStateContract contract + */ + getImplicitKeyArc4String(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4String(params))) + return this + }, + /** + * Add a get_implicit_key_arc4_byte()byte method call against the GlobalStateContract contract + */ + getImplicitKeyArc4Byte(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4Byte(params))) + return this + }, + /** + * Add a get_implicit_key_arc4_bool()bool method call against the GlobalStateContract contract + */ + getImplicitKeyArc4Bool(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4Bool(params))) + return this + }, + /** + * Add a get_implicit_key_arc4_address()address method call against the GlobalStateContract contract + */ + getImplicitKeyArc4Address(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4Address(params))) + return this + }, + /** + * Add a get_implicit_key_arc4_uint128()uint128 method call against the GlobalStateContract contract + */ + getImplicitKeyArc4Uint128(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4Uint128(params))) + return this + }, + /** + * Add a get_implicit_key_arc4_dynamic_bytes()byte[] method call against the GlobalStateContract contract + */ + getImplicitKeyArc4DynamicBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4DynamicBytes(params))) + return this + }, + /** + * Add a get_implicit_key_tuple()(uint64,byte[],bool) method call against the GlobalStateContract contract + */ + getImplicitKeyTuple(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyTuple(params))) + return this + }, + /** + * Add a get_arc4_uint()uint64 method call against the GlobalStateContract contract + */ + getArc4Uint(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4Uint(params))) + return this + }, + /** + * Add a get_arc4_string()string method call against the GlobalStateContract contract + */ + getArc4String(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4String(params))) + return this + }, + /** + * Add a get_arc4_byte()byte method call against the GlobalStateContract contract + */ + getArc4Byte(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4Byte(params))) + return this + }, + /** + * Add a get_arc4_bool()bool method call against the GlobalStateContract contract + */ + getArc4Bool(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4Bool(params))) + return this + }, + /** + * Add a get_arc4_address()address method call against the GlobalStateContract contract + */ + getArc4Address(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4Address(params))) + return this + }, + /** + * Add a get_arc4_uint128()uint128 method call against the GlobalStateContract contract + */ + getArc4Uint128(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4Uint128(params))) + return this + }, + /** + * Add a get_arc4_dynamic_bytes()byte[] method call against the GlobalStateContract contract + */ + getArc4DynamicBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4DynamicBytes(params))) + return this + }, + /** + * Add a set_implicit_key_arc4_uint(uint64)void method call against the GlobalStateContract contract + */ + setImplicitKeyArc4Uint(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setImplicitKeyArc4Uint(params))) + return this + }, + /** + * Add a set_implicit_key_arc4_string(string)void method call against the GlobalStateContract contract + */ + setImplicitKeyArc4String(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setImplicitKeyArc4String(params))) + return this + }, + /** + * Add a set_implicit_key_arc4_byte(byte)void method call against the GlobalStateContract contract + */ + setImplicitKeyArc4Byte(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setImplicitKeyArc4Byte(params))) + return this + }, + /** + * Add a set_implicit_key_arc4_bool(bool)void method call against the GlobalStateContract contract + */ + setImplicitKeyArc4Bool(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setImplicitKeyArc4Bool(params))) + return this + }, + /** + * Add a set_implicit_key_arc4_address(address)void method call against the GlobalStateContract contract + */ + setImplicitKeyArc4Address(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setImplicitKeyArc4Address(params))) + return this + }, + /** + * Add a set_implicit_key_arc4_uint128(uint128)void method call against the GlobalStateContract contract + */ + setImplicitKeyArc4Uint128(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setImplicitKeyArc4Uint128(params))) + return this + }, + /** + * Add a set_implicit_key_arc4_dynamic_bytes(byte[])void method call against the GlobalStateContract contract + */ + setImplicitKeyArc4DynamicBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setImplicitKeyArc4DynamicBytes(params))) + return this + }, + /** + * Add a set_implicit_key_tuple((uint64,byte[],bool))void method call against the GlobalStateContract contract + */ + setImplicitKeyTuple(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setImplicitKeyTuple(params))) + return this + }, + /** + * Add a set_arc4_uint(uint64)void method call against the GlobalStateContract contract + */ + setArc4Uint(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setArc4Uint(params))) + return this + }, + /** + * Add a set_arc4_string(string)void method call against the GlobalStateContract contract + */ + setArc4String(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setArc4String(params))) + return this + }, + /** + * Add a set_arc4_byte(byte)void method call against the GlobalStateContract contract + */ + setArc4Byte(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setArc4Byte(params))) + return this + }, + /** + * Add a set_arc4_bool(bool)void method call against the GlobalStateContract contract + */ + setArc4Bool(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setArc4Bool(params))) + return this + }, + /** + * Add a set_arc4_address(address)void method call against the GlobalStateContract contract + */ + setArc4Address(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setArc4Address(params))) + return this + }, + /** + * Add a set_arc4_uint128(uint128)void method call against the GlobalStateContract contract + */ + setArc4Uint128(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setArc4Uint128(params))) + return this + }, + /** + * Add a set_arc4_dynamic_bytes(byte[])void method call against the GlobalStateContract contract + */ + setArc4DynamicBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setArc4DynamicBytes(params))) + return this + }, + /** + * Add a clear state call to the GlobalStateContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as GlobalStateContractComposer + } +} +export type GlobalStateContractComposer = { + /** + * Calls the get_implicit_key_arc4_uint()uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4Uint(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_implicit_key_arc4_uint()uint64'] | undefined]> + + /** + * Calls the get_implicit_key_arc4_string()string ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4String(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_implicit_key_arc4_string()string'] | undefined]> + + /** + * Calls the get_implicit_key_arc4_byte()byte ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4Byte(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_implicit_key_arc4_byte()byte'] | undefined]> + + /** + * Calls the get_implicit_key_arc4_bool()bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4Bool(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_implicit_key_arc4_bool()bool'] | undefined]> + + /** + * Calls the get_implicit_key_arc4_address()address ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4Address(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_implicit_key_arc4_address()address'] | undefined]> + + /** + * Calls the get_implicit_key_arc4_uint128()uint128 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4Uint128(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_implicit_key_arc4_uint128()uint128'] | undefined]> + + /** + * Calls the get_implicit_key_arc4_dynamic_bytes()byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4DynamicBytes(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_implicit_key_arc4_dynamic_bytes()byte[]'] | undefined]> + + /** + * Calls the get_implicit_key_tuple()(uint64,byte[],bool) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyTuple(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_implicit_key_tuple()(uint64,byte[],bool)'] | undefined]> + + /** + * Calls the get_arc4_uint()uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4Uint(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_arc4_uint()uint64'] | undefined]> + + /** + * Calls the get_arc4_string()string ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4String(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_arc4_string()string'] | undefined]> + + /** + * Calls the get_arc4_byte()byte ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4Byte(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_arc4_byte()byte'] | undefined]> + + /** + * Calls the get_arc4_bool()bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4Bool(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_arc4_bool()bool'] | undefined]> + + /** + * Calls the get_arc4_address()address ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4Address(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_arc4_address()address'] | undefined]> + + /** + * Calls the get_arc4_uint128()uint128 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4Uint128(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_arc4_uint128()uint128'] | undefined]> + + /** + * Calls the get_arc4_dynamic_bytes()byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4DynamicBytes(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['get_arc4_dynamic_bytes()byte[]'] | undefined]> + + /** + * Calls the set_implicit_key_arc4_uint(uint64)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setImplicitKeyArc4Uint(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_implicit_key_arc4_uint(uint64)void'] | undefined]> + + /** + * Calls the set_implicit_key_arc4_string(string)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setImplicitKeyArc4String(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_implicit_key_arc4_string(string)void'] | undefined]> + + /** + * Calls the set_implicit_key_arc4_byte(byte)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setImplicitKeyArc4Byte(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_implicit_key_arc4_byte(byte)void'] | undefined]> + + /** + * Calls the set_implicit_key_arc4_bool(bool)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setImplicitKeyArc4Bool(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_implicit_key_arc4_bool(bool)void'] | undefined]> + + /** + * Calls the set_implicit_key_arc4_address(address)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setImplicitKeyArc4Address(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_implicit_key_arc4_address(address)void'] | undefined]> + + /** + * Calls the set_implicit_key_arc4_uint128(uint128)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setImplicitKeyArc4Uint128(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_implicit_key_arc4_uint128(uint128)void'] | undefined]> + + /** + * Calls the set_implicit_key_arc4_dynamic_bytes(byte[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setImplicitKeyArc4DynamicBytes(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_implicit_key_arc4_dynamic_bytes(byte[])void'] | undefined]> + + /** + * Calls the set_implicit_key_tuple((uint64,byte[],bool))void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setImplicitKeyTuple(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_implicit_key_tuple((uint64,byte[],bool))void'] | undefined]> + + /** + * Calls the set_arc4_uint(uint64)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setArc4Uint(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_arc4_uint(uint64)void'] | undefined]> + + /** + * Calls the set_arc4_string(string)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setArc4String(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_arc4_string(string)void'] | undefined]> + + /** + * Calls the set_arc4_byte(byte)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setArc4Byte(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_arc4_byte(byte)void'] | undefined]> + + /** + * Calls the set_arc4_bool(bool)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setArc4Bool(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_arc4_bool(bool)void'] | undefined]> + + /** + * Calls the set_arc4_address(address)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setArc4Address(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_arc4_address(address)void'] | undefined]> + + /** + * Calls the set_arc4_uint128(uint128)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setArc4Uint128(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_arc4_uint128(uint128)void'] | undefined]> + + /** + * Calls the set_arc4_dynamic_bytes(byte[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + setArc4DynamicBytes(params?: CallParams): GlobalStateContractComposer<[...TReturns, GlobalStateContractReturns['set_arc4_dynamic_bytes(byte[])void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the GlobalStateContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): GlobalStateContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): GlobalStateContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type GlobalStateContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/GlobalStateValidator.ts b/examples/p-py/projects/p-py-frontend/src/contracts/GlobalStateValidator.ts new file mode 100644 index 0000000..483c414 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/GlobalStateValidator.ts @@ -0,0 +1,557 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"GlobalStateValidator","structs":{},"methods":[{"name":"validate_g_args","args":[{"type":"uint64","name":"arg1"},{"type":"string","name":"arg2"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[72],"errorMessage":"transaction type is appl"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGJ5dGVjYmxvY2sgMHhjMGViNWM2NwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0dsb2JhbFN0YXRlVmFsaWRhdG9yL2NvbnRyYWN0LnB5OjQKICAgIC8vIGNsYXNzIEdsb2JhbFN0YXRlVmFsaWRhdG9yKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA1CiAgICBieXRlY18wIC8vIG1ldGhvZCAidmFsaWRhdGVfZ19hcmdzKHVpbnQ2NCxzdHJpbmcpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdmFsaWRhdGVfZ19hcmdzX3JvdXRlQDMKICAgIGVycgoKbWFpbl92YWxpZGF0ZV9nX2FyZ3Nfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9HbG9iYWxTdGF0ZVZhbGlkYXRvci9jb250cmFjdC5weTo1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0CiAgICBiIHZhbGlkYXRlX2dfYXJncwoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuR2xvYmFsU3RhdGVWYWxpZGF0b3IuY29udHJhY3QuR2xvYmFsU3RhdGVWYWxpZGF0b3IudmFsaWRhdGVfZ19hcmdzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmFsaWRhdGVfZ19hcmdzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0dsb2JhbFN0YXRlVmFsaWRhdG9yL2NvbnRyYWN0LnB5OjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0dsb2JhbFN0YXRlVmFsaWRhdG9yL2NvbnRyYWN0LnB5OjcKICAgIC8vIGFzc2VydCBUeG4uYXBwbGljYXRpb25fYXJncygwKSA9PSBhcmM0LmFyYzRfc2lnbmF0dXJlKCJ2YWxpZGF0ZV9nX2FyZ3ModWludDY0LHN0cmluZyl2b2lkIikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIGJ5dGVjXzAgLy8gbWV0aG9kICJ2YWxpZGF0ZV9nX2FyZ3ModWludDY0LHN0cmluZyl2b2lkIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0dsb2JhbFN0YXRlVmFsaWRhdG9yL2NvbnRyYWN0LnB5OjgKICAgIC8vIGFzc2VydCBUeG4uYXBwbGljYXRpb25fYXJncygxKSA9PSBhcmcxLmJ5dGVzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkaWcgMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0dsb2JhbFN0YXRlVmFsaWRhdG9yL2NvbnRyYWN0LnB5OjkKICAgIC8vIGFzc2VydCBUeG4uYXBwbGljYXRpb25fYXJncygyKSA9PSBhcmcyLmJ5dGVzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvR2xvYmFsU3RhdGVWYWxpZGF0b3IvY29udHJhY3QucHk6MTAKICAgIC8vIGFzc2VydCBndHhuLkFwcGxpY2F0aW9uQ2FsbFRyYW5zYWN0aW9uKFR4bi5ncm91cF9pbmRleCkuYXBwX2FyZ3MoMSkgPT0gYXJnMS5ieXRlcwogICAgdHhuIEdyb3VwSW5kZXgKICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXBwbAogICAgcHVzaGludCAxCiAgICBndHhuc2FzIEFwcGxpY2F0aW9uQXJncwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9HbG9iYWxTdGF0ZVZhbGlkYXRvci9jb250cmFjdC5weToxMQogICAgLy8gYXNzZXJ0IGd0eG4uVHJhbnNhY3Rpb24oVHhuLmdyb3VwX2luZGV4KS5hcHBfYXJncygxKSA9PSBhcmcxLmJ5dGVzCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAxCiAgICBndHhuc2FzIEFwcGxpY2F0aW9uQXJncwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9HbG9iYWxTdGF0ZVZhbGlkYXRvci9jb250cmFjdC5weToxMgogICAgLy8gYXNzZXJ0IG9wLkdUeG4uYXBwbGljYXRpb25fYXJncyhUeG4uZ3JvdXBfaW5kZXgsIDEpID09IGFyZzEuYnl0ZXMKICAgIHR4biBHcm91cEluZGV4CiAgICBndHhuc2EgQXBwbGljYXRpb25BcmdzIDEKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvR2xvYmFsU3RhdGVWYWxpZGF0b3IvY29udHJhY3QucHk6MTMKICAgIC8vIGFzc2VydCBvcC5UeG4uYXBwbGljYXRpb25fYXJncygxKSA9PSBhcmcxLmJ5dGVzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvR2xvYmFsU3RhdGVWYWxpZGF0b3IvY29udHJhY3QucHk6NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBwdXNoaW50IDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyYBBMDrXGcxG0EAEyg2GgCOAQABADEZFDEYEERCAAgxGRQxGBQQQzYaATYaAjYaACgSRDYaAUsCEkQ2GgISRDEWSTgQgQYSRIEBwhpLARJEMRaBAcIaSwESRDEWORoBSwESRDYaARJEgQFD","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the GlobalStateValidator contract + */ +export type GlobalStateValidatorArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'validate_g_args(uint64,string)void': { + arg1: bigint | number + arg2: string + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'validate_g_args(uint64,string)void': [arg1: bigint | number, arg2: string] + } +} + +/** + * The return type for each method + */ +export type GlobalStateValidatorReturns = { + 'validate_g_args(uint64,string)void': void +} + +/** + * Defines the types of available calls and state of the GlobalStateValidator smart contract. + */ +export type GlobalStateValidatorTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'validate_g_args(uint64,string)void' | 'validate_g_args', { + argsObj: GlobalStateValidatorArgs['obj']['validate_g_args(uint64,string)void'] + argsTuple: GlobalStateValidatorArgs['tuple']['validate_g_args(uint64,string)void'] + returns: GlobalStateValidatorReturns['validate_g_args(uint64,string)void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type GlobalStateValidatorSignatures = keyof GlobalStateValidatorTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the GlobalStateValidator smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = GlobalStateValidatorTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the GlobalStateValidator smart contract to the method's return type + */ +export type MethodReturn = GlobalStateValidatorTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type GlobalStateValidatorCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type GlobalStateValidatorDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: GlobalStateValidatorCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the GlobalStateValidator smart contract + */ +export abstract class GlobalStateValidatorParamsFactory { + /** + * Constructs a no op call for the validate_g_args(uint64,string)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static validateGArgs(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'validate_g_args(uint64,string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.arg1, params.args.arg2], + } + } +} + +/** + * A factory to create and deploy one or more instance of the GlobalStateValidator smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class GlobalStateValidatorFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `GlobalStateValidatorFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new GlobalStateValidatorClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new GlobalStateValidatorClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the GlobalStateValidator smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: GlobalStateValidatorDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new GlobalStateValidatorClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the GlobalStateValidator smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the GlobalStateValidator smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the GlobalStateValidator smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new GlobalStateValidatorClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the GlobalStateValidator smart contract + */ +export class GlobalStateValidatorClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `GlobalStateValidatorClient` + * + * @param appClient An `AppClient` instance which has been created with the GlobalStateValidator app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `GlobalStateValidatorClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `GlobalStateValidatorClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new GlobalStateValidatorClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `GlobalStateValidatorClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new GlobalStateValidatorClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the GlobalStateValidator smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the GlobalStateValidator smart contract using the `validate_g_args(uint64,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + validateGArgs: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(GlobalStateValidatorParamsFactory.validateGArgs(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the GlobalStateValidator smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the GlobalStateValidator smart contract using the `validate_g_args(uint64,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + validateGArgs: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(GlobalStateValidatorParamsFactory.validateGArgs(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the GlobalStateValidator smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the GlobalStateValidator smart contract using the `validate_g_args(uint64,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + validateGArgs: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(GlobalStateValidatorParamsFactory.validateGArgs(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStateValidatorReturns['validate_g_args(uint64,string)void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new GlobalStateValidatorClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current GlobalStateValidator app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): GlobalStateValidatorComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a validate_g_args(uint64,string)void method call against the GlobalStateValidator contract + */ + validateGArgs(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.validateGArgs(params))) + return this + }, + /** + * Add a clear state call to the GlobalStateValidator contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as GlobalStateValidatorComposer + } +} +export type GlobalStateValidatorComposer = { + /** + * Calls the validate_g_args(uint64,string)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + validateGArgs(params?: CallParams): GlobalStateValidatorComposer<[...TReturns, GlobalStateValidatorReturns['validate_g_args(uint64,string)void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the GlobalStateValidator smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): GlobalStateValidatorComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): GlobalStateValidatorComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type GlobalStateValidatorComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/HelloWorld.ts b/examples/p-py/projects/p-py-frontend/src/contracts/HelloWorld.ts index 1fc6caf..e60b7c5 100644 --- a/examples/p-py/projects/p-py-frontend/src/contracts/HelloWorld.ts +++ b/examples/p-py/projects/p-py-frontend/src/contracts/HelloWorld.ts @@ -2,29 +2,19 @@ /** * This file was automatically generated by @algorandfoundation/algokit-client-generator. * DO NOT MODIFY IT BY HAND. - * requires: @algorandfoundation/algokit-utils: ^7 + * requires: @algorandfoundation/algokit-utils: ^10 */ import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' -import { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app' -import { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56' -import { - AppClient as _AppClient, - AppClientMethodCallParams, - AppClientParams, - AppClientBareCallParams, - CallOnComplete, - AppClientCompilationParams, - ResolveAppClientByCreatorAndName, - ResolveAppClientByNetwork, - CloneAppClientParams, -} from '@algorandfoundation/algokit-utils/types/app-client' -import { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' -import { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer' -import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' -import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' -import SimulateResponse = modelsv2.SimulateResponse - -export const APP_SPEC: Arc56Contract = {"name":"HelloWorld","structs":{},"methods":[{"name":"hello","args":[{"type":"string","name":"name"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[37],"errorMessage":"OnCompletion must be NoOp && can only call when creating"},{"pc":[26],"errorMessage":"OnCompletion must be NoOp && can only call when not creating"},{"pc":[47],"errorMessage":"invalid array length header"},{"pc":[55],"errorMessage":"invalid number of bytes for arc4.dynamic_array"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo1CiAgICAvLyBjbGFzcyBIZWxsb1dvcmxkKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA1CiAgICBwdXNoYnl0ZXMgMHgwMmJlY2UxMSAvLyBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2hlbGxvX3JvdXRlQDMKICAgIGVycgoKbWFpbl9oZWxsb19yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2hlbGxvX3dvcmxkL2NvbnRyYWN0LnB5OjYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGhlbGxvCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDU6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5oZWxsb193b3JsZC5jb250cmFjdC5IZWxsb1dvcmxkLmhlbGxvW3JvdXRpbmddKCkgLT4gdm9pZDoKaGVsbG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvaGVsbG9fd29ybGQvY29udHJhY3QucHk6NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIHB1c2hpbnQgMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2hlbGxvX3dvcmxkL2NvbnRyYWN0LnB5OjgKICAgIC8vIHJldHVybiAiSGVsbG8sICIgKyBuYW1lCiAgICBwdXNoYnl0ZXMgIkhlbGxvLCAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"},"byteCode":{"approval":"CzEbQQAYgAQCvs4RNhoAjgEAAQAxGRQxGBBEQgALMRkUMRgUEESBAUM2GgFJgQBZgQIISwEVEkRXAgCAB0hlbGxvLCBMUEkVFlcGAkxQgAQVH3x1TFCwgQFD","clear":"C4EBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":5,"minor":4,"patch":0}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"HelloWorld","structs":{},"methods":[{"name":"hello","args":[{"type":"string","name":"name"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[44],"errorMessage":"invalid array length header"},{"pc":[52],"errorMessage":"invalid number of bytes for arc4.dynamic_array"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo1CiAgICAvLyBjbGFzcyBIZWxsb1dvcmxkKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA1CiAgICBwdXNoYnl0ZXMgMHgwMmJlY2UxMSAvLyBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2hlbGxvX3JvdXRlQDMKICAgIGVycgoKbWFpbl9oZWxsb19yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2hlbGxvX3dvcmxkL2NvbnRyYWN0LnB5OjYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQKICAgIGIgaGVsbG8KCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVANToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmhlbGxvX3dvcmxkLmNvbnRyYWN0LkhlbGxvV29ybGQuaGVsbG9bcm91dGluZ10oKSAtPiB2b2lkOgpoZWxsbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgcHVzaGludCAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo4CiAgICAvLyByZXR1cm4gIkhlbGxvLCAiICsgbmFtZQogICAgcHVzaGJ5dGVzICJIZWxsbywgIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvaGVsbG9fd29ybGQvY29udHJhY3QucHk6NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBwdXNoaW50IDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CzEbQQAYgAQCvs4RNhoAjgEAAQAxGRQxGBBEQgAIMRkUMRgUEEM2GgFJgQBZgQIISwEVEkRXAgCAB0hlbGxvLCBMUEkVFlcGAkxQgAQVH3x1TFCwgQFD","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data @@ -137,7 +127,7 @@ export type MethodReturn = HelloWorldTy * Defines supported create method params for this smart contract */ export type HelloWorldCreateCallParams = - | Expand + | Expand /** * Defines arguments required for the deploy method. */ @@ -258,7 +248,7 @@ export class HelloWorldFactory { * @param params The params for the bare (raw) call * @returns The params for a create call */ - bare: (params?: Expand) => { + bare: (params?: Expand) => { return this.appFactory.params.bare.create(params) }, }, @@ -279,7 +269,7 @@ export class HelloWorldFactory { * @param params The params for the bare (raw) call * @returns The transaction for a create call */ - bare: (params?: Expand) => { + bare: (params?: Expand) => { return this.appFactory.createTransaction.bare.create(params) }, }, @@ -300,7 +290,7 @@ export class HelloWorldFactory { * @param params The params for the bare (raw) call * @returns The create result */ - bare: async (params?: Expand) => { + bare: async (params?: Expand) => { const result = await this.appFactory.send.bare.create(params) return { result: result.result, appClient: new HelloWorldClient(result.appClient) } }, @@ -336,15 +326,7 @@ export class HelloWorldClient { appSpec: APP_SPEC, }) } - - /** - * Checks for decode errors on the given return value and maps the return value to the return type for the given method - * @returns The typed return value or undefined if there was no value - */ - decodeReturnValue(method: TSignature, returnValue: ABIReturn | undefined) { - return returnValue !== undefined ? getArc56ReturnValue>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined - } - + /** * Returns a new `HelloWorldClient` client, resolving the app by creator address and name * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). @@ -412,7 +394,7 @@ export class HelloWorldClient { * @param params The params for the smart contract call * @returns The call params */ - hello: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + hello: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { return this.appClient.params.call(HelloWorldParamsFactory.hello(params)) }, @@ -438,7 +420,7 @@ export class HelloWorldClient { * @param params The params for the smart contract call * @returns The call transaction */ - hello: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + hello: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { return this.appClient.createTransaction.call(HelloWorldParamsFactory.hello(params)) }, @@ -464,7 +446,7 @@ export class HelloWorldClient { * @param params The params for the smart contract call * @returns The call result */ - hello: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + hello: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { const result = await this.appClient.send.call(HelloWorldParamsFactory.hello(params)) return {...result, return: result.return as unknown as (undefined | HelloWorldReturns['hello(string)string'])} }, @@ -474,7 +456,7 @@ export class HelloWorldClient { /** * Clone this app client with different params * - * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. * @returns A new app client with the altered params */ public clone(params: CloneAppClientParams) { @@ -487,18 +469,16 @@ export class HelloWorldClient { state = { } - public newGroup(): HelloWorldComposer { + public newGroup(composerConfig?: TransactionComposerConfig): HelloWorldComposer { const client = this - const composer = this.algorand.newGroup() + const composer = this.algorand.newGroup(composerConfig) let promiseChain:Promise = Promise.resolve() - const resultMappers: Array any)> = [] return { /** * Add a hello(string)string method call against the HelloWorld contract */ - hello(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + hello(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.hello(params))) - resultMappers.push((v) => client.decodeReturnValue('hello(string)string', v)) return this }, /** @@ -521,7 +501,7 @@ export class HelloWorldClient { const result = await (!options ? composer.simulate() : composer.simulate(options)) return { ...result, - returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + returns: result.returns?.map(val => val.returnValue) } }, async send(params?: SendParams) { @@ -529,7 +509,7 @@ export class HelloWorldClient { const result = await composer.send(params) return { ...result, - returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + returns: result.returns?.map(val => val.returnValue) } } } as unknown as HelloWorldComposer @@ -539,7 +519,6 @@ export type HelloWorldComposer = { /** * Calls the hello(string)string ABI method. * - * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ @@ -548,7 +527,7 @@ export type HelloWorldComposer = { /** * Makes a clear_state call to an existing instance of the HelloWorld smart contract. * - * @param args The arguments for the bare call + * @param params Any additional parameters for the bare call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ clearState(params?: AppClientBareCallParams): HelloWorldComposer<[...TReturns, undefined]> @@ -575,7 +554,7 @@ export type HelloWorldComposer = { */ send(params?: SendParams): Promise> } -export type HelloWorldComposerResults = Expand = Expand diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/ITxnOpsContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/ITxnOpsContract.ts new file mode 100644 index 0000000..a3d8854 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/ITxnOpsContract.ts @@ -0,0 +1,554 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"ITxnOpsContract","structs":{},"methods":[{"name":"verify_itxn_ops","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDYgMTAwMAogICAgYnl0ZWNibG9jayAweDA2ODEwMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ4OAogICAgLy8gY2xhc3MgSVR4bk9wc0NvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA1CiAgICBwdXNoYnl0ZXMgMHg0ZTdjZDljYiAvLyBtZXRob2QgInZlcmlmeV9pdHhuX29wcygpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdmVyaWZ5X2l0eG5fb3BzX3JvdXRlQDMKICAgIGVycgoKbWFpbl92ZXJpZnlfaXR4bl9vcHNfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0ODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydAogICAgYiB2ZXJpZnlfaXR4bl9vcHMKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVANToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LklUeG5PcHNDb250cmFjdC52ZXJpZnlfaXR4bl9vcHNbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfaXR4bl9vcHM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDkxCiAgICAvLyBhbGdvcHkub3AuSVR4bkNyZWF0ZS5iZWdpbigpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDkyCiAgICAvLyBhbGdvcHkub3AuSVR4bkNyZWF0ZS5zZXRfdHlwZV9lbnVtKGFsZ29weS5UcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsKQogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0OTMKICAgIC8vIGFsZ29weS5vcC5JVHhuQ3JlYXRlLnNldF9vbl9jb21wbGV0aW9uKGFsZ29weS5PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uKQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ5NAogICAgLy8gYWxnb3B5Lm9wLklUeG5DcmVhdGUuc2V0X2FwcHJvdmFsX3Byb2dyYW0oQnl0ZXMuZnJvbV9oZXgoIjA2ODEwMSIpKQogICAgYnl0ZWNfMCAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0OTUtNDk2CiAgICAvLyAjIHBhZ2VzIGVzc2VudGlhbGx5IGFwcGVuZHMKICAgIC8vIGFsZ29weS5vcC5JVHhuQ3JlYXRlLnNldF9hcHByb3ZhbF9wcm9ncmFtX3BhZ2VzKEJ5dGVzLmZyb21faGV4KCIwNjgxMDEiKSkKICAgIGJ5dGVjXzAgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0OTcKICAgIC8vIGFsZ29weS5vcC5JVHhuQ3JlYXRlLnNldF9jbGVhcl9zdGF0ZV9wcm9ncmFtKEJ5dGVzLmZyb21faGV4KCIwNjgxMDEiKSkKICAgIGJ5dGVjXzAgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0OTgKICAgIC8vIGFsZ29weS5vcC5JVHhuQ3JlYXRlLnNldF9mZWUoYWxnb3B5Lm9wLkdsb2JhbC5taW5fdHhuX2ZlZSkKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDk5CiAgICAvLyBhbGdvcHkub3AuSVR4bkNyZWF0ZS5uZXh0KCkKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjUwMAogICAgLy8gYWxnb3B5Lm9wLklUeG5DcmVhdGUuc2V0X3R5cGVfZW51bShhbGdvcHkuVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQpCiAgICBpbnRjXzAgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTAxCiAgICAvLyBhbGdvcHkub3AuSVR4bkNyZWF0ZS5zZXRfcmVjZWl2ZXIoYWxnb3B5Lm9wLkdsb2JhbC5jcmVhdG9yX2FkZHJlc3MpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MDIKICAgIC8vIGFsZ29weS5vcC5JVHhuQ3JlYXRlLnNldF9hbW91bnQoYWxnb3B5LlVJbnQ2NCgxMDAwKSkKICAgIGludGNfMiAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjUwMwogICAgLy8gYWxnb3B5Lm9wLklUeG5DcmVhdGUuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTA1CiAgICAvLyBhc3NlcnQgYWxnb3B5Lm9wLklUeG4ucmVjZWl2ZXIoKSA9PSBhbGdvcHkub3AuR2xvYmFsLmNyZWF0b3JfYWRkcmVzcwogICAgaXR4biBSZWNlaXZlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTA2CiAgICAvLyBhc3NlcnQgYWxnb3B5Lm9wLklUeG4uYW1vdW50KCkgPT0gYWxnb3B5LlVJbnQ2NCgxMDAwKQogICAgaXR4biBBbW91bnQKICAgIGludGNfMiAvLyAxMDAwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTA3CiAgICAvLyBhc3NlcnQgYWxnb3B5Lm9wLklUeG4udHlwZV9lbnVtKCkgPT0gYWxnb3B5LlRyYW5zYWN0aW9uVHlwZS5QYXltZW50CiAgICBpdHhuIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTA5CiAgICAvLyBhc3NlcnQgYWxnb3B5Lm9wLkdJVHhuLnR5cGVfZW51bSgwKSA9PSBhbGdvcHkuVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgZ2l0eG4gMCBUeXBlRW51bQogICAgaW50Y18xIC8vIGFwcGwKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MTAKICAgIC8vIGFzc2VydCBhbGdvcHkub3AuR0lUeG4udHlwZV9lbnVtKDEpID09IGFsZ29weS5UcmFuc2FjdGlvblR5cGUuUGF5bWVudAogICAgZ2l0eG4gMSBUeXBlRW51bQogICAgaW50Y18wIC8vIHBheQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ4OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyADAQboByYBAwaBATEbQQAYgAROfNnLNhoAjgEAAQAxGRQxGBBEQgAIMRkUMRgUEEOxI7IQgQWyGSiyHiiyQCiyHzIAsgG2IrIQMgmyBySyCLO0BzIJEkS0CCQSRLQQIhJEtwAQIxJEtwEQIhJEIkM=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the ITxnOpsContract contract + */ +export type ITxnOpsContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'verify_itxn_ops()void': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'verify_itxn_ops()void': [] + } +} + +/** + * The return type for each method + */ +export type ITxnOpsContractReturns = { + 'verify_itxn_ops()void': void +} + +/** + * Defines the types of available calls and state of the ITxnOpsContract smart contract. + */ +export type ITxnOpsContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'verify_itxn_ops()void' | 'verify_itxn_ops', { + argsObj: ITxnOpsContractArgs['obj']['verify_itxn_ops()void'] + argsTuple: ITxnOpsContractArgs['tuple']['verify_itxn_ops()void'] + returns: ITxnOpsContractReturns['verify_itxn_ops()void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type ITxnOpsContractSignatures = keyof ITxnOpsContractTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the ITxnOpsContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = ITxnOpsContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the ITxnOpsContract smart contract to the method's return type + */ +export type MethodReturn = ITxnOpsContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type ITxnOpsContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type ITxnOpsContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: ITxnOpsContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the ITxnOpsContract smart contract + */ +export abstract class ITxnOpsContractParamsFactory { + /** + * Constructs a no op call for the verify_itxn_ops()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyItxnOps(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_itxn_ops()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } +} + +/** + * A factory to create and deploy one or more instance of the ITxnOpsContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class ITxnOpsContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `ITxnOpsContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new ITxnOpsContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new ITxnOpsContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the ITxnOpsContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: ITxnOpsContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new ITxnOpsContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ITxnOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ITxnOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ITxnOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new ITxnOpsContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the ITxnOpsContract smart contract + */ +export class ITxnOpsContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `ITxnOpsContractClient` + * + * @param appClient An `AppClient` instance which has been created with the ITxnOpsContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `ITxnOpsContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `ITxnOpsContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new ITxnOpsContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `ITxnOpsContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new ITxnOpsContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the ITxnOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the ITxnOpsContract smart contract using the `verify_itxn_ops()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyItxnOps: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ITxnOpsContractParamsFactory.verifyItxnOps(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the ITxnOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the ITxnOpsContract smart contract using the `verify_itxn_ops()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyItxnOps: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ITxnOpsContractParamsFactory.verifyItxnOps(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the ITxnOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the ITxnOpsContract smart contract using the `verify_itxn_ops()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyItxnOps: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ITxnOpsContractParamsFactory.verifyItxnOps(params)) + return {...result, return: result.return as unknown as (undefined | ITxnOpsContractReturns['verify_itxn_ops()void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new ITxnOpsContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current ITxnOpsContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): ITxnOpsContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify_itxn_ops()void method call against the ITxnOpsContract contract + */ + verifyItxnOps(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyItxnOps(params))) + return this + }, + /** + * Add a clear state call to the ITxnOpsContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as ITxnOpsContractComposer + } +} +export type ITxnOpsContractComposer = { + /** + * Calls the verify_itxn_ops()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyItxnOps(params?: CallParams): ITxnOpsContractComposer<[...TReturns, ITxnOpsContractReturns['verify_itxn_ops()void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the ITxnOpsContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): ITxnOpsContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): ITxnOpsContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type ITxnOpsContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/ImmutableArrayContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/ImmutableArrayContract.ts new file mode 100644 index 0000000..ff91ca4 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/ImmutableArrayContract.ts @@ -0,0 +1,2231 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"ImmutableArrayContract","structs":{},"methods":[{"name":"test_uint64_array","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_biguint_array","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_bool_array","args":[{"type":"uint64","name":"length"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_fixed_size_tuple_array","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_fixed_size_named_tuple_array","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_dynamic_sized_tuple_array","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_dynamic_sized_named_tuple_array","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_implicit_conversion_log","args":[{"type":"uint64[]","name":"arr"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_implicit_conversion_emit","args":[{"type":"uint64[]","name":"arr"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[{"name":"emit_test","args":[{"type":"uint64[]","name":"field1"}]}],"recommendations":{}},{"name":"test_nested_array","args":[{"type":"uint64","name":"arr_to_add"},{"type":"uint64[][]","name":"arr"}],"returns":{"type":"uint64[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_bit_packed_tuples","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"sum_uints_and_lengths_and_trues","args":[{"type":"uint64[]","name":"arr1"},{"type":"bool[]","name":"arr2"},{"type":"(uint64,bool,bool)[]","name":"arr3"},{"type":"(uint64,string)[]","name":"arr4"}],"returns":{"type":"(uint64,uint64,uint64,uint64)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_uint64_return","args":[{"type":"uint64","name":"append"}],"returns":{"type":"uint64[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_bool_return","args":[{"type":"uint64","name":"append"}],"returns":{"type":"bool[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_tuple_return","args":[{"type":"uint64","name":"append"}],"returns":{"type":"(uint64,bool,bool)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_dynamic_tuple_return","args":[{"type":"uint64","name":"append"}],"returns":{"type":"(uint64,string)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_convert_to_array_and_back","args":[{"type":"(uint64,bool,bool)[]","name":"arr"},{"type":"uint64","name":"append"}],"returns":{"type":"(uint64,bool,bool)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_concat_with_arc4_tuple","args":[{"type":"(uint64,uint64)","name":"arg"}],"returns":{"type":"uint64[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_concat_with_native_tuple","args":[{"type":"(uint64,uint64)","name":"arg"}],"returns":{"type":"uint64[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_dynamic_concat_with_arc4_tuple","args":[{"type":"(string,string)","name":"arg"}],"returns":{"type":"string[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_dynamic_concat_with_native_tuple","args":[{"type":"(string,string)","name":"arg"}],"returns":{"type":"string[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_concat_immutable_dynamic","args":[{"type":"(uint64,string)[]","name":"imm1"},{"type":"(uint64,string)[]","name":"imm2"}],"returns":{"type":"(uint64,string)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_immutable_arc4","args":[{"type":"(uint64,uint64)[]","name":"imm"}],"returns":{"type":"(uint64,uint64)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_imm_fixed_arr","args":[],"returns":{"type":"(uint64,uint64)[3]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":11},"local":{"ints":0,"bytes":0}},"keys":{"global":{"a":{"keyType":"AVMString","valueType":"uint64[]","key":"YQ=="},"g":{"keyType":"AVMString","valueType":"bool[]","key":"Zw=="},"c":{"keyType":"AVMString","valueType":"(uint64,uint64)[]","key":"Yw=="},"d":{"keyType":"AVMString","valueType":"(uint64,bool,bool)[]","key":"ZA=="},"e":{"keyType":"AVMString","valueType":"(uint64,byte[])[]","key":"ZQ=="},"f":{"keyType":"AVMString","valueType":"(uint64,string)[]","key":"Zg=="},"bool2":{"keyType":"AVMString","valueType":"(bool,bool)[]","key":"Ym9vbDI="},"bool7":{"keyType":"AVMString","valueType":"(uint64,bool,bool,bool,bool,bool,bool,bool,uint64)[]","key":"Ym9vbDc="},"bool8":{"keyType":"AVMString","valueType":"(uint64,bool,bool,bool,bool,bool,bool,bool,bool,uint64)[]","key":"Ym9vbDg="},"bool9":{"keyType":"AVMString","valueType":"(uint64,bool,bool,bool,bool,bool,bool,bool,bool,bool,uint64)[]","key":"Ym9vbDk="},"imm_fixed_arr":{"keyType":"AVMString","valueType":"(uint64,uint64)[3]","key":"aW1tX2ZpeGVkX2Fycg=="}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[4104],"errorMessage":"check self.imm_fixed_arr exists"},{"pc":[2179,2487],"errorMessage":"expected 1, 0"},{"pc":[2094,2402],"errorMessage":"expected 1st element to be correct"},{"pc":[2099,2409],"errorMessage":"expected 2nd element to be correct"},{"pc":[2240,2549],"errorMessage":"expected 4, 3"},{"pc":[3988],"errorMessage":"expected arrays to be different"},{"pc":[4022],"errorMessage":"expected arrays to be the same"},{"pc":[1548],"errorMessage":"expected element 0 to be False"},{"pc":[1567],"errorMessage":"expected element 1 to be False"},{"pc":[1585],"errorMessage":"expected element 2 to be True"},{"pc":[4049],"errorMessage":"expected items on iteration to be the same"},{"pc":[1611],"errorMessage":"expected last element to be False"},{"pc":[3935],"errorMessage":"expected non empty array"},{"pc":[3363],"errorMessage":"expected string length to match index"},{"pc":[4099],"errorMessage":"expected sum to be 10"},{"pc":[4072],"errorMessage":"expected sum to be 15"},{"pc":[852,1156,1221,1289,1346,1456,1541,1560,1579,1602,1753,1817,2050,2131,2196,2358,2441,2504,3214,3307,3950,4007,4045,4091],"errorMessage":"index access is out of bounds"},{"pc":[968,1009,1065,1092,1132,1160,1204,1269,1326,1438,1525,1656,1715,1779,1906,2008,2114,2316,2424,2681,2722,3012,3021,3030,3039,3107,3144,3188,3269,3910,3933],"errorMessage":"invalid array length header"},{"pc":[923,996,1120,1194,1244,1314,1426,1692,1881,2622,2769,2833,2919,2958,2989,3438,3571,3745,3779,3814],"errorMessage":"max array length exceeded"},{"pc":[1307],"errorMessage":"overflow"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMiA4CiAgICBieXRlY2Jsb2NrIDB4IDB4MTUxZjdjNzUgMHgwMDAwIDB4MDAgMHgwMDAyIDB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgMHgwMDBhIDB4NjI2OTY3NzU2OTZlNzQgMHgwMDAyMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIgMHgwMDAyMDAwNDAwMDcwMDAxNjEwMDAxNjIgImltbV9maXhlZF9hcnIiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo5MwogICAgLy8gY2xhc3MgSW1tdXRhYmxlQXJyYXlDb250cmFjdChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAzMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4NDRkNDJmOTkgMHhiN2VhYTYwYiAweDc0M2Q3MGVkIDB4MWM3ZTA0OTQgMHhhMmQ1ODYwYiAweGUwNWZjNTY0IDB4MWUwOTJiODMgMHgwMTMxMDI2MiAweGM4NjU0YTk4IDB4ODlkMTk2ZjggMHg2Y2I3Yzk5MSAweDk4OThiZjAyIDB4ZjZiNjFlZTggMHg2MGI4NmE3YiAweDczYWQyODNmIDB4NTI5ZGZhZTkgMHgyMDZkNTE0ZiAweGUwNjQ2NWUyIDB4ZWMwMzAwYTIgMHhlY2RmMTRhZiAweDUxMWFjYTY0IDB4Mjk4NTJlNGYgMHg2ZDRhYTM1OCAweGI3Y2I5NmJkIC8vIG1ldGhvZCAidGVzdF91aW50NjRfYXJyYXkoKXZvaWQiLCBtZXRob2QgInRlc3RfYmlndWludF9hcnJheSgpdm9pZCIsIG1ldGhvZCAidGVzdF9ib29sX2FycmF5KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2ZpeGVkX3NpemVfdHVwbGVfYXJyYXkoKXZvaWQiLCBtZXRob2QgInRlc3RfZml4ZWRfc2l6ZV9uYW1lZF90dXBsZV9hcnJheSgpdm9pZCIsIG1ldGhvZCAidGVzdF9keW5hbWljX3NpemVkX3R1cGxlX2FycmF5KCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXkoKXZvaWQiLCBtZXRob2QgInRlc3RfaW1wbGljaXRfY29udmVyc2lvbl9sb2codWludDY0W10pdm9pZCIsIG1ldGhvZCAidGVzdF9pbXBsaWNpdF9jb252ZXJzaW9uX2VtaXQodWludDY0W10pdm9pZCIsIG1ldGhvZCAidGVzdF9uZXN0ZWRfYXJyYXkodWludDY0LHVpbnQ2NFtdW10pdWludDY0W10iLCBtZXRob2QgInRlc3RfYml0X3BhY2tlZF90dXBsZXMoKXZvaWQiLCBtZXRob2QgInN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXModWludDY0W10sYm9vbFtdLCh1aW50NjQsYm9vbCxib29sKVtdLCh1aW50NjQsc3RyaW5nKVtdKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJ0ZXN0X3VpbnQ2NF9yZXR1cm4odWludDY0KXVpbnQ2NFtdIiwgbWV0aG9kICJ0ZXN0X2Jvb2xfcmV0dXJuKHVpbnQ2NClib29sW10iLCBtZXRob2QgInRlc3RfdHVwbGVfcmV0dXJuKHVpbnQ2NCkodWludDY0LGJvb2wsYm9vbClbXSIsIG1ldGhvZCAidGVzdF9keW5hbWljX3R1cGxlX3JldHVybih1aW50NjQpKHVpbnQ2NCxzdHJpbmcpW10iLCBtZXRob2QgInRlc3RfY29udmVydF90b19hcnJheV9hbmRfYmFjaygodWludDY0LGJvb2wsYm9vbClbXSx1aW50NjQpKHVpbnQ2NCxib29sLGJvb2wpW10iLCBtZXRob2QgInRlc3RfY29uY2F0X3dpdGhfYXJjNF90dXBsZSgodWludDY0LHVpbnQ2NCkpdWludDY0W10iLCBtZXRob2QgInRlc3RfY29uY2F0X3dpdGhfbmF0aXZlX3R1cGxlKCh1aW50NjQsdWludDY0KSl1aW50NjRbXSIsIG1ldGhvZCAidGVzdF9keW5hbWljX2NvbmNhdF93aXRoX2FyYzRfdHVwbGUoKHN0cmluZyxzdHJpbmcpKXN0cmluZ1tdIiwgbWV0aG9kICJ0ZXN0X2R5bmFtaWNfY29uY2F0X3dpdGhfbmF0aXZlX3R1cGxlKChzdHJpbmcsc3RyaW5nKSlzdHJpbmdbXSIsIG1ldGhvZCAidGVzdF9jb25jYXRfaW1tdXRhYmxlX2R5bmFtaWMoKHVpbnQ2NCxzdHJpbmcpW10sKHVpbnQ2NCxzdHJpbmcpW10pKHVpbnQ2NCxzdHJpbmcpW10iLCBtZXRob2QgInRlc3RfaW1tdXRhYmxlX2FyYzQoKHVpbnQ2NCx1aW50NjQpW10pKHVpbnQ2NCx1aW50NjQpW10iLCBtZXRob2QgInRlc3RfaW1tX2ZpeGVkX2FycigpKHVpbnQ2NCx1aW50NjQpWzNdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggdGVzdF91aW50NjRfYXJyYXkgdGVzdF9iaWd1aW50X2FycmF5IHRlc3RfYm9vbF9hcnJheSB0ZXN0X2ZpeGVkX3NpemVfdHVwbGVfYXJyYXkgdGVzdF9maXhlZF9zaXplX25hbWVkX3R1cGxlX2FycmF5IHRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheSB0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXkgdGVzdF9pbXBsaWNpdF9jb252ZXJzaW9uX2xvZyB0ZXN0X2ltcGxpY2l0X2NvbnZlcnNpb25fZW1pdCB0ZXN0X25lc3RlZF9hcnJheSB0ZXN0X2JpdF9wYWNrZWRfdHVwbGVzIHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXMgdGVzdF91aW50NjRfcmV0dXJuIHRlc3RfYm9vbF9yZXR1cm4gdGVzdF90dXBsZV9yZXR1cm4gdGVzdF9keW5hbWljX3R1cGxlX3JldHVybiB0ZXN0X2NvbnZlcnRfdG9fYXJyYXlfYW5kX2JhY2sgdGVzdF9jb25jYXRfd2l0aF9hcmM0X3R1cGxlIHRlc3RfY29uY2F0X3dpdGhfbmF0aXZlX3R1cGxlIHRlc3RfZHluYW1pY19jb25jYXRfd2l0aF9hcmM0X3R1cGxlIHRlc3RfZHluYW1pY19jb25jYXRfd2l0aF9uYXRpdmVfdHVwbGUgdGVzdF9jb25jYXRfaW1tdXRhYmxlX2R5bmFtaWMgdGVzdF9pbW11dGFibGVfYXJjNCB0ZXN0X2ltbV9maXhlZF9hcnIKICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAzMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9wb3BfZml4ZWRfc2l6ZShhcnJheTogYnl0ZXMsIGZpeGVkX2J5dGVfc2l6ZTogdWludDY0KSAtPiBieXRlcywgYnl0ZXM6CmR5bmFtaWNfYXJyYXlfcG9wX2ZpeGVkX3NpemU6CiAgICBwcm90byAyIDIKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgcmVwbGFjZTIgMAogICAgZHVwCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgZHVwMgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0MwogICAgdW5jb3ZlciAyCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzdWJzdHJpbmczCiAgICByZXRzdWIKCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X3BvcF9keW5hbWljX2VsZW1lbnQoYXJyYXk6IGJ5dGVzKSAtPiBieXRlcywgYnl0ZXM6CmR5bmFtaWNfYXJyYXlfcG9wX2R5bmFtaWNfZWxlbWVudDoKICAgIHByb3RvIDEgMgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgZHVwCiAgICBsZW4KICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGludGNfMCAvLyAwCgpkeW5hbWljX2FycmF5X3BvcF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxOgogICAgZnJhbWVfZGlnIDYKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X3BvcF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgIC0KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgNQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDUKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDYKICAgIGIgZHluYW1pY19hcnJheV9wb3BfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJAMQoKZHluYW1pY19hcnJheV9wb3BfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA0OgogICAgZnJhbWVfZGlnIDAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGZyYW1lX2RpZyAyCiAgICBzd2FwCiAgICBmcmFtZV9kaWcgMwogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfYnVyeSAwCiAgICBmcmFtZV9idXJ5IDEKICAgIHJldHN1YgoKCi8vIF9wdXlhX2xpYi5hcmM0LmR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHMoYXJyYXk6IGJ5dGVzLCBuZXdfaXRlbXNfYnl0ZXM6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCwgcmVhZF9zdGVwOiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9iaXRzOgogICAgcHJvdG8gNCAxCiAgICBieXRlY18wIC8vICIiCiAgICBkdXBuIDIKICAgIGZyYW1lX2RpZyAtNAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXBuIDIKICAgIGZyYW1lX2RpZyAtMgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgZnJhbWVfZGlnIC00CiAgICBzd2FwCiAgICByZXBsYWNlMiAwCiAgICBjb3ZlciAyCiAgICBzd2FwCiAgICBwdXNoaW50IDcKICAgICsKICAgIGludGNfMyAvLyA4CiAgICAvCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA3CiAgICArCiAgICBpbnRjXzMgLy8gOAogICAgLwogICAgZHVwCiAgICBjb3ZlciAyCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9iaXRzX2FmdGVyX2lmX2Vsc2VAMgogICAgZnJhbWVfZGlnIDYKICAgIGZyYW1lX2RpZyA1CiAgICAtCiAgICBiemVybwogICAgZnJhbWVfZGlnIDQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSA0CgpkeW5hbWljX2FycmF5X2NvbmNhdF9iaXRzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIGZyYW1lX2RpZyAzCiAgICBwdXNoaW50IDE2CiAgICArCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMgogICAgZnJhbWVfZGlnIC0yCiAgICArCiAgICBmcmFtZV9idXJ5IDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHNfd2hpbGVfdG9wQDM6CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHNfYWZ0ZXJfd2hpbGVANQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBnZXRiaXQKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2J1cnkgMAogICAgYiBkeW5hbWljX2FycmF5X2NvbmNhdF9iaXRzX3doaWxlX3RvcEAzCgpkeW5hbWljX2FycmF5X2NvbmNhdF9iaXRzX2FmdGVyX3doaWxlQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcywgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMyAxCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb3ZlciAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMiAvLyAyCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgYnplcm8KICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkdXAKICAgIGludGNfMCAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMjoKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgZGlnIDEKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfZm9yX2hlYWRlckAyCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA0OgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50KGFycmF5X2l0ZW1zX2NvdW50OiB1aW50NjQsIGFycmF5X2hlYWRfYW5kX3RhaWw6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCwgbmV3X2hlYWRfYW5kX3RhaWw6IGJ5dGVzKSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50OgogICAgcHJvdG8gNCAxCiAgICBieXRlY18wIC8vICIiCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtNAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGludGNfMCAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxOgogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANDoKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9idXJ5IDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDQKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JAOAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJANQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA4OgogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuc3VtX2ltbV9maXhlZChhcnI6IGJ5dGVzKSAtPiB1aW50NjQ6CnN1bV9pbW1fZml4ZWQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NzAtNTcxCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIHN1bV9pbW1fZml4ZWQoYXJyOiBOYXRpdmVTdHJ1Y3QzKSAtPiBVSW50NjQ6CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU3MgogICAgLy8gdG90YWwgPSBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBkdXAKCnN1bV9pbW1fZml4ZWRfZm9yX2hlYWRlckAxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTczCiAgICAvLyBmb3IgaXRlbSBpbiBhcnI6CiAgICBmcmFtZV9kaWcgMQogICAgcHVzaGludCAzCiAgICA8CiAgICBieiBzdW1faW1tX2ZpeGVkX2FmdGVyX2ZvckA0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NzMtNTc0CiAgICAvLyBmb3IgaXRlbSBpbiBhcnI6CiAgICAvLyAgICAgdG90YWwgKz0gaXRlbS5mb28KICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIHB1c2hpbnQgMTYKICAgICoKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgcHVzaGludCAxNgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NzQKICAgIC8vIHRvdGFsICs9IGl0ZW0uZm9vCiAgICBkdXAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU3My01NzQKICAgIC8vIGZvciBpdGVtIGluIGFycjoKICAgIC8vICAgICB0b3RhbCArPSBpdGVtLmZvbwogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU3NAogICAgLy8gdG90YWwgKz0gaXRlbS5mb28KICAgIGV4dHJhY3RfdWludDY0CiAgICBmcmFtZV9kaWcgMAogICAgKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTc1CiAgICAvLyB0b3RhbCArPSBpdGVtLmJhcgogICAgc3dhcAogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICArCiAgICBmcmFtZV9idXJ5IDAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgc3VtX2ltbV9maXhlZF9mb3JfaGVhZGVyQDEKCnN1bV9pbW1fZml4ZWRfYWZ0ZXJfZm9yQDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NzYKICAgIC8vIHJldHVybiB0b3RhbAogICAgcmV0c3ViCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUudGltZXMobjogdWludDY0KSAtPiBieXRlczoKdGltZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NzktNTgwCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIHRpbWVzKG46IFVJbnQ2NCkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1ODEKICAgIC8vIHJlc3VsdCA9IFN0cmluZygpCiAgICBieXRlY18wIC8vICIiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1ODIKICAgIC8vIGZvciBfaSBpbiB1cmFuZ2Uobik6CiAgICBpbnRjXzAgLy8gMAoKdGltZXNfZm9yX2hlYWRlckAxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTgyCiAgICAvLyBmb3IgX2kgaW4gdXJhbmdlKG4pOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAtMQogICAgPAogICAgYnogdGltZXNfYWZ0ZXJfZm9yQDQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU4MwogICAgLy8gcmVzdWx0ICs9IFN0cmluZygiICIpCiAgICBmcmFtZV9kaWcgMAogICAgcHVzaGJ5dGVzICIgIgogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU4MgogICAgLy8gZm9yIF9pIGluIHVyYW5nZShuKToKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIHRpbWVzX2Zvcl9oZWFkZXJAMQoKdGltZXNfYWZ0ZXJfZm9yQDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1ODQKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLmFkZF94KGFycjogYnl0ZXMsIHg6IHVpbnQ2NCkgLT4gYnl0ZXM6CmFkZF94OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTg3LTU4OAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBhZGRfeChhcnI6IEltbXV0YWJsZUFycmF5W1VJbnQ2NF0sIHg6IFVJbnQ2NCkgLT4gSW1tdXRhYmxlQXJyYXlbVUludDY0XToKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTg5CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoeCk6CiAgICBpbnRjXzAgLy8gMAoKYWRkX3hfZm9yX2hlYWRlckAxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTg5CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoeCk6CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIC0xCiAgICA8CiAgICBieiBhZGRfeF9hZnRlcl9mb3JANAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTkwCiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKGkpCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgZnJhbWVfYnVyeSAtMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTg5CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoeCk6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAwCiAgICBiIGFkZF94X2Zvcl9oZWFkZXJAMQoKYWRkX3hfYWZ0ZXJfZm9yQDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1OTEKICAgIC8vIHJldHVybiBhcnIKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X3VpbnQ2NF9hcnJheVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfdWludDY0X2FycmF5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6OTkKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoVUludDY0KDQyKSkKICAgIHB1c2hieXRlcyAweDAwMDEwMDAwMDAwMDAwMDAwMDJhCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMDMKICAgIC8vIGFyciA9IGFkZF94KGFyciwgVUludDY0KDUpKQogICAgcHVzaGludCA1CiAgICBjYWxsc3ViIGFkZF94CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMDQKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDYKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgcHVzaGludCA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMDUKICAgIC8vIGFzc2VydCBhcnJbLTFdID09IDQKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjEwNwogICAgLy8gYXJyID0gYXJyLmFwcGVuZChVSW50NjQoNDMpKQogICAgcHVzaGludCA0MwogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgZHVwbiAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMDgKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDcKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgNwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTA5CiAgICAvLyBhc3NlcnQgYXJyWy0xXSA9PSA0MwogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDQzCiAgICA9PQogICAgYXNzZXJ0CiAgICBpbnRjXzIgLy8gMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTEwCiAgICAvLyBhc3NlcnQgYXJyWzBdID09IDQyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgcHVzaGludCA0MgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTk2CiAgICAvLyBmb3IgX2kgaW4gdXJhbmdlKHgpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfdWludDY0X2FycmF5X2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU5NgogICAgLy8gZm9yIF9pIGluIHVyYW5nZSh4KToKICAgIGR1cAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTEyCiAgICAvLyBhcnIgPSBwb3BfeChhcnIsIFVJbnQ2NCgzKSkKICAgIHB1c2hpbnQgMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTk2CiAgICAvLyBmb3IgX2kgaW4gdXJhbmdlKHgpOgogICAgPAogICAgYnogdGVzdF91aW50NjRfYXJyYXlfYWZ0ZXJfZm9yQDQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU5NwogICAgLy8gYXJyID0gYXJyLnBvcCgpCiAgICBkaWcgMQogICAgaW50Y18zIC8vIDgKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9wb3BfZml4ZWRfc2l6ZQogICAgYnVyeSAzCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU5NgogICAgLy8gZm9yIF9pIGluIHVyYW5nZSh4KToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiB0ZXN0X3VpbnQ2NF9hcnJheV9mb3JfaGVhZGVyQDIKCnRlc3RfdWludDY0X2FycmF5X2FmdGVyX2ZvckA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTEzCiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA0CiAgICBkaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjExNAogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gMgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTE2CiAgICAvLyBhcnIgPSBhZGRfeChhcnIsIFVJbnQ2NCgxMCkpCiAgICBwdXNoaW50IDEwCiAgICBjYWxsc3ViIGFkZF94CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMTcKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDE0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgMTQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjExOAogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gOQogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIHB1c2hpbnQgOQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTIwCiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKFVJbnQ2NCg0NCkpCiAgICBwdXNoaW50IDQ0CiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMjEKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDE1CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgMTUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjEyMgogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gNDQKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgcHVzaGludCA0NAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTI0CiAgICAvLyBhcnIgPSBhcnIucmVwbGFjZSgyLCBVSW50NjQoMjMpKQogICAgcHVzaGludCAyMwogICAgaXRvYgogICAgcmVwbGFjZTIgMTggLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMjUKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDE1CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDE1CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMjYKICAgIC8vIGFzc2VydCBhcnJbMl0gPT0gMjMKICAgIGR1cAogICAgcHVzaGludCAxOAogICAgZXh0cmFjdF91aW50NjQKICAgIHB1c2hpbnQgMjMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjEyOAogICAgLy8gc2VsZi5hID0gYXJyCiAgICBwdXNoYnl0ZXMgImEiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6OTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2JpZ3VpbnRfYXJyYXlbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2JpZ3VpbnRfYXJyYXk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMzUKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoQmlnVUludChUeG4ubnVtX2FwcF9hcmdzIC0gMSkpCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGl0b2IKICAgIHB1c2hpbnQgNjQKICAgIGJ6ZXJvCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMzIKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5W0JpZ1VJbnRdKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMzUKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoQmlnVUludChUeG4ubnVtX2FwcF9hcmdzIC0gMSkpCiAgICBzd2FwCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIHB1c2hieXRlcyAweDAwMDEKICAgIHJlcGxhY2UyIDAKICAgIGR1cG4gMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTM2CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTM3CiAgICAvLyBhc3NlcnQgYXJyWy0xXSA9PSAwCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIHB1c2hpbnQgNjQKICAgICoKICAgIHB1c2hpbnQgNjQKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnl0ZWNfMCAvLyAweAogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjYwMwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHgpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfYmlndWludF9hcnJheV9mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo2MDMKICAgIC8vIGZvciBpIGluIHVyYW5nZSh4KToKICAgIGR1cAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTM5CiAgICAvLyBhcnIgPSBhZGRfeGIoYXJyLCBVSW50NjQoNSkpCiAgICBwdXNoaW50IDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjYwMwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHgpOgogICAgPAogICAgYnogdGVzdF9iaWd1aW50X2FycmF5X2FmdGVyX2ZvckA0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo2MDQKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoQmlnVUludChpKSkKICAgIGR1cG4gMgogICAgaXRvYgogICAgZGlnIDQKICAgIGJ8CiAgICBkaWcgMwogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ1cnkgMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NjAzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoeCk6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIHRlc3RfYmlndWludF9hcnJheV9mb3JfaGVhZGVyQDIKCnRlc3RfYmlndWludF9hcnJheV9hZnRlcl9mb3JANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE0MAogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gNgogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgcHVzaGludCA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNDEKICAgIC8vIGFzc2VydCBhcnJbLTFdID09IDQKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgcHVzaGludCA2NAogICAgKgogICAgcHVzaGludCA2NAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBwdXNoYnl0ZXMgMHgwNAogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE0MwogICAgLy8gYXJyID0gYXJyLmFwcGVuZChCaWdVSW50KDIqKjUxMiAtIDEpIC0gVHhuLm51bV9hcHBfYXJncykKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpdG9iCiAgICBieXRlYyA1IC8vIDB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKICAgIHN3YXAKICAgIGItCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZGlnIDUKICAgIGJ8CiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNDQKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDcKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgcHVzaGludCA3CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNDUKICAgIC8vIGFzc2VydCBhcnJbLTFdID09IDIqKjUxMiAtIDIKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgcHVzaGludCA2NAogICAgKgogICAgcHVzaGludCA2NAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBwdXNoYnl0ZXMgMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZQogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE0NgogICAgLy8gYXNzZXJ0IGFyclswXSA9PSAwCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDY0CiAgICBieXRlY18wIC8vIDB4CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTQ4CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKEJpZ1VJbnQoMioqNTEyIC0gMSkpCiAgICBzd2FwCiAgICBieXRlYyA1IC8vIDB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNDkKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDgKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE1MAogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gMioqNTEyIC0gMQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgcHVzaGludCA2NAogICAgKgogICAgcHVzaGludCA2NAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBieXRlYyA1IC8vIDB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNTEKICAgIC8vIGFzc2VydCBhcnJbMF0gPT0gMAogICAgZHVwCiAgICBleHRyYWN0IDIgNjQKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNTMKICAgIC8vIEJveChJbW11dGFibGVBcnJheVtCaWdVSW50XSwga2V5PWIiYmlndWludCIpLnZhbHVlID0gYXJyCiAgICBieXRlYyA3IC8vIDB4NjI2OTY3NzU2OTZlNzQKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgNyAvLyAweDYyNjk2Nzc1Njk2ZTc0CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2Jvb2xfYXJyYXlbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2Jvb2xfYXJyYXk6CiAgICBieXRlY18wIC8vICIiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNTcKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5W2Jvb2xdKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNjEKICAgIC8vIGZvciBpIGluIHVyYW5nZShsZW5ndGgpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfYm9vbF9hcnJheV9mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNjEKICAgIC8vIGZvciBpIGluIHVyYW5nZShsZW5ndGgpOgogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogdGVzdF9ib29sX2FycmF5X2FmdGVyX2ZvckA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNjIKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoaSA9PSBUeG4ubnVtX2FwcF9hcmdzKQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGRpZyAxCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBkaWcgMwogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIGludGNfMyAvLyA4CiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHMKICAgIGJ1cnkgMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTYxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UobGVuZ3RoKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgdGVzdF9ib29sX2FycmF5X2Zvcl9oZWFkZXJAMgoKdGVzdF9ib29sX2FycmF5X2FmdGVyX2ZvckA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTY0CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSBsZW5ndGgKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBidXJ5IDUKICAgIGRpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE2NgogICAgLy8gaWYgbGVuZ3RoID4gMDoKICAgIGJ6IHRlc3RfYm9vbF9hcnJheV9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE2NwogICAgLy8gYXNzZXJ0IG5vdCBhcnJbMF0sICJleHBlY3RlZCBlbGVtZW50IDAgdG8gYmUgRmFsc2UiCiAgICBkaWcgMwogICAgYXNzZXJ0IC8vIGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkaWcgMQogICAgcHVzaGludCAxNgogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZWxlbWVudCAwIHRvIGJlIEZhbHNlCgp0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTY4CiAgICAvLyBpZiBsZW5ndGggPiAxOgogICAgZGlnIDIKICAgIGludGNfMSAvLyAxCiAgICA+CiAgICBieiB0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNjkKICAgIC8vIGFzc2VydCBub3QgYXJyWzFdLCAiZXhwZWN0ZWQgZWxlbWVudCAxIHRvIGJlIEZhbHNlIgogICAgaW50Y18xIC8vIDEKICAgIGRpZyA0CiAgICA8CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAxCiAgICBwdXNoaW50IDE3CiAgICBnZXRiaXQKICAgICEKICAgIGFzc2VydCAvLyBleHBlY3RlZCBlbGVtZW50IDEgdG8gYmUgRmFsc2UKCnRlc3RfYm9vbF9hcnJheV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNzAKICAgIC8vIGlmIGxlbmd0aCA+IDI6CiAgICBkaWcgMgogICAgaW50Y18yIC8vIDIKICAgID4KICAgIGJ6IHRlc3RfYm9vbF9hcnJheV9hZnRlcl9pZl9lbHNlQDExCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNzEKICAgIC8vIGFzc2VydCBhcnJbMl0sICJleHBlY3RlZCBlbGVtZW50IDIgdG8gYmUgVHJ1ZSIKICAgIGludGNfMiAvLyAyCiAgICBkaWcgNAogICAgPAogICAgYXNzZXJ0IC8vIGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkaWcgMQogICAgcHVzaGludCAxOAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZWxlbWVudCAyIHRvIGJlIFRydWUKCnRlc3RfYm9vbF9hcnJheV9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTcyCiAgICAvLyBpZiBsZW5ndGggPiAzOgogICAgZGlnIDIKICAgIHB1c2hpbnQgMwogICAgPgogICAgYnogdGVzdF9ib29sX2FycmF5X2FmdGVyX2lmX2Vsc2VAMTMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE3MwogICAgLy8gYXNzZXJ0IG5vdCBhcnJbbGVuZ3RoIC0gMV0sICJleHBlY3RlZCBsYXN0IGVsZW1lbnQgdG8gYmUgRmFsc2UiCiAgICBkaWcgMgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZGlnIDUKICAgIDwKICAgIGFzc2VydCAvLyBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgcHVzaGludCAxNgogICAgKwogICAgZGlnIDIKICAgIHN3YXAKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGxhc3QgZWxlbWVudCB0byBiZSBGYWxzZQoKdGVzdF9ib29sX2FycmF5X2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNzUKICAgIC8vIHNlbGYuZyA9IGFycgogICAgcHVzaGJ5dGVzICJnIgogICAgZGlnIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNzYKICAgIC8vIGlmIGxlbmd0aDoKICAgIGRpZyAyCiAgICBieiB0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfaWZfZWxzZUAxNQogICAgZGlnIDMKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICBkaWcgMwogICAgc3dhcAogICAgcmVwbGFjZTIgMAogICAgZGlnIDEKICAgIHB1c2hpbnQgMTYKICAgICsKICAgIGludGNfMCAvLyAwCiAgICBzZXRiaXQKICAgIHN3YXAKICAgIHB1c2hpbnQgNwogICAgKwogICAgaW50Y18zIC8vIDgKICAgIC8KICAgIGludGNfMiAvLyAyCiAgICArCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgc3Vic3RyaW5nMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTc4CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSBsZW5ndGggLSAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZGlnIDMKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICA9PQogICAgYXNzZXJ0Cgp0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfZml4ZWRfc2l6ZV90dXBsZV9hcnJheVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfZml4ZWRfc2l6ZV90dXBsZV9hcnJheToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE4MgogICAgLy8gYXJyID0gSW1tdXRhYmxlQXJyYXlbdHVwbGVbVUludDY0LCBVSW50NjRdXSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTg1CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9maXhlZF9zaXplX3R1cGxlX2FycmF5X2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE4NQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgZHVwCiAgICBwdXNoaW50IDUKICAgIDwKICAgIGJ6IHRlc3RfZml4ZWRfc2l6ZV90dXBsZV9hcnJheV9hZnRlcl9mb3JANQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTg2CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKChpICsgMSwgaSArIDIpKQogICAgZHVwbiAyCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgc3dhcAogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyAzCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnVyeSAzCiAgICBidXJ5IDEKICAgIGIgdGVzdF9maXhlZF9zaXplX3R1cGxlX2FycmF5X2Zvcl9oZWFkZXJAMgoKdGVzdF9maXhlZF9zaXplX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTg4CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA1CiAgICBkaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBwdXNoaW50IDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE4OQogICAgLy8gYXNzZXJ0IGFyclswXSA9PSAoVUludDY0KDEpLCBVSW50NjQoMikpCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMTYKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgc3dhcAogICAgaW50Y18yIC8vIDIKICAgID09CiAgICAmJgogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxOTAKICAgIC8vIGFzc2VydCBhcnJbLTFdID09IChVSW50NjQoNSksIFVJbnQ2NCg2KSkKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBwdXNoaW50IDE2CiAgICAqCiAgICBwdXNoaW50IDE2CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIHB1c2hpbnQgNQogICAgPT0KICAgIHN3YXAKICAgIHB1c2hpbnQgNgogICAgPT0KICAgICYmCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE5MgogICAgLy8gYXJyID0gYXJyLnBvcCgpCiAgICBwdXNoaW50IDE2CiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfcG9wX2ZpeGVkX3NpemUKICAgIGJ1cnkgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTkzCiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTk0CiAgICAvLyBhc3NlcnQgYXJyWzBdID09IChVSW50NjQoMSksIFVJbnQ2NCgyKSkKICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAxNgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgICYmCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE5NQogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gKFVJbnQ2NCg0KSwgVUludDY0KDUpKQogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIHB1c2hpbnQgMTYKICAgICoKICAgIHB1c2hpbnQgMTYKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgcHVzaGludCA0CiAgICA9PQogICAgc3dhcAogICAgcHVzaGludCA1CiAgICA9PQogICAgJiYKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTk2CiAgICAvLyBzZWxmLmMgPSBhcnIKICAgIHB1c2hieXRlcyAiYyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2ZpeGVkX3NpemVfbmFtZWRfdHVwbGVfYXJyYXlbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2ZpeGVkX3NpemVfbmFtZWRfdHVwbGVfYXJyYXk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMDAKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5W015VHVwbGVdKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMDMKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGludGNfMCAvLyAwCgp0ZXN0X2ZpeGVkX3NpemVfbmFtZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjAzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNQogICAgPAogICAgYnogdGVzdF9maXhlZF9zaXplX25hbWVkX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMDQKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoTXlUdXBsZShmb289aSwgYmFyPWkgJSAyID09IDAsIGJhej1pICogMyAlIDIgPT0gMCkpCiAgICBkdXBuIDIKICAgIGludGNfMiAvLyAyCiAgICAlCiAgICAhCiAgICBkaWcgMQogICAgcHVzaGludCAzCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgJQogICAgIQogICAgZGlnIDIKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICBidXJ5IDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIwMwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2ZpeGVkX3NpemVfbmFtZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckAyCgp0ZXN0X2ZpeGVkX3NpemVfbmFtZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMDYKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDUKICAgIGRpZyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIwNwogICAgLy8gZm9vLCBiYXIsIGJheiA9IGFyclswXQogICAgZHVwCiAgICBleHRyYWN0IDIgOQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBwdXNoaW50IDY0CiAgICBnZXRiaXQKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA2NQogICAgZ2V0Yml0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMDgKICAgIC8vIGFzc2VydCBmb28gPT0gMAogICAgdW5jb3ZlciAyCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIwOQogICAgLy8gYXNzZXJ0IGJhcgogICAgc3dhcAogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMTAKICAgIC8vIGFzc2VydCBiYXoKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjExCiAgICAvLyBzZWxmLmQgPSBhcnIKICAgIHB1c2hieXRlcyAiZCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxOTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2R5bmFtaWNfc2l6ZWRfdHVwbGVfYXJyYXlbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2R5bmFtaWNfc2l6ZWRfdHVwbGVfYXJyYXk6CiAgICBieXRlY18wIC8vICIiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMTUKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5W3R1cGxlW1VJbnQ2NCwgQnl0ZXNdXSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjE4CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9keW5hbWljX3NpemVkX3R1cGxlX2FycmF5X2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIxOAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgZHVwCiAgICBwdXNoaW50IDUKICAgIDwKICAgIGJ6IHRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheV9hZnRlcl9mb3JANQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjE5CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKChpICsgMSwgb3AuYnplcm8oaSkpKQogICAgZHVwbiAyCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgc3dhcAogICAgYnplcm8KICAgIGRpZyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAzCiAgICBpdG9iCiAgICBkaWcgMwogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjIDYgLy8gMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGJ1cnkgMwogICAgYnVyeSAxCiAgICBiIHRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheV9mb3JfaGVhZGVyQDIKCnRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheV9hZnRlcl9mb3JANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIyMQogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gNQogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGJ1cnkgNAogICAgcHVzaGludCA1CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMjIKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDEKCnRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheV9mb3JfaGVhZGVyQDY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMjIKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGR1cAogICAgcHVzaGludCA1CiAgICA8CiAgICBieiB0ZXN0X2R5bmFtaWNfc2l6ZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDkKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIyMwogICAgLy8gYXNzZXJ0IGFycltpXVswXSA9PSBpICsgMSwgImV4cGVjdGVkIDFzdCBlbGVtZW50IHRvIGJlIGNvcnJlY3QiCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZGlnIDYKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgZGlnIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgNQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgZGlnIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgMXN0IGVsZW1lbnQgdG8gYmUgY29ycmVjdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjI0CiAgICAvLyBhc3NlcnQgYXJyW2ldWzFdLmxlbmd0aCA9PSBpLCAiZXhwZWN0ZWQgMm5kIGVsZW1lbnQgdG8gYmUgY29ycmVjdCIKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIDJuZCBlbGVtZW50IHRvIGJlIGNvcnJlY3QKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2R5bmFtaWNfc2l6ZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckA2Cgp0ZXN0X2R5bmFtaWNfc2l6ZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMjYKICAgIC8vIGFyciA9IGFyci5wb3AoKQogICAgZGlnIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9wb3BfZHluYW1pY19lbGVtZW50CiAgICBidXJ5IDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIyNwogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIyOAogICAgLy8gYXNzZXJ0IGFyclswXSA9PSAoVUludDY0KDEpLCBvcC5iemVybygwKSksICJleHBlY3RlZCAxLCAwIgogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGludGNfMSAvLyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDIKICAgIGxlbgogICAgZGlnIDMKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIHN3YXAKICAgIGRpZyAzCiAgICBzZWxlY3QKICAgIGRpZyA0CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBsZW4KICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgaW50Y18wIC8vIDAKICAgIGJ6ZXJvCiAgICB1bmNvdmVyIDIKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIDEsIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIyOQogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gKFVJbnQ2NCg0KSwgb3AuYnplcm8oMykpLCAiZXhwZWN0ZWQgNCwgMyIKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDMKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICB1bmNvdmVyIDQKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgc3dhcAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyA0CiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAzCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBsZW4KICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIHB1c2hpbnQgNAogICAgPT0KICAgIHB1c2hpbnQgMwogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgNCwgMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjMwCiAgICAvLyBzZWxmLmUgPSBhcnIKICAgIHB1c2hieXRlcyAiZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXk6CiAgICBieXRlY18wIC8vICIiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMzQKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5W015RHluYW1pY1NpemVkVHVwbGVdKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMzcKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGludGNfMCAvLyAwCgp0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjM3CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNQogICAgPAogICAgYnogdGVzdF9keW5hbWljX3NpemVkX25hbWVkX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMzgKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoTXlEeW5hbWljU2l6ZWRUdXBsZShmb289aSArIDEsIGJhcj10aW1lcyhpKSkpCiAgICBkdXBuIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBzd2FwCiAgICBjYWxsc3ViIHRpbWVzCiAgICBkaWcgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMwogICAgaXRvYgogICAgZGlnIDMKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICBzd2FwCiAgICBieXRlYyA2IC8vIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDQgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGNvdmVyIDIKICAgIGludGNfMSAvLyAxCiAgICB1bmNvdmVyIDMKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50CiAgICBidXJ5IDMKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckAyCgp0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNDAKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDUKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBidXJ5IDQKICAgIHB1c2hpbnQgNQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjQxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSAxCgp0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjQxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNQogICAgPAogICAgYnogdGVzdF9keW5hbWljX3NpemVkX25hbWVkX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA5CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNDIKICAgIC8vIGFzc2VydCBhcnJbaV1bMF0gPT0gaSArIDEsICJleHBlY3RlZCAxc3QgZWxlbWVudCB0byBiZSBjb3JyZWN0IgogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGRpZyA2CiAgICBkaWcgMQogICAgLSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAzCiAgICBsZW4KICAgIGRpZyAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDUKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBsZW4KICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIDFzdCBlbGVtZW50IHRvIGJlIGNvcnJlY3QKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI0MwogICAgLy8gYXNzZXJ0IGFycltpXVsxXSA9PSB0aW1lcyhpKSwgImV4cGVjdGVkIDJuZCBlbGVtZW50IHRvIGJlIGNvcnJlY3QiCiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgdGltZXMKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgMm5kIGVsZW1lbnQgdG8gYmUgY29ycmVjdAogICAgYnVyeSAxCiAgICBiIHRlc3RfZHluYW1pY19zaXplZF9uYW1lZF90dXBsZV9hcnJheV9mb3JfaGVhZGVyQDYKCnRlc3RfZHluYW1pY19zaXplZF9uYW1lZF90dXBsZV9hcnJheV9hZnRlcl9mb3JAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI0NQogICAgLy8gYXJyID0gYXJyLnBvcCgpCiAgICBkaWcgMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3BvcF9keW5hbWljX2VsZW1lbnQKICAgIGJ1cnkgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjQ2CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjQ3CiAgICAvLyBhc3NlcnQgYXJyWzBdID09IE15RHluYW1pY1NpemVkVHVwbGUoVUludDY0KDEpLCBTdHJpbmcoKSksICJleHBlY3RlZCAxLCAwIgogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGludGNfMSAvLyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDIKICAgIGxlbgogICAgZGlnIDMKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIHN3YXAKICAgIGRpZyAzCiAgICBzZWxlY3QKICAgIGRpZyA0CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBsZW4KICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAiIgogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgMSwgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjQ4CiAgICAvLyBhc3NlcnQgYXJyWy0xXSA9PSBNeUR5bmFtaWNTaXplZFR1cGxlKFVJbnQ2NCg0KSwgU3RyaW5nKCIgICAiKSksICJleHBlY3RlZCA0LCAzIgogICAgZGlnIDEKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMwogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHVuY292ZXIgNAogICAgZGlnIDEKICAgIC0gLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDQKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDMKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgcHVzaGludCA0CiAgICA9PQogICAgc3dhcAogICAgcHVzaGJ5dGVzICIgICAiCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBleHBlY3RlZCA0LCAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNDkKICAgIC8vIHNlbGYuZiA9IGFycgogICAgcHVzaGJ5dGVzICJmIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIzMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfaW1wbGljaXRfY29udmVyc2lvbl9sb2dbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2ltcGxpY2l0X2NvbnZlcnNpb25fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjUzCiAgICAvLyBsb2coYXJyKQogICAgbG9nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2ltcGxpY2l0X2NvbnZlcnNpb25fZW1pdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfaW1wbGljaXRfY29udmVyc2lvbl9lbWl0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjU3CiAgICAvLyBhcmM0LmVtaXQoImVtaXRfdGVzdCIsIGFycikKICAgIHB1c2hieXRlcyAweGZhNDBjMDUzMDAwMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjU3CiAgICAvLyBhcmM0LmVtaXQoImVtaXRfdGVzdCIsIGFycikKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X25lc3RlZF9hcnJheVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfbmVzdGVkX2FycmF5OgogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMgogICAgYnl0ZWNfMCAvLyAiIgogICAgZHVwbiA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNjMtMjY0CiAgICAvLyAjIGFkZCBuIG5ldyBhcnJheXMKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcnJfdG9fYWRkKToKICAgIGludGNfMCAvLyAwCgp0ZXN0X25lc3RlZF9hcnJheV9mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNjMtMjY0CiAgICAvLyAjIGFkZCBuIG5ldyBhcnJheXMKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcnJfdG9fYWRkKToKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IHRlc3RfbmVzdGVkX2FycmF5X2FmdGVyX2ZvckA5CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNjUKICAgIC8vIGV4dHJhX2FyciA9IEltbXV0YWJsZUFycmF5W1VJbnQ2NF0oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIGJ1cnkgMTIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI2NgogICAgLy8gZm9yIGogaW4gdXJhbmdlKGkpOgogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNQoKdGVzdF9uZXN0ZWRfYXJyYXlfZm9yX2hlYWRlckA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjY2CiAgICAvLyBmb3IgaiBpbiB1cmFuZ2UoaSk6CiAgICBkaWcgNAogICAgZGlnIDEKICAgIDwKICAgIGJ6IHRlc3RfbmVzdGVkX2FycmF5X2FmdGVyX2ZvckA3CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNjcKICAgIC8vIGV4dHJhX2FyciA9IGV4dHJhX2Fyci5hcHBlbmQoaikKICAgIGRpZyA0CiAgICBkdXAKICAgIGl0b2IKICAgIGRpZyAxMwogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ1cnkgMTMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI2NgogICAgLy8gZm9yIGogaW4gdXJhbmdlKGkpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgNQogICAgYiB0ZXN0X25lc3RlZF9hcnJheV9mb3JfaGVhZGVyQDQKCnRlc3RfbmVzdGVkX2FycmF5X2FmdGVyX2ZvckA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjY4CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKGV4dHJhX2FycikKICAgIGRpZyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDQgLy8gMHgwMDAyCiAgICBkaWcgMTQKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGJ1cnkgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjYzLTI2NAogICAgLy8gIyBhZGQgbiBuZXcgYXJyYXlzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXJyX3RvX2FkZCk6CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgdGVzdF9uZXN0ZWRfYXJyYXlfZm9yX2hlYWRlckAyCgp0ZXN0X25lc3RlZF9hcnJheV9hZnRlcl9mb3JAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI3MC0yNzEKICAgIC8vICMgc3VtIGlubmVyIGFycmF5cyBhbmQgcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgc3VtcwogICAgLy8gdG90YWxzID0gSW1tdXRhYmxlQXJyYXlbVUludDY0XSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgYnVyeSAxMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjcyCiAgICAvLyBmb3IgaW5uZXJfYXJyIGluIGFycjoKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgYnVyeSA5CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSA3Cgp0ZXN0X25lc3RlZF9hcnJheV9mb3JfaGVhZGVyQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjcyCiAgICAvLyBmb3IgaW5uZXJfYXJyIGluIGFycjoKICAgIGRpZyA2CiAgICBkaWcgOQogICAgPAogICAgYnogdGVzdF9uZXN0ZWRfYXJyYXlfYWZ0ZXJfZm9yQDEzCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA3CiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZHVwCiAgICBidXJ5IDEyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo2MTAKICAgIC8vIHRvdGFsID0gVUludDY0KCkKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjYxMQogICAgLy8gZm9yIGkgaW4gYXJyOgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGJ1cnkgOAogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNgoKdGVzdF9uZXN0ZWRfYXJyYXlfZm9yX2hlYWRlckAxNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjYxMQogICAgLy8gZm9yIGkgaW4gYXJyOgogICAgZGlnIDUKICAgIGRpZyA4CiAgICA8CiAgICBieiB0ZXN0X25lc3RlZF9hcnJheV9hZnRlcl9mb3JAMTcKICAgIGRpZyAxMAogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NjEyCiAgICAvLyB0b3RhbCArPSBpCiAgICBkaWcgNQogICAgKwogICAgYnVyeSA1CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSA2CiAgICBiIHRlc3RfbmVzdGVkX2FycmF5X2Zvcl9oZWFkZXJAMTUKCnRlc3RfbmVzdGVkX2FycmF5X2FmdGVyX2ZvckAxNzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI3MwogICAgLy8gdG90YWxzID0gdG90YWxzLmFwcGVuZChzdW1fYXJyKGlubmVyX2FycikpCiAgICBkaWcgMwogICAgaXRvYgogICAgZGlnIDEwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnVyeSAxMAogICAgZGlnIDYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDcKICAgIGIgdGVzdF9uZXN0ZWRfYXJyYXlfZm9yX2hlYWRlckAxMAoKdGVzdF9uZXN0ZWRfYXJyYXlfYWZ0ZXJfZm9yQDEzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMTAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2JpdF9wYWNrZWRfdHVwbGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9iaXRfcGFja2VkX3R1cGxlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI3OQogICAgLy8gYXJyMiA9IEltbXV0YWJsZUFycmF5W1R3b0Jvb2xUdXBsZV0oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI4MC0yODIKICAgIC8vIGFycjcgPSBJbW11dGFibGVBcnJheVtTZXZlbkJvb2xUdXBsZV0oKQogICAgLy8gYXJyOCA9IEltbXV0YWJsZUFycmF5W0VpZ2h0Qm9vbFR1cGxlXSgpCiAgICAvLyBhcnI5ID0gSW1tdXRhYmxlQXJyYXlbTmluZUJvb2xUdXBsZV0oKQogICAgZHVwbiAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyODgKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGludGNfMCAvLyAwCgp0ZXN0X2JpdF9wYWNrZWRfdHVwbGVzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI4OAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgZHVwCiAgICBwdXNoaW50IDUKICAgIDwKICAgIGJ6IHRlc3RfYml0X3BhY2tlZF90dXBsZXNfYWZ0ZXJfZm9yQDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI4OQogICAgLy8gYXJyMiA9IGFycjIuYXBwZW5kKFR3b0Jvb2xUdXBsZShhPWkgPT0gMCwgYj1pID09IDEpKQogICAgZHVwbiAyCiAgICAhCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBkaWcgNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICB1bmNvdmVyIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICBidXJ5IDcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI5MwogICAgLy8gYmFyPWkgKyAxLAogICAgZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyOTYKICAgIC8vIGM9aSA9PSAyLAogICAgZGlnIDIKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mjk3CiAgICAvLyBkPWkgPT0gMywKICAgIGRpZyAzCiAgICBwdXNoaW50IDMKICAgID09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyOTgKICAgIC8vIGU9aSA9PSA0LAogICAgZGlnIDQKICAgIHB1c2hpbnQgNAogICAgPT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI5OQogICAgLy8gZj1pID09IDUsCiAgICBkaWcgNQogICAgcHVzaGludCA1CiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzAwCiAgICAvLyBnPWkgPT0gNiwKICAgIGRpZyA2CiAgICBwdXNoaW50IDYKICAgID09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyOTAtMzAyCiAgICAvLyBhcnI3ID0gYXJyNy5hcHBlbmQoCiAgICAvLyAgICAgU2V2ZW5Cb29sVHVwbGUoCiAgICAvLyAgICAgICAgIGZvbz1pLAogICAgLy8gICAgICAgICBiYXI9aSArIDEsCiAgICAvLyAgICAgICAgIGE9aSA9PSAwLAogICAgLy8gICAgICAgICBiPWkgPT0gMSwKICAgIC8vICAgICAgICAgYz1pID09IDIsCiAgICAvLyAgICAgICAgIGQ9aSA9PSAzLAogICAgLy8gICAgICAgICBlPWkgPT0gNCwKICAgIC8vICAgICAgICAgZj1pID09IDUsCiAgICAvLyAgICAgICAgIGc9aSA9PSA2LAogICAgLy8gICAgICkKICAgIC8vICkKICAgIGRpZyA3CiAgICBpdG9iCiAgICB1bmNvdmVyIDcKICAgIGludGNfMiAvLyAyCiAgICB1bmNvdmVyIDcKICAgIHNldGJpdAogICAgcHVzaGludCAzCiAgICB1bmNvdmVyIDYKICAgIHNldGJpdAogICAgcHVzaGludCA0CiAgICB1bmNvdmVyIDUKICAgIHNldGJpdAogICAgcHVzaGludCA1CiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgcHVzaGludCA2CiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgZHVwMgogICAgY29uY2F0CiAgICBkaWcgMwogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDkKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICBidXJ5IDkKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjMxNAogICAgLy8gaD1pID09IDcsCiAgICBkaWcgNAogICAgcHVzaGludCA3CiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzAzLTMxNgogICAgLy8gYXJyOCA9IGFycjguYXBwZW5kKAogICAgLy8gICAgIEVpZ2h0Qm9vbFR1cGxlKAogICAgLy8gICAgICAgICBmb289aSwKICAgIC8vICAgICAgICAgYmFyPWkgKyAxLAogICAgLy8gICAgICAgICBhPWkgPT0gMCwKICAgIC8vICAgICAgICAgYj1pID09IDEsCiAgICAvLyAgICAgICAgIGM9aSA9PSAyLAogICAgLy8gICAgICAgICBkPWkgPT0gMywKICAgIC8vICAgICAgICAgZT1pID09IDQsCiAgICAvLyAgICAgICAgIGY9aSA9PSA1LAogICAgLy8gICAgICAgICBnPWkgPT0gNiwKICAgIC8vICAgICAgICAgaD1pID09IDcsCiAgICAvLyAgICAgKQogICAgLy8gKQogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDcKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkaWcgNwogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ1cnkgNwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzI5CiAgICAvLyBpPWkgPT0gOCwKICAgIHVuY292ZXIgMwogICAgaW50Y18zIC8vIDgKICAgID09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozMTctMzMxCiAgICAvLyBhcnI5ID0gYXJyOS5hcHBlbmQoCiAgICAvLyAgICAgTmluZUJvb2xUdXBsZSgKICAgIC8vICAgICAgICAgZm9vPWksCiAgICAvLyAgICAgICAgIGJhcj1pICsgMSwKICAgIC8vICAgICAgICAgYT1pID09IDAsCiAgICAvLyAgICAgICAgIGI9aSA9PSAxLAogICAgLy8gICAgICAgICBjPWkgPT0gMiwKICAgIC8vICAgICAgICAgZD1pID09IDMsCiAgICAvLyAgICAgICAgIGU9aSA9PSA0LAogICAgLy8gICAgICAgICBmPWkgPT0gNSwKICAgIC8vICAgICAgICAgZz1pID09IDYsCiAgICAvLyAgICAgICAgIGg9aSA9PSA3LAogICAgLy8gICAgICAgICBpPWkgPT0gOCwKICAgIC8vICAgICApCiAgICAvLyApCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAzCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnVyeSAzCiAgICBidXJ5IDEKICAgIGIgdGVzdF9iaXRfcGFja2VkX3R1cGxlc19mb3JfaGVhZGVyQDIKCnRlc3RfYml0X3BhY2tlZF90dXBsZXNfYWZ0ZXJfZm9yQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozMzMKICAgIC8vIGFzc2VydCBhcnIyLmxlbmd0aCA9PSA1CiAgICBkaWcgNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCA1CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozMzQKICAgIC8vIGFzc2VydCBhcnI3Lmxlbmd0aCA9PSA1CiAgICBkaWcgNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCA1CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozMzUKICAgIC8vIGFzc2VydCBhcnI4Lmxlbmd0aCA9PSA1CiAgICBkaWcgNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCA1CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozMzYKICAgIC8vIGFzc2VydCBhcnI5Lmxlbmd0aCA9PSA1CiAgICBkaWcgNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCA1CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozMzcKICAgIC8vIHNlbGYuYm9vbDIgPSBhcnIyCiAgICBwdXNoYnl0ZXMgImJvb2wyIgogICAgdW5jb3ZlciA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzM4CiAgICAvLyBzZWxmLmJvb2w3ID0gYXJyNwogICAgcHVzaGJ5dGVzICJib29sNyIKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjMzOQogICAgLy8gc2VsZi5ib29sOCA9IGFycjgKICAgIHB1c2hieXRlcyAiYm9vbDgiCiAgICB1bmNvdmVyIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNDAKICAgIC8vIHNlbGYuYm9vbDkgPSBhcnI5CiAgICBwdXNoYnl0ZXMgImJvb2w5IgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNbcm91dGluZ10oKSAtPiB2b2lkOgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzOgogICAgYnl0ZWNfMCAvLyAiIgogICAgZHVwbiA2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNTAKICAgIC8vIHN1bTEgPSBzdW0yID0gc3VtMyA9IHN1bTQgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzUxCiAgICAvLyBmb3IgaSBpbiBhcnIxOgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMCAvLyAwCgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM1MQogICAgLy8gZm9yIGkgaW4gYXJyMToKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfZm9yQDUKICAgIGRpZyA5CiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNTIKICAgIC8vIHN1bTEgKz0gaQogICAgZGlnIDQKICAgICsKICAgIGJ1cnkgNAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2Zvcl9oZWFkZXJAMgoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9mb3JANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM1MwogICAgLy8gZm9yIGIgaW4gYXJyMjoKICAgIGRpZyA4CiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgYnVyeSAxNwogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgMTMKCnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfZm9yX2hlYWRlckA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzUzCiAgICAvLyBmb3IgYiBpbiBhcnIyOgogICAgZGlnIDEyCiAgICBkaWcgMTcKICAgIDwKICAgIGJ6IHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfZm9yQDExCiAgICBkaWcgMTIKICAgIHB1c2hpbnQgMTYKICAgICsKICAgIGRpZyA5CiAgICBzd2FwCiAgICBnZXRiaXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM1NAogICAgLy8gaWYgYjoKICAgIGJ6IHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNTUKICAgIC8vIHN1bTIgKz0gMQogICAgZGlnIDMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDQKCnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfaWZfZWxzZUA5OgogICAgZGlnIDEyCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxMwogICAgYiBzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2Zvcl9oZWFkZXJANgoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9mb3JAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNTYKICAgIC8vIGZvciB0dXAgaW4gYXJyMzoKICAgIGRpZyA3CiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgYnVyeSAxNgogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgMTIKCnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfZm9yX2hlYWRlckAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM1NgogICAgLy8gZm9yIHR1cCBpbiBhcnIzOgogICAgZGlnIDExCiAgICBkaWcgMTYKICAgIDwKICAgIGJ6IHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfZm9yQDE5CiAgICBkaWcgNwogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxMgogICAgcHVzaGludCA5CiAgICAqCiAgICBwdXNoaW50IDkKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBwdXNoaW50IDY0CiAgICBnZXRiaXQKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA2NQogICAgZ2V0Yml0CiAgICBidXJ5IDEzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNTcKICAgIC8vIHN1bTMgKz0gdHVwLmZvbwogICAgZGlnIDYKICAgIHVuY292ZXIgMgogICAgKwogICAgYnVyeSA2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNTgKICAgIC8vIGlmIHR1cC5iYXI6CiAgICBieiBzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2lmX2Vsc2VAMTUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM1OQogICAgLy8gc3VtMyArPSAxCiAgICBkaWcgNAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgNQoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9pZl9lbHNlQDE1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzYwCiAgICAvLyBpZiB0dXAuYmF6OgogICAgZGlnIDEwCiAgICBieiBzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2lmX2Vsc2VAMTcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM2MQogICAgLy8gc3VtMyArPSAxCiAgICBkaWcgNAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgNQoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9pZl9lbHNlQDE3OgogICAgZGlnIDExCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxMgogICAgYiBzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2Zvcl9oZWFkZXJAMTIKCnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfZm9yQDE5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzYyCiAgICAvLyBmb3IgaWR4LCBkeW5fdHVwIGluIHVlbnVtZXJhdGUoYXJyNCk6CiAgICBkaWcgNgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGJ1cnkgMTUKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDE0CgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2Zvcl9oZWFkZXJAMjA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNjIKICAgIC8vIGZvciBpZHgsIGR5bl90dXAgaW4gdWVudW1lcmF0ZShhcnI0KToKICAgIGRpZyAxMwogICAgZGlnIDE1CiAgICA8CiAgICBieiBzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2ZvckAyMwogICAgZGlnIDYKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMTQKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBkaWcgMTgKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgZGlnIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgNQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzYzCiAgICAvLyBzdW00ICs9IGR5bl90dXAuZm9vCiAgICBkaWcgOQogICAgdW5jb3ZlciAyCiAgICArCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNjQKICAgIC8vIHN1bTQgKz0gZHluX3R1cC5iYXIuYnl0ZXMubGVuZ3RoCiAgICBzd2FwCiAgICBsZW4KICAgIHN3YXAKICAgIGRpZyAxCiAgICArCiAgICBidXJ5IDkKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM2NQogICAgLy8gYXNzZXJ0IGR5bl90dXAuYmFyLmJ5dGVzLmxlbmd0aCA9PSBpZHgsICJleHBlY3RlZCBzdHJpbmcgbGVuZ3RoIHRvIG1hdGNoIGluZGV4IgogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHN0cmluZyBsZW5ndGggdG8gbWF0Y2ggaW5kZXgKICAgIGJ1cnkgMTQKICAgIGIgc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19mb3JfaGVhZGVyQDIwCgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2ZvckAyMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGRpZyAyCiAgICBpdG9iCiAgICBkaWcgNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgNQogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgNgogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X3VpbnQ2NF9yZXR1cm5bcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X3VpbnQ2NF9yZXR1cm46CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNzEKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5KChVSW50NjQoMSksIFVJbnQ2NCgyKSwgVUludDY0KDMpKSkKICAgIHB1c2hieXRlcyAweDAwMDMwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM3MgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF91aW50NjRfcmV0dXJuX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM3MgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiB0ZXN0X3VpbnQ2NF9yZXR1cm5fYWZ0ZXJfZm9yQDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM3MwogICAgLy8gYXJyID0gYXJyLmFwcGVuZChpKQogICAgZHVwbiAyCiAgICBpdG9iCiAgICBkaWcgMwogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ1cnkgMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzcyCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXBwZW5kKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgdGVzdF91aW50NjRfcmV0dXJuX2Zvcl9oZWFkZXJAMgoKdGVzdF91aW50NjRfcmV0dXJuX2FmdGVyX2ZvckA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfYm9vbF9yZXR1cm5bcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2Jvb2xfcmV0dXJuOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mzc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mzc4CiAgICAvLyBhcnIgPSBJbW11dGFibGVBcnJheSgoVHJ1ZSwgRmFsc2UsIFRydWUsIEZhbHNlLCBUcnVlKSkKICAgIHB1c2hieXRlcyAweDAwMDVhOAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mzc5CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXBwZW5kKToKICAgIGludGNfMCAvLyAwCgp0ZXN0X2Jvb2xfcmV0dXJuX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM3OQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiB0ZXN0X2Jvb2xfcmV0dXJuX2FmdGVyX2ZvckA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozODAKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoaSAlIDIgPT0gMCkKICAgIGR1cG4gMgogICAgaW50Y18yIC8vIDIKICAgICUKICAgICEKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBkaWcgMwogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIGludGNfMyAvLyA4CiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHMKICAgIGJ1cnkgMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mzc5CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXBwZW5kKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgdGVzdF9ib29sX3JldHVybl9mb3JfaGVhZGVyQDIKCnRlc3RfYm9vbF9yZXR1cm5fYWZ0ZXJfZm9yQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF90dXBsZV9yZXR1cm5bcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X3R1cGxlX3JldHVybjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM4MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM4NQogICAgLy8gYXJyID0gSW1tdXRhYmxlQXJyYXkoKE15VHVwbGUoVUludDY0KCksIFRydWUsIEZhbHNlKSwpKQogICAgcHVzaGJ5dGVzIDB4MDAwMTAwMDAwMDAwMDAwMDAwMDA4MAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mzg2CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXBwZW5kKToKICAgIGludGNfMCAvLyAwCgp0ZXN0X3R1cGxlX3JldHVybl9mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozODYKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogdGVzdF90dXBsZV9yZXR1cm5fYWZ0ZXJfZm9yQDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM4NwogICAgLy8gYXJyID0gYXJyLmFwcGVuZChNeVR1cGxlKGZvbz1pLCBiYXI9aSAlIDIgPT0gMCwgYmF6PWkgJSAzID09IDApKQogICAgZHVwbiAyCiAgICBpbnRjXzIgLy8gMgogICAgJQogICAgIQogICAgZGlnIDEKICAgIHB1c2hpbnQgMwogICAgJQogICAgIQogICAgZGlnIDIKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICBidXJ5IDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM4NgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIHRlc3RfdHVwbGVfcmV0dXJuX2Zvcl9oZWFkZXJAMgoKdGVzdF90dXBsZV9yZXR1cm5fYWZ0ZXJfZm9yQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9keW5hbWljX3R1cGxlX3JldHVybltyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfZHluYW1pY190dXBsZV9yZXR1cm46CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozOTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozOTIKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5KChNeUR5bmFtaWNTaXplZFR1cGxlKFVJbnQ2NCgpLCBTdHJpbmcoIkhlbGxvIikpLCkpCiAgICBwdXNoYnl0ZXMgMHgwMDAxMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDBhMDAwNTQ4NjU2YzZjNmYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM5MwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9keW5hbWljX3R1cGxlX3JldHVybl9mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozOTMKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogdGVzdF9keW5hbWljX3R1cGxlX3JldHVybl9hZnRlcl9mb3JANQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mzk0CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKE15RHluYW1pY1NpemVkVHVwbGUoaSwgdGltZXMoaSkpKQogICAgZHVwbiAyCiAgICBjYWxsc3ViIHRpbWVzCiAgICBkaWcgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMwogICAgaXRvYgogICAgZGlnIDMKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICBzd2FwCiAgICBieXRlYyA2IC8vIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDQgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGNvdmVyIDIKICAgIGludGNfMSAvLyAxCiAgICB1bmNvdmVyIDMKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50CiAgICBidXJ5IDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM5MwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIHRlc3RfZHluYW1pY190dXBsZV9yZXR1cm5fZm9yX2hlYWRlckAyCgp0ZXN0X2R5bmFtaWNfdHVwbGVfcmV0dXJuX2FmdGVyX2ZvckA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfY29udmVydF90b19hcnJheV9hbmRfYmFja1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfY29udmVydF90b19hcnJheV9hbmRfYmFjazoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQwMgogICAgLy8gbXV0YWJsZS5leHRlbmQoYXJyKQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQwMwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9jb252ZXJ0X3RvX2FycmF5X2FuZF9iYWNrX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQwMwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiB0ZXN0X2NvbnZlcnRfdG9fYXJyYXlfYW5kX2JhY2tfYWZ0ZXJfZm9yQDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQwNAogICAgLy8gbXV0YWJsZS5hcHBlbmQoTXlUdXBsZShmb289aSwgYmFyPWkgJSAyID09IDAsIGJhej1pICUgMyA9PSAwKSkKICAgIGR1cG4gMgogICAgaW50Y18yIC8vIDIKICAgICUKICAgICEKICAgIGRpZyAxCiAgICBwdXNoaW50IDMKICAgICUKICAgICEKICAgIGRpZyA0CiAgICBjb3ZlciAzCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA0CiAgICBzZXRiaXQKICAgIGludGNfMSAvLyAxCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgYnVyeSAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MDMKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2NvbnZlcnRfdG9fYXJyYXlfYW5kX2JhY2tfZm9yX2hlYWRlckAyCgp0ZXN0X2NvbnZlcnRfdG9fYXJyYXlfYW5kX2JhY2tfYWZ0ZXJfZm9yQDU6CiAgICBkaWcgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDA1CiAgICAvLyByZXR1cm4gbXV0YWJsZS5mcmVlemUoKQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOQogICAgLwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mzk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9jb25jYXRfd2l0aF9hcmM0X3R1cGxlW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9jb25jYXRfd2l0aF9hcmM0X3R1cGxlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDExCiAgICAvLyBwcmVmaXggPSBJbW11dGFibGVBcnJheSgoYXJjNC5VSW50NjQoMSksIGFyYzQuVUludDY0KDIpKSkKICAgIGJ5dGVjIDggLy8gMHgwMDAyMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQwNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQxMgogICAgLy8gcmVzdWx0ID0gcHJlZml4ICsgYXJnCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2NvbmNhdF93aXRoX25hdGl2ZV90dXBsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfY29uY2F0X3dpdGhfbmF0aXZlX3R1cGxlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBleHRyYWN0IDAgOAogICAgc3dhcAogICAgZXh0cmFjdCA4IDgKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQyMAogICAgLy8gcmVzdWx0ID0gcHJlZml4ICsgYXJnCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQxOQogICAgLy8gcHJlZml4ID0gSW1tdXRhYmxlQXJyYXkoKGFyYzQuVUludDY0KDEpLCBhcmM0LlVJbnQ2NCgyKSkpCiAgICBieXRlYyA4IC8vIDB4MDAwMjAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MjAKICAgIC8vIHJlc3VsdCA9IHByZWZpeCArIGFyZwogICAgc3dhcAogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBwdXNoYnl0ZXMgMHgwMDA0CiAgICByZXBsYWNlMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2R5bmFtaWNfY29uY2F0X3dpdGhfYXJjNF90dXBsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfZHluYW1pY19jb25jYXRfd2l0aF9hcmM0X3R1cGxlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDI4CiAgICAvLyByZXN1bHQgPSBwcmVmaXggKyBhcmcKICAgIGV4dHJhY3QgNCAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MjcKICAgIC8vIHByZWZpeCA9IEltbXV0YWJsZUFycmF5KChhcmM0LlN0cmluZygiYSIpLCBhcmM0LlN0cmluZygiYiIpKSkKICAgIGJ5dGVjIDkgLy8gMHgwMDAyMDAwNDAwMDcwMDAxNjEwMDAxNjIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQyOAogICAgLy8gcmVzdWx0ID0gcHJlZml4ICsgYXJnCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2R5bmFtaWNfY29uY2F0X3dpdGhfbmF0aXZlX3R1cGxlW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9keW5hbWljX2NvbmNhdF93aXRoX25hdGl2ZV90dXBsZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgaW50Y18yIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgZGlnIDIKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDM2CiAgICAvLyByZXN1bHQgPSBwcmVmaXggKyBhcmcKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDM1CiAgICAvLyBwcmVmaXggPSBJbW11dGFibGVBcnJheSgoYXJjNC5TdHJpbmcoImEiKSwgYXJjNC5TdHJpbmcoImIiKSkpCiAgICBieXRlYyA5IC8vIDB4MDAwMjAwMDQwMDA3MDAwMTYxMDAwMTYyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MzYKICAgIC8vIHJlc3VsdCA9IHByZWZpeCArIGFyZwogICAgc3dhcAogICAgaW50Y18yIC8vIDIKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9jb25jYXRfaW1tdXRhYmxlX2R5bmFtaWNbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2NvbmNhdF9pbW11dGFibGVfZHluYW1pYzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQzOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ0MwogICAgLy8gcmV0dXJuIGltbTEgKyBpbW0yCiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIHVuY292ZXIgMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQzOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfaW1tdXRhYmxlX2FyYzRbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2ltbXV0YWJsZV9hcmM0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDQ3CiAgICAvLyBhc3NlcnQgaW1tLCAiZXhwZWN0ZWQgbm9uIGVtcHR5IGFycmF5IgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgbm9uIGVtcHR5IGFycmF5CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0NDgKICAgIC8vIGltbSA9IGltbS5yZXBsYWNlKGltbS5sZW5ndGggLSAxLCBpbW1bMF0pCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAxNgogICAgc3dhcAogICAgcHVzaGludCAxNgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIHJlcGxhY2UzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9pbW1fZml4ZWRfYXJyW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9pbW1fZml4ZWRfYXJyOgogICAgYnl0ZWNfMCAvLyAiIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDUzCiAgICAvLyBhcnIxID0gemVyb19ieXRlcyhOYXRpdmVTdHJ1Y3QzKQogICAgcHVzaGludCA0OAogICAgYnplcm8KICAgIGR1cAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDU0CiAgICAvLyBzdHJ1Y3QxMiA9IE5hdGl2ZVN0cnVjdChUeG4ubnVtX2FwcF9hcmdzICsgMSwgVHhuLm51bV9hcHBfYXJncyArIDIpCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ1NQogICAgLy8gYXJyMiA9IE5hdGl2ZVN0cnVjdDMoKHN0cnVjdDEyLCBzdHJ1Y3QxMiwgc3RydWN0MTIpKQogICAgZHVwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDU3CiAgICAvLyBhc3NlcnQgYXJyMSAhPSBhcnIyLCAiZXhwZWN0ZWQgYXJyYXlzIHRvIGJlIGRpZmZlcmVudCIKICAgICE9CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgYXJyYXlzIHRvIGJlIGRpZmZlcmVudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDYwCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMyk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9pbW1fZml4ZWRfYXJyX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ2MAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDMpOgogICAgZHVwCiAgICBwdXNoaW50IDMKICAgIDwKICAgIGJ6IHRlc3RfaW1tX2ZpeGVkX2Fycl9hZnRlcl9mb3JANQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDYxCiAgICAvLyBhcnIxID0gYXJyMS5yZXBsYWNlKGksIHN0cnVjdDEyKQogICAgZHVwbiAyCiAgICBwdXNoaW50IDE2CiAgICAqCiAgICBkaWcgNQogICAgc3dhcAogICAgZGlnIDUKICAgIHJlcGxhY2UzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnVyeSA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0NjAKICAgIC8vIGZvciBpIGluIHVyYW5nZSgzKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgdGVzdF9pbW1fZml4ZWRfYXJyX2Zvcl9oZWFkZXJAMgoKdGVzdF9pbW1fZml4ZWRfYXJyX2FmdGVyX2ZvckA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDYzCiAgICAvLyBhc3NlcnQgYXJyMSA9PSBhcnIyLCAiZXhwZWN0ZWQgYXJyYXlzIHRvIGJlIHRoZSBzYW1lIgogICAgZGlnIDMKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGFycmF5cyB0byBiZSB0aGUgc2FtZQogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNQoKdGVzdF9pbW1fZml4ZWRfYXJyX2Zvcl9oZWFkZXJANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ2NQogICAgLy8gZm9yIHN0cnVjdF9pdCBpbiBhcnIxOgogICAgZGlnIDQKICAgIHB1c2hpbnQgMwogICAgPAogICAgYnogdGVzdF9pbW1fZml4ZWRfYXJyX2FmdGVyX2ZvckA5CiAgICBkaWcgNAogICAgZHVwCiAgICBwdXNoaW50IDE2CiAgICAqCiAgICBkaWcgNQogICAgc3dhcAogICAgcHVzaGludCAxNgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0NjYKICAgIC8vIGFzc2VydCBzdHJ1Y3RfaXQgPT0gc3RydWN0MTIsICJleHBlY3RlZCBpdGVtcyBvbiBpdGVyYXRpb24gdG8gYmUgdGhlIHNhbWUiCiAgICBkaWcgNAogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBpdGVtcyBvbiBpdGVyYXRpb24gdG8gYmUgdGhlIHNhbWUKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDUKICAgIGIgdGVzdF9pbW1fZml4ZWRfYXJyX2Zvcl9oZWFkZXJANgoKdGVzdF9pbW1fZml4ZWRfYXJyX2FmdGVyX2ZvckA5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDY4CiAgICAvLyBzZWxmLmltbV9maXhlZF9hcnIgPSBhcnIxCiAgICBieXRlYyAxMCAvLyAiaW1tX2ZpeGVkX2FyciIKICAgIGRpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0NzIKICAgIC8vIGFzc2VydCBzdW1faW1tX2ZpeGVkKG11dF9hcnIuZnJlZXplKCkpID09IDE1LCAiZXhwZWN0ZWQgc3VtIHRvIGJlIDE1IgogICAgZHVwCiAgICBjYWxsc3ViIHN1bV9pbW1fZml4ZWQKICAgIHB1c2hpbnQgMTUKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgc3VtIHRvIGJlIDE1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0NzQKICAgIC8vIG11dF9hcnJbMF0gPSBOYXRpdmVTdHJ1Y3QoVUludDY0KCksIFVJbnQ2NCgpKQogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIHJlcGxhY2UyIDAgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0NzUKICAgIC8vIGFzc2VydCBzdW1faW1tX2ZpeGVkKG11dF9hcnIuZnJlZXplKCkpID09IDEwLCAiZXhwZWN0ZWQgc3VtIHRvIGJlIDEwIgogICAgY2FsbHN1YiBzdW1faW1tX2ZpeGVkCiAgICBwdXNoaW50IDEwCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHN1bSB0byBiZSAxMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDc3CiAgICAvLyByZXR1cm4gc2VsZi5pbW1fZml4ZWRfYXJyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gImltbV9maXhlZF9hcnIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW1tX2ZpeGVkX2FyciBleGlzdHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAEAAECCCYLAAQVH3x1AgAAAQACAAJA/////////////////////////////////////////////////////////////////////////////////////wIACgdiaWd1aW50EgACAAAAAAAAAAEAAAAAAAAAAgwAAgAEAAcAAWEAAWINaW1tX2ZpeGVkX2FycjEbQQC3MRkURDEYRIIYBETUL5kEt+qmCwR0PXDtBBx+BJQEotWGCwTgX8VkBB4JK4MEATECYgTIZUqYBInRlvgEbLfJkQSYmL8CBPa2HugEYLhqewRzrSg/BFKd+ukEIG1RTwTgZGXiBOwDAKIE7N8UrwRRGspkBCmFLk8EbUqjWAS3y5a9NhoAjhgCaQNQBHoFNQXlBkoHfAixCLcIxgmjCsEL8gw+DHEMww0jDXINiw2nDboN4w4MDikAMRkUMRgUEEOKAgKL/iJZIwkWVwYAi/5MXABJFYv/CUqL/1hPAiJPA1KJigECi/8iWSMJSSQLSYv/VwIASU4CSU8CWUlPAkkVTE4CUigiiwaLAQxBABuLAosGSU4CWSQJFlcGAosFTFCMBSQIjAZC/92LABZXBgKLBVCLASQIiwJMiwNSUIsEjACMAYmKBAEoRwKL/CJZRwKL/ghJFlcGAIv8TFwATgJMgQcIJQpJTwKBBwglCklOAgxBAAyLBosFCa+LBExQjAQijACLA4EQCEmMAov+CIwBiwKLAQxBACCL/YsASU4CU4sEiwJJTgNPAlSMBCMIjAKL/wiMAEL/2IsEjACJigMBi/0iWUmL/whMJAskCEsBFlcGAk4Ci/0kSwJSi/8kC69Qi/0Vi/1PA08CUlCL/lBMJAtJIosEiwIMQQAjiwNJFlcGAosBiwRJTgRPAl1JjAFLAVkkCAiMAyQIjARC/9WLAIsBUIwAiYoEAShJi/4kC4v8JAsiiwSLAwxBAByL/YsESU4CWYsCCBZXBgKLAUxQjAEkCIwEQv/ci/0VjAAijASLBIsCDEEAHIv/iwRJTgJZiwAIFlcGAosBTFCMASQIjARC/9yL/Iv+CBZXBgKLAVCL/YsDiwBSUIv/FYv/iwJPAlJQjACJigEBIkmLAYEDDEEAH4sBSYEQC4v/TIEQWEkiW4sACEwlWwiMACMIjAFC/9mJigEBKCKLAYv/DEEAEYsAgAEgUIwAiwEjCIwBQv/niYoCASKLAIv/DEEAHYsASRaL/kxQi/4iWSMIFlcGAlwAjP4jCIwAQv/bi/5MiYAKAAEAAAAAAAAAKoEFiP/CSSJZSYEGEkRJIwlLAlcCAEwlC1uBBBJEgSsWTwJMUEwjCBZXBgJcAEcCIllJgQcSRCMJSwFXAgBMJQtbgSsSRCRbgSoSRCJJgQMMQQARSwEliP07RQNISSMIRQFC/+hLAUkiWUmBBBJEIwlLAVcCAEwlC1skEkSBCoj/RkkiWUmBDhJESSMJSwJXAgBMJQtbgQkSRIEsFk8CTFBMIwgWVwYCXABJIllJgQ8SRCMJSwFXAgBMJQtbgSwSRIEXFlwSSSJZgQ8SREmBEluBFxJEgAFhTGcjQzEbIwkWgUCvSU4CqypMUIACAAFcAEcCIllJIxJEIwlMVwIATIFAC4FAWCioRCJJgQUMQQAgRwIWSwSrSwNJTwJQTCJZIwgWVwYCXABFAyMIRQFC/9lLAUkiWUmBBhJESSMJSwJXAgBMgUALgUBYgAEEqEQxGxYnBUyhSRWBQA5ESwWrTwJMUEwjCBZXBgJcAEkiWUmBBxJESSMJSwJXAgBMgUALgUBYgED////////////////////////////////////////////////////////////////////////////////////+qERLAVcCQCioREwnBVBMIwgWVwYCXABJIllJJRJEIwlLAVcCAEyBQAuBQFgnBahESVcCQCioRCcHvEgnB0y/I0MoNhoBFyoiSUsDDEEAHjEbSwFJTwISKyJPAlRLA0wjJYj78EUDIwhFAUL/20sBIllJRQVLA0lOAhJEQQAKSwNESwGBEFMUREsCIw1BAAwjSwQMREsBgRFTFERLAiQNQQALJEsEDERLAYESU0RLAoEDDUEAEksCIwlJSwUMRIEQCEsCTFMURIABZ0sCZ0sCQQAoSwMjCUkWVwYASwNMXABLAYEQCCJUTIEHCCUKJAgiTFIiWUsDIwkSRCNDKiJJgQUMQQAlRwIjCEwkCEsBFkwWUEsDSU8CUEwiWSMIFlcGAlwARQNFAUL/1EsBSSJZSYEFEkRLAVcCAEsCVwIQSSJbTCVbTCMSTCQSEERMIwmBEAuBEFhJIltMJVtMgQUSTIEGEhBEgRCI+mZFAUkiWUmBBBJESwFXAgBLAlcCEEkiW0wlW0wjEkwkEhBETCMJgRALgRBYSSJbTCVbTIEEEkyBBRIQRIABY0xnI0MqIkmBBQxBADRHAiQYFEsBgQMLJBgUSwIWKyJPBFQjTwNUUEsDSU8CUEwiWSMIFlcGAlwARQMjCEUBQv/FSwFJIlmBBRJESVcCCUkiW0sBgUBTTwKBQVNPAhRETEREgAFkTGcjQygqIkmBBQxBADVHAiMITK9LA0kiWUxXAgBLAxZLAxUWVwYCTwRQTCcGUExQJwRMUE4CI08DiPruRQNFAUL/xEsBIllJRQSBBRJEIkUBSYEFDEEAT0sBVwIASwFJTgIkC0sBTFlLAiMISwZLAQlLAxVLAiQLSwVMWU8CTU8DTwNPAlJJIltLASVZSwIVTwNOAlJXAgBMSwISRBVPAhJERQFC/6pLAYj5OUUBSSJZSYEEEkRLAVcCAEkiWUsCIwlLAhVLAyRZSwFMSwNNSwRPBE8CUkkiW0sBJVlLAhVPA04CUlcCAEwjEiKvTwISEERLASQLSwNMWU8CIwhPBEsBCUwkC0sETFlPA0xPAk1SSSJbSwElWUsCFU8DTgJSVwIATIEEEoEDr08CEhBEgAFlTGcjQygqIkmBBQxBADdHAiMITIj6j0sDSSJZTFcCAEsDFksDFRZXBgJPBFBMJwZQTFAnBExQTgIjTwOI+bpFA0UBQv/CSwEiWUlFBIEFEkQiRQFJgQUMQQBRSwFXAgBLAUlOAiQLSwFMWUsCIwhLBksBCUsDFUsCJAtLBUxZTwJNTwNPA08CUkkiW0sBJVlLAhVPA04CUlcCAExLAhJETwKI+gESREUBQv+oSwGI+ANFAUkiWUmBBBJESwFXAgBJIllLAiMJSwIVSwMkWUsBTEsDTUsETwRPAlJJIltLASVZSwIVTwNOAlJXAgBMIxJMKBIQREsBJAtLA0xZTwIjCE8ESwEJTCQLSwRMWU8DTE8CTVJJIltLASVZSwIVTwNOAlJXAgBMgQQSTIADICAgEhBEgAFmTGcjQzYaAbAjQ4AG+kDAUwACNhoBULAjQyJHAihHBTYaARc2GgIiSUsDDEEATCpFDCJFBUsESwEMQQAeSwRJFksNSU8CUEwiWSMIFlcGAlwARQ0jCEUFQv/aSwFJIllMVwIAJwRLDlBOAiNPA4j4U0UCSSMIRQFC/60qRQpLASJZRQkiRQdLBksJDEEAYUsBVwIASwckC0sBTFlKWSULJAhYSUUMIkUFIllFCCJFBksFSwgMQQAZSwpXAgBLBklOAiULW0sFCEUFIwhFBkL/30sDFksKSU8CUEwiWSMIFlcGAlwARQpLBiMIRQdC/5cpSwpQsCNDKkcDIkmBBQxBAMZHAhRLASMSKyJPA1QjTwJUSwZJTgJLAVBPAiJZIwgWVwYCXABFB0sBIwhLAiQSSwOBAxJLBIEEEksFgQUSSwaBBhJLBxZPByRPB1SBA08GVIEETwVUgQVPBFSBBk8DVEpQSwMWTEsBUEsJSU8CUEwiWSMIFlcGAlwARQlLBIEHEk8CgQdPAlRPAkxQSUsCUEsHSU8CUEwiWSMIFlcGAlwARQdPAyUSKyJPAlRQTFBLA0lPAlBMIlkjCBZXBgJcAEUDRQFC/zNLBEkiWYEFEkRLBEkiWYEFEkRLBEkiWYEFEkRLBEkiWYEFEkSABWJvb2wyTwRngAVib29sN08DZ4AFYm9vbDhPAmeABWJvb2w5TGcjQyhHBjYaATYaAjYaAzYaBCJHAzYaASJZIklLAgxBABlLCVcCAEsBSU4CJQtbSwQIRQQjCEUBQv/gSwgiWUURIkUNSwxLEQxBABtLDIEQCEsJTFNBAAZLAyMIRQRLDCMIRQ1C/91LByJZRRAiRQxLC0sQDEEAQEsHVwIASwyBCQuBCVhJIltLAYFAU08CgUFTRQ1LBk8CCEUGQQAGSwQjCEUFSwpBAAZLBCMIRQVLCyMIRQxC/7hLBiJZRQ8iRQ5LDUsPDEEAVksGVwIASw5JTgIkC0sBTFlLAiMISxJLAQlLAxVLAiQLSwVMWU8CTU8DTwNPAlJJIltLASVZSwIVTwNOAlJXAgBLCU8CCEwVTEsBCEUJTwISREUOQv+iSwIWSwQWUEsFFlBLBhZQKUxQsCNDNhoBF4AaAAMAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAMiSUsDDEEAHUcCFksDSU8CUEwiWSMIFlcGAlwARQMjCEUBQv/cKUsCULAjQzYaAReAAwAFqCJJSwMMQQAbRwIkGBQrIk8CVEsDTCMliPQsRQMjCEUBQv/eKUsCULAjQzYaAReACwABAAAAAAAAAACAIklLAwxBADJHAiQYFEsBgQMYFEsCFisiTwRUI08DVFBLA0lPAlBMIlkjCBZXBgJcAEUDIwhFAUL/xylLAlCwI0M2GgEXgBUAAQACAAAAAAAAAAAACgAFSGVsbG8iSUsDDEEANkcCiPUySwNJIllMVwIASwMWSwMVFlcGAk8EUEwnBlBMUCcETFBOAiNPA4j0XUUDIwhFAUL/wylLAlCwI0M2GgE2GgIXTFcCACJJSwMMQQApRwIkGBRLAYEDGBRLBE4DSwIWKyJPBFQjTwNUUE8CTFBFAyMIRQFC/9BLAUkVgQkKFlcGAkxQKUxQsCNDJwg2GgFQSVcCABUlChZXBgJcAClMULAjQzYaAUlXAAhMVwgIUCcITFCAAgAEXAApTFCwI0M2GgFXBAAnCUwkiPNSKUxQsCNDNhoBSSJZSwEkWUsCTwJLAlJLAhVPA08DTwJSUCcJTCSI8ykpTFCwI0M2GgE2GgJLASJZTwJXAgBLAlcCAE8DIllPA08DTwJPA4jzailMULAjQzYaAUkiWUlEIwlLAVcCEEyBEAskCExdKUxQsCNDKIEwr0kxGyMIMRskCEwWTBZQSU4CSUsBUExQSU4CE0QiSYEDDEEAFEcCgRALSwVMSwVdRQUjCEUBQv/lSwNLAhJEIkUFSwSBAwxBABdLBEmBEAtLBUyBEFhLBBJEIwhFBUL/4ScKSwRJTgJnSYjzV4EPEkSAEAAAAAAAAAAAAAAAAAAAAABcAIjzPIEKEkQiJwplRClMULAjQw==","clear":"C4EBQw=="},"events":[{"name":"emit_test","args":[{"type":"uint64[]","name":"field1"}]}],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the ImmutableArrayContract contract + */ +export type ImmutableArrayContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'test_uint64_array()void': Record + 'test_biguint_array()void': Record + 'test_bool_array(uint64)void': { + length: bigint | number + } + 'test_fixed_size_tuple_array()void': Record + 'test_fixed_size_named_tuple_array()void': Record + 'test_dynamic_sized_tuple_array()void': Record + 'test_dynamic_sized_named_tuple_array()void': Record + 'test_implicit_conversion_log(uint64[])void': { + arr: bigint[] | number[] + } + 'test_implicit_conversion_emit(uint64[])void': { + arr: bigint[] | number[] + } + 'test_nested_array(uint64,uint64[][])uint64[]': { + arrToAdd: bigint | number + arr: bigint[] | number[][] + } + 'test_bit_packed_tuples()void': Record + 'sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)': { + arr1: bigint[] | number[] + arr2: boolean[] + arr3: [bigint | number, boolean, boolean][] + arr4: [bigint | number, string][] + } + 'test_uint64_return(uint64)uint64[]': { + append: bigint | number + } + 'test_bool_return(uint64)bool[]': { + append: bigint | number + } + 'test_tuple_return(uint64)(uint64,bool,bool)[]': { + append: bigint | number + } + 'test_dynamic_tuple_return(uint64)(uint64,string)[]': { + append: bigint | number + } + 'test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]': { + arr: [bigint | number, boolean, boolean][] + append: bigint | number + } + 'test_concat_with_arc4_tuple((uint64,uint64))uint64[]': { + arg: [bigint | number, bigint | number] + } + 'test_concat_with_native_tuple((uint64,uint64))uint64[]': { + arg: [bigint | number, bigint | number] + } + 'test_dynamic_concat_with_arc4_tuple((string,string))string[]': { + arg: [string, string] + } + 'test_dynamic_concat_with_native_tuple((string,string))string[]': { + arg: [string, string] + } + 'test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]': { + imm1: [bigint | number, string][] + imm2: [bigint | number, string][] + } + 'test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]': { + imm: [bigint | number, bigint | number][] + } + 'test_imm_fixed_arr()(uint64,uint64)[3]': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'test_uint64_array()void': [] + 'test_biguint_array()void': [] + 'test_bool_array(uint64)void': [length: bigint | number] + 'test_fixed_size_tuple_array()void': [] + 'test_fixed_size_named_tuple_array()void': [] + 'test_dynamic_sized_tuple_array()void': [] + 'test_dynamic_sized_named_tuple_array()void': [] + 'test_implicit_conversion_log(uint64[])void': [arr: bigint[] | number[]] + 'test_implicit_conversion_emit(uint64[])void': [arr: bigint[] | number[]] + 'test_nested_array(uint64,uint64[][])uint64[]': [arrToAdd: bigint | number, arr: bigint[] | number[][]] + 'test_bit_packed_tuples()void': [] + 'sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)': [arr1: bigint[] | number[], arr2: boolean[], arr3: [bigint | number, boolean, boolean][], arr4: [bigint | number, string][]] + 'test_uint64_return(uint64)uint64[]': [append: bigint | number] + 'test_bool_return(uint64)bool[]': [append: bigint | number] + 'test_tuple_return(uint64)(uint64,bool,bool)[]': [append: bigint | number] + 'test_dynamic_tuple_return(uint64)(uint64,string)[]': [append: bigint | number] + 'test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]': [arr: [bigint | number, boolean, boolean][], append: bigint | number] + 'test_concat_with_arc4_tuple((uint64,uint64))uint64[]': [arg: [bigint | number, bigint | number]] + 'test_concat_with_native_tuple((uint64,uint64))uint64[]': [arg: [bigint | number, bigint | number]] + 'test_dynamic_concat_with_arc4_tuple((string,string))string[]': [arg: [string, string]] + 'test_dynamic_concat_with_native_tuple((string,string))string[]': [arg: [string, string]] + 'test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]': [imm1: [bigint | number, string][], imm2: [bigint | number, string][]] + 'test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]': [imm: [bigint | number, bigint | number][]] + 'test_imm_fixed_arr()(uint64,uint64)[3]': [] + } +} + +/** + * The return type for each method + */ +export type ImmutableArrayContractReturns = { + 'test_uint64_array()void': void + 'test_biguint_array()void': void + 'test_bool_array(uint64)void': void + 'test_fixed_size_tuple_array()void': void + 'test_fixed_size_named_tuple_array()void': void + 'test_dynamic_sized_tuple_array()void': void + 'test_dynamic_sized_named_tuple_array()void': void + 'test_implicit_conversion_log(uint64[])void': void + 'test_implicit_conversion_emit(uint64[])void': void + 'test_nested_array(uint64,uint64[][])uint64[]': bigint[] + 'test_bit_packed_tuples()void': void + 'sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)': [bigint, bigint, bigint, bigint] + 'test_uint64_return(uint64)uint64[]': bigint[] + 'test_bool_return(uint64)bool[]': boolean[] + 'test_tuple_return(uint64)(uint64,bool,bool)[]': [bigint, boolean, boolean][] + 'test_dynamic_tuple_return(uint64)(uint64,string)[]': [bigint, string][] + 'test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]': [bigint, boolean, boolean][] + 'test_concat_with_arc4_tuple((uint64,uint64))uint64[]': bigint[] + 'test_concat_with_native_tuple((uint64,uint64))uint64[]': bigint[] + 'test_dynamic_concat_with_arc4_tuple((string,string))string[]': string[] + 'test_dynamic_concat_with_native_tuple((string,string))string[]': string[] + 'test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]': [bigint, string][] + 'test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]': [bigint, bigint][] + 'test_imm_fixed_arr()(uint64,uint64)[3]': [[bigint, bigint], [bigint, bigint], [bigint, bigint]] +} + +/** + * Defines the types of available calls and state of the ImmutableArrayContract smart contract. + */ +export type ImmutableArrayContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'test_uint64_array()void' | 'test_uint64_array', { + argsObj: ImmutableArrayContractArgs['obj']['test_uint64_array()void'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_uint64_array()void'] + returns: ImmutableArrayContractReturns['test_uint64_array()void'] + }> + & Record<'test_biguint_array()void' | 'test_biguint_array', { + argsObj: ImmutableArrayContractArgs['obj']['test_biguint_array()void'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_biguint_array()void'] + returns: ImmutableArrayContractReturns['test_biguint_array()void'] + }> + & Record<'test_bool_array(uint64)void' | 'test_bool_array', { + argsObj: ImmutableArrayContractArgs['obj']['test_bool_array(uint64)void'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_bool_array(uint64)void'] + returns: ImmutableArrayContractReturns['test_bool_array(uint64)void'] + }> + & Record<'test_fixed_size_tuple_array()void' | 'test_fixed_size_tuple_array', { + argsObj: ImmutableArrayContractArgs['obj']['test_fixed_size_tuple_array()void'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_fixed_size_tuple_array()void'] + returns: ImmutableArrayContractReturns['test_fixed_size_tuple_array()void'] + }> + & Record<'test_fixed_size_named_tuple_array()void' | 'test_fixed_size_named_tuple_array', { + argsObj: ImmutableArrayContractArgs['obj']['test_fixed_size_named_tuple_array()void'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_fixed_size_named_tuple_array()void'] + returns: ImmutableArrayContractReturns['test_fixed_size_named_tuple_array()void'] + }> + & Record<'test_dynamic_sized_tuple_array()void' | 'test_dynamic_sized_tuple_array', { + argsObj: ImmutableArrayContractArgs['obj']['test_dynamic_sized_tuple_array()void'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_dynamic_sized_tuple_array()void'] + returns: ImmutableArrayContractReturns['test_dynamic_sized_tuple_array()void'] + }> + & Record<'test_dynamic_sized_named_tuple_array()void' | 'test_dynamic_sized_named_tuple_array', { + argsObj: ImmutableArrayContractArgs['obj']['test_dynamic_sized_named_tuple_array()void'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_dynamic_sized_named_tuple_array()void'] + returns: ImmutableArrayContractReturns['test_dynamic_sized_named_tuple_array()void'] + }> + & Record<'test_implicit_conversion_log(uint64[])void' | 'test_implicit_conversion_log', { + argsObj: ImmutableArrayContractArgs['obj']['test_implicit_conversion_log(uint64[])void'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_implicit_conversion_log(uint64[])void'] + returns: ImmutableArrayContractReturns['test_implicit_conversion_log(uint64[])void'] + }> + & Record<'test_implicit_conversion_emit(uint64[])void' | 'test_implicit_conversion_emit', { + argsObj: ImmutableArrayContractArgs['obj']['test_implicit_conversion_emit(uint64[])void'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_implicit_conversion_emit(uint64[])void'] + returns: ImmutableArrayContractReturns['test_implicit_conversion_emit(uint64[])void'] + }> + & Record<'test_nested_array(uint64,uint64[][])uint64[]' | 'test_nested_array', { + argsObj: ImmutableArrayContractArgs['obj']['test_nested_array(uint64,uint64[][])uint64[]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_nested_array(uint64,uint64[][])uint64[]'] + returns: ImmutableArrayContractReturns['test_nested_array(uint64,uint64[][])uint64[]'] + }> + & Record<'test_bit_packed_tuples()void' | 'test_bit_packed_tuples', { + argsObj: ImmutableArrayContractArgs['obj']['test_bit_packed_tuples()void'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_bit_packed_tuples()void'] + returns: ImmutableArrayContractReturns['test_bit_packed_tuples()void'] + }> + & Record<'sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)' | 'sum_uints_and_lengths_and_trues', { + argsObj: ImmutableArrayContractArgs['obj']['sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)'] + argsTuple: ImmutableArrayContractArgs['tuple']['sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)'] + returns: ImmutableArrayContractReturns['sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)'] + }> + & Record<'test_uint64_return(uint64)uint64[]' | 'test_uint64_return', { + argsObj: ImmutableArrayContractArgs['obj']['test_uint64_return(uint64)uint64[]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_uint64_return(uint64)uint64[]'] + returns: ImmutableArrayContractReturns['test_uint64_return(uint64)uint64[]'] + }> + & Record<'test_bool_return(uint64)bool[]' | 'test_bool_return', { + argsObj: ImmutableArrayContractArgs['obj']['test_bool_return(uint64)bool[]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_bool_return(uint64)bool[]'] + returns: ImmutableArrayContractReturns['test_bool_return(uint64)bool[]'] + }> + & Record<'test_tuple_return(uint64)(uint64,bool,bool)[]' | 'test_tuple_return', { + argsObj: ImmutableArrayContractArgs['obj']['test_tuple_return(uint64)(uint64,bool,bool)[]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_tuple_return(uint64)(uint64,bool,bool)[]'] + returns: ImmutableArrayContractReturns['test_tuple_return(uint64)(uint64,bool,bool)[]'] + }> + & Record<'test_dynamic_tuple_return(uint64)(uint64,string)[]' | 'test_dynamic_tuple_return', { + argsObj: ImmutableArrayContractArgs['obj']['test_dynamic_tuple_return(uint64)(uint64,string)[]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_dynamic_tuple_return(uint64)(uint64,string)[]'] + returns: ImmutableArrayContractReturns['test_dynamic_tuple_return(uint64)(uint64,string)[]'] + }> + & Record<'test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]' | 'test_convert_to_array_and_back', { + argsObj: ImmutableArrayContractArgs['obj']['test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]'] + returns: ImmutableArrayContractReturns['test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]'] + }> + & Record<'test_concat_with_arc4_tuple((uint64,uint64))uint64[]' | 'test_concat_with_arc4_tuple', { + argsObj: ImmutableArrayContractArgs['obj']['test_concat_with_arc4_tuple((uint64,uint64))uint64[]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_concat_with_arc4_tuple((uint64,uint64))uint64[]'] + returns: ImmutableArrayContractReturns['test_concat_with_arc4_tuple((uint64,uint64))uint64[]'] + }> + & Record<'test_concat_with_native_tuple((uint64,uint64))uint64[]' | 'test_concat_with_native_tuple', { + argsObj: ImmutableArrayContractArgs['obj']['test_concat_with_native_tuple((uint64,uint64))uint64[]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_concat_with_native_tuple((uint64,uint64))uint64[]'] + returns: ImmutableArrayContractReturns['test_concat_with_native_tuple((uint64,uint64))uint64[]'] + }> + & Record<'test_dynamic_concat_with_arc4_tuple((string,string))string[]' | 'test_dynamic_concat_with_arc4_tuple', { + argsObj: ImmutableArrayContractArgs['obj']['test_dynamic_concat_with_arc4_tuple((string,string))string[]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_dynamic_concat_with_arc4_tuple((string,string))string[]'] + returns: ImmutableArrayContractReturns['test_dynamic_concat_with_arc4_tuple((string,string))string[]'] + }> + & Record<'test_dynamic_concat_with_native_tuple((string,string))string[]' | 'test_dynamic_concat_with_native_tuple', { + argsObj: ImmutableArrayContractArgs['obj']['test_dynamic_concat_with_native_tuple((string,string))string[]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_dynamic_concat_with_native_tuple((string,string))string[]'] + returns: ImmutableArrayContractReturns['test_dynamic_concat_with_native_tuple((string,string))string[]'] + }> + & Record<'test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]' | 'test_concat_immutable_dynamic', { + argsObj: ImmutableArrayContractArgs['obj']['test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]'] + returns: ImmutableArrayContractReturns['test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]'] + }> + & Record<'test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]' | 'test_immutable_arc4', { + argsObj: ImmutableArrayContractArgs['obj']['test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]'] + returns: ImmutableArrayContractReturns['test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]'] + }> + & Record<'test_imm_fixed_arr()(uint64,uint64)[3]' | 'test_imm_fixed_arr', { + argsObj: ImmutableArrayContractArgs['obj']['test_imm_fixed_arr()(uint64,uint64)[3]'] + argsTuple: ImmutableArrayContractArgs['tuple']['test_imm_fixed_arr()(uint64,uint64)[3]'] + returns: ImmutableArrayContractReturns['test_imm_fixed_arr()(uint64,uint64)[3]'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + global: { + keys: { + a: bigint[] + g: boolean[] + c: [bigint, bigint][] + d: [bigint, boolean, boolean][] + e: [bigint, Uint8Array][] + f: [bigint, string][] + bool2: [boolean, boolean][] + bool7: [bigint, boolean, boolean, boolean, boolean, boolean, boolean, boolean, bigint][] + bool8: [bigint, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, bigint][] + bool9: [bigint, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, bigint][] + immFixedArr: [[bigint, bigint], [bigint, bigint], [bigint, bigint]] + } + maps: {} + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type ImmutableArrayContractSignatures = keyof ImmutableArrayContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type ImmutableArrayContractNonVoidMethodSignatures = keyof ImmutableArrayContractTypes['methods'] extends infer T ? T extends keyof ImmutableArrayContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the ImmutableArrayContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = ImmutableArrayContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the ImmutableArrayContract smart contract to the method's return type + */ +export type MethodReturn = ImmutableArrayContractTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed global state of the application. + */ +export type GlobalKeysState = ImmutableArrayContractTypes['state']['global']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type ImmutableArrayContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type ImmutableArrayContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: ImmutableArrayContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the ImmutableArrayContract smart contract + */ +export abstract class ImmutableArrayContractParamsFactory { + /** + * Constructs a no op call for the test_uint64_array()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testUint64Array(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_uint64_array()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_biguint_array()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testBiguintArray(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_biguint_array()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_bool_array(uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testBoolArray(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_bool_array(uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.length], + } + } + /** + * Constructs a no op call for the test_fixed_size_tuple_array()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testFixedSizeTupleArray(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_fixed_size_tuple_array()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_fixed_size_named_tuple_array()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testFixedSizeNamedTupleArray(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_fixed_size_named_tuple_array()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_dynamic_sized_tuple_array()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testDynamicSizedTupleArray(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_dynamic_sized_tuple_array()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_dynamic_sized_named_tuple_array()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testDynamicSizedNamedTupleArray(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_dynamic_sized_named_tuple_array()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_implicit_conversion_log(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testImplicitConversionLog(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_implicit_conversion_log(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.arr], + } + } + /** + * Constructs a no op call for the test_implicit_conversion_emit(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testImplicitConversionEmit(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_implicit_conversion_emit(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.arr], + } + } + /** + * Constructs a no op call for the test_nested_array(uint64,uint64[][])uint64[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testNestedArray(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_nested_array(uint64,uint64[][])uint64[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.arrToAdd, params.args.arr], + } + } + /** + * Constructs a no op call for the test_bit_packed_tuples()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testBitPackedTuples(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_bit_packed_tuples()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static sumUintsAndLengthsAndTrues(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.arr1, params.args.arr2, params.args.arr3, params.args.arr4], + } + } + /** + * Constructs a no op call for the test_uint64_return(uint64)uint64[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testUint64Return(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_uint64_return(uint64)uint64[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.append], + } + } + /** + * Constructs a no op call for the test_bool_return(uint64)bool[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testBoolReturn(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_bool_return(uint64)bool[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.append], + } + } + /** + * Constructs a no op call for the test_tuple_return(uint64)(uint64,bool,bool)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testTupleReturn(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_tuple_return(uint64)(uint64,bool,bool)[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.append], + } + } + /** + * Constructs a no op call for the test_dynamic_tuple_return(uint64)(uint64,string)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testDynamicTupleReturn(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_dynamic_tuple_return(uint64)(uint64,string)[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.append], + } + } + /** + * Constructs a no op call for the test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testConvertToArrayAndBack(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.arr, params.args.append], + } + } + /** + * Constructs a no op call for the test_concat_with_arc4_tuple((uint64,uint64))uint64[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testConcatWithArc4Tuple(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_concat_with_arc4_tuple((uint64,uint64))uint64[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.arg], + } + } + /** + * Constructs a no op call for the test_concat_with_native_tuple((uint64,uint64))uint64[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testConcatWithNativeTuple(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_concat_with_native_tuple((uint64,uint64))uint64[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.arg], + } + } + /** + * Constructs a no op call for the test_dynamic_concat_with_arc4_tuple((string,string))string[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testDynamicConcatWithArc4Tuple(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_dynamic_concat_with_arc4_tuple((string,string))string[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.arg], + } + } + /** + * Constructs a no op call for the test_dynamic_concat_with_native_tuple((string,string))string[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testDynamicConcatWithNativeTuple(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_dynamic_concat_with_native_tuple((string,string))string[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.arg], + } + } + /** + * Constructs a no op call for the test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testConcatImmutableDynamic(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.imm1, params.args.imm2], + } + } + /** + * Constructs a no op call for the test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testImmutableArc4(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.imm], + } + } + /** + * Constructs a no op call for the test_imm_fixed_arr()(uint64,uint64)[3] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testImmFixedArr(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_imm_fixed_arr()(uint64,uint64)[3]' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } +} + +/** + * A factory to create and deploy one or more instance of the ImmutableArrayContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class ImmutableArrayContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `ImmutableArrayContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new ImmutableArrayContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new ImmutableArrayContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the ImmutableArrayContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: ImmutableArrayContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new ImmutableArrayContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ImmutableArrayContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ImmutableArrayContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ImmutableArrayContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new ImmutableArrayContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the ImmutableArrayContract smart contract + */ +export class ImmutableArrayContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `ImmutableArrayContractClient` + * + * @param appClient An `AppClient` instance which has been created with the ImmutableArrayContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `ImmutableArrayContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `ImmutableArrayContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new ImmutableArrayContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `ImmutableArrayContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new ImmutableArrayContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the ImmutableArrayContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_uint64_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testUint64Array: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testUint64Array(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_biguint_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testBiguintArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testBiguintArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_bool_array(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testBoolArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testBoolArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_fixed_size_tuple_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testFixedSizeTupleArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testFixedSizeTupleArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_fixed_size_named_tuple_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testFixedSizeNamedTupleArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testFixedSizeNamedTupleArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_sized_tuple_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testDynamicSizedTupleArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testDynamicSizedTupleArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_sized_named_tuple_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testDynamicSizedNamedTupleArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testDynamicSizedNamedTupleArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_implicit_conversion_log(uint64[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testImplicitConversionLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testImplicitConversionLog(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_implicit_conversion_emit(uint64[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testImplicitConversionEmit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testImplicitConversionEmit(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_nested_array(uint64,uint64[][])uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testNestedArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testNestedArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_bit_packed_tuples()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testBitPackedTuples: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testBitPackedTuples(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + sumUintsAndLengthsAndTrues: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.sumUintsAndLengthsAndTrues(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_uint64_return(uint64)uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testUint64Return: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testUint64Return(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_bool_return(uint64)bool[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testBoolReturn: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testBoolReturn(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_tuple_return(uint64)(uint64,bool,bool)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testTupleReturn: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testTupleReturn(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_tuple_return(uint64)(uint64,string)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testDynamicTupleReturn: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testDynamicTupleReturn(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testConvertToArrayAndBack: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testConvertToArrayAndBack(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_concat_with_arc4_tuple((uint64,uint64))uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testConcatWithArc4Tuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testConcatWithArc4Tuple(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_concat_with_native_tuple((uint64,uint64))uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testConcatWithNativeTuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testConcatWithNativeTuple(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_concat_with_arc4_tuple((string,string))string[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testDynamicConcatWithArc4Tuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testDynamicConcatWithArc4Tuple(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_concat_with_native_tuple((string,string))string[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testDynamicConcatWithNativeTuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testDynamicConcatWithNativeTuple(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testConcatImmutableDynamic: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testConcatImmutableDynamic(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testImmutableArc4: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testImmutableArc4(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_imm_fixed_arr()(uint64,uint64)[3]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testImmFixedArr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ImmutableArrayContractParamsFactory.testImmFixedArr(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the ImmutableArrayContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_uint64_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testUint64Array: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testUint64Array(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_biguint_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testBiguintArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testBiguintArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_bool_array(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testBoolArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testBoolArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_fixed_size_tuple_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testFixedSizeTupleArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testFixedSizeTupleArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_fixed_size_named_tuple_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testFixedSizeNamedTupleArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testFixedSizeNamedTupleArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_sized_tuple_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testDynamicSizedTupleArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testDynamicSizedTupleArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_sized_named_tuple_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testDynamicSizedNamedTupleArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testDynamicSizedNamedTupleArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_implicit_conversion_log(uint64[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testImplicitConversionLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testImplicitConversionLog(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_implicit_conversion_emit(uint64[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testImplicitConversionEmit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testImplicitConversionEmit(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_nested_array(uint64,uint64[][])uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testNestedArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testNestedArray(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_bit_packed_tuples()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testBitPackedTuples: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testBitPackedTuples(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + sumUintsAndLengthsAndTrues: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.sumUintsAndLengthsAndTrues(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_uint64_return(uint64)uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testUint64Return: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testUint64Return(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_bool_return(uint64)bool[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testBoolReturn: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testBoolReturn(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_tuple_return(uint64)(uint64,bool,bool)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testTupleReturn: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testTupleReturn(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_tuple_return(uint64)(uint64,string)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testDynamicTupleReturn: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testDynamicTupleReturn(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testConvertToArrayAndBack: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testConvertToArrayAndBack(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_concat_with_arc4_tuple((uint64,uint64))uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testConcatWithArc4Tuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testConcatWithArc4Tuple(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_concat_with_native_tuple((uint64,uint64))uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testConcatWithNativeTuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testConcatWithNativeTuple(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_concat_with_arc4_tuple((string,string))string[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testDynamicConcatWithArc4Tuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testDynamicConcatWithArc4Tuple(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_concat_with_native_tuple((string,string))string[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testDynamicConcatWithNativeTuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testDynamicConcatWithNativeTuple(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testConcatImmutableDynamic: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testConcatImmutableDynamic(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testImmutableArc4: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testImmutableArc4(params)) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_imm_fixed_arr()(uint64,uint64)[3]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testImmFixedArr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ImmutableArrayContractParamsFactory.testImmFixedArr(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the ImmutableArrayContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_uint64_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testUint64Array: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testUint64Array(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_uint64_array()void'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_biguint_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testBiguintArray: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testBiguintArray(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_biguint_array()void'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_bool_array(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testBoolArray: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testBoolArray(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_bool_array(uint64)void'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_fixed_size_tuple_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testFixedSizeTupleArray: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testFixedSizeTupleArray(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_fixed_size_tuple_array()void'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_fixed_size_named_tuple_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testFixedSizeNamedTupleArray: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testFixedSizeNamedTupleArray(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_fixed_size_named_tuple_array()void'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_sized_tuple_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testDynamicSizedTupleArray: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testDynamicSizedTupleArray(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_dynamic_sized_tuple_array()void'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_sized_named_tuple_array()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testDynamicSizedNamedTupleArray: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testDynamicSizedNamedTupleArray(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_dynamic_sized_named_tuple_array()void'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_implicit_conversion_log(uint64[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testImplicitConversionLog: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testImplicitConversionLog(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_implicit_conversion_log(uint64[])void'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_implicit_conversion_emit(uint64[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testImplicitConversionEmit: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testImplicitConversionEmit(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_implicit_conversion_emit(uint64[])void'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_nested_array(uint64,uint64[][])uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testNestedArray: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testNestedArray(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_nested_array(uint64,uint64[][])uint64[]'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_bit_packed_tuples()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testBitPackedTuples: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testBitPackedTuples(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_bit_packed_tuples()void'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + sumUintsAndLengthsAndTrues: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.sumUintsAndLengthsAndTrues(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_uint64_return(uint64)uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testUint64Return: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testUint64Return(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_uint64_return(uint64)uint64[]'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_bool_return(uint64)bool[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testBoolReturn: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testBoolReturn(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_bool_return(uint64)bool[]'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_tuple_return(uint64)(uint64,bool,bool)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testTupleReturn: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testTupleReturn(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_tuple_return(uint64)(uint64,bool,bool)[]'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_tuple_return(uint64)(uint64,string)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testDynamicTupleReturn: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testDynamicTupleReturn(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_dynamic_tuple_return(uint64)(uint64,string)[]'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testConvertToArrayAndBack: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testConvertToArrayAndBack(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_concat_with_arc4_tuple((uint64,uint64))uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testConcatWithArc4Tuple: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testConcatWithArc4Tuple(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_concat_with_arc4_tuple((uint64,uint64))uint64[]'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_concat_with_native_tuple((uint64,uint64))uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testConcatWithNativeTuple: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testConcatWithNativeTuple(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_concat_with_native_tuple((uint64,uint64))uint64[]'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_concat_with_arc4_tuple((string,string))string[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testDynamicConcatWithArc4Tuple: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testDynamicConcatWithArc4Tuple(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_dynamic_concat_with_arc4_tuple((string,string))string[]'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_dynamic_concat_with_native_tuple((string,string))string[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testDynamicConcatWithNativeTuple: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testDynamicConcatWithNativeTuple(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_dynamic_concat_with_native_tuple((string,string))string[]'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testConcatImmutableDynamic: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testConcatImmutableDynamic(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testImmutableArc4: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testImmutableArc4(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]'])} + }, + + /** + * Makes a call to the ImmutableArrayContract smart contract using the `test_imm_fixed_arr()(uint64,uint64)[3]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testImmFixedArr: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ImmutableArrayContractParamsFactory.testImmFixedArr(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayContractReturns['test_imm_fixed_arr()(uint64,uint64)[3]'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new ImmutableArrayContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current ImmutableArrayContract app + */ + state = { + /** + * Methods to access global state for the current ImmutableArrayContract app + */ + global: { + /** + * Get all current keyed values from global state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.global.getAll() + return { + a: result.a, + g: result.g, + c: result.c, + d: result.d, + e: result.e, + f: result.f, + bool2: result.bool2, + bool7: result.bool7, + bool8: result.bool8, + bool9: result.bool9, + immFixedArr: result.imm_fixed_arr, + } + }, + /** + * Get the current value of the a key in global state + */ + a: async (): Promise => { return (await this.appClient.state.global.getValue("a")) as bigint[] | undefined }, + /** + * Get the current value of the g key in global state + */ + g: async (): Promise => { return (await this.appClient.state.global.getValue("g")) as boolean[] | undefined }, + /** + * Get the current value of the c key in global state + */ + c: async (): Promise<[bigint, bigint][] | undefined> => { return (await this.appClient.state.global.getValue("c")) as [bigint, bigint][] | undefined }, + /** + * Get the current value of the d key in global state + */ + d: async (): Promise<[bigint, boolean, boolean][] | undefined> => { return (await this.appClient.state.global.getValue("d")) as [bigint, boolean, boolean][] | undefined }, + /** + * Get the current value of the e key in global state + */ + e: async (): Promise<[bigint, Uint8Array][] | undefined> => { return (await this.appClient.state.global.getValue("e")) as [bigint, Uint8Array][] | undefined }, + /** + * Get the current value of the f key in global state + */ + f: async (): Promise<[bigint, string][] | undefined> => { return (await this.appClient.state.global.getValue("f")) as [bigint, string][] | undefined }, + /** + * Get the current value of the bool2 key in global state + */ + bool2: async (): Promise<[boolean, boolean][] | undefined> => { return (await this.appClient.state.global.getValue("bool2")) as [boolean, boolean][] | undefined }, + /** + * Get the current value of the bool7 key in global state + */ + bool7: async (): Promise<[bigint, boolean, boolean, boolean, boolean, boolean, boolean, boolean, bigint][] | undefined> => { return (await this.appClient.state.global.getValue("bool7")) as [bigint, boolean, boolean, boolean, boolean, boolean, boolean, boolean, bigint][] | undefined }, + /** + * Get the current value of the bool8 key in global state + */ + bool8: async (): Promise<[bigint, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, bigint][] | undefined> => { return (await this.appClient.state.global.getValue("bool8")) as [bigint, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, bigint][] | undefined }, + /** + * Get the current value of the bool9 key in global state + */ + bool9: async (): Promise<[bigint, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, bigint][] | undefined> => { return (await this.appClient.state.global.getValue("bool9")) as [bigint, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, bigint][] | undefined }, + /** + * Get the current value of the imm_fixed_arr key in global state + */ + immFixedArr: async (): Promise<[[bigint, bigint], [bigint, bigint], [bigint, bigint]] | undefined> => { return (await this.appClient.state.global.getValue("imm_fixed_arr")) as [[bigint, bigint], [bigint, bigint], [bigint, bigint]] | undefined }, + }, + } + + public newGroup(composerConfig?: TransactionComposerConfig): ImmutableArrayContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a test_uint64_array()void method call against the ImmutableArrayContract contract + */ + testUint64Array(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testUint64Array(params))) + return this + }, + /** + * Add a test_biguint_array()void method call against the ImmutableArrayContract contract + */ + testBiguintArray(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testBiguintArray(params))) + return this + }, + /** + * Add a test_bool_array(uint64)void method call against the ImmutableArrayContract contract + */ + testBoolArray(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testBoolArray(params))) + return this + }, + /** + * Add a test_fixed_size_tuple_array()void method call against the ImmutableArrayContract contract + */ + testFixedSizeTupleArray(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testFixedSizeTupleArray(params))) + return this + }, + /** + * Add a test_fixed_size_named_tuple_array()void method call against the ImmutableArrayContract contract + */ + testFixedSizeNamedTupleArray(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testFixedSizeNamedTupleArray(params))) + return this + }, + /** + * Add a test_dynamic_sized_tuple_array()void method call against the ImmutableArrayContract contract + */ + testDynamicSizedTupleArray(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testDynamicSizedTupleArray(params))) + return this + }, + /** + * Add a test_dynamic_sized_named_tuple_array()void method call against the ImmutableArrayContract contract + */ + testDynamicSizedNamedTupleArray(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testDynamicSizedNamedTupleArray(params))) + return this + }, + /** + * Add a test_implicit_conversion_log(uint64[])void method call against the ImmutableArrayContract contract + */ + testImplicitConversionLog(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testImplicitConversionLog(params))) + return this + }, + /** + * Add a test_implicit_conversion_emit(uint64[])void method call against the ImmutableArrayContract contract + */ + testImplicitConversionEmit(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testImplicitConversionEmit(params))) + return this + }, + /** + * Add a test_nested_array(uint64,uint64[][])uint64[] method call against the ImmutableArrayContract contract + */ + testNestedArray(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testNestedArray(params))) + return this + }, + /** + * Add a test_bit_packed_tuples()void method call against the ImmutableArrayContract contract + */ + testBitPackedTuples(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testBitPackedTuples(params))) + return this + }, + /** + * Add a sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64) method call against the ImmutableArrayContract contract + */ + sumUintsAndLengthsAndTrues(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.sumUintsAndLengthsAndTrues(params))) + return this + }, + /** + * Add a test_uint64_return(uint64)uint64[] method call against the ImmutableArrayContract contract + */ + testUint64Return(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testUint64Return(params))) + return this + }, + /** + * Add a test_bool_return(uint64)bool[] method call against the ImmutableArrayContract contract + */ + testBoolReturn(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testBoolReturn(params))) + return this + }, + /** + * Add a test_tuple_return(uint64)(uint64,bool,bool)[] method call against the ImmutableArrayContract contract + */ + testTupleReturn(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testTupleReturn(params))) + return this + }, + /** + * Add a test_dynamic_tuple_return(uint64)(uint64,string)[] method call against the ImmutableArrayContract contract + */ + testDynamicTupleReturn(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testDynamicTupleReturn(params))) + return this + }, + /** + * Add a test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[] method call against the ImmutableArrayContract contract + */ + testConvertToArrayAndBack(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testConvertToArrayAndBack(params))) + return this + }, + /** + * Add a test_concat_with_arc4_tuple((uint64,uint64))uint64[] method call against the ImmutableArrayContract contract + */ + testConcatWithArc4Tuple(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testConcatWithArc4Tuple(params))) + return this + }, + /** + * Add a test_concat_with_native_tuple((uint64,uint64))uint64[] method call against the ImmutableArrayContract contract + */ + testConcatWithNativeTuple(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testConcatWithNativeTuple(params))) + return this + }, + /** + * Add a test_dynamic_concat_with_arc4_tuple((string,string))string[] method call against the ImmutableArrayContract contract + */ + testDynamicConcatWithArc4Tuple(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testDynamicConcatWithArc4Tuple(params))) + return this + }, + /** + * Add a test_dynamic_concat_with_native_tuple((string,string))string[] method call against the ImmutableArrayContract contract + */ + testDynamicConcatWithNativeTuple(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testDynamicConcatWithNativeTuple(params))) + return this + }, + /** + * Add a test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[] method call against the ImmutableArrayContract contract + */ + testConcatImmutableDynamic(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testConcatImmutableDynamic(params))) + return this + }, + /** + * Add a test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[] method call against the ImmutableArrayContract contract + */ + testImmutableArc4(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testImmutableArc4(params))) + return this + }, + /** + * Add a test_imm_fixed_arr()(uint64,uint64)[3] method call against the ImmutableArrayContract contract + */ + testImmFixedArr(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testImmFixedArr(params))) + return this + }, + /** + * Add a clear state call to the ImmutableArrayContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as ImmutableArrayContractComposer + } +} +export type ImmutableArrayContractComposer = { + /** + * Calls the test_uint64_array()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testUint64Array(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_uint64_array()void'] | undefined]> + + /** + * Calls the test_biguint_array()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testBiguintArray(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_biguint_array()void'] | undefined]> + + /** + * Calls the test_bool_array(uint64)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testBoolArray(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_bool_array(uint64)void'] | undefined]> + + /** + * Calls the test_fixed_size_tuple_array()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testFixedSizeTupleArray(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_fixed_size_tuple_array()void'] | undefined]> + + /** + * Calls the test_fixed_size_named_tuple_array()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testFixedSizeNamedTupleArray(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_fixed_size_named_tuple_array()void'] | undefined]> + + /** + * Calls the test_dynamic_sized_tuple_array()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testDynamicSizedTupleArray(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_dynamic_sized_tuple_array()void'] | undefined]> + + /** + * Calls the test_dynamic_sized_named_tuple_array()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testDynamicSizedNamedTupleArray(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_dynamic_sized_named_tuple_array()void'] | undefined]> + + /** + * Calls the test_implicit_conversion_log(uint64[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testImplicitConversionLog(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_implicit_conversion_log(uint64[])void'] | undefined]> + + /** + * Calls the test_implicit_conversion_emit(uint64[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testImplicitConversionEmit(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_implicit_conversion_emit(uint64[])void'] | undefined]> + + /** + * Calls the test_nested_array(uint64,uint64[][])uint64[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testNestedArray(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_nested_array(uint64,uint64[][])uint64[]'] | undefined]> + + /** + * Calls the test_bit_packed_tuples()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testBitPackedTuples(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_bit_packed_tuples()void'] | undefined]> + + /** + * Calls the sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + sumUintsAndLengthsAndTrues(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['sum_uints_and_lengths_and_trues(uint64[],bool[],(uint64,bool,bool)[],(uint64,string)[])(uint64,uint64,uint64,uint64)'] | undefined]> + + /** + * Calls the test_uint64_return(uint64)uint64[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testUint64Return(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_uint64_return(uint64)uint64[]'] | undefined]> + + /** + * Calls the test_bool_return(uint64)bool[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testBoolReturn(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_bool_return(uint64)bool[]'] | undefined]> + + /** + * Calls the test_tuple_return(uint64)(uint64,bool,bool)[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testTupleReturn(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_tuple_return(uint64)(uint64,bool,bool)[]'] | undefined]> + + /** + * Calls the test_dynamic_tuple_return(uint64)(uint64,string)[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testDynamicTupleReturn(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_dynamic_tuple_return(uint64)(uint64,string)[]'] | undefined]> + + /** + * Calls the test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testConvertToArrayAndBack(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_convert_to_array_and_back((uint64,bool,bool)[],uint64)(uint64,bool,bool)[]'] | undefined]> + + /** + * Calls the test_concat_with_arc4_tuple((uint64,uint64))uint64[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testConcatWithArc4Tuple(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_concat_with_arc4_tuple((uint64,uint64))uint64[]'] | undefined]> + + /** + * Calls the test_concat_with_native_tuple((uint64,uint64))uint64[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testConcatWithNativeTuple(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_concat_with_native_tuple((uint64,uint64))uint64[]'] | undefined]> + + /** + * Calls the test_dynamic_concat_with_arc4_tuple((string,string))string[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testDynamicConcatWithArc4Tuple(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_dynamic_concat_with_arc4_tuple((string,string))string[]'] | undefined]> + + /** + * Calls the test_dynamic_concat_with_native_tuple((string,string))string[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testDynamicConcatWithNativeTuple(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_dynamic_concat_with_native_tuple((string,string))string[]'] | undefined]> + + /** + * Calls the test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testConcatImmutableDynamic(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_concat_immutable_dynamic((uint64,string)[],(uint64,string)[])(uint64,string)[]'] | undefined]> + + /** + * Calls the test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testImmutableArc4(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_immutable_arc4((uint64,uint64)[])(uint64,uint64)[]'] | undefined]> + + /** + * Calls the test_imm_fixed_arr()(uint64,uint64)[3] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testImmFixedArr(params?: CallParams): ImmutableArrayContractComposer<[...TReturns, ImmutableArrayContractReturns['test_imm_fixed_arr()(uint64,uint64)[3]'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the ImmutableArrayContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): ImmutableArrayContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): ImmutableArrayContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type ImmutableArrayContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/ImmutableArrayInitContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/ImmutableArrayInitContract.ts new file mode 100644 index 0000000..358fea4 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/ImmutableArrayInitContract.ts @@ -0,0 +1,755 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"ImmutableArrayInitContract","structs":{},"methods":[{"name":"test_immutable_array_init","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_immutable_array_init_without_type_generic","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_reference_array_init","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_reference_array_init_without_type_generic","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[42],"errorMessage":"OnCompletion must be NoOp"},{"pc":[89],"errorMessage":"OnCompletion must be NoOp && can only call when creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayA4IDMgMSAwCiAgICBieXRlY2Jsb2NrIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0NzkKICAgIC8vIGNsYXNzIEltbXV0YWJsZUFycmF5SW5pdENvbnRyYWN0KGFyYzQuQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDExCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDg0MzRiYTJhIDB4NjNhYWJiYTAgMHhkYmFmMDM0ZSAweGE5ZDE0NTU0IC8vIG1ldGhvZCAidGVzdF9pbW11dGFibGVfYXJyYXlfaW5pdCgpdm9pZCIsIG1ldGhvZCAidGVzdF9pbW11dGFibGVfYXJyYXlfaW5pdF93aXRob3V0X3R5cGVfZ2VuZXJpYygpdm9pZCIsIG1ldGhvZCAidGVzdF9yZWZlcmVuY2VfYXJyYXlfaW5pdCgpdm9pZCIsIG1ldGhvZCAidGVzdF9yZWZlcmVuY2VfYXJyYXlfaW5pdF93aXRob3V0X3R5cGVfZ2VuZXJpYygpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHRlc3RfaW1tdXRhYmxlX2FycmF5X2luaXQgdGVzdF9pbW11dGFibGVfYXJyYXlfaW5pdF93aXRob3V0X3R5cGVfZ2VuZXJpYyB0ZXN0X3JlZmVyZW5jZV9hcnJheV9pbml0IHRlc3RfcmVmZXJlbmNlX2FycmF5X2luaXRfd2l0aG91dF90eXBlX2dlbmVyaWMKICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuIC8vIG9uIGVycm9yOiBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5SW5pdENvbnRyYWN0LnRlc3RfaW1tdXRhYmxlX2FycmF5X2luaXRbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2ltbXV0YWJsZV9hcnJheV9pbml0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDkwCiAgICAvLyBhMyA9IEltbXV0YWJsZUFycmF5W1VJbnQ2NF0oUmVmZXJlbmNlQXJyYXkoKFVJbnQ2NCgxKSwgVUludDY0KDIpLCBVSW50NjQoMykpKSkKICAgIGJ5dGVjXzAgLy8gMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDMKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5SW5pdENvbnRyYWN0LnRlc3RfaW1tdXRhYmxlX2FycmF5X2luaXRfd2l0aG91dF90eXBlX2dlbmVyaWNbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2ltbXV0YWJsZV9hcnJheV9pbml0X3dpdGhvdXRfdHlwZV9nZW5lcmljOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTEyCiAgICAvLyBhMyA9IEltbXV0YWJsZUFycmF5KFJlZmVyZW5jZUFycmF5KChVSW50NjQoMSksIFVJbnQ2NCgyKSwgVUludDY0KDMpKSkpCiAgICBieXRlY18wIC8vIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjUwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUluaXRDb250cmFjdC50ZXN0X3JlZmVyZW5jZV9hcnJheV9pbml0W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9yZWZlcmVuY2VfYXJyYXlfaW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjUyNgogICAgLy8gYTEgPSBSZWZlcmVuY2VBcnJheVtVSW50NjRdKChVSW50NjQoMSksIFVJbnQ2NCgyKSwgVUludDY0KDMpKSkKICAgIGJ5dGVjXzAgLy8gMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjUyOAogICAgLy8gYTIgPSBSZWZlcmVuY2VBcnJheVtVSW50NjRdKEZpeGVkQXJyYXkoKFVJbnQ2NCgxKSwgVUludDY0KDIpLCBVSW50NjQoMykpKSkKICAgIGR1cAogICAgcG9wCiAgICBkdXBuIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjUyOQogICAgLy8gYXNzZXJ0IGExLmxlbmd0aCA9PSBhMi5sZW5ndGgKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgIC8KICAgIGludGNfMSAvLyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1MzAKICAgIC8vIGFzc2VydCBhMVswXSA9PSBhMlswXQogICAgZHVwCiAgICBpbnRjXzMgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMiAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1MzEKICAgIC8vIGFzc2VydCBhMVsxXSA9PSBhMlsxXQogICAgZHVwCiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIHB1c2hpbnQgMiAvLyAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1MzIKICAgIC8vIGFzc2VydCBhMVsyXSA9PSBhMlsyXQogICAgcHVzaGludCAxNiAvLyAxNgogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMSAvLyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1MzQKICAgIC8vIGEzID0gUmVmZXJlbmNlQXJyYXlbVUludDY0XShJbW11dGFibGVBcnJheSgoVUludDY0KDEpLCBVSW50NjQoMiksIFVJbnQ2NCgzKSkpKQogICAgYnl0ZWNfMCAvLyAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMwogICAgcG9wCiAgICBkdXBuIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjUzNgogICAgLy8gYXNzZXJ0IGExWzBdID09IGEzWzBdCiAgICBpbnRjXzMgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMiAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1MzcKICAgIC8vIGFzc2VydCBhMVsxXSA9PSBhM1sxXQogICAgZHVwCiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIHB1c2hpbnQgMiAvLyAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1MzgKICAgIC8vIGFzc2VydCBhMVsyXSA9PSBhM1syXQogICAgcHVzaGludCAxNiAvLyAxNgogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMSAvLyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1MjYKICAgIC8vIGExID0gUmVmZXJlbmNlQXJyYXlbVUludDY0XSgoVUludDY0KDEpLCBVSW50NjQoMiksIFVJbnQ2NCgzKSkpCiAgICBieXRlY18wIC8vIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCiAgICBwb3AKICAgIGJ5dGVjXzAgLy8gMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDMKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTQxCiAgICAvLyBhc3NlcnQgYTEubGVuZ3RoID09IGE0Lmxlbmd0aAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICAvCiAgICBpbnRjXzEgLy8gMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTQyCiAgICAvLyBhc3NlcnQgYTFbMF0gPT0gYTRbMF0KICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzIgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTQzCiAgICAvLyBhc3NlcnQgYTFbMV0gPT0gYTRbMV0KICAgIGR1cAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTQ0CiAgICAvLyBhc3NlcnQgYTFbMl0gPT0gYTRbMl0KICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzEgLy8gMwogICAgPT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjUyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5SW5pdENvbnRyYWN0LnRlc3RfcmVmZXJlbmNlX2FycmF5X2luaXRfd2l0aG91dF90eXBlX2dlbmVyaWNbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X3JlZmVyZW5jZV9hcnJheV9pbml0X3dpdGhvdXRfdHlwZV9nZW5lcmljOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTQ4CiAgICAvLyBhMSA9IFJlZmVyZW5jZUFycmF5KChVSW50NjQoMSksIFVJbnQ2NCgyKSwgVUludDY0KDMpKSkKICAgIGJ5dGVjXzAgLy8gMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU1MAogICAgLy8gYTIgPSBSZWZlcmVuY2VBcnJheShGaXhlZEFycmF5KChVSW50NjQoMSksIFVJbnQ2NCgyKSwgVUludDY0KDMpKSkpCiAgICBkdXAKICAgIHBvcAogICAgZHVwbiAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NTEKICAgIC8vIGFzc2VydCBhMS5sZW5ndGggPT0gYTIubGVuZ3RoCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICAvCiAgICBpbnRjXzEgLy8gMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTUyCiAgICAvLyBhc3NlcnQgYTFbMF0gPT0gYTJbMF0KICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzIgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTUzCiAgICAvLyBhc3NlcnQgYTFbMV0gPT0gYTJbMV0KICAgIGR1cAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTU0CiAgICAvLyBhc3NlcnQgYTFbMl0gPT0gYTJbMl0KICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzEgLy8gMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTU2CiAgICAvLyBhMyA9IFJlZmVyZW5jZUFycmF5KEltbXV0YWJsZUFycmF5KChVSW50NjQoMSksIFVJbnQ2NCgyKSwgVUludDY0KDMpKSkpCiAgICBieXRlY18wIC8vIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCiAgICBwb3AKICAgIGR1cG4gMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTU4CiAgICAvLyBhc3NlcnQgYTFbMF0gPT0gYTNbMF0KICAgIGludGNfMyAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18yIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU1OQogICAgLy8gYXNzZXJ0IGExWzFdID09IGEzWzFdCiAgICBkdXAKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgcHVzaGludCAyIC8vIDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU2MAogICAgLy8gYXNzZXJ0IGExWzJdID09IGEzWzJdCiAgICBwdXNoaW50IDE2IC8vIDE2CiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18xIC8vIDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU0OAogICAgLy8gYTEgPSBSZWZlcmVuY2VBcnJheSgoVUludDY0KDEpLCBVSW50NjQoMiksIFVJbnQ2NCgzKSkpCiAgICBieXRlY18wIC8vIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCiAgICBwb3AKICAgIGJ5dGVjXzAgLy8gMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDMKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTYzCiAgICAvLyBhc3NlcnQgYTEubGVuZ3RoID09IGE0Lmxlbmd0aAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICAvCiAgICBpbnRjXzEgLy8gMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTY0CiAgICAvLyBhc3NlcnQgYTFbMF0gPT0gYTRbMF0KICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzIgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTY1CiAgICAvLyBhc3NlcnQgYTFbMV0gPT0gYTRbMV0KICAgIGR1cAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTY2CiAgICAvLyBhc3NlcnQgYTFbMl0gPT0gYTRbMl0KICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzEgLy8gMwogICAgPT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU0NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"},"byteCode":{"approval":"CiAECAMBACYBGAAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAzEbQQArMRkURDEYRIIEBIQ0uioEY6q7oATbrwNOBKnRRVQ2GgCOBAAJAA0AEQBjADEZFDEYFBBDKEgkQyhIJEMoSUhHAhUiCiMSREklWyQSREkiW4ECEkSBEFsjEkQoSEcCJVskEkRJIluBAhJEgRBbIxJEKEgoSEkVIgojEkRJJVskEkRJIluBAhJEgRBbIxJDKElIRwIVIgojEkRJJVskEkRJIluBAhJEgRBbIxJEKEhHAiVbJBJESSJbgQISRIEQWyMSRChIKEhJFSIKIxJESSVbJBJESSJbgQISRIEQWyMSQw==","clear":"CoEBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the ImmutableArrayInitContract contract + */ +export type ImmutableArrayInitContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'test_immutable_array_init()void': Record + 'test_immutable_array_init_without_type_generic()void': Record + 'test_reference_array_init()void': Record + 'test_reference_array_init_without_type_generic()void': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'test_immutable_array_init()void': [] + 'test_immutable_array_init_without_type_generic()void': [] + 'test_reference_array_init()void': [] + 'test_reference_array_init_without_type_generic()void': [] + } +} + +/** + * The return type for each method + */ +export type ImmutableArrayInitContractReturns = { + 'test_immutable_array_init()void': void + 'test_immutable_array_init_without_type_generic()void': void + 'test_reference_array_init()void': void + 'test_reference_array_init_without_type_generic()void': void +} + +/** + * Defines the types of available calls and state of the ImmutableArrayInitContract smart contract. + */ +export type ImmutableArrayInitContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'test_immutable_array_init()void' | 'test_immutable_array_init', { + argsObj: ImmutableArrayInitContractArgs['obj']['test_immutable_array_init()void'] + argsTuple: ImmutableArrayInitContractArgs['tuple']['test_immutable_array_init()void'] + returns: ImmutableArrayInitContractReturns['test_immutable_array_init()void'] + }> + & Record<'test_immutable_array_init_without_type_generic()void' | 'test_immutable_array_init_without_type_generic', { + argsObj: ImmutableArrayInitContractArgs['obj']['test_immutable_array_init_without_type_generic()void'] + argsTuple: ImmutableArrayInitContractArgs['tuple']['test_immutable_array_init_without_type_generic()void'] + returns: ImmutableArrayInitContractReturns['test_immutable_array_init_without_type_generic()void'] + }> + & Record<'test_reference_array_init()void' | 'test_reference_array_init', { + argsObj: ImmutableArrayInitContractArgs['obj']['test_reference_array_init()void'] + argsTuple: ImmutableArrayInitContractArgs['tuple']['test_reference_array_init()void'] + returns: ImmutableArrayInitContractReturns['test_reference_array_init()void'] + }> + & Record<'test_reference_array_init_without_type_generic()void' | 'test_reference_array_init_without_type_generic', { + argsObj: ImmutableArrayInitContractArgs['obj']['test_reference_array_init_without_type_generic()void'] + argsTuple: ImmutableArrayInitContractArgs['tuple']['test_reference_array_init_without_type_generic()void'] + returns: ImmutableArrayInitContractReturns['test_reference_array_init_without_type_generic()void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type ImmutableArrayInitContractSignatures = keyof ImmutableArrayInitContractTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the ImmutableArrayInitContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = ImmutableArrayInitContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the ImmutableArrayInitContract smart contract to the method's return type + */ +export type MethodReturn = ImmutableArrayInitContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type ImmutableArrayInitContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type ImmutableArrayInitContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: ImmutableArrayInitContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the ImmutableArrayInitContract smart contract + */ +export abstract class ImmutableArrayInitContractParamsFactory { + /** + * Constructs a no op call for the test_immutable_array_init()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testImmutableArrayInit(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_immutable_array_init()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_immutable_array_init_without_type_generic()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testImmutableArrayInitWithoutTypeGeneric(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_immutable_array_init_without_type_generic()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_reference_array_init()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testReferenceArrayInit(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_reference_array_init()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the test_reference_array_init_without_type_generic()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testReferenceArrayInitWithoutTypeGeneric(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_reference_array_init_without_type_generic()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } +} + +/** + * A factory to create and deploy one or more instance of the ImmutableArrayInitContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class ImmutableArrayInitContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `ImmutableArrayInitContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new ImmutableArrayInitContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new ImmutableArrayInitContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the ImmutableArrayInitContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: ImmutableArrayInitContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new ImmutableArrayInitContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ImmutableArrayInitContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ImmutableArrayInitContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the ImmutableArrayInitContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new ImmutableArrayInitContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the ImmutableArrayInitContract smart contract + */ +export class ImmutableArrayInitContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `ImmutableArrayInitContractClient` + * + * @param appClient An `AppClient` instance which has been created with the ImmutableArrayInitContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `ImmutableArrayInitContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `ImmutableArrayInitContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new ImmutableArrayInitContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `ImmutableArrayInitContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new ImmutableArrayInitContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the ImmutableArrayInitContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the ImmutableArrayInitContract smart contract using the `test_immutable_array_init()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testImmutableArrayInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ImmutableArrayInitContractParamsFactory.testImmutableArrayInit(params)) + }, + + /** + * Makes a call to the ImmutableArrayInitContract smart contract using the `test_immutable_array_init_without_type_generic()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testImmutableArrayInitWithoutTypeGeneric: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ImmutableArrayInitContractParamsFactory.testImmutableArrayInitWithoutTypeGeneric(params)) + }, + + /** + * Makes a call to the ImmutableArrayInitContract smart contract using the `test_reference_array_init()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testReferenceArrayInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ImmutableArrayInitContractParamsFactory.testReferenceArrayInit(params)) + }, + + /** + * Makes a call to the ImmutableArrayInitContract smart contract using the `test_reference_array_init_without_type_generic()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testReferenceArrayInitWithoutTypeGeneric: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(ImmutableArrayInitContractParamsFactory.testReferenceArrayInitWithoutTypeGeneric(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the ImmutableArrayInitContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the ImmutableArrayInitContract smart contract using the `test_immutable_array_init()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testImmutableArrayInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ImmutableArrayInitContractParamsFactory.testImmutableArrayInit(params)) + }, + + /** + * Makes a call to the ImmutableArrayInitContract smart contract using the `test_immutable_array_init_without_type_generic()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testImmutableArrayInitWithoutTypeGeneric: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ImmutableArrayInitContractParamsFactory.testImmutableArrayInitWithoutTypeGeneric(params)) + }, + + /** + * Makes a call to the ImmutableArrayInitContract smart contract using the `test_reference_array_init()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testReferenceArrayInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ImmutableArrayInitContractParamsFactory.testReferenceArrayInit(params)) + }, + + /** + * Makes a call to the ImmutableArrayInitContract smart contract using the `test_reference_array_init_without_type_generic()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testReferenceArrayInitWithoutTypeGeneric: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(ImmutableArrayInitContractParamsFactory.testReferenceArrayInitWithoutTypeGeneric(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the ImmutableArrayInitContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the ImmutableArrayInitContract smart contract using the `test_immutable_array_init()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testImmutableArrayInit: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ImmutableArrayInitContractParamsFactory.testImmutableArrayInit(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayInitContractReturns['test_immutable_array_init()void'])} + }, + + /** + * Makes a call to the ImmutableArrayInitContract smart contract using the `test_immutable_array_init_without_type_generic()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testImmutableArrayInitWithoutTypeGeneric: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ImmutableArrayInitContractParamsFactory.testImmutableArrayInitWithoutTypeGeneric(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayInitContractReturns['test_immutable_array_init_without_type_generic()void'])} + }, + + /** + * Makes a call to the ImmutableArrayInitContract smart contract using the `test_reference_array_init()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testReferenceArrayInit: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ImmutableArrayInitContractParamsFactory.testReferenceArrayInit(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayInitContractReturns['test_reference_array_init()void'])} + }, + + /** + * Makes a call to the ImmutableArrayInitContract smart contract using the `test_reference_array_init_without_type_generic()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testReferenceArrayInitWithoutTypeGeneric: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(ImmutableArrayInitContractParamsFactory.testReferenceArrayInitWithoutTypeGeneric(params)) + return {...result, return: result.return as unknown as (undefined | ImmutableArrayInitContractReturns['test_reference_array_init_without_type_generic()void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new ImmutableArrayInitContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current ImmutableArrayInitContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): ImmutableArrayInitContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a test_immutable_array_init()void method call against the ImmutableArrayInitContract contract + */ + testImmutableArrayInit(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testImmutableArrayInit(params))) + return this + }, + /** + * Add a test_immutable_array_init_without_type_generic()void method call against the ImmutableArrayInitContract contract + */ + testImmutableArrayInitWithoutTypeGeneric(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testImmutableArrayInitWithoutTypeGeneric(params))) + return this + }, + /** + * Add a test_reference_array_init()void method call against the ImmutableArrayInitContract contract + */ + testReferenceArrayInit(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testReferenceArrayInit(params))) + return this + }, + /** + * Add a test_reference_array_init_without_type_generic()void method call against the ImmutableArrayInitContract contract + */ + testReferenceArrayInitWithoutTypeGeneric(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testReferenceArrayInitWithoutTypeGeneric(params))) + return this + }, + /** + * Add a clear state call to the ImmutableArrayInitContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as ImmutableArrayInitContractComposer + } +} +export type ImmutableArrayInitContractComposer = { + /** + * Calls the test_immutable_array_init()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testImmutableArrayInit(params?: CallParams): ImmutableArrayInitContractComposer<[...TReturns, ImmutableArrayInitContractReturns['test_immutable_array_init()void'] | undefined]> + + /** + * Calls the test_immutable_array_init_without_type_generic()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testImmutableArrayInitWithoutTypeGeneric(params?: CallParams): ImmutableArrayInitContractComposer<[...TReturns, ImmutableArrayInitContractReturns['test_immutable_array_init_without_type_generic()void'] | undefined]> + + /** + * Calls the test_reference_array_init()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testReferenceArrayInit(params?: CallParams): ImmutableArrayInitContractComposer<[...TReturns, ImmutableArrayInitContractReturns['test_reference_array_init()void'] | undefined]> + + /** + * Calls the test_reference_array_init_without_type_generic()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testReferenceArrayInitWithoutTypeGeneric(params?: CallParams): ImmutableArrayInitContractComposer<[...TReturns, ImmutableArrayInitContractReturns['test_reference_array_init_without_type_generic()void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the ImmutableArrayInitContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): ImmutableArrayInitContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): ImmutableArrayInitContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type ImmutableArrayInitContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/LocalStateContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/LocalStateContract.ts new file mode 100644 index 0000000..767e777 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/LocalStateContract.ts @@ -0,0 +1,1746 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"LocalStateContract","structs":{},"methods":[{"name":"opt_in","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["OptIn"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_uint","args":[{"type":"address","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_string","args":[{"type":"address","name":"a"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_byte","args":[{"type":"address","name":"a"}],"returns":{"type":"byte"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_bool","args":[{"type":"address","name":"a"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_address","args":[{"type":"address","name":"a"}],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_uint128","args":[{"type":"address","name":"a"}],"returns":{"type":"uint128"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_arc4_dynamic_bytes","args":[{"type":"address","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_implicit_key_tuple","args":[{"type":"address","name":"a"}],"returns":{"type":"(uint64,byte[],bool)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_uint","args":[{"type":"address","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_string","args":[{"type":"address","name":"a"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_byte","args":[{"type":"address","name":"a"}],"returns":{"type":"byte"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_bool","args":[{"type":"address","name":"a"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_address","args":[{"type":"address","name":"a"}],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_uint128","args":[{"type":"address","name":"a"}],"returns":{"type":"uint128"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_arc4_dynamic_bytes","args":[{"type":"address","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":15}},"keys":{"global":{},"local":{"implicit_key_arc4_uint":{"keyType":"AVMString","valueType":"uint64","key":"aW1wbGljaXRfa2V5X2FyYzRfdWludA=="},"implicit_key_arc4_string":{"keyType":"AVMString","valueType":"string","key":"aW1wbGljaXRfa2V5X2FyYzRfc3RyaW5n"},"implicit_key_arc4_byte":{"keyType":"AVMString","valueType":"byte","key":"aW1wbGljaXRfa2V5X2FyYzRfYnl0ZQ=="},"implicit_key_arc4_bool":{"keyType":"AVMString","valueType":"bool","key":"aW1wbGljaXRfa2V5X2FyYzRfYm9vbA=="},"implicit_key_arc4_address":{"keyType":"AVMString","valueType":"address","key":"aW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcw=="},"implicit_key_arc4_uint128":{"keyType":"AVMString","valueType":"uint128","key":"aW1wbGljaXRfa2V5X2FyYzRfdWludDEyOA=="},"implicit_key_arc4_dynamic_bytes":{"keyType":"AVMString","valueType":"byte[]","key":"aW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcw=="},"implicit_key_tuple":{"keyType":"AVMString","valueType":"(uint64,byte[],bool)","key":"aW1wbGljaXRfa2V5X3R1cGxl"},"arc4_uint":{"keyType":"AVMString","valueType":"uint64","key":"ZXhwbGljaXRfa2V5X2FyYzRfdWludA=="},"arc4_string":{"keyType":"AVMString","valueType":"string","key":"ZXhwbGljaXRfa2V5X2FyYzRfc3RyaW5n"},"arc4_byte":{"keyType":"AVMString","valueType":"byte","key":"ZXhwbGljaXRfa2V5X2FyYzRfYnl0ZQ=="},"arc4_bool":{"keyType":"AVMString","valueType":"bool","key":"ZXhwbGljaXRfa2V5X2FyYzRfYm9vbA=="},"arc4_address":{"keyType":"AVMString","valueType":"address","key":"ZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcw=="},"arc4_uint128":{"keyType":"AVMString","valueType":"uint128","key":"ZXhwbGljaXRfa2V5X2FyYzRfdWludDEyOA=="},"arc4_dynamic_bytes":{"keyType":"AVMString","valueType":"byte[]","key":"ZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcw=="}},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[891],"errorMessage":"check self.arc4_address exists for account"},{"pc":[877],"errorMessage":"check self.arc4_bool exists for account"},{"pc":[863],"errorMessage":"check self.arc4_byte exists for account"},{"pc":[919],"errorMessage":"check self.arc4_dynamic_bytes exists for account"},{"pc":[849],"errorMessage":"check self.arc4_string exists for account"},{"pc":[835],"errorMessage":"check self.arc4_uint exists for account"},{"pc":[905],"errorMessage":"check self.arc4_uint128 exists for account"},{"pc":[779],"errorMessage":"check self.implicit_key_arc4_address exists for account"},{"pc":[765],"errorMessage":"check self.implicit_key_arc4_bool exists for account"},{"pc":[751],"errorMessage":"check self.implicit_key_arc4_byte exists for account"},{"pc":[807],"errorMessage":"check self.implicit_key_arc4_dynamic_bytes exists for account"},{"pc":[737],"errorMessage":"check self.implicit_key_arc4_string exists for account"},{"pc":[724],"errorMessage":"check self.implicit_key_arc4_uint exists for account"},{"pc":[793],"errorMessage":"check self.implicit_key_arc4_uint128 exists for account"},{"pc":[821],"errorMessage":"check self.implicit_key_tuple exists for account"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiaW1wbGljaXRfa2V5X2FyYzRfdWludCIgMHgwMDAwMDAwMDAwMDAwNTM5ICJpbXBsaWNpdF9rZXlfYXJjNF9zdHJpbmciIDB4MDAwNTQ4NjU2YzZjNmYgImltcGxpY2l0X2tleV9hcmM0X2J5dGUiICJpbXBsaWNpdF9rZXlfYXJjNF9ib29sIiAiaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIgImltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjgiIDB4MDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgImltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMiIDB4MDAwZDY0Nzk2ZTYxNmQ2OTYzMjA2Mjc5NzQ2NTczICJpbXBsaWNpdF9rZXlfdHVwbGUiICJleHBsaWNpdF9rZXlfYXJjNF91aW50IiAiZXhwbGljaXRfa2V5X2FyYzRfc3RyaW5nIiAiZXhwbGljaXRfa2V5X2FyYzRfYnl0ZSIgImV4cGxpY2l0X2tleV9hcmM0X2Jvb2wiICJleHBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzIiAiZXhwbGljaXRfa2V5X2FyYzRfdWludDEyOCIgImV4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjYzCiAgICAvLyBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDI2CiAgICBwdXNoYnl0ZXMgMHgzMGM2ZDU4YSAvLyBtZXRob2QgIm9wdF9pbigpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0X2luX3JvdXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjY2MwogICAgLy8gY2xhc3MgTG9jYWxTdGF0ZUNvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHhiM2NmYTM4OSAweGRiODU4MTc2IDB4NzgyNjc3NjIgMHg0MjYzNTFjOCAweDA3NWNhZTkxIDB4NTljMGI4MGIgMHgwZDZmYTY5MCAweDk3ZTEwZDljIDB4MmU0YThjNDkgMHhiMjJjZDIxZSAweGIzZjQ0NzAxIDB4ZWRkOTcyOTcgMHg2NzFkMzUzYyAweGEzZmQ2ZmRjIDB4Y2QyZTVkNjYgLy8gbWV0aG9kICJnZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludChhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cmluZyhhZGRyZXNzKXN0cmluZyIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUoYWRkcmVzcylieXRlIiwgbWV0aG9kICJnZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbChhZGRyZXNzKWJvb2wiLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKGFkZHJlc3MpYWRkcmVzcyIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjgoYWRkcmVzcyl1aW50MTI4IiwgbWV0aG9kICJnZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyhhZGRyZXNzKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV90dXBsZShhZGRyZXNzKSh1aW50NjQsYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJnZXRfYXJjNF91aW50KGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJnZXRfYXJjNF9zdHJpbmcoYWRkcmVzcylzdHJpbmciLCBtZXRob2QgImdldF9hcmM0X2J5dGUoYWRkcmVzcylieXRlIiwgbWV0aG9kICJnZXRfYXJjNF9ib29sKGFkZHJlc3MpYm9vbCIsIG1ldGhvZCAiZ2V0X2FyYzRfYWRkcmVzcyhhZGRyZXNzKWFkZHJlc3MiLCBtZXRob2QgImdldF9hcmM0X3VpbnQxMjgoYWRkcmVzcyl1aW50MTI4IiwgbWV0aG9kICJnZXRfYXJjNF9keW5hbWljX2J5dGVzKGFkZHJlc3MpYnl0ZVtdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnQgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cmluZyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZSBnZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbCBnZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludDEyOCBnZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyBnZXRfaW1wbGljaXRfa2V5X3R1cGxlIGdldF9hcmM0X3VpbnQgZ2V0X2FyYzRfc3RyaW5nIGdldF9hcmM0X2J5dGUgZ2V0X2FyYzRfYm9vbCBnZXRfYXJjNF9hZGRyZXNzIGdldF9hcmM0X3VpbnQxMjggZ2V0X2FyYzRfZHluYW1pY19ieXRlcwogICAgZXJyCgptYWluX29wdF9pbl9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjY4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJPcHRJbiJdKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE9wdEluCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQKICAgIGIgb3B0X2luCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDI2OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0Lm9wdF9pbltyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdF9pbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2ODgKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfdWludFtHbG9iYWwuY3JlYXRvcl9hZGRyZXNzXSA9IGFyYzQuVUludDY0KDEzMzcpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGJ5dGVjXzEgLy8gImltcGxpY2l0X2tleV9hcmM0X3VpbnQiCiAgICBieXRlY18yIC8vIDB4MDAwMDAwMDAwMDAwMDUzOQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjY4OQogICAgLy8gc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9zdHJpbmdbR2xvYmFsLmNyZWF0b3JfYWRkcmVzc10gPSBhcmM0LlN0cmluZygiSGVsbG8iKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICBieXRlY18zIC8vICJpbXBsaWNpdF9rZXlfYXJjNF9zdHJpbmciCiAgICBieXRlYyA0IC8vIDB4MDAwNTQ4NjU2YzZjNmYKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2OTAKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYnl0ZVtHbG9iYWwuY3JlYXRvcl9hZGRyZXNzXSA9IGFyYzQuQnl0ZSgwKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICBieXRlYyA1IC8vICJpbXBsaWNpdF9rZXlfYXJjNF9ieXRlIgogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2OTEKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYm9vbFtHbG9iYWwuY3JlYXRvcl9hZGRyZXNzXSA9IGFyYzQuQm9vbChUcnVlKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICBieXRlYyA2IC8vICJpbXBsaWNpdF9rZXlfYXJjNF9ib29sIgogICAgcHVzaGJ5dGVzIDB4ODAKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2OTIKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc1tHbG9iYWwuY3JlYXRvcl9hZGRyZXNzXSA9IGFyYzQuQWRkcmVzcygKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYnl0ZWMgNyAvLyAiaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2OTMKICAgIC8vIEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjY5Mi02OTQKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc1tHbG9iYWwuY3JlYXRvcl9hZGRyZXNzXSA9IGFyYzQuQWRkcmVzcygKICAgIC8vICAgICBHbG9iYWwuY3JlYXRvcl9hZGRyZXNzCiAgICAvLyApCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6Njk1CiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjhbR2xvYmFsLmNyZWF0b3JfYWRkcmVzc10gPSBhcmM0LlVJbnQxMjgoMioqMTAwKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICBieXRlYyA4IC8vICJpbXBsaWNpdF9rZXlfYXJjNF91aW50MTI4IgogICAgYnl0ZWMgOSAvLyAweDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6Njk2CiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXNbR2xvYmFsLmNyZWF0b3JfYWRkcmVzc10gPSBhcmM0LkR5bmFtaWNCeXRlcygKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYnl0ZWMgMTAgLy8gImltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6Njk2LTY5OAogICAgLy8gc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzW0dsb2JhbC5jcmVhdG9yX2FkZHJlc3NdID0gYXJjNC5EeW5hbWljQnl0ZXMoCiAgICAvLyAgICAgYiJkeW5hbWljIGJ5dGVzIgogICAgLy8gKQogICAgYnl0ZWMgMTEgLy8gMHgwMDBkNjQ3OTZlNjE2ZDY5NjMyMDYyNzk3NDY1NzMKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2OTkKICAgIC8vIHNlbGYuaW1wbGljaXRfa2V5X3R1cGxlW0dsb2JhbC5jcmVhdG9yX2FkZHJlc3NdID0gKFVJbnQ2NCgxMCksIEJ5dGVzKGIidGVzdCIpLCBGYWxzZSkKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYnl0ZWMgMTIgLy8gImltcGxpY2l0X2tleV90dXBsZSIKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMGEwMDBiMDAwMDA0NzQ2NTczNzQKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3MDEKICAgIC8vIHNlbGYuYXJjNF91aW50W0dsb2JhbC5jcmVhdG9yX2FkZHJlc3NdID0gYXJjNC5VSW50NjQoMTMzNykKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYnl0ZWMgMTMgLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnQiCiAgICBieXRlY18yIC8vIDB4MDAwMDAwMDAwMDAwMDUzOQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcwMgogICAgLy8gc2VsZi5hcmM0X3N0cmluZ1tHbG9iYWwuY3JlYXRvcl9hZGRyZXNzXSA9IGFyYzQuU3RyaW5nKCJIZWxsbyIpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGJ5dGVjIDE0IC8vICJleHBsaWNpdF9rZXlfYXJjNF9zdHJpbmciCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6Njg5CiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X3N0cmluZ1tHbG9iYWwuY3JlYXRvcl9hZGRyZXNzXSA9IGFyYzQuU3RyaW5nKCJIZWxsbyIpCiAgICBieXRlYyA0IC8vIDB4MDAwNTQ4NjU2YzZjNmYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3MDIKICAgIC8vIHNlbGYuYXJjNF9zdHJpbmdbR2xvYmFsLmNyZWF0b3JfYWRkcmVzc10gPSBhcmM0LlN0cmluZygiSGVsbG8iKQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcwMwogICAgLy8gc2VsZi5hcmM0X2J5dGVbR2xvYmFsLmNyZWF0b3JfYWRkcmVzc10gPSBhcmM0LkJ5dGUoMCkKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYnl0ZWMgMTUgLy8gImV4cGxpY2l0X2tleV9hcmM0X2J5dGUiCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcwNAogICAgLy8gc2VsZi5hcmM0X2Jvb2xbR2xvYmFsLmNyZWF0b3JfYWRkcmVzc10gPSBhcmM0LkJvb2woVHJ1ZSkKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYnl0ZWMgMTYgLy8gImV4cGxpY2l0X2tleV9hcmM0X2Jvb2wiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjkxCiAgICAvLyBzZWxmLmltcGxpY2l0X2tleV9hcmM0X2Jvb2xbR2xvYmFsLmNyZWF0b3JfYWRkcmVzc10gPSBhcmM0LkJvb2woVHJ1ZSkKICAgIHB1c2hieXRlcyAweDgwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzA0CiAgICAvLyBzZWxmLmFyYzRfYm9vbFtHbG9iYWwuY3JlYXRvcl9hZGRyZXNzXSA9IGFyYzQuQm9vbChUcnVlKQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcwNQogICAgLy8gc2VsZi5hcmM0X2FkZHJlc3NbR2xvYmFsLmNyZWF0b3JfYWRkcmVzc10gPSBhcmM0LkFkZHJlc3MoR2xvYmFsLmNyZWF0b3JfYWRkcmVzcykKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYnl0ZWMgMTcgLy8gImV4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MiCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3MDYKICAgIC8vIHNlbGYuYXJjNF91aW50MTI4W0dsb2JhbC5jcmVhdG9yX2FkZHJlc3NdID0gYXJjNC5VSW50MTI4KDIqKjEwMCkKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYnl0ZWMgMTggLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnQxMjgiCiAgICBieXRlYyA5IC8vIDB4MDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3MDcKICAgIC8vIHNlbGYuYXJjNF9keW5hbWljX2J5dGVzW0dsb2JhbC5jcmVhdG9yX2FkZHJlc3NdID0gYXJjNC5EeW5hbWljQnl0ZXMoYiJkeW5hbWljIGJ5dGVzIikKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYnl0ZWMgMTkgLy8gImV4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6Njk2LTY5OAogICAgLy8gc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzW0dsb2JhbC5jcmVhdG9yX2FkZHJlc3NdID0gYXJjNC5EeW5hbWljQnl0ZXMoCiAgICAvLyAgICAgYiJkeW5hbWljIGJ5dGVzIgogICAgLy8gKQogICAgYnl0ZWMgMTEgLy8gMHgwMDBkNjQ3OTZlNjE2ZDY5NjMyMDYyNzk3NDY1NzMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3MDcKICAgIC8vIHNlbGYuYXJjNF9keW5hbWljX2J5dGVzW0dsb2JhbC5jcmVhdG9yX2FkZHJlc3NdID0gYXJjNC5EeW5hbWljQnl0ZXMoYiJkeW5hbWljIGJ5dGVzIikKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2ODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiT3B0SW4iXSkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzA5LTcxMAogICAgLy8gIyBHZXR0ZXIgbWV0aG9kcyBmb3IgaW1wbGljaXQga2V5IHN0YXRlIHZhcmlhYmxlcwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3MTIKICAgIC8vIHJldHVybiBzZWxmLmltcGxpY2l0X2tleV9hcmM0X3VpbnRbYV0KICAgIGludGNfMSAvLyAwCiAgICBieXRlY18xIC8vICJpbXBsaWNpdF9rZXlfYXJjNF91aW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfdWludCBleGlzdHMgZm9yIGFjY291bnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3MDktNzEwCiAgICAvLyAjIEdldHRlciBtZXRob2RzIGZvciBpbXBsaWNpdCBrZXkgc3RhdGUgdmFyaWFibGVzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5Mb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cmluZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHJpbmc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcxNgogICAgLy8gcmV0dXJuIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfc3RyaW5nW2FdCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWNfMyAvLyAiaW1wbGljaXRfa2V5X2FyYzRfc3RyaW5nIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfc3RyaW5nIGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcxNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9ieXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcyMAogICAgLy8gcmV0dXJuIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYnl0ZVthXQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDUgLy8gImltcGxpY2l0X2tleV9hcmM0X2J5dGUiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9ieXRlIGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcyNAogICAgLy8gcmV0dXJuIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYm9vbFthXQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDYgLy8gImltcGxpY2l0X2tleV9hcmM0X2Jvb2wiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9ib29sIGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3M6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcyOAogICAgLy8gcmV0dXJuIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc1thXQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDcgLy8gImltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3MiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzIGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50MTI4W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjczMgogICAgLy8gcmV0dXJuIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfdWludDEyOFthXQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDggLy8gImltcGxpY2l0X2tleV9hcmM0X3VpbnQxMjgiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbXBsaWNpdF9rZXlfYXJjNF91aW50MTI4IGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjczMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjczNgogICAgLy8gcmV0dXJuIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlc1thXQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDEwIC8vICJpbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyBleGlzdHMgZm9yIGFjY291bnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3MzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LkxvY2FsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X3R1cGxlW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2ltcGxpY2l0X2tleV90dXBsZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3MzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzQwCiAgICAvLyByZXR1cm4gc2VsZi5pbXBsaWNpdF9rZXlfdHVwbGVbYV0KICAgIGludGNfMSAvLyAwCiAgICBieXRlYyAxMiAvLyAiaW1wbGljaXRfa2V5X3R1cGxlIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW1wbGljaXRfa2V5X3R1cGxlIGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjczOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X3VpbnRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXJjNF91aW50OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc0Mi03NDMKICAgIC8vICMgR2V0dGVyIG1ldGhvZHMgZm9yIGV4cGxpY2l0IGtleSBzdGF0ZSB2YXJpYWJsZXMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzQ1CiAgICAvLyByZXR1cm4gc2VsZi5hcmM0X3VpbnRbYV0KICAgIGludGNfMSAvLyAwCiAgICBieXRlYyAxMyAvLyAiZXhwbGljaXRfa2V5X2FyYzRfdWludCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFyYzRfdWludCBleGlzdHMgZm9yIGFjY291bnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3NDItNzQzCiAgICAvLyAjIEdldHRlciBtZXRob2RzIGZvciBleHBsaWNpdCBrZXkgc3RhdGUgdmFyaWFibGVzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5Mb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfc3RyaW5nW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2FyYzRfc3RyaW5nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3NDkKICAgIC8vIHJldHVybiBzZWxmLmFyYzRfc3RyaW5nW2FdCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgMTQgLy8gImV4cGxpY2l0X2tleV9hcmM0X3N0cmluZyIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFyYzRfc3RyaW5nIGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X2J5dGVbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXJjNF9ieXRlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3NTMKICAgIC8vIHJldHVybiBzZWxmLmFyYzRfYnl0ZVthXQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDE1IC8vICJleHBsaWNpdF9rZXlfYXJjNF9ieXRlIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJjNF9ieXRlIGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X2Jvb2xbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXJjNF9ib29sOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3NTcKICAgIC8vIHJldHVybiBzZWxmLmFyYzRfYm9vbFthXQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDE2IC8vICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJjNF9ib29sIGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X2FkZHJlc3Nbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXJjNF9hZGRyZXNzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3NjEKICAgIC8vIHJldHVybiBzZWxmLmFyYzRfYWRkcmVzc1thXQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDE3IC8vICJleHBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJjNF9hZGRyZXNzIGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X3VpbnQxMjhbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXJjNF91aW50MTI4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3NjUKICAgIC8vIHJldHVybiBzZWxmLmFyYzRfdWludDEyOFthXQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDE4IC8vICJleHBsaWNpdF9rZXlfYXJjNF91aW50MTI4IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJjNF91aW50MTI4IGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuTG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X2R5bmFtaWNfYnl0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXJjNF9keW5hbWljX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3NjkKICAgIC8vIHJldHVybiBzZWxmLmFyYzRfZHluYW1pY19ieXRlc1thXQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDE5IC8vICJleHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJjNF9keW5hbWljX2J5dGVzIGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyACAQAmFAQVH3x1FmltcGxpY2l0X2tleV9hcmM0X3VpbnQIAAAAAAAABTkYaW1wbGljaXRfa2V5X2FyYzRfc3RyaW5nBwAFSGVsbG8WaW1wbGljaXRfa2V5X2FyYzRfYnl0ZRZpbXBsaWNpdF9rZXlfYXJjNF9ib29sGWltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3MZaW1wbGljaXRfa2V5X2FyYzRfdWludDEyOBAAAAAQAAAAAAAAAAAAAAAAH2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMPAA1keW5hbWljIGJ5dGVzEmltcGxpY2l0X2tleV90dXBsZRZleHBsaWNpdF9rZXlfYXJjNF91aW50GGV4cGxpY2l0X2tleV9hcmM0X3N0cmluZxZleHBsaWNpdF9rZXlfYXJjNF9ieXRlFmV4cGxpY2l0X2tleV9hcmM0X2Jvb2wZZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcxlleHBsaWNpdF9rZXlfYXJjNF91aW50MTI4H2V4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMxG0EAkIAEMMbVijYaAI4BAHgxGRREMRhEgg8Es8+jiQTbhYF2BHgmd2IEQmNRyAQHXK6RBFnAuAsEDW+mkASX4Q2cBC5KjEkEsizSHgSz9EcBBO3ZcpcEZx01PASj/W/cBM0uXWY2GgCODwCQAJ0AqgC4AMYA1ADiAPAA/gEMARoBKAE2AUQBUgAxGSISMRgQREIACDEZFDEYFBBDMgkpKmYyCSsnBGYyCScFgAEAZjIJJwaAAYBmMgknBzIJZjIJJwgnCWYyCScKJwtmMgknDIARAAAAAAAAAAoACwAABHRlc3RmMgknDSpmMgknDicEZjIJJw+AAQBmMgknEIABgGYyCScRMglmMgknEicJZjIJJxMnC2YiQzYaASMpY0QoTFCwIkM2GgEjK2NEKExQsCJDNhoBIycFY0QoTFCwIkM2GgEjJwZjRChMULAiQzYaASMnB2NEKExQsCJDNhoBIycIY0QoTFCwIkM2GgEjJwpjRChMULAiQzYaASMnDGNEKExQsCJDNhoBIycNY0QoTFCwIkM2GgEjJw5jRChMULAiQzYaASMnD2NEKExQsCJDNhoBIycQY0QoTFCwIkM2GgEjJxFjRChMULAiQzYaASMnEmNEKExQsCJDNhoBIycTY0QoTFCwIkM=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the LocalStateContract contract + */ +export type LocalStateContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'opt_in()void': Record + 'get_implicit_key_arc4_uint(address)uint64': { + a: string + } + 'get_implicit_key_arc4_string(address)string': { + a: string + } + 'get_implicit_key_arc4_byte(address)byte': { + a: string + } + 'get_implicit_key_arc4_bool(address)bool': { + a: string + } + 'get_implicit_key_arc4_address(address)address': { + a: string + } + 'get_implicit_key_arc4_uint128(address)uint128': { + a: string + } + 'get_implicit_key_arc4_dynamic_bytes(address)byte[]': { + a: string + } + 'get_implicit_key_tuple(address)(uint64,byte[],bool)': { + a: string + } + 'get_arc4_uint(address)uint64': { + a: string + } + 'get_arc4_string(address)string': { + a: string + } + 'get_arc4_byte(address)byte': { + a: string + } + 'get_arc4_bool(address)bool': { + a: string + } + 'get_arc4_address(address)address': { + a: string + } + 'get_arc4_uint128(address)uint128': { + a: string + } + 'get_arc4_dynamic_bytes(address)byte[]': { + a: string + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'opt_in()void': [] + 'get_implicit_key_arc4_uint(address)uint64': [a: string] + 'get_implicit_key_arc4_string(address)string': [a: string] + 'get_implicit_key_arc4_byte(address)byte': [a: string] + 'get_implicit_key_arc4_bool(address)bool': [a: string] + 'get_implicit_key_arc4_address(address)address': [a: string] + 'get_implicit_key_arc4_uint128(address)uint128': [a: string] + 'get_implicit_key_arc4_dynamic_bytes(address)byte[]': [a: string] + 'get_implicit_key_tuple(address)(uint64,byte[],bool)': [a: string] + 'get_arc4_uint(address)uint64': [a: string] + 'get_arc4_string(address)string': [a: string] + 'get_arc4_byte(address)byte': [a: string] + 'get_arc4_bool(address)bool': [a: string] + 'get_arc4_address(address)address': [a: string] + 'get_arc4_uint128(address)uint128': [a: string] + 'get_arc4_dynamic_bytes(address)byte[]': [a: string] + } +} + +/** + * The return type for each method + */ +export type LocalStateContractReturns = { + 'opt_in()void': void + 'get_implicit_key_arc4_uint(address)uint64': bigint + 'get_implicit_key_arc4_string(address)string': string + 'get_implicit_key_arc4_byte(address)byte': number + 'get_implicit_key_arc4_bool(address)bool': boolean + 'get_implicit_key_arc4_address(address)address': string + 'get_implicit_key_arc4_uint128(address)uint128': bigint + 'get_implicit_key_arc4_dynamic_bytes(address)byte[]': Uint8Array + 'get_implicit_key_tuple(address)(uint64,byte[],bool)': [bigint, Uint8Array, boolean] + 'get_arc4_uint(address)uint64': bigint + 'get_arc4_string(address)string': string + 'get_arc4_byte(address)byte': number + 'get_arc4_bool(address)bool': boolean + 'get_arc4_address(address)address': string + 'get_arc4_uint128(address)uint128': bigint + 'get_arc4_dynamic_bytes(address)byte[]': Uint8Array +} + +/** + * Defines the types of available calls and state of the LocalStateContract smart contract. + */ +export type LocalStateContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'opt_in()void' | 'opt_in', { + argsObj: LocalStateContractArgs['obj']['opt_in()void'] + argsTuple: LocalStateContractArgs['tuple']['opt_in()void'] + returns: LocalStateContractReturns['opt_in()void'] + }> + & Record<'get_implicit_key_arc4_uint(address)uint64' | 'get_implicit_key_arc4_uint', { + argsObj: LocalStateContractArgs['obj']['get_implicit_key_arc4_uint(address)uint64'] + argsTuple: LocalStateContractArgs['tuple']['get_implicit_key_arc4_uint(address)uint64'] + returns: LocalStateContractReturns['get_implicit_key_arc4_uint(address)uint64'] + }> + & Record<'get_implicit_key_arc4_string(address)string' | 'get_implicit_key_arc4_string', { + argsObj: LocalStateContractArgs['obj']['get_implicit_key_arc4_string(address)string'] + argsTuple: LocalStateContractArgs['tuple']['get_implicit_key_arc4_string(address)string'] + returns: LocalStateContractReturns['get_implicit_key_arc4_string(address)string'] + }> + & Record<'get_implicit_key_arc4_byte(address)byte' | 'get_implicit_key_arc4_byte', { + argsObj: LocalStateContractArgs['obj']['get_implicit_key_arc4_byte(address)byte'] + argsTuple: LocalStateContractArgs['tuple']['get_implicit_key_arc4_byte(address)byte'] + returns: LocalStateContractReturns['get_implicit_key_arc4_byte(address)byte'] + }> + & Record<'get_implicit_key_arc4_bool(address)bool' | 'get_implicit_key_arc4_bool', { + argsObj: LocalStateContractArgs['obj']['get_implicit_key_arc4_bool(address)bool'] + argsTuple: LocalStateContractArgs['tuple']['get_implicit_key_arc4_bool(address)bool'] + returns: LocalStateContractReturns['get_implicit_key_arc4_bool(address)bool'] + }> + & Record<'get_implicit_key_arc4_address(address)address' | 'get_implicit_key_arc4_address', { + argsObj: LocalStateContractArgs['obj']['get_implicit_key_arc4_address(address)address'] + argsTuple: LocalStateContractArgs['tuple']['get_implicit_key_arc4_address(address)address'] + returns: LocalStateContractReturns['get_implicit_key_arc4_address(address)address'] + }> + & Record<'get_implicit_key_arc4_uint128(address)uint128' | 'get_implicit_key_arc4_uint128', { + argsObj: LocalStateContractArgs['obj']['get_implicit_key_arc4_uint128(address)uint128'] + argsTuple: LocalStateContractArgs['tuple']['get_implicit_key_arc4_uint128(address)uint128'] + returns: LocalStateContractReturns['get_implicit_key_arc4_uint128(address)uint128'] + }> + & Record<'get_implicit_key_arc4_dynamic_bytes(address)byte[]' | 'get_implicit_key_arc4_dynamic_bytes', { + argsObj: LocalStateContractArgs['obj']['get_implicit_key_arc4_dynamic_bytes(address)byte[]'] + argsTuple: LocalStateContractArgs['tuple']['get_implicit_key_arc4_dynamic_bytes(address)byte[]'] + returns: LocalStateContractReturns['get_implicit_key_arc4_dynamic_bytes(address)byte[]'] + }> + & Record<'get_implicit_key_tuple(address)(uint64,byte[],bool)' | 'get_implicit_key_tuple', { + argsObj: LocalStateContractArgs['obj']['get_implicit_key_tuple(address)(uint64,byte[],bool)'] + argsTuple: LocalStateContractArgs['tuple']['get_implicit_key_tuple(address)(uint64,byte[],bool)'] + returns: LocalStateContractReturns['get_implicit_key_tuple(address)(uint64,byte[],bool)'] + }> + & Record<'get_arc4_uint(address)uint64' | 'get_arc4_uint', { + argsObj: LocalStateContractArgs['obj']['get_arc4_uint(address)uint64'] + argsTuple: LocalStateContractArgs['tuple']['get_arc4_uint(address)uint64'] + returns: LocalStateContractReturns['get_arc4_uint(address)uint64'] + }> + & Record<'get_arc4_string(address)string' | 'get_arc4_string', { + argsObj: LocalStateContractArgs['obj']['get_arc4_string(address)string'] + argsTuple: LocalStateContractArgs['tuple']['get_arc4_string(address)string'] + returns: LocalStateContractReturns['get_arc4_string(address)string'] + }> + & Record<'get_arc4_byte(address)byte' | 'get_arc4_byte', { + argsObj: LocalStateContractArgs['obj']['get_arc4_byte(address)byte'] + argsTuple: LocalStateContractArgs['tuple']['get_arc4_byte(address)byte'] + returns: LocalStateContractReturns['get_arc4_byte(address)byte'] + }> + & Record<'get_arc4_bool(address)bool' | 'get_arc4_bool', { + argsObj: LocalStateContractArgs['obj']['get_arc4_bool(address)bool'] + argsTuple: LocalStateContractArgs['tuple']['get_arc4_bool(address)bool'] + returns: LocalStateContractReturns['get_arc4_bool(address)bool'] + }> + & Record<'get_arc4_address(address)address' | 'get_arc4_address', { + argsObj: LocalStateContractArgs['obj']['get_arc4_address(address)address'] + argsTuple: LocalStateContractArgs['tuple']['get_arc4_address(address)address'] + returns: LocalStateContractReturns['get_arc4_address(address)address'] + }> + & Record<'get_arc4_uint128(address)uint128' | 'get_arc4_uint128', { + argsObj: LocalStateContractArgs['obj']['get_arc4_uint128(address)uint128'] + argsTuple: LocalStateContractArgs['tuple']['get_arc4_uint128(address)uint128'] + returns: LocalStateContractReturns['get_arc4_uint128(address)uint128'] + }> + & Record<'get_arc4_dynamic_bytes(address)byte[]' | 'get_arc4_dynamic_bytes', { + argsObj: LocalStateContractArgs['obj']['get_arc4_dynamic_bytes(address)byte[]'] + argsTuple: LocalStateContractArgs['tuple']['get_arc4_dynamic_bytes(address)byte[]'] + returns: LocalStateContractReturns['get_arc4_dynamic_bytes(address)byte[]'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + local: { + keys: { + implicitKeyArc4Uint: bigint + implicitKeyArc4String: string + implicitKeyArc4Byte: number + implicitKeyArc4Bool: boolean + implicitKeyArc4Address: string + implicitKeyArc4Uint128: bigint + implicitKeyArc4DynamicBytes: Uint8Array + implicitKeyTuple: [bigint, Uint8Array, boolean] + arc4Uint: bigint + arc4String: string + arc4Byte: number + arc4Bool: boolean + arc4Address: string + arc4Uint128: bigint + arc4DynamicBytes: Uint8Array + } + maps: {} + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type LocalStateContractSignatures = keyof LocalStateContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type LocalStateContractNonVoidMethodSignatures = keyof LocalStateContractTypes['methods'] extends infer T ? T extends keyof LocalStateContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the LocalStateContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = LocalStateContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the LocalStateContract smart contract to the method's return type + */ +export type MethodReturn = LocalStateContractTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed local state of the application. + */ +export type LocalKeysState = LocalStateContractTypes['state']['local']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type LocalStateContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type LocalStateContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: LocalStateContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the LocalStateContract smart contract + */ +export abstract class LocalStateContractParamsFactory { + /** + * Gets available optIn ABI call param factories + */ + static get optIn() { + return { + /** + * Constructs opt-in ABI call params for the LocalStateContract smart contract using the opt_in()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + optIn(params: CallParams): AppClientMethodCallParams { + return { + ...params, + method: 'opt_in()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + }, + } + } + + /** + * Constructs a no op call for the get_implicit_key_arc4_uint(address)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4Uint(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_uint(address)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_implicit_key_arc4_string(address)string ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4String(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_string(address)string' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_implicit_key_arc4_byte(address)byte ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4Byte(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_byte(address)byte' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_implicit_key_arc4_bool(address)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4Bool(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_bool(address)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_implicit_key_arc4_address(address)address ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4Address(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_address(address)address' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_implicit_key_arc4_uint128(address)uint128 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4Uint128(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_uint128(address)uint128' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_implicit_key_arc4_dynamic_bytes(address)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyArc4DynamicBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_arc4_dynamic_bytes(address)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_implicit_key_tuple(address)(uint64,byte[],bool) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getImplicitKeyTuple(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_implicit_key_tuple(address)(uint64,byte[],bool)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_arc4_uint(address)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4Uint(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_uint(address)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_arc4_string(address)string ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4String(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_string(address)string' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_arc4_byte(address)byte ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4Byte(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_byte(address)byte' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_arc4_bool(address)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4Bool(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_bool(address)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_arc4_address(address)address ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4Address(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_address(address)address' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_arc4_uint128(address)uint128 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4Uint128(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_uint128(address)uint128' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the get_arc4_dynamic_bytes(address)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getArc4DynamicBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_arc4_dynamic_bytes(address)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } +} + +/** + * A factory to create and deploy one or more instance of the LocalStateContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class LocalStateContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `LocalStateContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new LocalStateContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new LocalStateContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the LocalStateContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: LocalStateContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new LocalStateContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the LocalStateContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the LocalStateContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the LocalStateContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new LocalStateContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the LocalStateContract smart contract + */ +export class LocalStateContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `LocalStateContractClient` + * + * @param appClient An `AppClient` instance which has been created with the LocalStateContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `LocalStateContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `LocalStateContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new LocalStateContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `LocalStateContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new LocalStateContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available optIn methods + */ + optIn: { + /** + * Opts the user into an existing instance of the LocalStateContract smart contract using the `opt_in()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The optIn params + */ + optIn: (params: CallParams & { onComplete?: OnApplicationComplete.OptIn } = {args: []}) => { + return this.appClient.params.optIn(LocalStateContractParamsFactory.optIn.optIn(params)) + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the LocalStateContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_uint(address)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4Uint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getImplicitKeyArc4Uint(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_string(address)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4String: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getImplicitKeyArc4String(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_byte(address)byte` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4Byte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getImplicitKeyArc4Byte(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_bool(address)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getImplicitKeyArc4Bool(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_address(address)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4Address: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getImplicitKeyArc4Address(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_uint128(address)uint128` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4Uint128: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getImplicitKeyArc4Uint128(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_dynamic_bytes(address)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyArc4DynamicBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getImplicitKeyArc4DynamicBytes(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_tuple(address)(uint64,byte[],bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getImplicitKeyTuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getImplicitKeyTuple(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_uint(address)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4Uint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getArc4Uint(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_string(address)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4String: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getArc4String(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_byte(address)byte` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4Byte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getArc4Byte(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_bool(address)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getArc4Bool(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_address(address)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4Address: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getArc4Address(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_uint128(address)uint128` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4Uint128: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getArc4Uint128(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_dynamic_bytes(address)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getArc4DynamicBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(LocalStateContractParamsFactory.getArc4DynamicBytes(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available optIn methods + */ + optIn: { + /** + * Opts the user into an existing instance of the LocalStateContract smart contract using the `opt_in()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The optIn transaction + */ + optIn: (params: CallParams & { onComplete?: OnApplicationComplete.OptIn } = {args: []}) => { + return this.appClient.createTransaction.optIn(LocalStateContractParamsFactory.optIn.optIn(params)) + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the LocalStateContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_uint(address)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4Uint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getImplicitKeyArc4Uint(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_string(address)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4String: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getImplicitKeyArc4String(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_byte(address)byte` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4Byte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getImplicitKeyArc4Byte(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_bool(address)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getImplicitKeyArc4Bool(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_address(address)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4Address: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getImplicitKeyArc4Address(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_uint128(address)uint128` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4Uint128: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getImplicitKeyArc4Uint128(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_dynamic_bytes(address)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyArc4DynamicBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getImplicitKeyArc4DynamicBytes(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_tuple(address)(uint64,byte[],bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getImplicitKeyTuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getImplicitKeyTuple(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_uint(address)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4Uint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getArc4Uint(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_string(address)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4String: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getArc4String(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_byte(address)byte` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4Byte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getArc4Byte(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_bool(address)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getArc4Bool(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_address(address)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4Address: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getArc4Address(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_uint128(address)uint128` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4Uint128: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getArc4Uint128(params)) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_dynamic_bytes(address)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getArc4DynamicBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(LocalStateContractParamsFactory.getArc4DynamicBytes(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available optIn methods + */ + optIn: { + /** + * Opts the user into an existing instance of the LocalStateContract smart contract using the `opt_in()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The optIn result + */ + optIn: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.OptIn } = {args: []}) => { + const result = await this.appClient.send.optIn(LocalStateContractParamsFactory.optIn.optIn(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['opt_in()void'])} + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the LocalStateContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_uint(address)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4Uint: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getImplicitKeyArc4Uint(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_implicit_key_arc4_uint(address)uint64'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_string(address)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4String: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getImplicitKeyArc4String(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_implicit_key_arc4_string(address)string'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_byte(address)byte` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4Byte: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getImplicitKeyArc4Byte(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_implicit_key_arc4_byte(address)byte'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_bool(address)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4Bool: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getImplicitKeyArc4Bool(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_implicit_key_arc4_bool(address)bool'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_address(address)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4Address: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getImplicitKeyArc4Address(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_implicit_key_arc4_address(address)address'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_uint128(address)uint128` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4Uint128: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getImplicitKeyArc4Uint128(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_implicit_key_arc4_uint128(address)uint128'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_arc4_dynamic_bytes(address)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyArc4DynamicBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getImplicitKeyArc4DynamicBytes(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_implicit_key_arc4_dynamic_bytes(address)byte[]'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_implicit_key_tuple(address)(uint64,byte[],bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getImplicitKeyTuple: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getImplicitKeyTuple(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_implicit_key_tuple(address)(uint64,byte[],bool)'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_uint(address)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4Uint: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getArc4Uint(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_arc4_uint(address)uint64'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_string(address)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4String: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getArc4String(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_arc4_string(address)string'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_byte(address)byte` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4Byte: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getArc4Byte(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_arc4_byte(address)byte'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_bool(address)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4Bool: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getArc4Bool(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_arc4_bool(address)bool'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_address(address)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4Address: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getArc4Address(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_arc4_address(address)address'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_uint128(address)uint128` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4Uint128: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getArc4Uint128(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_arc4_uint128(address)uint128'])} + }, + + /** + * Makes a call to the LocalStateContract smart contract using the `get_arc4_dynamic_bytes(address)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getArc4DynamicBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(LocalStateContractParamsFactory.getArc4DynamicBytes(params)) + return {...result, return: result.return as unknown as (undefined | LocalStateContractReturns['get_arc4_dynamic_bytes(address)byte[]'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new LocalStateContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current LocalStateContract app + */ + state = { + /** + * Methods to access local state for the current LocalStateContract app + */ + local: (address: string | Address) => { + const encodedAddress = typeof address === 'string' ? address : encodeAddress(address.publicKey) + return { + /** + * Get all current keyed values from local state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.local(encodedAddress).getAll() + return { + implicitKeyArc4Uint: result.implicit_key_arc4_uint, + implicitKeyArc4String: result.implicit_key_arc4_string, + implicitKeyArc4Byte: result.implicit_key_arc4_byte, + implicitKeyArc4Bool: result.implicit_key_arc4_bool, + implicitKeyArc4Address: result.implicit_key_arc4_address, + implicitKeyArc4Uint128: result.implicit_key_arc4_uint128, + implicitKeyArc4DynamicBytes: result.implicit_key_arc4_dynamic_bytes, + implicitKeyTuple: result.implicit_key_tuple, + arc4Uint: result.arc4_uint, + arc4String: result.arc4_string, + arc4Byte: result.arc4_byte, + arc4Bool: result.arc4_bool, + arc4Address: result.arc4_address, + arc4Uint128: result.arc4_uint128, + arc4DynamicBytes: result.arc4_dynamic_bytes, + } + }, + /** + * Get the current value of the implicit_key_arc4_uint key in local state + */ + implicitKeyArc4Uint: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("implicit_key_arc4_uint")) as bigint | undefined }, + /** + * Get the current value of the implicit_key_arc4_string key in local state + */ + implicitKeyArc4String: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("implicit_key_arc4_string")) as string | undefined }, + /** + * Get the current value of the implicit_key_arc4_byte key in local state + */ + implicitKeyArc4Byte: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("implicit_key_arc4_byte")) as number | undefined }, + /** + * Get the current value of the implicit_key_arc4_bool key in local state + */ + implicitKeyArc4Bool: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("implicit_key_arc4_bool")) as boolean | undefined }, + /** + * Get the current value of the implicit_key_arc4_address key in local state + */ + implicitKeyArc4Address: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("implicit_key_arc4_address")) as string | undefined }, + /** + * Get the current value of the implicit_key_arc4_uint128 key in local state + */ + implicitKeyArc4Uint128: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("implicit_key_arc4_uint128")) as bigint | undefined }, + /** + * Get the current value of the implicit_key_arc4_dynamic_bytes key in local state + */ + implicitKeyArc4DynamicBytes: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("implicit_key_arc4_dynamic_bytes")) as Uint8Array | undefined }, + /** + * Get the current value of the implicit_key_tuple key in local state + */ + implicitKeyTuple: async (): Promise<[bigint, Uint8Array, boolean] | undefined> => { return (await this.appClient.state.local(encodedAddress).getValue("implicit_key_tuple")) as [bigint, Uint8Array, boolean] | undefined }, + /** + * Get the current value of the arc4_uint key in local state + */ + arc4Uint: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("arc4_uint")) as bigint | undefined }, + /** + * Get the current value of the arc4_string key in local state + */ + arc4String: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("arc4_string")) as string | undefined }, + /** + * Get the current value of the arc4_byte key in local state + */ + arc4Byte: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("arc4_byte")) as number | undefined }, + /** + * Get the current value of the arc4_bool key in local state + */ + arc4Bool: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("arc4_bool")) as boolean | undefined }, + /** + * Get the current value of the arc4_address key in local state + */ + arc4Address: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("arc4_address")) as string | undefined }, + /** + * Get the current value of the arc4_uint128 key in local state + */ + arc4Uint128: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("arc4_uint128")) as bigint | undefined }, + /** + * Get the current value of the arc4_dynamic_bytes key in local state + */ + arc4DynamicBytes: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("arc4_dynamic_bytes")) as Uint8Array | undefined }, + } + }, + } + + public newGroup(composerConfig?: TransactionComposerConfig): LocalStateContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a get_implicit_key_arc4_uint(address)uint64 method call against the LocalStateContract contract + */ + getImplicitKeyArc4Uint(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4Uint(params))) + return this + }, + /** + * Add a get_implicit_key_arc4_string(address)string method call against the LocalStateContract contract + */ + getImplicitKeyArc4String(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4String(params))) + return this + }, + /** + * Add a get_implicit_key_arc4_byte(address)byte method call against the LocalStateContract contract + */ + getImplicitKeyArc4Byte(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4Byte(params))) + return this + }, + /** + * Add a get_implicit_key_arc4_bool(address)bool method call against the LocalStateContract contract + */ + getImplicitKeyArc4Bool(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4Bool(params))) + return this + }, + /** + * Add a get_implicit_key_arc4_address(address)address method call against the LocalStateContract contract + */ + getImplicitKeyArc4Address(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4Address(params))) + return this + }, + /** + * Add a get_implicit_key_arc4_uint128(address)uint128 method call against the LocalStateContract contract + */ + getImplicitKeyArc4Uint128(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4Uint128(params))) + return this + }, + /** + * Add a get_implicit_key_arc4_dynamic_bytes(address)byte[] method call against the LocalStateContract contract + */ + getImplicitKeyArc4DynamicBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyArc4DynamicBytes(params))) + return this + }, + /** + * Add a get_implicit_key_tuple(address)(uint64,byte[],bool) method call against the LocalStateContract contract + */ + getImplicitKeyTuple(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getImplicitKeyTuple(params))) + return this + }, + /** + * Add a get_arc4_uint(address)uint64 method call against the LocalStateContract contract + */ + getArc4Uint(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4Uint(params))) + return this + }, + /** + * Add a get_arc4_string(address)string method call against the LocalStateContract contract + */ + getArc4String(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4String(params))) + return this + }, + /** + * Add a get_arc4_byte(address)byte method call against the LocalStateContract contract + */ + getArc4Byte(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4Byte(params))) + return this + }, + /** + * Add a get_arc4_bool(address)bool method call against the LocalStateContract contract + */ + getArc4Bool(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4Bool(params))) + return this + }, + /** + * Add a get_arc4_address(address)address method call against the LocalStateContract contract + */ + getArc4Address(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4Address(params))) + return this + }, + /** + * Add a get_arc4_uint128(address)uint128 method call against the LocalStateContract contract + */ + getArc4Uint128(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4Uint128(params))) + return this + }, + /** + * Add a get_arc4_dynamic_bytes(address)byte[] method call against the LocalStateContract contract + */ + getArc4DynamicBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getArc4DynamicBytes(params))) + return this + }, + get optIn() { + return { + optIn: (params: CallParams) => { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.optIn.optIn(params))) + return this + }, + } + }, + /** + * Add a clear state call to the LocalStateContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as LocalStateContractComposer + } +} +export type LocalStateContractComposer = { + /** + * Calls the get_implicit_key_arc4_uint(address)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4Uint(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_implicit_key_arc4_uint(address)uint64'] | undefined]> + + /** + * Calls the get_implicit_key_arc4_string(address)string ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4String(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_implicit_key_arc4_string(address)string'] | undefined]> + + /** + * Calls the get_implicit_key_arc4_byte(address)byte ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4Byte(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_implicit_key_arc4_byte(address)byte'] | undefined]> + + /** + * Calls the get_implicit_key_arc4_bool(address)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4Bool(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_implicit_key_arc4_bool(address)bool'] | undefined]> + + /** + * Calls the get_implicit_key_arc4_address(address)address ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4Address(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_implicit_key_arc4_address(address)address'] | undefined]> + + /** + * Calls the get_implicit_key_arc4_uint128(address)uint128 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4Uint128(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_implicit_key_arc4_uint128(address)uint128'] | undefined]> + + /** + * Calls the get_implicit_key_arc4_dynamic_bytes(address)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyArc4DynamicBytes(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_implicit_key_arc4_dynamic_bytes(address)byte[]'] | undefined]> + + /** + * Calls the get_implicit_key_tuple(address)(uint64,byte[],bool) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getImplicitKeyTuple(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_implicit_key_tuple(address)(uint64,byte[],bool)'] | undefined]> + + /** + * Calls the get_arc4_uint(address)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4Uint(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_arc4_uint(address)uint64'] | undefined]> + + /** + * Calls the get_arc4_string(address)string ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4String(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_arc4_string(address)string'] | undefined]> + + /** + * Calls the get_arc4_byte(address)byte ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4Byte(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_arc4_byte(address)byte'] | undefined]> + + /** + * Calls the get_arc4_bool(address)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4Bool(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_arc4_bool(address)bool'] | undefined]> + + /** + * Calls the get_arc4_address(address)address ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4Address(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_arc4_address(address)address'] | undefined]> + + /** + * Calls the get_arc4_uint128(address)uint128 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4Uint128(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_arc4_uint128(address)uint128'] | undefined]> + + /** + * Calls the get_arc4_dynamic_bytes(address)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getArc4DynamicBytes(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['get_arc4_dynamic_bytes(address)byte[]'] | undefined]> + + /** + * Gets available optIn methods + */ + readonly optIn: { + /** + * Opts the user into an existing instance of the LocalStateContract smart contract using the opt_in()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + optIn(params?: CallParams): LocalStateContractComposer<[...TReturns, LocalStateContractReturns['opt_in()void'] | undefined]> + } + + /** + * Makes a clear_state call to an existing instance of the LocalStateContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): LocalStateContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): LocalStateContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type LocalStateContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/MiscellaneousOpsContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/MiscellaneousOpsContract.ts new file mode 100644 index 0000000..afd9e82 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/MiscellaneousOpsContract.ts @@ -0,0 +1,3082 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"MiscellaneousOpsContract","structs":{},"methods":[{"name":"verify_addw","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"(uint64,uint64)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_base64_decode_standard","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_base64_decode_url","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bytes_bitlen","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"pad_a_size"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_bitlen","args":[{"type":"uint64","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bsqrt","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_btoi","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bzero","args":[{"type":"uint64","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_concat","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"},{"type":"uint64","name":"pad_a_size"},{"type":"uint64","name":"pad_b_size"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_divmodw","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"},{"type":"uint64","name":"c"},{"type":"uint64","name":"d"}],"returns":{"type":"(uint64,uint64,uint64,uint64)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_divw","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"},{"type":"uint64","name":"c"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_err","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_exp","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_expw","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"(uint64,uint64)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_extract","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"},{"type":"uint64","name":"c"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_extract_from_2","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_extract_uint16","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_extract_uint32","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_extract_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_getbit_bytes","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_getbit_uint64","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_getbyte","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_itob","args":[{"type":"uint64","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_mulw","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"(uint64,uint64)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_replace","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"},{"type":"byte[]","name":"c"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_select_bytes","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"},{"type":"uint64","name":"c"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_select_uint64","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"},{"type":"uint64","name":"c"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_setbit_bytes","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"},{"type":"bool","name":"c"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_setbit_uint64","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"},{"type":"bool","name":"c"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_setbyte","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"},{"type":"uint64","name":"c"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_shl","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_shr","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_sqrt","args":[{"type":"uint64","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_substring","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"},{"type":"uint64","name":"c"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_json_ref_string","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_json_ref_uint64","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_json_ref_object","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDE1MWY3Yzc1MDAyMCAweDAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTo0CiAgICAvLyBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDQ0CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHg0NTg0N2VlYSAweGY1N2FjZWI1IDB4N2Q2MzE3MzAgMHhhMWIyNDQ0MSAweGNkN2JlMWFjIDB4N2NmZGE2NGIgMHg1NGE5MTBkOSAweGM0NjU2OGRlIDB4N2E0NmE2YWUgMHgwNDM3MjIwOSAweDdlNWY2ZDcyIDB4MjRlYmNmODQgMHg5YzBiMzM5NyAweDBhZDQwZGE0IDB4OTUxNzg4NzAgMHhkZWVkYzk5YiAweGFiMjE1MGJiIDB4MDJhNTQwMTcgMHgzZGI2NmI0MSAweDZlM2ZmMzhjIDB4OGYzYjlmMTggMHgxNjE2NmY5YSAweDJmNDcyMDY1IDB4ZDVhNzM5YzMgMHg2MWYzYjNlMSAweDU2Y2YzNjhiIDB4OTE5ZmZiZDIgMHhhYWU4YjY5NyAweDg0NzQyMmIxIDB4ZDUyNjAzMjcgMHgxMTRjOGM2ZCAweDM5ZTllNjJhIDB4ZDZhNGMwNWUgMHgxZWY4MTUxYSAweDY2ZGQ3Zjk2IDB4NGQ5ZWNlYjIgMHgxOWJhNzBlZSAvLyBtZXRob2QgInZlcmlmeV9hZGR3KHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJ2ZXJpZnlfYmFzZTY0X2RlY29kZV9zdGFuZGFyZChieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmFzZTY0X2RlY29kZV91cmwoYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2J5dGVzX2JpdGxlbihieXRlW10sdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9iaXRsZW4odWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2JzcXJ0KGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9idG9pKGJ5dGVbXSl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9iemVybyh1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfY29uY2F0KGJ5dGVbXSxieXRlW10sdWludDY0LHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9kaXZtb2R3KHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAidmVyaWZ5X2RpdncodWludDY0LHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfZXJyKCl2b2lkIiwgbWV0aG9kICJ2ZXJpZnlfZXhwKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfZXhwdyh1aW50NjQsdWludDY0KSh1aW50NjQsdWludDY0KSIsIG1ldGhvZCAidmVyaWZ5X2V4dHJhY3QoYnl0ZVtdLHVpbnQ2NCx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfZXh0cmFjdF9mcm9tXzIoYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2V4dHJhY3RfdWludDE2KGJ5dGVbXSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfZXh0cmFjdF91aW50MzIoYnl0ZVtdLHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9leHRyYWN0X3VpbnQ2NChieXRlW10sdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2dldGJpdF9ieXRlcyhieXRlW10sdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV9nZXRiaXRfdWludDY0KHVpbnQ2NCx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2dldGJ5dGUoYnl0ZVtdLHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9pdG9iKHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9tdWx3KHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJ2ZXJpZnlfcmVwbGFjZShieXRlW10sdWludDY0LGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9zZWxlY3RfYnl0ZXMoYnl0ZVtdLGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfc2VsZWN0X3VpbnQ2NCh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9zZXRiaXRfYnl0ZXMoYnl0ZVtdLHVpbnQ2NCxib29sKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3NldGJpdF91aW50NjQodWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3NldGJ5dGUoYnl0ZVtdLHVpbnQ2NCx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfc2hsKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfc2hyKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfc3FydCh1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfc3Vic3RyaW5nKGJ5dGVbXSx1aW50NjQsdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2pzb25fcmVmX3N0cmluZyhieXRlW10sYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2pzb25fcmVmX3VpbnQ2NChieXRlW10sYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2pzb25fcmVmX29iamVjdChieXRlW10sYnl0ZVtdKWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHZlcmlmeV9hZGR3IHZlcmlmeV9iYXNlNjRfZGVjb2RlX3N0YW5kYXJkIHZlcmlmeV9iYXNlNjRfZGVjb2RlX3VybCB2ZXJpZnlfYnl0ZXNfYml0bGVuIHZlcmlmeV91aW50NjRfYml0bGVuIHZlcmlmeV9ic3FydCB2ZXJpZnlfYnRvaSB2ZXJpZnlfYnplcm8gdmVyaWZ5X2NvbmNhdCB2ZXJpZnlfZGl2bW9kdyB2ZXJpZnlfZGl2dyBtYWluX3ZlcmlmeV9lcnJfcm91dGVAMTUgdmVyaWZ5X2V4cCB2ZXJpZnlfZXhwdyB2ZXJpZnlfZXh0cmFjdCB2ZXJpZnlfZXh0cmFjdF9mcm9tXzIgdmVyaWZ5X2V4dHJhY3RfdWludDE2IHZlcmlmeV9leHRyYWN0X3VpbnQzMiB2ZXJpZnlfZXh0cmFjdF91aW50NjQgdmVyaWZ5X2dldGJpdF9ieXRlcyB2ZXJpZnlfZ2V0Yml0X3VpbnQ2NCB2ZXJpZnlfZ2V0Ynl0ZSB2ZXJpZnlfaXRvYiB2ZXJpZnlfbXVsdyB2ZXJpZnlfcmVwbGFjZSB2ZXJpZnlfc2VsZWN0X2J5dGVzIHZlcmlmeV9zZWxlY3RfdWludDY0IHZlcmlmeV9zZXRiaXRfYnl0ZXMgdmVyaWZ5X3NldGJpdF91aW50NjQgdmVyaWZ5X3NldGJ5dGUgdmVyaWZ5X3NobCB2ZXJpZnlfc2hyIHZlcmlmeV9zcXJ0IHZlcmlmeV9zdWJzdHJpbmcgdmVyaWZ5X2pzb25fcmVmX3N0cmluZyB2ZXJpZnlfanNvbl9yZWZfdWludDY0IHZlcmlmeV9qc29uX3JlZl9vYmplY3QKICAgIGVycgoKbWFpbl92ZXJpZnlfZXJyX3JvdXRlQDE1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6NjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVANDQ6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfYWRkd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9hZGR3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjcKICAgIC8vIHJlc3VsdCA9IG9wLmFkZHcoYSwgYikKICAgIGFkZHcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2Jhc2U2NF9kZWNvZGVfc3RhbmRhcmRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmFzZTY0X2RlY29kZV9zdGFuZGFyZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjEyCiAgICAvLyByZXN1bHQgPSBvcC5iYXNlNjRfZGVjb2RlKG9wLkJhc2U2NC5TdGRFbmNvZGluZywgYSkKICAgIGJhc2U2NF9kZWNvZGUgU3RkRW5jb2RpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2Jhc2U2NF9kZWNvZGVfdXJsW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2Jhc2U2NF9kZWNvZGVfdXJsOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTcKICAgIC8vIHJlc3VsdCA9IG9wLmJhc2U2NF9kZWNvZGUob3AuQmFzZTY0LlVSTEVuY29kaW5nLCBhKQogICAgYmFzZTY0X2RlY29kZSBVUkxFbmNvZGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfYml0bGVuW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2J5dGVzX2JpdGxlbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjIyCiAgICAvLyBhID0gb3AuYnplcm8ocGFkX2Ffc2l6ZSkgKyBhCiAgICBiemVybwogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToyMwogICAgLy8gcmVzdWx0ID0gb3AuYml0bGVuKGEpCiAgICBiaXRsZW4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X2JpdGxlbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50NjRfYml0bGVuOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToyOAogICAgLy8gcmVzdWx0ID0gb3AuYml0bGVuKGEpCiAgICBiaXRsZW4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfYnNxcnRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYnNxcnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTozMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTozNAogICAgLy8gcmVzdWx0ID0gb3AuYnNxcnQoYV9iaWd1aW50KQogICAgYnNxcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2J0b2lbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYnRvaToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjM5CiAgICAvLyByZXN1bHQgPSBvcC5idG9pKGEpCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTozNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2J6ZXJvW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2J6ZXJvOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6NDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTo0NAogICAgLy8gcmVzdWx0ID0gb3AuYnplcm8oYSkKICAgIGJ6ZXJvCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTo0NQogICAgLy8gcmV0dXJuIG9wLnNoYTI1NihyZXN1bHQpCiAgICBzaGEyNTYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1MDAyMAogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2NvbmNhdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9jb25jYXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTo0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6NDkKICAgIC8vIGEgPSBvcC5iemVybyhwYWRfYV9zaXplKSArIGEKICAgIHN3YXAKICAgIGJ6ZXJvCiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6NTAKICAgIC8vIGIgPSBvcC5iemVybyhwYWRfYl9zaXplKSArIGIKICAgIHN3YXAKICAgIGJ6ZXJvCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6NTEKICAgIC8vIHJlc3VsdCA9IGEgKyBiCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjUyCiAgICAvLyByZXN1bHQgPSBvcC5zaGEyNTYocmVzdWx0KQogICAgc2hhMjU2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTo0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NTAwMjAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLk1pc2NlbGxhbmVvdXNPcHMuY29udHJhY3QuTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9kaXZtb2R3W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2Rpdm1vZHc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTo1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjU5CiAgICAvLyByZXN1bHQgPSBvcC5kaXZtb2R3KGEsIGIsIGMsIGQpCiAgICBkaXZtb2R3CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTo1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2Rpdndbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfZGl2dzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjYyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6NjQKICAgIC8vIHJlc3VsdCA9IG9wLmRpdncoYSwgYiwgYykKICAgIGRpdncKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjYyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfZXhwW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2V4cDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6NzMKICAgIC8vIHJlc3VsdCA9IG9wLmV4cChhLCBiKQogICAgZXhwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTo3MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2V4cHdbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfZXhwdzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6NzgKICAgIC8vIHJlc3VsdCA9IG9wLmV4cHcoYSwgYikKICAgIGV4cHcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLk1pc2NlbGxhbmVvdXNPcHMuY29udHJhY3QuTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHRyYWN0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2V4dHJhY3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTo4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTo4MwogICAgLy8gcmVzdWx0ID0gb3AuZXh0cmFjdChhLCBiLCBjKQogICAgZXh0cmFjdDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjgxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2V4dHJhY3RfZnJvbV8yW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2V4dHJhY3RfZnJvbV8yOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6ODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weTo4OAogICAgLy8gcmVzdWx0ID0gb3AuZXh0cmFjdChhLCAyLCAwKQogICAgZXh0cmFjdCA0IDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2V4dHJhY3RfdWludDE2W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2V4dHJhY3RfdWludDE2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6OTMKICAgIC8vIHJlc3VsdCA9IG9wLmV4dHJhY3RfdWludDE2KGEsIGIpCiAgICBleHRyYWN0X3VpbnQxNgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLk1pc2NlbGxhbmVvdXNPcHMuY29udHJhY3QuTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHRyYWN0X3VpbnQzMltyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9leHRyYWN0X3VpbnQzMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyByZXN1bHQgPSBvcC5leHRyYWN0X3VpbnQzMihhLCBiKQogICAgZXh0cmFjdF91aW50MzIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfZXh0cmFjdF91aW50NjRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfZXh0cmFjdF91aW50NjQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxMDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgcHVzaGludCA4CiAgICBleHRyYWN0MwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfZ2V0Yml0X2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2dldGJpdF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjEwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxMDgKICAgIC8vIHJlc3VsdCA9IG9wLmdldGJpdChhLCBiKQogICAgZ2V0Yml0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxMDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfZ2V0Yml0X3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9nZXRiaXRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTEzCiAgICAvLyByZXN1bHQgPSBvcC5nZXRiaXQoYSwgYikKICAgIGdldGJpdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMiAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2dldGJ5dGVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfZ2V0Ynl0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjExNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxMTgKICAgIC8vIHJlc3VsdCA9IG9wLmdldGJ5dGUoYSwgYikKICAgIGdldGJ5dGUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjExNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2l0b2Jbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfaXRvYjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjEyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjEyMwogICAgLy8gcmVzdWx0ID0gb3AuaXRvYihhKQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDA4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfbXVsd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9tdWx3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTI4CiAgICAvLyByZXN1bHQgPSBvcC5tdWx3KGEsIGIpCiAgICBtdWx3CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X3JlcGxhY2Vbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfcmVwbGFjZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjEzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTMzCiAgICAvLyByZXN1bHQgPSBvcC5yZXBsYWNlKGEsIGIsIGMpCiAgICByZXBsYWNlMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X3NlbGVjdF9ieXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9zZWxlY3RfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjEzOAogICAgLy8gcmVzdWx0ID0gb3Auc2VsZWN0X2J5dGVzKGEsIGIsIGMpCiAgICBzZWxlY3QKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLk1pc2NlbGxhbmVvdXNPcHMuY29udHJhY3QuTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9zZWxlY3RfdWludDY0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3NlbGVjdF91aW50NjQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxNDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxNDMKICAgIC8vIHJlc3VsdCA9IG9wLnNlbGVjdF91aW50NjQoYSwgYiwgYykKICAgIHNlbGVjdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfc2V0Yml0X2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3NldGJpdF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxNDgKICAgIC8vIHJlc3VsdCA9IG9wLnNldGJpdF9ieXRlcyhhLCBiLCBjKQogICAgc2V0Yml0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxNDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfc2V0Yml0X3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9zZXRiaXRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18xIC8vIDAKICAgIGdldGJpdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTUzCiAgICAvLyByZXN1bHQgPSBvcC5zZXRiaXRfdWludDY0KGEsIGIsIGMpCiAgICBzZXRiaXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X3NldGJ5dGVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfc2V0Ynl0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxNTgKICAgIC8vIHJlc3VsdCA9IG9wLnNldGJ5dGUoYSwgYiwgYykKICAgIHNldGJ5dGUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLk1pc2NlbGxhbmVvdXNPcHMuY29udHJhY3QuTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9zaGxbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfc2hsOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTYzCiAgICAvLyByZXN1bHQgPSBvcC5zaGwoYSwgYikKICAgIHNobAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfc2hyW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3NocjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE2OAogICAgLy8gcmVzdWx0ID0gb3Auc2hyKGEsIGIpCiAgICBzaHIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X3NxcnRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfc3FydDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE3MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE3MwogICAgLy8gcmVzdWx0ID0gb3Auc3FydChhKQogICAgc3FydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfc3Vic3RyaW5nW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3N1YnN0cmluZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxNzgKICAgIC8vIHJlc3VsdCA9IG9wLnN1YnN0cmluZyhhLCBiLCBjKQogICAgc3Vic3RyaW5nMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2pzb25fcmVmX3N0cmluZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9qc29uX3JlZl9zdHJpbmc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE4MwogICAgLy8gcmVzdWx0ID0gb3AuSnNvblJlZi5qc29uX3N0cmluZyhhLCBiKQogICAganNvbl9yZWYgSlNPTlN0cmluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTgxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuTWlzY2VsbGFuZW91c09wcy5jb250cmFjdC5NaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2pzb25fcmVmX3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9qc29uX3JlZl91aW50NjQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE4OAogICAgLy8gcmVzdWx0ID0gb3AuSnNvblJlZi5qc29uX3VpbnQ2NChhLCBiKQogICAganNvbl9yZWYgSlNPTlVpbnQ2NAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTg2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5NaXNjZWxsYW5lb3VzT3BzLmNvbnRyYWN0Lk1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfanNvbl9yZWZfb2JqZWN0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2pzb25fcmVmX29iamVjdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9NaXNjZWxsYW5lb3VzT3BzL2NvbnRyYWN0LnB5OjE5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL01pc2NlbGxhbmVvdXNPcHMvY29udHJhY3QucHk6MTkzCiAgICAvLyByZXN1bHQgPSBvcC5Kc29uUmVmLmpzb25fb2JqZWN0KGEsIGIpCiAgICBqc29uX3JlZiBKU09OT2JqZWN0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvTWlzY2VsbGFuZW91c09wcy9jb250cmFjdC5weToxOTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyACAQAmAwQVH3x1BhUffHUAIAEAMRtBARMxGRREMRhEgiUERYR+6gT1es61BH1jFzAEobJEQQTNe+GsBHz9pksEVKkQ2QTEZWjeBHpGpq4EBDciCQR+X21yBCTrz4QEnAszlwQK1A2kBJUXiHAE3u3JmwSrIVC7BAKlQBcEPbZrQQRuP/OMBI87nxgEFhZvmgQvRyBlBNWnOcMEYfOz4QRWzzaLBJGf+9IEqui2lwSEdCKxBNUmAycEEUyMbQQ56eYqBNakwF4EHvgVGgRm3X+WBE2ezrIEGbpw7jYaAI4lAAoAHgA0AEoAXwBrAIAAjgCaAMAA5QABAPkBCQEdAToBTgFgAXIBhQGbAa8BwQHTAecCBgIlAjkCVwJsAokCmQKpArUC0gLuAwMAADEZFDEYFBBDNhoBFzYaAhceTBZMFlAoTFCwIkM2GgFXAgBeAUkVFlcGAkxQKExQsCJDNhoBVwIAXgBJFRZXBgJMUChMULAiQzYaAVcCADYaAhevTFCTFihMULAiQzYaAReTFihMULAiQzYaAVcCAJZJFRZXBgJMUChMULAiQzYaAVcCABcWKExQsCJDNhoBF68BKUxQsCJDNhoBVwIANhoCVwIANhoDFzYaBBdMr08DUEyvTwJQUAEpTFCwIkM2GgEXNhoCFzYaAxc2GgQXH08DFk8DFlBPAhZQTBZQKExQsCJDNhoBFzYaAhc2GgMXlxYoTFCwIkM2GgEXNhoCF5QWKExQsCJDNhoBFzYaAheVTBZMFlAoTFCwIkM2GgFXAgA2GgIXNhoDF1hJFRZXBgJMUChMULAiQzYaAVcEAEkVFlcGAkxQKExQsCJDNhoBVwIANhoCF1kWKExQsCJDNhoBVwIANhoCF1oWKExQsCJDNhoBVwIANhoCF4EIWChMULAiQzYaAVcCADYaAhdTKiNPAlQoTFCwIkM2GgEXNhoCF1MqI08CVChMULAiQzYaAVcCADYaAhdVFihMULAiQzYaARcWgAYVH3x1AAhMULAiQzYaARc2GgIXHUwWTBZQKExQsCJDNhoBVwIANhoCFzYaA1cCAF1JFRZXBgJMUChMULAiQzYaAVcCADYaAlcCADYaAxdNSRUWVwYCTFAoTFCwIkM2GgEXNhoCFzYaAxdNFihMULAiQzYaAVcCADYaAhc2GgMjU1RJFRZXBgJMUChMULAiQzYaARc2GgIXNhoDI1NUFihMULAiQzYaAVcCADYaAhc2GgMXVkkVFlcGAkxQKExQsCJDNhoBFzYaAheQFihMULAiQzYaARc2GgIXkRYoTFCwIkM2GgEXkhYoTFCwIkM2GgFXAgA2GgIXNhoDF1JJFRZXBgJMUChMULAiQzYaAVcCADYaAlcCAF8ASRUWVwYCTFAoTFCwIkM2GgFXAgA2GgJXAgBfARYoTFCwIkM2GgFXAgA2GgJXAgBfAkkVFlcGAkxQKExQsCJD","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the MiscellaneousOpsContract contract + */ +export type MiscellaneousOpsContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'verify_addw(uint64,uint64)(uint64,uint64)': { + a: bigint | number + b: bigint | number + } + 'verify_base64_decode_standard(byte[])byte[]': { + a: Uint8Array + } + 'verify_base64_decode_url(byte[])byte[]': { + a: Uint8Array + } + 'verify_bytes_bitlen(byte[],uint64)uint64': { + a: Uint8Array + padASize: bigint | number + } + 'verify_uint64_bitlen(uint64)uint64': { + a: bigint | number + } + 'verify_bsqrt(byte[])byte[]': { + a: Uint8Array + } + 'verify_btoi(byte[])uint64': { + a: Uint8Array + } + 'verify_bzero(uint64)byte[]': { + a: bigint | number + } + 'verify_concat(byte[],byte[],uint64,uint64)byte[]': { + a: Uint8Array + b: Uint8Array + padASize: bigint | number + padBSize: bigint | number + } + 'verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)': { + a: bigint | number + b: bigint | number + c: bigint | number + d: bigint | number + } + 'verify_divw(uint64,uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + c: bigint | number + } + 'verify_err()void': Record + 'verify_exp(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_expw(uint64,uint64)(uint64,uint64)': { + a: bigint | number + b: bigint | number + } + 'verify_extract(byte[],uint64,uint64)byte[]': { + a: Uint8Array + b: bigint | number + c: bigint | number + } + 'verify_extract_from_2(byte[])byte[]': { + a: Uint8Array + } + 'verify_extract_uint16(byte[],uint64)uint64': { + a: Uint8Array + b: bigint | number + } + 'verify_extract_uint32(byte[],uint64)uint64': { + a: Uint8Array + b: bigint | number + } + 'verify_extract_uint64(byte[],uint64)uint64': { + a: Uint8Array + b: bigint | number + } + 'verify_getbit_bytes(byte[],uint64)bool': { + a: Uint8Array + b: bigint | number + } + 'verify_getbit_uint64(uint64,uint64)bool': { + a: bigint | number + b: bigint | number + } + 'verify_getbyte(byte[],uint64)uint64': { + a: Uint8Array + b: bigint | number + } + 'verify_itob(uint64)byte[]': { + a: bigint | number + } + 'verify_mulw(uint64,uint64)(uint64,uint64)': { + a: bigint | number + b: bigint | number + } + 'verify_replace(byte[],uint64,byte[])byte[]': { + a: Uint8Array + b: bigint | number + c: Uint8Array + } + 'verify_select_bytes(byte[],byte[],uint64)byte[]': { + a: Uint8Array + b: Uint8Array + c: bigint | number + } + 'verify_select_uint64(uint64,uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + c: bigint | number + } + 'verify_setbit_bytes(byte[],uint64,bool)byte[]': { + a: Uint8Array + b: bigint | number + c: boolean + } + 'verify_setbit_uint64(uint64,uint64,bool)uint64': { + a: bigint | number + b: bigint | number + c: boolean + } + 'verify_setbyte(byte[],uint64,uint64)byte[]': { + a: Uint8Array + b: bigint | number + c: bigint | number + } + 'verify_shl(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_shr(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_sqrt(uint64)uint64': { + a: bigint | number + } + 'verify_substring(byte[],uint64,uint64)byte[]': { + a: Uint8Array + b: bigint | number + c: bigint | number + } + 'verify_json_ref_string(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + 'verify_json_ref_uint64(byte[],byte[])uint64': { + a: Uint8Array + b: Uint8Array + } + 'verify_json_ref_object(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'verify_addw(uint64,uint64)(uint64,uint64)': [a: bigint | number, b: bigint | number] + 'verify_base64_decode_standard(byte[])byte[]': [a: Uint8Array] + 'verify_base64_decode_url(byte[])byte[]': [a: Uint8Array] + 'verify_bytes_bitlen(byte[],uint64)uint64': [a: Uint8Array, padASize: bigint | number] + 'verify_uint64_bitlen(uint64)uint64': [a: bigint | number] + 'verify_bsqrt(byte[])byte[]': [a: Uint8Array] + 'verify_btoi(byte[])uint64': [a: Uint8Array] + 'verify_bzero(uint64)byte[]': [a: bigint | number] + 'verify_concat(byte[],byte[],uint64,uint64)byte[]': [a: Uint8Array, b: Uint8Array, padASize: bigint | number, padBSize: bigint | number] + 'verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)': [a: bigint | number, b: bigint | number, c: bigint | number, d: bigint | number] + 'verify_divw(uint64,uint64,uint64)uint64': [a: bigint | number, b: bigint | number, c: bigint | number] + 'verify_err()void': [] + 'verify_exp(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_expw(uint64,uint64)(uint64,uint64)': [a: bigint | number, b: bigint | number] + 'verify_extract(byte[],uint64,uint64)byte[]': [a: Uint8Array, b: bigint | number, c: bigint | number] + 'verify_extract_from_2(byte[])byte[]': [a: Uint8Array] + 'verify_extract_uint16(byte[],uint64)uint64': [a: Uint8Array, b: bigint | number] + 'verify_extract_uint32(byte[],uint64)uint64': [a: Uint8Array, b: bigint | number] + 'verify_extract_uint64(byte[],uint64)uint64': [a: Uint8Array, b: bigint | number] + 'verify_getbit_bytes(byte[],uint64)bool': [a: Uint8Array, b: bigint | number] + 'verify_getbit_uint64(uint64,uint64)bool': [a: bigint | number, b: bigint | number] + 'verify_getbyte(byte[],uint64)uint64': [a: Uint8Array, b: bigint | number] + 'verify_itob(uint64)byte[]': [a: bigint | number] + 'verify_mulw(uint64,uint64)(uint64,uint64)': [a: bigint | number, b: bigint | number] + 'verify_replace(byte[],uint64,byte[])byte[]': [a: Uint8Array, b: bigint | number, c: Uint8Array] + 'verify_select_bytes(byte[],byte[],uint64)byte[]': [a: Uint8Array, b: Uint8Array, c: bigint | number] + 'verify_select_uint64(uint64,uint64,uint64)uint64': [a: bigint | number, b: bigint | number, c: bigint | number] + 'verify_setbit_bytes(byte[],uint64,bool)byte[]': [a: Uint8Array, b: bigint | number, c: boolean] + 'verify_setbit_uint64(uint64,uint64,bool)uint64': [a: bigint | number, b: bigint | number, c: boolean] + 'verify_setbyte(byte[],uint64,uint64)byte[]': [a: Uint8Array, b: bigint | number, c: bigint | number] + 'verify_shl(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_shr(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_sqrt(uint64)uint64': [a: bigint | number] + 'verify_substring(byte[],uint64,uint64)byte[]': [a: Uint8Array, b: bigint | number, c: bigint | number] + 'verify_json_ref_string(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + 'verify_json_ref_uint64(byte[],byte[])uint64': [a: Uint8Array, b: Uint8Array] + 'verify_json_ref_object(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + } +} + +/** + * The return type for each method + */ +export type MiscellaneousOpsContractReturns = { + 'verify_addw(uint64,uint64)(uint64,uint64)': [bigint, bigint] + 'verify_base64_decode_standard(byte[])byte[]': Uint8Array + 'verify_base64_decode_url(byte[])byte[]': Uint8Array + 'verify_bytes_bitlen(byte[],uint64)uint64': bigint + 'verify_uint64_bitlen(uint64)uint64': bigint + 'verify_bsqrt(byte[])byte[]': Uint8Array + 'verify_btoi(byte[])uint64': bigint + 'verify_bzero(uint64)byte[]': Uint8Array + 'verify_concat(byte[],byte[],uint64,uint64)byte[]': Uint8Array + 'verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)': [bigint, bigint, bigint, bigint] + 'verify_divw(uint64,uint64,uint64)uint64': bigint + 'verify_err()void': void + 'verify_exp(uint64,uint64)uint64': bigint + 'verify_expw(uint64,uint64)(uint64,uint64)': [bigint, bigint] + 'verify_extract(byte[],uint64,uint64)byte[]': Uint8Array + 'verify_extract_from_2(byte[])byte[]': Uint8Array + 'verify_extract_uint16(byte[],uint64)uint64': bigint + 'verify_extract_uint32(byte[],uint64)uint64': bigint + 'verify_extract_uint64(byte[],uint64)uint64': bigint + 'verify_getbit_bytes(byte[],uint64)bool': boolean + 'verify_getbit_uint64(uint64,uint64)bool': boolean + 'verify_getbyte(byte[],uint64)uint64': bigint + 'verify_itob(uint64)byte[]': Uint8Array + 'verify_mulw(uint64,uint64)(uint64,uint64)': [bigint, bigint] + 'verify_replace(byte[],uint64,byte[])byte[]': Uint8Array + 'verify_select_bytes(byte[],byte[],uint64)byte[]': Uint8Array + 'verify_select_uint64(uint64,uint64,uint64)uint64': bigint + 'verify_setbit_bytes(byte[],uint64,bool)byte[]': Uint8Array + 'verify_setbit_uint64(uint64,uint64,bool)uint64': bigint + 'verify_setbyte(byte[],uint64,uint64)byte[]': Uint8Array + 'verify_shl(uint64,uint64)uint64': bigint + 'verify_shr(uint64,uint64)uint64': bigint + 'verify_sqrt(uint64)uint64': bigint + 'verify_substring(byte[],uint64,uint64)byte[]': Uint8Array + 'verify_json_ref_string(byte[],byte[])byte[]': Uint8Array + 'verify_json_ref_uint64(byte[],byte[])uint64': bigint + 'verify_json_ref_object(byte[],byte[])byte[]': Uint8Array +} + +/** + * Defines the types of available calls and state of the MiscellaneousOpsContract smart contract. + */ +export type MiscellaneousOpsContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'verify_addw(uint64,uint64)(uint64,uint64)' | 'verify_addw', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_addw(uint64,uint64)(uint64,uint64)'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_addw(uint64,uint64)(uint64,uint64)'] + returns: MiscellaneousOpsContractReturns['verify_addw(uint64,uint64)(uint64,uint64)'] + }> + & Record<'verify_base64_decode_standard(byte[])byte[]' | 'verify_base64_decode_standard', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_base64_decode_standard(byte[])byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_base64_decode_standard(byte[])byte[]'] + returns: MiscellaneousOpsContractReturns['verify_base64_decode_standard(byte[])byte[]'] + }> + & Record<'verify_base64_decode_url(byte[])byte[]' | 'verify_base64_decode_url', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_base64_decode_url(byte[])byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_base64_decode_url(byte[])byte[]'] + returns: MiscellaneousOpsContractReturns['verify_base64_decode_url(byte[])byte[]'] + }> + & Record<'verify_bytes_bitlen(byte[],uint64)uint64' | 'verify_bytes_bitlen', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_bytes_bitlen(byte[],uint64)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_bytes_bitlen(byte[],uint64)uint64'] + returns: MiscellaneousOpsContractReturns['verify_bytes_bitlen(byte[],uint64)uint64'] + }> + & Record<'verify_uint64_bitlen(uint64)uint64' | 'verify_uint64_bitlen', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_uint64_bitlen(uint64)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_uint64_bitlen(uint64)uint64'] + returns: MiscellaneousOpsContractReturns['verify_uint64_bitlen(uint64)uint64'] + }> + & Record<'verify_bsqrt(byte[])byte[]' | 'verify_bsqrt', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_bsqrt(byte[])byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_bsqrt(byte[])byte[]'] + returns: MiscellaneousOpsContractReturns['verify_bsqrt(byte[])byte[]'] + }> + & Record<'verify_btoi(byte[])uint64' | 'verify_btoi', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_btoi(byte[])uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_btoi(byte[])uint64'] + returns: MiscellaneousOpsContractReturns['verify_btoi(byte[])uint64'] + }> + & Record<'verify_bzero(uint64)byte[]' | 'verify_bzero', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_bzero(uint64)byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_bzero(uint64)byte[]'] + returns: MiscellaneousOpsContractReturns['verify_bzero(uint64)byte[]'] + }> + & Record<'verify_concat(byte[],byte[],uint64,uint64)byte[]' | 'verify_concat', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_concat(byte[],byte[],uint64,uint64)byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_concat(byte[],byte[],uint64,uint64)byte[]'] + returns: MiscellaneousOpsContractReturns['verify_concat(byte[],byte[],uint64,uint64)byte[]'] + }> + & Record<'verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)' | 'verify_divmodw', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)'] + returns: MiscellaneousOpsContractReturns['verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)'] + }> + & Record<'verify_divw(uint64,uint64,uint64)uint64' | 'verify_divw', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_divw(uint64,uint64,uint64)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_divw(uint64,uint64,uint64)uint64'] + returns: MiscellaneousOpsContractReturns['verify_divw(uint64,uint64,uint64)uint64'] + }> + & Record<'verify_err()void' | 'verify_err', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_err()void'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_err()void'] + returns: MiscellaneousOpsContractReturns['verify_err()void'] + }> + & Record<'verify_exp(uint64,uint64)uint64' | 'verify_exp', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_exp(uint64,uint64)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_exp(uint64,uint64)uint64'] + returns: MiscellaneousOpsContractReturns['verify_exp(uint64,uint64)uint64'] + }> + & Record<'verify_expw(uint64,uint64)(uint64,uint64)' | 'verify_expw', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_expw(uint64,uint64)(uint64,uint64)'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_expw(uint64,uint64)(uint64,uint64)'] + returns: MiscellaneousOpsContractReturns['verify_expw(uint64,uint64)(uint64,uint64)'] + }> + & Record<'verify_extract(byte[],uint64,uint64)byte[]' | 'verify_extract', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_extract(byte[],uint64,uint64)byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_extract(byte[],uint64,uint64)byte[]'] + returns: MiscellaneousOpsContractReturns['verify_extract(byte[],uint64,uint64)byte[]'] + }> + & Record<'verify_extract_from_2(byte[])byte[]' | 'verify_extract_from_2', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_extract_from_2(byte[])byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_extract_from_2(byte[])byte[]'] + returns: MiscellaneousOpsContractReturns['verify_extract_from_2(byte[])byte[]'] + }> + & Record<'verify_extract_uint16(byte[],uint64)uint64' | 'verify_extract_uint16', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_extract_uint16(byte[],uint64)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_extract_uint16(byte[],uint64)uint64'] + returns: MiscellaneousOpsContractReturns['verify_extract_uint16(byte[],uint64)uint64'] + }> + & Record<'verify_extract_uint32(byte[],uint64)uint64' | 'verify_extract_uint32', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_extract_uint32(byte[],uint64)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_extract_uint32(byte[],uint64)uint64'] + returns: MiscellaneousOpsContractReturns['verify_extract_uint32(byte[],uint64)uint64'] + }> + & Record<'verify_extract_uint64(byte[],uint64)uint64' | 'verify_extract_uint64', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_extract_uint64(byte[],uint64)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_extract_uint64(byte[],uint64)uint64'] + returns: MiscellaneousOpsContractReturns['verify_extract_uint64(byte[],uint64)uint64'] + }> + & Record<'verify_getbit_bytes(byte[],uint64)bool' | 'verify_getbit_bytes', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_getbit_bytes(byte[],uint64)bool'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_getbit_bytes(byte[],uint64)bool'] + returns: MiscellaneousOpsContractReturns['verify_getbit_bytes(byte[],uint64)bool'] + }> + & Record<'verify_getbit_uint64(uint64,uint64)bool' | 'verify_getbit_uint64', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_getbit_uint64(uint64,uint64)bool'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_getbit_uint64(uint64,uint64)bool'] + returns: MiscellaneousOpsContractReturns['verify_getbit_uint64(uint64,uint64)bool'] + }> + & Record<'verify_getbyte(byte[],uint64)uint64' | 'verify_getbyte', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_getbyte(byte[],uint64)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_getbyte(byte[],uint64)uint64'] + returns: MiscellaneousOpsContractReturns['verify_getbyte(byte[],uint64)uint64'] + }> + & Record<'verify_itob(uint64)byte[]' | 'verify_itob', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_itob(uint64)byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_itob(uint64)byte[]'] + returns: MiscellaneousOpsContractReturns['verify_itob(uint64)byte[]'] + }> + & Record<'verify_mulw(uint64,uint64)(uint64,uint64)' | 'verify_mulw', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_mulw(uint64,uint64)(uint64,uint64)'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_mulw(uint64,uint64)(uint64,uint64)'] + returns: MiscellaneousOpsContractReturns['verify_mulw(uint64,uint64)(uint64,uint64)'] + }> + & Record<'verify_replace(byte[],uint64,byte[])byte[]' | 'verify_replace', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_replace(byte[],uint64,byte[])byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_replace(byte[],uint64,byte[])byte[]'] + returns: MiscellaneousOpsContractReturns['verify_replace(byte[],uint64,byte[])byte[]'] + }> + & Record<'verify_select_bytes(byte[],byte[],uint64)byte[]' | 'verify_select_bytes', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_select_bytes(byte[],byte[],uint64)byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_select_bytes(byte[],byte[],uint64)byte[]'] + returns: MiscellaneousOpsContractReturns['verify_select_bytes(byte[],byte[],uint64)byte[]'] + }> + & Record<'verify_select_uint64(uint64,uint64,uint64)uint64' | 'verify_select_uint64', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_select_uint64(uint64,uint64,uint64)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_select_uint64(uint64,uint64,uint64)uint64'] + returns: MiscellaneousOpsContractReturns['verify_select_uint64(uint64,uint64,uint64)uint64'] + }> + & Record<'verify_setbit_bytes(byte[],uint64,bool)byte[]' | 'verify_setbit_bytes', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_setbit_bytes(byte[],uint64,bool)byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_setbit_bytes(byte[],uint64,bool)byte[]'] + returns: MiscellaneousOpsContractReturns['verify_setbit_bytes(byte[],uint64,bool)byte[]'] + }> + & Record<'verify_setbit_uint64(uint64,uint64,bool)uint64' | 'verify_setbit_uint64', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_setbit_uint64(uint64,uint64,bool)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_setbit_uint64(uint64,uint64,bool)uint64'] + returns: MiscellaneousOpsContractReturns['verify_setbit_uint64(uint64,uint64,bool)uint64'] + }> + & Record<'verify_setbyte(byte[],uint64,uint64)byte[]' | 'verify_setbyte', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_setbyte(byte[],uint64,uint64)byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_setbyte(byte[],uint64,uint64)byte[]'] + returns: MiscellaneousOpsContractReturns['verify_setbyte(byte[],uint64,uint64)byte[]'] + }> + & Record<'verify_shl(uint64,uint64)uint64' | 'verify_shl', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_shl(uint64,uint64)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_shl(uint64,uint64)uint64'] + returns: MiscellaneousOpsContractReturns['verify_shl(uint64,uint64)uint64'] + }> + & Record<'verify_shr(uint64,uint64)uint64' | 'verify_shr', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_shr(uint64,uint64)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_shr(uint64,uint64)uint64'] + returns: MiscellaneousOpsContractReturns['verify_shr(uint64,uint64)uint64'] + }> + & Record<'verify_sqrt(uint64)uint64' | 'verify_sqrt', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_sqrt(uint64)uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_sqrt(uint64)uint64'] + returns: MiscellaneousOpsContractReturns['verify_sqrt(uint64)uint64'] + }> + & Record<'verify_substring(byte[],uint64,uint64)byte[]' | 'verify_substring', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_substring(byte[],uint64,uint64)byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_substring(byte[],uint64,uint64)byte[]'] + returns: MiscellaneousOpsContractReturns['verify_substring(byte[],uint64,uint64)byte[]'] + }> + & Record<'verify_json_ref_string(byte[],byte[])byte[]' | 'verify_json_ref_string', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_json_ref_string(byte[],byte[])byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_json_ref_string(byte[],byte[])byte[]'] + returns: MiscellaneousOpsContractReturns['verify_json_ref_string(byte[],byte[])byte[]'] + }> + & Record<'verify_json_ref_uint64(byte[],byte[])uint64' | 'verify_json_ref_uint64', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_json_ref_uint64(byte[],byte[])uint64'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_json_ref_uint64(byte[],byte[])uint64'] + returns: MiscellaneousOpsContractReturns['verify_json_ref_uint64(byte[],byte[])uint64'] + }> + & Record<'verify_json_ref_object(byte[],byte[])byte[]' | 'verify_json_ref_object', { + argsObj: MiscellaneousOpsContractArgs['obj']['verify_json_ref_object(byte[],byte[])byte[]'] + argsTuple: MiscellaneousOpsContractArgs['tuple']['verify_json_ref_object(byte[],byte[])byte[]'] + returns: MiscellaneousOpsContractReturns['verify_json_ref_object(byte[],byte[])byte[]'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type MiscellaneousOpsContractSignatures = keyof MiscellaneousOpsContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type MiscellaneousOpsContractNonVoidMethodSignatures = keyof MiscellaneousOpsContractTypes['methods'] extends infer T ? T extends keyof MiscellaneousOpsContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the MiscellaneousOpsContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = MiscellaneousOpsContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the MiscellaneousOpsContract smart contract to the method's return type + */ +export type MethodReturn = MiscellaneousOpsContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type MiscellaneousOpsContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type MiscellaneousOpsContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: MiscellaneousOpsContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the MiscellaneousOpsContract smart contract + */ +export abstract class MiscellaneousOpsContractParamsFactory { + /** + * Constructs a no op call for the verify_addw(uint64,uint64)(uint64,uint64) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAddw(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_addw(uint64,uint64)(uint64,uint64)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_base64_decode_standard(byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBase64DecodeStandard(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_base64_decode_standard(byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_base64_decode_url(byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBase64DecodeUrl(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_base64_decode_url(byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_bytes_bitlen(byte[],uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBytesBitlen(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bytes_bitlen(byte[],uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.padASize], + } + } + /** + * Constructs a no op call for the verify_uint64_bitlen(uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Bitlen(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_bitlen(uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_bsqrt(byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBsqrt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bsqrt(byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_btoi(byte[])uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBtoi(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_btoi(byte[])uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_bzero(uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBzero(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bzero(uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_concat(byte[],byte[],uint64,uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyConcat(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_concat(byte[],byte[],uint64,uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.padASize, params.args.padBSize], + } + } + /** + * Constructs a no op call for the verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyDivmodw(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c, params.args.d], + } + } + /** + * Constructs a no op call for the verify_divw(uint64,uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyDivw(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_divw(uint64,uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_err()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyErr(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_err()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the verify_exp(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyExp(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_exp(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_expw(uint64,uint64)(uint64,uint64) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyExpw(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_expw(uint64,uint64)(uint64,uint64)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_extract(byte[],uint64,uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyExtract(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_extract(byte[],uint64,uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_extract_from_2(byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyExtractFrom_2(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_extract_from_2(byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_extract_uint16(byte[],uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyExtractUint16(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_extract_uint16(byte[],uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_extract_uint32(byte[],uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyExtractUint32(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_extract_uint32(byte[],uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_extract_uint64(byte[],uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyExtractUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_extract_uint64(byte[],uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_getbit_bytes(byte[],uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyGetbitBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_getbit_bytes(byte[],uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_getbit_uint64(uint64,uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyGetbitUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_getbit_uint64(uint64,uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_getbyte(byte[],uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyGetbyte(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_getbyte(byte[],uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_itob(uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyItob(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_itob(uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_mulw(uint64,uint64)(uint64,uint64) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyMulw(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_mulw(uint64,uint64)(uint64,uint64)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_replace(byte[],uint64,byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyReplace(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_replace(byte[],uint64,byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_select_bytes(byte[],byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifySelectBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_select_bytes(byte[],byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_select_uint64(uint64,uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifySelectUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_select_uint64(uint64,uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_setbit_bytes(byte[],uint64,bool)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifySetbitBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_setbit_bytes(byte[],uint64,bool)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_setbit_uint64(uint64,uint64,bool)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifySetbitUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_setbit_uint64(uint64,uint64,bool)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_setbyte(byte[],uint64,uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifySetbyte(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_setbyte(byte[],uint64,uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_shl(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyShl(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_shl(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_shr(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyShr(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_shr(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_sqrt(uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifySqrt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_sqrt(uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_substring(byte[],uint64,uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifySubstring(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_substring(byte[],uint64,uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_json_ref_string(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyJsonRefString(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_json_ref_string(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_json_ref_uint64(byte[],byte[])uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyJsonRefUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_json_ref_uint64(byte[],byte[])uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_json_ref_object(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyJsonRefObject(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_json_ref_object(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } +} + +/** + * A factory to create and deploy one or more instance of the MiscellaneousOpsContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class MiscellaneousOpsContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `MiscellaneousOpsContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new MiscellaneousOpsContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new MiscellaneousOpsContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the MiscellaneousOpsContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: MiscellaneousOpsContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new MiscellaneousOpsContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the MiscellaneousOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the MiscellaneousOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the MiscellaneousOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new MiscellaneousOpsContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the MiscellaneousOpsContract smart contract + */ +export class MiscellaneousOpsContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `MiscellaneousOpsContractClient` + * + * @param appClient An `AppClient` instance which has been created with the MiscellaneousOpsContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `MiscellaneousOpsContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `MiscellaneousOpsContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new MiscellaneousOpsContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `MiscellaneousOpsContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new MiscellaneousOpsContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the MiscellaneousOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_addw(uint64,uint64)(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAddw: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyAddw(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_base64_decode_standard(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBase64DecodeStandard: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyBase64DecodeStandard(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_base64_decode_url(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBase64DecodeUrl: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyBase64DecodeUrl(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_bytes_bitlen(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBytesBitlen: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyBytesBitlen(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_uint64_bitlen(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Bitlen: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyUint64Bitlen(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_bsqrt(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBsqrt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyBsqrt(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_btoi(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBtoi: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyBtoi(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_bzero(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBzero: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyBzero(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_concat(byte[],byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyConcat: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyConcat(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyDivmodw: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyDivmodw(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_divw(uint64,uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyDivw: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyDivw(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_err()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyErr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyErr(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_exp(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyExp: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyExp(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_expw(uint64,uint64)(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyExpw: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyExpw(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract(byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyExtract: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyExtract(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract_from_2(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyExtractFrom_2: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyExtractFrom_2(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract_uint16(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyExtractUint16: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyExtractUint16(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract_uint32(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyExtractUint32: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyExtractUint32(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract_uint64(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyExtractUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyExtractUint64(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_getbit_bytes(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyGetbitBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyGetbitBytes(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_getbit_uint64(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyGetbitUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyGetbitUint64(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_getbyte(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyGetbyte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyGetbyte(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_itob(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyItob: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyItob(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_mulw(uint64,uint64)(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyMulw: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyMulw(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_replace(byte[],uint64,byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyReplace: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyReplace(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_select_bytes(byte[],byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifySelectBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifySelectBytes(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_select_uint64(uint64,uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifySelectUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifySelectUint64(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_setbit_bytes(byte[],uint64,bool)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifySetbitBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifySetbitBytes(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_setbit_uint64(uint64,uint64,bool)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifySetbitUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifySetbitUint64(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_setbyte(byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifySetbyte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifySetbyte(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_shl(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyShl: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyShl(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_shr(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyShr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyShr(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_sqrt(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifySqrt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifySqrt(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_substring(byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifySubstring: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifySubstring(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_json_ref_string(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyJsonRefString: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyJsonRefString(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_json_ref_uint64(byte[],byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyJsonRefUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyJsonRefUint64(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_json_ref_object(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyJsonRefObject: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(MiscellaneousOpsContractParamsFactory.verifyJsonRefObject(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the MiscellaneousOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_addw(uint64,uint64)(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAddw: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyAddw(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_base64_decode_standard(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBase64DecodeStandard: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyBase64DecodeStandard(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_base64_decode_url(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBase64DecodeUrl: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyBase64DecodeUrl(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_bytes_bitlen(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBytesBitlen: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyBytesBitlen(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_uint64_bitlen(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Bitlen: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyUint64Bitlen(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_bsqrt(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBsqrt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyBsqrt(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_btoi(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBtoi: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyBtoi(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_bzero(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBzero: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyBzero(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_concat(byte[],byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyConcat: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyConcat(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyDivmodw: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyDivmodw(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_divw(uint64,uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyDivw: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyDivw(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_err()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyErr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyErr(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_exp(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyExp: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyExp(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_expw(uint64,uint64)(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyExpw: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyExpw(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract(byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyExtract: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyExtract(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract_from_2(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyExtractFrom_2: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyExtractFrom_2(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract_uint16(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyExtractUint16: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyExtractUint16(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract_uint32(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyExtractUint32: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyExtractUint32(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract_uint64(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyExtractUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyExtractUint64(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_getbit_bytes(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyGetbitBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyGetbitBytes(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_getbit_uint64(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyGetbitUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyGetbitUint64(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_getbyte(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyGetbyte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyGetbyte(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_itob(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyItob: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyItob(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_mulw(uint64,uint64)(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyMulw: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyMulw(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_replace(byte[],uint64,byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyReplace: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyReplace(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_select_bytes(byte[],byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifySelectBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifySelectBytes(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_select_uint64(uint64,uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifySelectUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifySelectUint64(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_setbit_bytes(byte[],uint64,bool)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifySetbitBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifySetbitBytes(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_setbit_uint64(uint64,uint64,bool)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifySetbitUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifySetbitUint64(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_setbyte(byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifySetbyte: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifySetbyte(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_shl(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyShl: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyShl(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_shr(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyShr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyShr(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_sqrt(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifySqrt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifySqrt(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_substring(byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifySubstring: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifySubstring(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_json_ref_string(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyJsonRefString: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyJsonRefString(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_json_ref_uint64(byte[],byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyJsonRefUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyJsonRefUint64(params)) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_json_ref_object(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyJsonRefObject: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(MiscellaneousOpsContractParamsFactory.verifyJsonRefObject(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the MiscellaneousOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_addw(uint64,uint64)(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAddw: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyAddw(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_addw(uint64,uint64)(uint64,uint64)'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_base64_decode_standard(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBase64DecodeStandard: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyBase64DecodeStandard(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_base64_decode_standard(byte[])byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_base64_decode_url(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBase64DecodeUrl: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyBase64DecodeUrl(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_base64_decode_url(byte[])byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_bytes_bitlen(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBytesBitlen: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyBytesBitlen(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_bytes_bitlen(byte[],uint64)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_uint64_bitlen(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Bitlen: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyUint64Bitlen(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_uint64_bitlen(uint64)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_bsqrt(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBsqrt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyBsqrt(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_bsqrt(byte[])byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_btoi(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBtoi: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyBtoi(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_btoi(byte[])uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_bzero(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBzero: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyBzero(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_bzero(uint64)byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_concat(byte[],byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyConcat: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyConcat(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_concat(byte[],byte[],uint64,uint64)byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyDivmodw: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyDivmodw(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_divw(uint64,uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyDivw: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyDivw(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_divw(uint64,uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_err()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyErr: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyErr(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_err()void'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_exp(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyExp: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyExp(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_exp(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_expw(uint64,uint64)(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyExpw: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyExpw(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_expw(uint64,uint64)(uint64,uint64)'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract(byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyExtract: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyExtract(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_extract(byte[],uint64,uint64)byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract_from_2(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyExtractFrom_2: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyExtractFrom_2(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_extract_from_2(byte[])byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract_uint16(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyExtractUint16: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyExtractUint16(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_extract_uint16(byte[],uint64)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract_uint32(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyExtractUint32: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyExtractUint32(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_extract_uint32(byte[],uint64)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_extract_uint64(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyExtractUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyExtractUint64(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_extract_uint64(byte[],uint64)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_getbit_bytes(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyGetbitBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyGetbitBytes(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_getbit_bytes(byte[],uint64)bool'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_getbit_uint64(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyGetbitUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyGetbitUint64(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_getbit_uint64(uint64,uint64)bool'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_getbyte(byte[],uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyGetbyte: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyGetbyte(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_getbyte(byte[],uint64)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_itob(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyItob: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyItob(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_itob(uint64)byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_mulw(uint64,uint64)(uint64,uint64)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyMulw: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyMulw(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_mulw(uint64,uint64)(uint64,uint64)'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_replace(byte[],uint64,byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyReplace: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyReplace(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_replace(byte[],uint64,byte[])byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_select_bytes(byte[],byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifySelectBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifySelectBytes(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_select_bytes(byte[],byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_select_uint64(uint64,uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifySelectUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifySelectUint64(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_select_uint64(uint64,uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_setbit_bytes(byte[],uint64,bool)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifySetbitBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifySetbitBytes(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_setbit_bytes(byte[],uint64,bool)byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_setbit_uint64(uint64,uint64,bool)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifySetbitUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifySetbitUint64(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_setbit_uint64(uint64,uint64,bool)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_setbyte(byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifySetbyte: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifySetbyte(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_setbyte(byte[],uint64,uint64)byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_shl(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyShl: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyShl(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_shl(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_shr(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyShr: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyShr(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_shr(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_sqrt(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifySqrt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifySqrt(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_sqrt(uint64)uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_substring(byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifySubstring: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifySubstring(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_substring(byte[],uint64,uint64)byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_json_ref_string(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyJsonRefString: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyJsonRefString(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_json_ref_string(byte[],byte[])byte[]'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_json_ref_uint64(byte[],byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyJsonRefUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyJsonRefUint64(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_json_ref_uint64(byte[],byte[])uint64'])} + }, + + /** + * Makes a call to the MiscellaneousOpsContract smart contract using the `verify_json_ref_object(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyJsonRefObject: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(MiscellaneousOpsContractParamsFactory.verifyJsonRefObject(params)) + return {...result, return: result.return as unknown as (undefined | MiscellaneousOpsContractReturns['verify_json_ref_object(byte[],byte[])byte[]'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new MiscellaneousOpsContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current MiscellaneousOpsContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): MiscellaneousOpsContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify_addw(uint64,uint64)(uint64,uint64) method call against the MiscellaneousOpsContract contract + */ + verifyAddw(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAddw(params))) + return this + }, + /** + * Add a verify_base64_decode_standard(byte[])byte[] method call against the MiscellaneousOpsContract contract + */ + verifyBase64DecodeStandard(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBase64DecodeStandard(params))) + return this + }, + /** + * Add a verify_base64_decode_url(byte[])byte[] method call against the MiscellaneousOpsContract contract + */ + verifyBase64DecodeUrl(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBase64DecodeUrl(params))) + return this + }, + /** + * Add a verify_bytes_bitlen(byte[],uint64)uint64 method call against the MiscellaneousOpsContract contract + */ + verifyBytesBitlen(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBytesBitlen(params))) + return this + }, + /** + * Add a verify_uint64_bitlen(uint64)uint64 method call against the MiscellaneousOpsContract contract + */ + verifyUint64Bitlen(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Bitlen(params))) + return this + }, + /** + * Add a verify_bsqrt(byte[])byte[] method call against the MiscellaneousOpsContract contract + */ + verifyBsqrt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBsqrt(params))) + return this + }, + /** + * Add a verify_btoi(byte[])uint64 method call against the MiscellaneousOpsContract contract + */ + verifyBtoi(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBtoi(params))) + return this + }, + /** + * Add a verify_bzero(uint64)byte[] method call against the MiscellaneousOpsContract contract + */ + verifyBzero(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBzero(params))) + return this + }, + /** + * Add a verify_concat(byte[],byte[],uint64,uint64)byte[] method call against the MiscellaneousOpsContract contract + */ + verifyConcat(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyConcat(params))) + return this + }, + /** + * Add a verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64) method call against the MiscellaneousOpsContract contract + */ + verifyDivmodw(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyDivmodw(params))) + return this + }, + /** + * Add a verify_divw(uint64,uint64,uint64)uint64 method call against the MiscellaneousOpsContract contract + */ + verifyDivw(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyDivw(params))) + return this + }, + /** + * Add a verify_err()void method call against the MiscellaneousOpsContract contract + */ + verifyErr(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyErr(params))) + return this + }, + /** + * Add a verify_exp(uint64,uint64)uint64 method call against the MiscellaneousOpsContract contract + */ + verifyExp(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyExp(params))) + return this + }, + /** + * Add a verify_expw(uint64,uint64)(uint64,uint64) method call against the MiscellaneousOpsContract contract + */ + verifyExpw(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyExpw(params))) + return this + }, + /** + * Add a verify_extract(byte[],uint64,uint64)byte[] method call against the MiscellaneousOpsContract contract + */ + verifyExtract(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyExtract(params))) + return this + }, + /** + * Add a verify_extract_from_2(byte[])byte[] method call against the MiscellaneousOpsContract contract + */ + verifyExtractFrom_2(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyExtractFrom_2(params))) + return this + }, + /** + * Add a verify_extract_uint16(byte[],uint64)uint64 method call against the MiscellaneousOpsContract contract + */ + verifyExtractUint16(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyExtractUint16(params))) + return this + }, + /** + * Add a verify_extract_uint32(byte[],uint64)uint64 method call against the MiscellaneousOpsContract contract + */ + verifyExtractUint32(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyExtractUint32(params))) + return this + }, + /** + * Add a verify_extract_uint64(byte[],uint64)uint64 method call against the MiscellaneousOpsContract contract + */ + verifyExtractUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyExtractUint64(params))) + return this + }, + /** + * Add a verify_getbit_bytes(byte[],uint64)bool method call against the MiscellaneousOpsContract contract + */ + verifyGetbitBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyGetbitBytes(params))) + return this + }, + /** + * Add a verify_getbit_uint64(uint64,uint64)bool method call against the MiscellaneousOpsContract contract + */ + verifyGetbitUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyGetbitUint64(params))) + return this + }, + /** + * Add a verify_getbyte(byte[],uint64)uint64 method call against the MiscellaneousOpsContract contract + */ + verifyGetbyte(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyGetbyte(params))) + return this + }, + /** + * Add a verify_itob(uint64)byte[] method call against the MiscellaneousOpsContract contract + */ + verifyItob(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyItob(params))) + return this + }, + /** + * Add a verify_mulw(uint64,uint64)(uint64,uint64) method call against the MiscellaneousOpsContract contract + */ + verifyMulw(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyMulw(params))) + return this + }, + /** + * Add a verify_replace(byte[],uint64,byte[])byte[] method call against the MiscellaneousOpsContract contract + */ + verifyReplace(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyReplace(params))) + return this + }, + /** + * Add a verify_select_bytes(byte[],byte[],uint64)byte[] method call against the MiscellaneousOpsContract contract + */ + verifySelectBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifySelectBytes(params))) + return this + }, + /** + * Add a verify_select_uint64(uint64,uint64,uint64)uint64 method call against the MiscellaneousOpsContract contract + */ + verifySelectUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifySelectUint64(params))) + return this + }, + /** + * Add a verify_setbit_bytes(byte[],uint64,bool)byte[] method call against the MiscellaneousOpsContract contract + */ + verifySetbitBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifySetbitBytes(params))) + return this + }, + /** + * Add a verify_setbit_uint64(uint64,uint64,bool)uint64 method call against the MiscellaneousOpsContract contract + */ + verifySetbitUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifySetbitUint64(params))) + return this + }, + /** + * Add a verify_setbyte(byte[],uint64,uint64)byte[] method call against the MiscellaneousOpsContract contract + */ + verifySetbyte(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifySetbyte(params))) + return this + }, + /** + * Add a verify_shl(uint64,uint64)uint64 method call against the MiscellaneousOpsContract contract + */ + verifyShl(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyShl(params))) + return this + }, + /** + * Add a verify_shr(uint64,uint64)uint64 method call against the MiscellaneousOpsContract contract + */ + verifyShr(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyShr(params))) + return this + }, + /** + * Add a verify_sqrt(uint64)uint64 method call against the MiscellaneousOpsContract contract + */ + verifySqrt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifySqrt(params))) + return this + }, + /** + * Add a verify_substring(byte[],uint64,uint64)byte[] method call against the MiscellaneousOpsContract contract + */ + verifySubstring(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifySubstring(params))) + return this + }, + /** + * Add a verify_json_ref_string(byte[],byte[])byte[] method call against the MiscellaneousOpsContract contract + */ + verifyJsonRefString(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyJsonRefString(params))) + return this + }, + /** + * Add a verify_json_ref_uint64(byte[],byte[])uint64 method call against the MiscellaneousOpsContract contract + */ + verifyJsonRefUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyJsonRefUint64(params))) + return this + }, + /** + * Add a verify_json_ref_object(byte[],byte[])byte[] method call against the MiscellaneousOpsContract contract + */ + verifyJsonRefObject(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyJsonRefObject(params))) + return this + }, + /** + * Add a clear state call to the MiscellaneousOpsContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as MiscellaneousOpsContractComposer + } +} +export type MiscellaneousOpsContractComposer = { + /** + * Calls the verify_addw(uint64,uint64)(uint64,uint64) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAddw(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_addw(uint64,uint64)(uint64,uint64)'] | undefined]> + + /** + * Calls the verify_base64_decode_standard(byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBase64DecodeStandard(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_base64_decode_standard(byte[])byte[]'] | undefined]> + + /** + * Calls the verify_base64_decode_url(byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBase64DecodeUrl(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_base64_decode_url(byte[])byte[]'] | undefined]> + + /** + * Calls the verify_bytes_bitlen(byte[],uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBytesBitlen(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_bytes_bitlen(byte[],uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_bitlen(uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Bitlen(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_uint64_bitlen(uint64)uint64'] | undefined]> + + /** + * Calls the verify_bsqrt(byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBsqrt(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_bsqrt(byte[])byte[]'] | undefined]> + + /** + * Calls the verify_btoi(byte[])uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBtoi(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_btoi(byte[])uint64'] | undefined]> + + /** + * Calls the verify_bzero(uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBzero(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_bzero(uint64)byte[]'] | undefined]> + + /** + * Calls the verify_concat(byte[],byte[],uint64,uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyConcat(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_concat(byte[],byte[],uint64,uint64)byte[]'] | undefined]> + + /** + * Calls the verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyDivmodw(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)'] | undefined]> + + /** + * Calls the verify_divw(uint64,uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyDivw(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_divw(uint64,uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_err()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyErr(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_err()void'] | undefined]> + + /** + * Calls the verify_exp(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyExp(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_exp(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_expw(uint64,uint64)(uint64,uint64) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyExpw(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_expw(uint64,uint64)(uint64,uint64)'] | undefined]> + + /** + * Calls the verify_extract(byte[],uint64,uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyExtract(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_extract(byte[],uint64,uint64)byte[]'] | undefined]> + + /** + * Calls the verify_extract_from_2(byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyExtractFrom_2(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_extract_from_2(byte[])byte[]'] | undefined]> + + /** + * Calls the verify_extract_uint16(byte[],uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyExtractUint16(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_extract_uint16(byte[],uint64)uint64'] | undefined]> + + /** + * Calls the verify_extract_uint32(byte[],uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyExtractUint32(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_extract_uint32(byte[],uint64)uint64'] | undefined]> + + /** + * Calls the verify_extract_uint64(byte[],uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyExtractUint64(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_extract_uint64(byte[],uint64)uint64'] | undefined]> + + /** + * Calls the verify_getbit_bytes(byte[],uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyGetbitBytes(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_getbit_bytes(byte[],uint64)bool'] | undefined]> + + /** + * Calls the verify_getbit_uint64(uint64,uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyGetbitUint64(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_getbit_uint64(uint64,uint64)bool'] | undefined]> + + /** + * Calls the verify_getbyte(byte[],uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyGetbyte(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_getbyte(byte[],uint64)uint64'] | undefined]> + + /** + * Calls the verify_itob(uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyItob(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_itob(uint64)byte[]'] | undefined]> + + /** + * Calls the verify_mulw(uint64,uint64)(uint64,uint64) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyMulw(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_mulw(uint64,uint64)(uint64,uint64)'] | undefined]> + + /** + * Calls the verify_replace(byte[],uint64,byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyReplace(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_replace(byte[],uint64,byte[])byte[]'] | undefined]> + + /** + * Calls the verify_select_bytes(byte[],byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifySelectBytes(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_select_bytes(byte[],byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_select_uint64(uint64,uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifySelectUint64(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_select_uint64(uint64,uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_setbit_bytes(byte[],uint64,bool)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifySetbitBytes(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_setbit_bytes(byte[],uint64,bool)byte[]'] | undefined]> + + /** + * Calls the verify_setbit_uint64(uint64,uint64,bool)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifySetbitUint64(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_setbit_uint64(uint64,uint64,bool)uint64'] | undefined]> + + /** + * Calls the verify_setbyte(byte[],uint64,uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifySetbyte(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_setbyte(byte[],uint64,uint64)byte[]'] | undefined]> + + /** + * Calls the verify_shl(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyShl(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_shl(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_shr(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyShr(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_shr(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_sqrt(uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifySqrt(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_sqrt(uint64)uint64'] | undefined]> + + /** + * Calls the verify_substring(byte[],uint64,uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifySubstring(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_substring(byte[],uint64,uint64)byte[]'] | undefined]> + + /** + * Calls the verify_json_ref_string(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyJsonRefString(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_json_ref_string(byte[],byte[])byte[]'] | undefined]> + + /** + * Calls the verify_json_ref_uint64(byte[],byte[])uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyJsonRefUint64(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_json_ref_uint64(byte[],byte[])uint64'] | undefined]> + + /** + * Calls the verify_json_ref_object(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyJsonRefObject(params?: CallParams): MiscellaneousOpsContractComposer<[...TReturns, MiscellaneousOpsContractReturns['verify_json_ref_object(byte[],byte[])byte[]'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the MiscellaneousOpsContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): MiscellaneousOpsContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): MiscellaneousOpsContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type MiscellaneousOpsContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/PrimitiveOpsContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/PrimitiveOpsContract.ts new file mode 100644 index 0000000..5ff671b --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/PrimitiveOpsContract.ts @@ -0,0 +1,4701 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"PrimitiveOpsContract","structs":{},"methods":[{"name":"verify_uint64_init","args":[{"type":"byte[]","name":"raw_value"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_add","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_sub","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_mul","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_div","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_mod","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_and","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_or","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_xor","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_not","args":[{"type":"uint64","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_lshift","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_rshift","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_pow","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_eq","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_ne","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_lt","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_le","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_gt","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_uint64_ge","args":[{"type":"uint64","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bytes_init","args":[{"type":"uint64","name":"raw_value"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bytes_add","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"},{"type":"uint64","name":"pad_a_size"},{"type":"uint64","name":"pad_b_size"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bytes_eq","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bytes_ne","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bytes_and","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bytes_or","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bytes_xor","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_bytes_not","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"pad_size"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_add","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_add_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_sub","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_sub_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_mul","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_mul_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_div","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_div_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_mod","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_mod_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_and","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_and_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_or","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_or_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_xor","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_xor_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_eq","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_eq_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_ne","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_ne_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_lt","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_lt_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_le","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_le_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_gt","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_gt_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_ge","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_biguint_ge_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_string_init","args":[{"type":"string","name":"a"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_string_startswith","args":[{"type":"string","name":"a"},{"type":"string","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_string_endswith","args":[{"type":"string","name":"a"},{"type":"string","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_string_join","args":[{"type":"string","name":"a"},{"type":"string","name":"b"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_log","args":[{"type":"string","name":"a"},{"type":"uint64","name":"b"},{"type":"byte[]","name":"c"},{"type":"byte[]","name":"d"},{"type":"bool","name":"e"},{"type":"string","name":"f"},{"type":"uint64","name":"g"},{"type":"uint256","name":"h"},{"type":"ufixed32x8","name":"i"},{"type":"ufixed256x16","name":"j"},{"type":"byte[]","name":"k"},{"type":"byte[]","name":"m"},{"type":"byte[]","name":"n"},{"type":"byte[5]","name":"o"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDAwICItIiAweDE1MWY3Yzc1MDAyMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVANjcKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDcyNWM2OTJiIDB4MTczMTQ1NTkgMHg1M2YzNDg5MyAweDg4YzhiMjY5IDB4YTQ2NGI3YWIgMHg5YzhiMTFiOCAweDZmNDA2NTRlIDB4ZWM5YTI5NzQgMHhjNzkzNzA4ZiAweDdkZGI3NDk5IDB4YTIxYzQ0M2QgMHg2ZTdmYjIxMiAweGIwMDdmY2IwIDB4MmViYzIwZDQgMHhiMDk1NGI2NiAweGRkMTQwYWVmIDB4YWNlNDc0ZGEgMHhiYTY5NDk5MCAweDZkYjU4MWMwIDB4OTFjOGRiODkgMHhkYmU3NzE1OCAweDlhMGYyMmUxIDB4NjQwMzNkMzcgMHgyYTcyMzdjNSAweGUzYTk0NDU4IDB4NDJmODdmN2QgMHgyYjU1NDJhNCAweDliZTJmYmU5IDB4MWNkOTI1MTUgMHg2NGUxNzA1YyAweGYxMjcxYzUwIDB4MmFiNjNiNzAgMHg4MzRiYjdkMiAweDUzMTYyMGQ3IDB4M2ZiOWU3NjkgMHhmYThkYjBiYyAweGE3MmVhNDg1IDB4YjdiMGJhMTkgMHg3NDQ2MGM0MiAweGFiMzIwNzM4IDB4NTJhZDQ2NTQgMHgxMDE1NjM5OSAweDBmMDc1OTU3IDB4YmQ4NDNkZmYgMHhiMzc3ZDM4MSAweDg5NzY3MjY1IDB4NDU2YjRiMjMgMHgzM2QxYjg4YyAweDZiZjk3M2VhIDB4NjdjZDZiYjIgMHgzZjU4ODA1YSAweDFlMTMwMDM5IDB4NTA5ZGM5MWQgMHhhNTY0YTIwMiAweDIzNjUwNzYzIDB4ZjhjOGY4ZDUgMHgyM2ZhZjdhNCAweDdkMGFmZTE1IDB4NDg1ODFhZGYgMHgzZGFlZjljZCAvLyBtZXRob2QgInZlcmlmeV91aW50NjRfaW5pdChieXRlW10pdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X2FkZCh1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9zdWIodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfbXVsKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X2Rpdih1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9tb2QodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfYW5kKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X29yKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X3hvcih1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9ub3QodWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9sc2hpZnQodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfcnNoaWZ0KHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X3Bvdyh1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9lcSh1aW50NjQsdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50NjRfbmUodWludDY0LHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X2x0KHVpbnQ2NCx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9sZSh1aW50NjQsdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50NjRfZ3QodWludDY0LHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X2dlKHVpbnQ2NCx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVzX2luaXQodWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2J5dGVzX2FkZChieXRlW10sYnl0ZVtdLHVpbnQ2NCx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZXNfZXEoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZXNfbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZXNfYW5kKGJ5dGVbXSxieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZXNfb3IoYnl0ZVtdLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9ieXRlc194b3IoYnl0ZVtdLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9ieXRlc19ub3QoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2FkZChieXRlW10sYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfYWRkX3VpbnQ2NChieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfc3ViKGJ5dGVbXSxieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9zdWJfdWludDY0KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9tdWwoYnl0ZVtdLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X211bF91aW50NjQoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2RpdihieXRlW10sYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfZGl2X3VpbnQ2NChieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfbW9kKGJ5dGVbXSxieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9tb2RfdWludDY0KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9hbmQoYnl0ZVtdLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2FuZF91aW50NjQoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X29yKGJ5dGVbXSxieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9vcl91aW50NjQoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X3hvcihieXRlW10sYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfeG9yX3VpbnQ2NChieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfZXEoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9lcV91aW50NjQoYnl0ZVtdLHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X25lX3VpbnQ2NChieXRlW10sdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfbHRfdWludDY0KGJ5dGVbXSx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfbGUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9sZV91aW50NjQoYnl0ZVtdLHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2d0X3VpbnQ2NChieXRlW10sdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfZ2VfdWludDY0KGJ5dGVbXSx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19pbml0KHN0cmluZylzdHJpbmciLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfc3RhcnRzd2l0aChzdHJpbmcsc3RyaW5nKWJvb2wiLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfZW5kc3dpdGgoc3RyaW5nLHN0cmluZylib29sIiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2pvaW4oc3RyaW5nLHN0cmluZylzdHJpbmciLCBtZXRob2QgInZlcmlmeV9sb2coc3RyaW5nLHVpbnQ2NCxieXRlW10sYnl0ZVtdLGJvb2wsc3RyaW5nLHVpbnQ2NCx1aW50MjU2LHVmaXhlZDMyeDgsdWZpeGVkMjU2eDE2LGJ5dGVbXSxieXRlW10sYnl0ZVtdLGJ5dGVbNV0pdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHZlcmlmeV91aW50NjRfaW5pdCB2ZXJpZnlfdWludDY0X2FkZCB2ZXJpZnlfdWludDY0X3N1YiB2ZXJpZnlfdWludDY0X211bCB2ZXJpZnlfdWludDY0X2RpdiB2ZXJpZnlfdWludDY0X21vZCB2ZXJpZnlfdWludDY0X2FuZCB2ZXJpZnlfdWludDY0X29yIHZlcmlmeV91aW50NjRfeG9yIHZlcmlmeV91aW50NjRfbm90IHZlcmlmeV91aW50NjRfbHNoaWZ0IHZlcmlmeV91aW50NjRfcnNoaWZ0IHZlcmlmeV91aW50NjRfcG93IHZlcmlmeV91aW50NjRfZXEgdmVyaWZ5X3VpbnQ2NF9uZSB2ZXJpZnlfdWludDY0X2x0IHZlcmlmeV91aW50NjRfbGUgdmVyaWZ5X3VpbnQ2NF9ndCB2ZXJpZnlfdWludDY0X2dlIHZlcmlmeV9ieXRlc19pbml0IHZlcmlmeV9ieXRlc19hZGQgdmVyaWZ5X2J5dGVzX2VxIHZlcmlmeV9ieXRlc19uZSB2ZXJpZnlfYnl0ZXNfYW5kIHZlcmlmeV9ieXRlc19vciB2ZXJpZnlfYnl0ZXNfeG9yIHZlcmlmeV9ieXRlc19ub3QgdmVyaWZ5X2JpZ3VpbnRfYWRkIHZlcmlmeV9iaWd1aW50X2FkZF91aW50NjQgdmVyaWZ5X2JpZ3VpbnRfc3ViIHZlcmlmeV9iaWd1aW50X3N1Yl91aW50NjQgdmVyaWZ5X2JpZ3VpbnRfbXVsIHZlcmlmeV9iaWd1aW50X211bF91aW50NjQgdmVyaWZ5X2JpZ3VpbnRfZGl2IHZlcmlmeV9iaWd1aW50X2Rpdl91aW50NjQgdmVyaWZ5X2JpZ3VpbnRfbW9kIHZlcmlmeV9iaWd1aW50X21vZF91aW50NjQgdmVyaWZ5X2JpZ3VpbnRfYW5kIHZlcmlmeV9iaWd1aW50X2FuZF91aW50NjQgdmVyaWZ5X2JpZ3VpbnRfb3IgdmVyaWZ5X2JpZ3VpbnRfb3JfdWludDY0IHZlcmlmeV9iaWd1aW50X3hvciB2ZXJpZnlfYmlndWludF94b3JfdWludDY0IHZlcmlmeV9iaWd1aW50X2VxIHZlcmlmeV9iaWd1aW50X2VxX3VpbnQ2NCB2ZXJpZnlfYmlndWludF9uZSB2ZXJpZnlfYmlndWludF9uZV91aW50NjQgdmVyaWZ5X2JpZ3VpbnRfbHQgdmVyaWZ5X2JpZ3VpbnRfbHRfdWludDY0IHZlcmlmeV9iaWd1aW50X2xlIHZlcmlmeV9iaWd1aW50X2xlX3VpbnQ2NCB2ZXJpZnlfYmlndWludF9ndCB2ZXJpZnlfYmlndWludF9ndF91aW50NjQgdmVyaWZ5X2JpZ3VpbnRfZ2UgdmVyaWZ5X2JpZ3VpbnRfZ2VfdWludDY0IHZlcmlmeV9zdHJpbmdfaW5pdCB2ZXJpZnlfc3RyaW5nX3N0YXJ0c3dpdGggdmVyaWZ5X3N0cmluZ19lbmRzd2l0aCB2ZXJpZnlfc3RyaW5nX2pvaW4gdmVyaWZ5X2xvZwogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDY3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfaW5pdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50NjRfaW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjkKICAgIC8vIHJlc3VsdCA9IG9wLmJ0b2kocmF3X3ZhbHVlKQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9hZGRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludDY0X2FkZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE0CiAgICAvLyByZXN1bHQgPSBhICsgYgogICAgKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfc3ViW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3VpbnQ2NF9zdWI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxOQogICAgLy8gcmVzdWx0ID0gYSAtIGIKICAgIC0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X211bFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50NjRfbXVsOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjQKICAgIC8vIHJlc3VsdCA9IGEgKiBiCiAgICAqCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9kaXZbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludDY0X2RpdjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI5CiAgICAvLyByZXN1bHQgPSBhIC8vIGIKICAgIC8KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X21vZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50NjRfbW9kOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTozMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzQKICAgIC8vIHJlc3VsdCA9IGEgJSBiCiAgICAlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9hbmRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludDY0X2FuZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjM5CiAgICAvLyByZXN1bHQgPSBhICYgYgogICAgJgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTozNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfb3Jbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludDY0X29yOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6NDQKICAgIC8vIHJlc3VsdCA9IGEgfCBiCiAgICB8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF94b3Jbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludDY0X3hvcjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6NDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyByZXN1bHQgPSBhIF4gYgogICAgXgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfbm90W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3VpbnQ2NF9ub3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo1NAogICAgLy8gcmVzdWx0ID0gfmEKICAgIH4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6NTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X2xzaGlmdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50NjRfbHNoaWZ0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6NTkKICAgIC8vIHJlc3VsdCA9IGEgPDwgYgogICAgc2hsCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9yc2hpZnRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludDY0X3JzaGlmdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6NjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjY0CiAgICAvLyByZXN1bHQgPSBhID4+IGIKICAgIHNocgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo2MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfcG93W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3VpbnQ2NF9wb3c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo2OQogICAgLy8gcmVzdWx0ID0gYSoqYgogICAgZXhwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9lcVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50NjRfZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjcyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo3NAogICAgLy8gcmVzdWx0ID0gYSA9PSBiCiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo3MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X25lW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3VpbnQ2NF9uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6NzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5Ojc5CiAgICAvLyByZXN1bHQgPSBhICE9IGIKICAgICE9CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5Ojc3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfbHRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludDY0X2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6ODQKICAgIC8vIHJlc3VsdCA9IGEgPCBiCiAgICA8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfbGVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfdWludDY0X2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo4NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6ODkKICAgIC8vIHJlc3VsdCA9IGEgPD0gYgogICAgPD0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6ODcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9ndFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50NjRfZ3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo5NAogICAgLy8gcmVzdWx0ID0gYSA+IGIKICAgID4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6OTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9nZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV91aW50NjRfZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5Ojk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo5OQogICAgLy8gcmVzdWx0ID0gYSA+PSBiCiAgICA+PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTo5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfaW5pdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9ieXRlc19pbml0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEwNAogICAgLy8gcmVzdWx0ID0gb3AuaXRvYihyYXdfdmFsdWUpCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwOAogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19hZGRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYnl0ZXNfYWRkOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTExCiAgICAvLyBhID0gb3AuYnplcm8ocGFkX2Ffc2l6ZSkgKyBhCiAgICBzd2FwCiAgICBiemVybwogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTEyCiAgICAvLyBiID0gb3AuYnplcm8ocGFkX2Jfc2l6ZSkgKyBiCiAgICBzd2FwCiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTEzCiAgICAvLyByZXN1bHQgPSBhICsgYgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjExNAogICAgLy8gcmVzdWx0ID0gb3Auc2hhMjU2KHJlc3VsdCkKICAgIHNoYTI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUwMDIwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVzX2VxW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2J5dGVzX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTE5CiAgICAvLyByZXN1bHQgPSBhID09IGIKICAgID09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjExNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfbmVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYnl0ZXNfbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMjQKICAgIC8vIHJlc3VsdCA9IGEgIT0gYgogICAgIT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19hbmRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYnl0ZXNfYW5kOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTI5CiAgICAvLyByZXN1bHQgPSBhICYgYgogICAgYiYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19vcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9ieXRlc19vcjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEzNAogICAgLy8gcmVzdWx0ID0gYSB8IGIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEzMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfeG9yW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2J5dGVzX3hvcjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEzOQogICAgLy8gcmVzdWx0ID0gYSBeIGIKICAgIGJeCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjEzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfbm90W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2J5dGVzX25vdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTQ0CiAgICAvLyBhID0gb3AuYnplcm8ocGFkX3NpemUpICsgYQogICAgYnplcm8KICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxNDUKICAgIC8vIHJlc3VsdCA9IH5hCiAgICBifgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxNDYKICAgIC8vIHJlc3VsdCA9IG9wLnNoYTI1NihyZXN1bHQpCiAgICBzaGEyNTYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1MDAyMAogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2FkZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X2FkZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE1MwogICAgLy8gcmVzdWx0ID0gYV9iaWd1aW50ICsgYl9iaWd1aW50CiAgICBiKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxNDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfYWRkX3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X2FkZF91aW50NjQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE1OQogICAgLy8gcmVzdWx0ID0gYV9iaWd1aW50ICsgYgogICAgaXRvYgogICAgYisKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTU2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X3N1Yltyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X3N1YjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTYyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gcmVzdWx0ID0gYV9iaWd1aW50IC0gYl9iaWd1aW50CiAgICBiLQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfc3ViX3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X3N1Yl91aW50NjQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE3MgogICAgLy8gcmVzdWx0ID0gYV9iaWd1aW50IC0gYgogICAgaXRvYgogICAgYi0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X211bFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X211bDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE3OQogICAgLy8gcmVzdWx0ID0gYV9iaWd1aW50ICogYl9iaWd1aW50CiAgICBiKgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxNzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfbXVsX3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X211bF91aW50NjQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE4NQogICAgLy8gcmVzdWx0ID0gYV9iaWd1aW50ICogYgogICAgaXRvYgogICAgYioKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2Rpdltyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X2RpdjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjE5MgogICAgLy8gcmVzdWx0ID0gYV9iaWd1aW50IC8vIGJfYmlndWludAogICAgYi8KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MTg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2Rpdl91aW50NjRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludF9kaXZfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxOTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxOTgKICAgIC8vIHJlc3VsdCA9IGFfYmlndWludCAvLyBiCiAgICBpdG9iCiAgICBiLwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToxOTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfbW9kW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRfbW9kOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjA1CiAgICAvLyByZXN1bHQgPSBhX2JpZ3VpbnQgJSBiX2JpZ3VpbnQKICAgIGIlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjIwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9tb2RfdWludDY0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRfbW9kX3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjA4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjExCiAgICAvLyByZXN1bHQgPSBhX2JpZ3VpbnQgJSBiCiAgICBpdG9iCiAgICBiJQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfYW5kW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRfYW5kOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjE4CiAgICAvLyByZXN1bHQgPSBhX2JpZ3VpbnQgJiBiX2JpZ3VpbnQKICAgIGImCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjIxNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9hbmRfdWludDY0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRfYW5kX3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjI0CiAgICAvLyByZXN1bHQgPSBhX2JpZ3VpbnQgJiBiCiAgICBpdG9iCiAgICBiJgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfb3Jbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludF9vcjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjIzMQogICAgLy8gcmVzdWx0ID0gYV9iaWd1aW50IHwgYl9iaWd1aW50CiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfb3JfdWludDY0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRfb3JfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyMzcKICAgIC8vIHJlc3VsdCA9IGFfYmlndWludCB8IGIKICAgIGl0b2IKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjIzNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF94b3Jbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludF94b3I6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI0MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyNDQKICAgIC8vIHJlc3VsdCA9IGFfYmlndWludCBeIGJfYmlndWludAogICAgYl4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjQwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X3hvcl91aW50NjRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludF94b3JfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyNDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyNTAKICAgIC8vIHJlc3VsdCA9IGFfYmlndWludCBeIGIKICAgIGl0b2IKICAgIGJeCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9lcVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyNTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjU3CiAgICAvLyByZXN1bHQgPSBhX2JpZ3VpbnQgPT0gYl9iaWd1aW50CiAgICBiPT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2VxX3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X2VxX3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjYzCiAgICAvLyByZXN1bHQgPSBhX2JpZ3VpbnQgPT0gYgogICAgaXRvYgogICAgYj09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI2MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9uZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyNjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjcwCiAgICAvLyByZXN1bHQgPSBhX2JpZ3VpbnQgIT0gYl9iaWd1aW50CiAgICBiIT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X25lX3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X25lX3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6Mjc2CiAgICAvLyByZXN1bHQgPSBhX2JpZ3VpbnQgIT0gYgogICAgaXRvYgogICAgYiE9CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9sdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MjgzCiAgICAvLyByZXN1bHQgPSBhX2JpZ3VpbnQgPCBiX2JpZ3VpbnQKICAgIGI8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9sdF91aW50NjRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludF9sdF91aW50NjQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI4OQogICAgLy8gcmVzdWx0ID0gYV9iaWd1aW50IDwgYgogICAgaXRvYgogICAgYjwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6Mjg2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2xlW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRfbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjI5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyOTYKICAgIC8vIHJlc3VsdCA9IGFfYmlndWludCA8PSBiX2JpZ3VpbnQKICAgIGI8PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfbGVfdWludDY0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRfbGVfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weToyOTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTozMDIKICAgIC8vIHJlc3VsdCA9IGFfYmlndWludCA8PSBiCiAgICBpdG9iCiAgICBiPD0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6Mjk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2d0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2JpZ3VpbnRfZ3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjMwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTozMDkKICAgIC8vIHJlc3VsdCA9IGFfYmlndWludCA+IGJfYmlndWludAogICAgYj4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2d0X3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9iaWd1aW50X2d0X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzE1CiAgICAvLyByZXN1bHQgPSBhX2JpZ3VpbnQgPiBiCiAgICBpdG9iCiAgICBiPgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTozMTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludF9nZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjMyMgogICAgLy8gcmVzdWx0ID0gYV9iaWd1aW50ID49IGJfYmlndWludAogICAgYj49CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjMxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9nZV91aW50NjRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYmlndWludF9nZV91aW50NjQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjMyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjMyOAogICAgLy8gcmVzdWx0ID0gYV9iaWd1aW50ID49IGIKICAgIGl0b2IKICAgIGI+PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTozMjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3N0cmluZ19pbml0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3N0cmluZ19pbml0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTozMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzMzCiAgICAvLyByZXN1bHQgPSBTdHJpbmcoIkhlbGxvLCAiKSArIGEKICAgIHB1c2hieXRlcyAiSGVsbG8sICIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTozMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuUHJpbWl0aXZlT3BzLmNvbnRyYWN0LlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfc3RhcnRzd2l0aFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9zdHJpbmdfc3RhcnRzd2l0aDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzM4CiAgICAvLyByZXN1bHQgPSBhLnN0YXJ0c3dpdGgoYikKICAgIGxlbgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGxlbgogICAgPgogICAgYnogdmVyaWZ5X3N0cmluZ19zdGFydHN3aXRoX3Rlcm5hcnlfZmFsc2VAMwogICAgaW50Y18xIC8vIDAKCnZlcmlmeV9zdHJpbmdfc3RhcnRzd2l0aF90ZXJuYXJ5X21lcmdlQDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjMzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKdmVyaWZ5X3N0cmluZ19zdGFydHN3aXRoX3Rlcm5hcnlfZmFsc2VAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzM4CiAgICAvLyByZXN1bHQgPSBhLnN0YXJ0c3dpdGgoYikKICAgIGRpZyAyCiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDIKICAgIGV4dHJhY3QzCiAgICBkaWcgMgogICAgPT0KICAgIGIgdmVyaWZ5X3N0cmluZ19zdGFydHN3aXRoX3Rlcm5hcnlfbWVyZ2VANAoKCi8vIHRlc3RzLmFydGlmYWN0cy5QcmltaXRpdmVPcHMuY29udHJhY3QuUHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3N0cmluZ19lbmRzd2l0aFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9zdHJpbmdfZW5kc3dpdGg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjM0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjM0MwogICAgLy8gcmVzdWx0ID0gYS5lbmRzd2l0aChiKQogICAgbGVuCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgbGVuCiAgICBkdXAKICAgIGNvdmVyIDIKICAgID4KICAgIGJ6IHZlcmlmeV9zdHJpbmdfZW5kc3dpdGhfdGVybmFyeV9mYWxzZUAzCiAgICBpbnRjXzEgLy8gMAoKdmVyaWZ5X3N0cmluZ19lbmRzd2l0aF90ZXJuYXJ5X21lcmdlQDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjM0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKdmVyaWZ5X3N0cmluZ19lbmRzd2l0aF90ZXJuYXJ5X2ZhbHNlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjM0MwogICAgLy8gcmVzdWx0ID0gYS5lbmRzd2l0aChiKQogICAgZHVwCiAgICBkaWcgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICAtCiAgICBkaWcgNQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0MwogICAgZGlnIDMKICAgID09CiAgICBiIHZlcmlmeV9zdHJpbmdfZW5kc3dpdGhfdGVybmFyeV9tZXJnZUA0CgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2pvaW5bcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfc3RyaW5nX2pvaW46CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvUHJpbWl0aXZlT3BzL2NvbnRyYWN0LnB5OjM0NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzQ4CiAgICAvLyByZXN1bHQgPSBTdHJpbmcoIiwgIikuam9pbigoYSwgYikpCiAgICBzd2FwCiAgICBwdXNoYnl0ZXMgIiwgIgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlByaW1pdGl2ZU9wcy5jb250cmFjdC5QcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfbG9nW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTMKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxNAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1ByaW1pdGl2ZU9wcy9jb250cmFjdC5weTozNzMKICAgIC8vIGxvZyhhLCBiLCBjLCBkX2JpZ3VpbnQsIGUsIGYsIGcsIGgsIGksIGosIGFyYzRfaywgYXJjNF9tLCBhcmM0X24sIG8sIHNlcD0iLSIpCiAgICB1bmNvdmVyIDEzCiAgICBieXRlY18yIC8vICItIgogICAgY29uY2F0CiAgICB1bmNvdmVyIDEzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjXzIgLy8gIi0iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTIKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAiLSIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxMQogICAgY29uY2F0CiAgICBieXRlY18yIC8vICItIgogICAgY29uY2F0CiAgICB1bmNvdmVyIDEwCiAgICBjb25jYXQKICAgIGJ5dGVjXzIgLy8gIi0iCiAgICBjb25jYXQKICAgIHVuY292ZXIgOQogICAgY29uY2F0CiAgICBieXRlY18yIC8vICItIgogICAgY29uY2F0CiAgICB1bmNvdmVyIDgKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAiLSIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA3CiAgICBjb25jYXQKICAgIGJ5dGVjXzIgLy8gIi0iCiAgICBjb25jYXQKICAgIHVuY292ZXIgNgogICAgY29uY2F0CiAgICBieXRlY18yIC8vICItIgogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAiLSIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIGJ5dGVjXzIgLy8gIi0iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICBieXRlY18yIC8vICItIgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAiLSIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9QcmltaXRpdmVPcHMvY29udHJhY3QucHk6MzUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyACAQAmBAQVH3x1AQABLQYVH3x1ACAxG0EBszEZFEQxGESCPARyXGkrBBcxRVkEU/NIkwSIyLJpBKRkt6sEnIsRuARvQGVOBOyaKXQEx5NwjwR923SZBKIcRD0Ebn+yEgSwB/ywBC68INQEsJVLZgTdFArvBKzkdNoEumlJkARttYHABJHI24kE2+dxWASaDyLhBGQDPTcEKnI3xQTjqURYBEL4f30EK1VCpASb4vvpBBzZJRUEZOFwXATxJxxQBCq2O3AEg0u30gRTFiDXBD+552kE+o2wvASnLqSFBLewuhkEdEYMQgSrMgc4BFKtRlQEEBVjmQQPB1lXBL2EPf8Es3fTgQSJdnJlBEVrSyMEM9G4jARr+XPqBGfNa7IEP1iAWgQeEwA5BFCdyR0EpWSiAgQjZQdjBPjI+NUEI/r3pAR9Cv4VBEhYGt8EPa75zTYaAI48AAkAFwAnADcARwBXAGcAdwCHAJcAowCzAMMA0wDnAPsBDwEjATcBSwFdAYMBmwGzAc4B6QIEAhkCNAJOAmkCgwKeArgC0wLtAwgDIgM9A1cDcgOMA6cDwQPZA/AECAQfBDcETgRmBH0ElQSsBMQE2wT6BSsFZgWIADEZFDEYFBBDNhoBVwIAFxYoTFCwIkM2GgEXNhoCFwgWKExQsCJDNhoBFzYaAhcJFihMULAiQzYaARc2GgIXCxYoTFCwIkM2GgEXNhoCFwoWKExQsCJDNhoBFzYaAhcYFihMULAiQzYaARc2GgIXGhYoTFCwIkM2GgEXNhoCFxkWKExQsCJDNhoBFzYaAhcbFihMULAiQzYaARccFihMULAiQzYaARc2GgIXkBYoTFCwIkM2GgEXNhoCF5EWKExQsCJDNhoBFzYaAheUFihMULAiQzYaARc2GgIXEikjTwJUKExQsCJDNhoBFzYaAhcTKSNPAlQoTFCwIkM2GgEXNhoCFwwpI08CVChMULAiQzYaARc2GgIXDikjTwJUKExQsCJDNhoBFzYaAhcNKSNPAlQoTFCwIkM2GgEXNhoCFw8pI08CVChMULAiQzYaARcWgAYVH3x1AAhMULAiQzYaAVcCADYaAlcCADYaAxc2GgQXTK9PA1BMr08CUFABK0xQsCJDNhoBVwIANhoCVwIAEikjTwJUKExQsCJDNhoBVwIANhoCVwIAEykjTwJUKExQsCJDNhoBVwIANhoCVwIArEkVFlcGAkxQKExQsCJDNhoBVwIANhoCVwIAq0kVFlcGAkxQKExQsCJDNhoBVwIANhoCVwIArUkVFlcGAkxQKExQsCJDNhoBVwIANhoCF69MUK4BK0xQsCJDNhoBVwIANhoCVwIAoEkVFlcGAkxQKExQsCJDNhoBVwIANhoCFxagSRUWVwYCTFAoTFCwIkM2GgFXAgA2GgJXAgChSRUWVwYCTFAoTFCwIkM2GgFXAgA2GgIXFqFJFRZXBgJMUChMULAiQzYaAVcCADYaAlcCAKNJFRZXBgJMUChMULAiQzYaAVcCADYaAhcWo0kVFlcGAkxQKExQsCJDNhoBVwIANhoCVwIAokkVFlcGAkxQKExQsCJDNhoBVwIANhoCFxaiSRUWVwYCTFAoTFCwIkM2GgFXAgA2GgJXAgCqSRUWVwYCTFAoTFCwIkM2GgFXAgA2GgIXFqpJFRZXBgJMUChMULAiQzYaAVcCADYaAlcCAKxJFRZXBgJMUChMULAiQzYaAVcCADYaAhcWrEkVFlcGAkxQKExQsCJDNhoBVwIANhoCVwIAq0kVFlcGAkxQKExQsCJDNhoBVwIANhoCFxarSRUWVwYCTFAoTFCwIkM2GgFXAgA2GgJXAgCtSRUWVwYCTFAoTFCwIkM2GgFXAgA2GgIXFq1JFRZXBgJMUChMULAiQzYaAVcCADYaAlcCAKgpI08CVChMULAiQzYaAVcCADYaAhcWqCkjTwJUKExQsCJDNhoBVwIANhoCVwIAqSkjTwJUKExQsCJDNhoBVwIANhoCFxapKSNPAlQoTFCwIkM2GgFXAgA2GgJXAgCkKSNPAlQoTFCwIkM2GgFXAgA2GgIXFqQpI08CVChMULAiQzYaAVcCADYaAlcCAKYpI08CVChMULAiQzYaAVcCADYaAhcWpikjTwJUKExQsCJDNhoBVwIANhoCVwIApSkjTwJUKExQsCJDNhoBVwIANhoCFxalKSNPAlQoTFCwIkM2GgFXAgA2GgJXAgCnKSNPAlQoTFCwIkM2GgFXAgA2GgIXFqcpI08CVChMULAiQzYaAVcCAIAHSGVsbG8sIExQSRUWVwYCTFAoTFCwIkM2GgFXAgBJNhoCVwIASU4CFUlPAhUNQQAMIykjTwJUKExQsCJDSwIjSwJYSwISQv/pNhoBVwIASTYaAlcCAElOAhVJTwIVSU4CDUEADCMpI08CVChMULAiQ0lLAklOAglLBUxPAlhLAxJC/+I2GgFXAgA2GgJXAgBMgAIsIFBMUEkVFlcGAkxQKExQsCJDNhoBVwIANhoCFzYaA1cCADYaBFcCADYaBTYaBjYaBzYaCDYaCTYaCjYaC1cCADYaDFcCADYaDVcCADYaDk8NKlBPDRZQKlBPDFAqUE8LUCpQTwpQKlBPCVAqUE8IUCpQTwdQKlBPBlAqUE8FUCpQTwRQKlBPA1AqUE8CUCpQTFCwIkM=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the PrimitiveOpsContract contract + */ +export type PrimitiveOpsContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'verify_uint64_init(byte[])uint64': { + rawValue: Uint8Array + } + 'verify_uint64_add(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_sub(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_mul(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_div(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_mod(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_and(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_or(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_xor(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_not(uint64)uint64': { + a: bigint | number + } + 'verify_uint64_lshift(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_rshift(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_pow(uint64,uint64)uint64': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_eq(uint64,uint64)bool': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_ne(uint64,uint64)bool': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_lt(uint64,uint64)bool': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_le(uint64,uint64)bool': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_gt(uint64,uint64)bool': { + a: bigint | number + b: bigint | number + } + 'verify_uint64_ge(uint64,uint64)bool': { + a: bigint | number + b: bigint | number + } + 'verify_bytes_init(uint64)byte[]': { + rawValue: bigint | number + } + 'verify_bytes_add(byte[],byte[],uint64,uint64)byte[]': { + a: Uint8Array + b: Uint8Array + padASize: bigint | number + padBSize: bigint | number + } + 'verify_bytes_eq(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_bytes_ne(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_bytes_and(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + 'verify_bytes_or(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + 'verify_bytes_xor(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + 'verify_bytes_not(byte[],uint64)byte[]': { + a: Uint8Array + padSize: bigint | number + } + 'verify_biguint_add(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_add_uint64(byte[],uint64)byte[]': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_sub(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_sub_uint64(byte[],uint64)byte[]': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_mul(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_mul_uint64(byte[],uint64)byte[]': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_div(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_div_uint64(byte[],uint64)byte[]': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_mod(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_mod_uint64(byte[],uint64)byte[]': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_and(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_and_uint64(byte[],uint64)byte[]': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_or(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_or_uint64(byte[],uint64)byte[]': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_xor(byte[],byte[])byte[]': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_xor_uint64(byte[],uint64)byte[]': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_eq(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_eq_uint64(byte[],uint64)bool': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_ne(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_ne_uint64(byte[],uint64)bool': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_lt(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_lt_uint64(byte[],uint64)bool': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_le(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_le_uint64(byte[],uint64)bool': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_gt(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_gt_uint64(byte[],uint64)bool': { + a: Uint8Array + b: bigint | number + } + 'verify_biguint_ge(byte[],byte[])bool': { + a: Uint8Array + b: Uint8Array + } + 'verify_biguint_ge_uint64(byte[],uint64)bool': { + a: Uint8Array + b: bigint | number + } + 'verify_string_init(string)string': { + a: string + } + 'verify_string_startswith(string,string)bool': { + a: string + b: string + } + 'verify_string_endswith(string,string)bool': { + a: string + b: string + } + 'verify_string_join(string,string)string': { + a: string + b: string + } + 'verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void': { + a: string + b: bigint | number + c: Uint8Array + d: Uint8Array + e: boolean + f: string + g: bigint | number + h: bigint | number + i: number + j: number + k: Uint8Array + m: Uint8Array + n: Uint8Array + o: Uint8Array + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'verify_uint64_init(byte[])uint64': [rawValue: Uint8Array] + 'verify_uint64_add(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_uint64_sub(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_uint64_mul(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_uint64_div(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_uint64_mod(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_uint64_and(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_uint64_or(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_uint64_xor(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_uint64_not(uint64)uint64': [a: bigint | number] + 'verify_uint64_lshift(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_uint64_rshift(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_uint64_pow(uint64,uint64)uint64': [a: bigint | number, b: bigint | number] + 'verify_uint64_eq(uint64,uint64)bool': [a: bigint | number, b: bigint | number] + 'verify_uint64_ne(uint64,uint64)bool': [a: bigint | number, b: bigint | number] + 'verify_uint64_lt(uint64,uint64)bool': [a: bigint | number, b: bigint | number] + 'verify_uint64_le(uint64,uint64)bool': [a: bigint | number, b: bigint | number] + 'verify_uint64_gt(uint64,uint64)bool': [a: bigint | number, b: bigint | number] + 'verify_uint64_ge(uint64,uint64)bool': [a: bigint | number, b: bigint | number] + 'verify_bytes_init(uint64)byte[]': [rawValue: bigint | number] + 'verify_bytes_add(byte[],byte[],uint64,uint64)byte[]': [a: Uint8Array, b: Uint8Array, padASize: bigint | number, padBSize: bigint | number] + 'verify_bytes_eq(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_bytes_ne(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_bytes_and(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + 'verify_bytes_or(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + 'verify_bytes_xor(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + 'verify_bytes_not(byte[],uint64)byte[]': [a: Uint8Array, padSize: bigint | number] + 'verify_biguint_add(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_add_uint64(byte[],uint64)byte[]': [a: Uint8Array, b: bigint | number] + 'verify_biguint_sub(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_sub_uint64(byte[],uint64)byte[]': [a: Uint8Array, b: bigint | number] + 'verify_biguint_mul(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_mul_uint64(byte[],uint64)byte[]': [a: Uint8Array, b: bigint | number] + 'verify_biguint_div(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_div_uint64(byte[],uint64)byte[]': [a: Uint8Array, b: bigint | number] + 'verify_biguint_mod(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_mod_uint64(byte[],uint64)byte[]': [a: Uint8Array, b: bigint | number] + 'verify_biguint_and(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_and_uint64(byte[],uint64)byte[]': [a: Uint8Array, b: bigint | number] + 'verify_biguint_or(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_or_uint64(byte[],uint64)byte[]': [a: Uint8Array, b: bigint | number] + 'verify_biguint_xor(byte[],byte[])byte[]': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_xor_uint64(byte[],uint64)byte[]': [a: Uint8Array, b: bigint | number] + 'verify_biguint_eq(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_eq_uint64(byte[],uint64)bool': [a: Uint8Array, b: bigint | number] + 'verify_biguint_ne(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_ne_uint64(byte[],uint64)bool': [a: Uint8Array, b: bigint | number] + 'verify_biguint_lt(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_lt_uint64(byte[],uint64)bool': [a: Uint8Array, b: bigint | number] + 'verify_biguint_le(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_le_uint64(byte[],uint64)bool': [a: Uint8Array, b: bigint | number] + 'verify_biguint_gt(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_gt_uint64(byte[],uint64)bool': [a: Uint8Array, b: bigint | number] + 'verify_biguint_ge(byte[],byte[])bool': [a: Uint8Array, b: Uint8Array] + 'verify_biguint_ge_uint64(byte[],uint64)bool': [a: Uint8Array, b: bigint | number] + 'verify_string_init(string)string': [a: string] + 'verify_string_startswith(string,string)bool': [a: string, b: string] + 'verify_string_endswith(string,string)bool': [a: string, b: string] + 'verify_string_join(string,string)string': [a: string, b: string] + 'verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void': [a: string, b: bigint | number, c: Uint8Array, d: Uint8Array, e: boolean, f: string, g: bigint | number, h: bigint | number, i: number, j: number, k: Uint8Array, m: Uint8Array, n: Uint8Array, o: Uint8Array] + } +} + +/** + * The return type for each method + */ +export type PrimitiveOpsContractReturns = { + 'verify_uint64_init(byte[])uint64': bigint + 'verify_uint64_add(uint64,uint64)uint64': bigint + 'verify_uint64_sub(uint64,uint64)uint64': bigint + 'verify_uint64_mul(uint64,uint64)uint64': bigint + 'verify_uint64_div(uint64,uint64)uint64': bigint + 'verify_uint64_mod(uint64,uint64)uint64': bigint + 'verify_uint64_and(uint64,uint64)uint64': bigint + 'verify_uint64_or(uint64,uint64)uint64': bigint + 'verify_uint64_xor(uint64,uint64)uint64': bigint + 'verify_uint64_not(uint64)uint64': bigint + 'verify_uint64_lshift(uint64,uint64)uint64': bigint + 'verify_uint64_rshift(uint64,uint64)uint64': bigint + 'verify_uint64_pow(uint64,uint64)uint64': bigint + 'verify_uint64_eq(uint64,uint64)bool': boolean + 'verify_uint64_ne(uint64,uint64)bool': boolean + 'verify_uint64_lt(uint64,uint64)bool': boolean + 'verify_uint64_le(uint64,uint64)bool': boolean + 'verify_uint64_gt(uint64,uint64)bool': boolean + 'verify_uint64_ge(uint64,uint64)bool': boolean + 'verify_bytes_init(uint64)byte[]': Uint8Array + 'verify_bytes_add(byte[],byte[],uint64,uint64)byte[]': Uint8Array + 'verify_bytes_eq(byte[],byte[])bool': boolean + 'verify_bytes_ne(byte[],byte[])bool': boolean + 'verify_bytes_and(byte[],byte[])byte[]': Uint8Array + 'verify_bytes_or(byte[],byte[])byte[]': Uint8Array + 'verify_bytes_xor(byte[],byte[])byte[]': Uint8Array + 'verify_bytes_not(byte[],uint64)byte[]': Uint8Array + 'verify_biguint_add(byte[],byte[])byte[]': Uint8Array + 'verify_biguint_add_uint64(byte[],uint64)byte[]': Uint8Array + 'verify_biguint_sub(byte[],byte[])byte[]': Uint8Array + 'verify_biguint_sub_uint64(byte[],uint64)byte[]': Uint8Array + 'verify_biguint_mul(byte[],byte[])byte[]': Uint8Array + 'verify_biguint_mul_uint64(byte[],uint64)byte[]': Uint8Array + 'verify_biguint_div(byte[],byte[])byte[]': Uint8Array + 'verify_biguint_div_uint64(byte[],uint64)byte[]': Uint8Array + 'verify_biguint_mod(byte[],byte[])byte[]': Uint8Array + 'verify_biguint_mod_uint64(byte[],uint64)byte[]': Uint8Array + 'verify_biguint_and(byte[],byte[])byte[]': Uint8Array + 'verify_biguint_and_uint64(byte[],uint64)byte[]': Uint8Array + 'verify_biguint_or(byte[],byte[])byte[]': Uint8Array + 'verify_biguint_or_uint64(byte[],uint64)byte[]': Uint8Array + 'verify_biguint_xor(byte[],byte[])byte[]': Uint8Array + 'verify_biguint_xor_uint64(byte[],uint64)byte[]': Uint8Array + 'verify_biguint_eq(byte[],byte[])bool': boolean + 'verify_biguint_eq_uint64(byte[],uint64)bool': boolean + 'verify_biguint_ne(byte[],byte[])bool': boolean + 'verify_biguint_ne_uint64(byte[],uint64)bool': boolean + 'verify_biguint_lt(byte[],byte[])bool': boolean + 'verify_biguint_lt_uint64(byte[],uint64)bool': boolean + 'verify_biguint_le(byte[],byte[])bool': boolean + 'verify_biguint_le_uint64(byte[],uint64)bool': boolean + 'verify_biguint_gt(byte[],byte[])bool': boolean + 'verify_biguint_gt_uint64(byte[],uint64)bool': boolean + 'verify_biguint_ge(byte[],byte[])bool': boolean + 'verify_biguint_ge_uint64(byte[],uint64)bool': boolean + 'verify_string_init(string)string': string + 'verify_string_startswith(string,string)bool': boolean + 'verify_string_endswith(string,string)bool': boolean + 'verify_string_join(string,string)string': string + 'verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void': void +} + +/** + * Defines the types of available calls and state of the PrimitiveOpsContract smart contract. + */ +export type PrimitiveOpsContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'verify_uint64_init(byte[])uint64' | 'verify_uint64_init', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_init(byte[])uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_init(byte[])uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_init(byte[])uint64'] + }> + & Record<'verify_uint64_add(uint64,uint64)uint64' | 'verify_uint64_add', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_add(uint64,uint64)uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_add(uint64,uint64)uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_add(uint64,uint64)uint64'] + }> + & Record<'verify_uint64_sub(uint64,uint64)uint64' | 'verify_uint64_sub', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_sub(uint64,uint64)uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_sub(uint64,uint64)uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_sub(uint64,uint64)uint64'] + }> + & Record<'verify_uint64_mul(uint64,uint64)uint64' | 'verify_uint64_mul', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_mul(uint64,uint64)uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_mul(uint64,uint64)uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_mul(uint64,uint64)uint64'] + }> + & Record<'verify_uint64_div(uint64,uint64)uint64' | 'verify_uint64_div', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_div(uint64,uint64)uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_div(uint64,uint64)uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_div(uint64,uint64)uint64'] + }> + & Record<'verify_uint64_mod(uint64,uint64)uint64' | 'verify_uint64_mod', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_mod(uint64,uint64)uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_mod(uint64,uint64)uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_mod(uint64,uint64)uint64'] + }> + & Record<'verify_uint64_and(uint64,uint64)uint64' | 'verify_uint64_and', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_and(uint64,uint64)uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_and(uint64,uint64)uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_and(uint64,uint64)uint64'] + }> + & Record<'verify_uint64_or(uint64,uint64)uint64' | 'verify_uint64_or', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_or(uint64,uint64)uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_or(uint64,uint64)uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_or(uint64,uint64)uint64'] + }> + & Record<'verify_uint64_xor(uint64,uint64)uint64' | 'verify_uint64_xor', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_xor(uint64,uint64)uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_xor(uint64,uint64)uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_xor(uint64,uint64)uint64'] + }> + & Record<'verify_uint64_not(uint64)uint64' | 'verify_uint64_not', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_not(uint64)uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_not(uint64)uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_not(uint64)uint64'] + }> + & Record<'verify_uint64_lshift(uint64,uint64)uint64' | 'verify_uint64_lshift', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_lshift(uint64,uint64)uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_lshift(uint64,uint64)uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_lshift(uint64,uint64)uint64'] + }> + & Record<'verify_uint64_rshift(uint64,uint64)uint64' | 'verify_uint64_rshift', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_rshift(uint64,uint64)uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_rshift(uint64,uint64)uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_rshift(uint64,uint64)uint64'] + }> + & Record<'verify_uint64_pow(uint64,uint64)uint64' | 'verify_uint64_pow', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_pow(uint64,uint64)uint64'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_pow(uint64,uint64)uint64'] + returns: PrimitiveOpsContractReturns['verify_uint64_pow(uint64,uint64)uint64'] + }> + & Record<'verify_uint64_eq(uint64,uint64)bool' | 'verify_uint64_eq', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_eq(uint64,uint64)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_eq(uint64,uint64)bool'] + returns: PrimitiveOpsContractReturns['verify_uint64_eq(uint64,uint64)bool'] + }> + & Record<'verify_uint64_ne(uint64,uint64)bool' | 'verify_uint64_ne', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_ne(uint64,uint64)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_ne(uint64,uint64)bool'] + returns: PrimitiveOpsContractReturns['verify_uint64_ne(uint64,uint64)bool'] + }> + & Record<'verify_uint64_lt(uint64,uint64)bool' | 'verify_uint64_lt', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_lt(uint64,uint64)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_lt(uint64,uint64)bool'] + returns: PrimitiveOpsContractReturns['verify_uint64_lt(uint64,uint64)bool'] + }> + & Record<'verify_uint64_le(uint64,uint64)bool' | 'verify_uint64_le', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_le(uint64,uint64)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_le(uint64,uint64)bool'] + returns: PrimitiveOpsContractReturns['verify_uint64_le(uint64,uint64)bool'] + }> + & Record<'verify_uint64_gt(uint64,uint64)bool' | 'verify_uint64_gt', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_gt(uint64,uint64)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_gt(uint64,uint64)bool'] + returns: PrimitiveOpsContractReturns['verify_uint64_gt(uint64,uint64)bool'] + }> + & Record<'verify_uint64_ge(uint64,uint64)bool' | 'verify_uint64_ge', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_uint64_ge(uint64,uint64)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_uint64_ge(uint64,uint64)bool'] + returns: PrimitiveOpsContractReturns['verify_uint64_ge(uint64,uint64)bool'] + }> + & Record<'verify_bytes_init(uint64)byte[]' | 'verify_bytes_init', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_bytes_init(uint64)byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_bytes_init(uint64)byte[]'] + returns: PrimitiveOpsContractReturns['verify_bytes_init(uint64)byte[]'] + }> + & Record<'verify_bytes_add(byte[],byte[],uint64,uint64)byte[]' | 'verify_bytes_add', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_bytes_add(byte[],byte[],uint64,uint64)byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_bytes_add(byte[],byte[],uint64,uint64)byte[]'] + returns: PrimitiveOpsContractReturns['verify_bytes_add(byte[],byte[],uint64,uint64)byte[]'] + }> + & Record<'verify_bytes_eq(byte[],byte[])bool' | 'verify_bytes_eq', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_bytes_eq(byte[],byte[])bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_bytes_eq(byte[],byte[])bool'] + returns: PrimitiveOpsContractReturns['verify_bytes_eq(byte[],byte[])bool'] + }> + & Record<'verify_bytes_ne(byte[],byte[])bool' | 'verify_bytes_ne', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_bytes_ne(byte[],byte[])bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_bytes_ne(byte[],byte[])bool'] + returns: PrimitiveOpsContractReturns['verify_bytes_ne(byte[],byte[])bool'] + }> + & Record<'verify_bytes_and(byte[],byte[])byte[]' | 'verify_bytes_and', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_bytes_and(byte[],byte[])byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_bytes_and(byte[],byte[])byte[]'] + returns: PrimitiveOpsContractReturns['verify_bytes_and(byte[],byte[])byte[]'] + }> + & Record<'verify_bytes_or(byte[],byte[])byte[]' | 'verify_bytes_or', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_bytes_or(byte[],byte[])byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_bytes_or(byte[],byte[])byte[]'] + returns: PrimitiveOpsContractReturns['verify_bytes_or(byte[],byte[])byte[]'] + }> + & Record<'verify_bytes_xor(byte[],byte[])byte[]' | 'verify_bytes_xor', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_bytes_xor(byte[],byte[])byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_bytes_xor(byte[],byte[])byte[]'] + returns: PrimitiveOpsContractReturns['verify_bytes_xor(byte[],byte[])byte[]'] + }> + & Record<'verify_bytes_not(byte[],uint64)byte[]' | 'verify_bytes_not', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_bytes_not(byte[],uint64)byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_bytes_not(byte[],uint64)byte[]'] + returns: PrimitiveOpsContractReturns['verify_bytes_not(byte[],uint64)byte[]'] + }> + & Record<'verify_biguint_add(byte[],byte[])byte[]' | 'verify_biguint_add', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_add(byte[],byte[])byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_add(byte[],byte[])byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_add(byte[],byte[])byte[]'] + }> + & Record<'verify_biguint_add_uint64(byte[],uint64)byte[]' | 'verify_biguint_add_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_add_uint64(byte[],uint64)byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_add_uint64(byte[],uint64)byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_add_uint64(byte[],uint64)byte[]'] + }> + & Record<'verify_biguint_sub(byte[],byte[])byte[]' | 'verify_biguint_sub', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_sub(byte[],byte[])byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_sub(byte[],byte[])byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_sub(byte[],byte[])byte[]'] + }> + & Record<'verify_biguint_sub_uint64(byte[],uint64)byte[]' | 'verify_biguint_sub_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_sub_uint64(byte[],uint64)byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_sub_uint64(byte[],uint64)byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_sub_uint64(byte[],uint64)byte[]'] + }> + & Record<'verify_biguint_mul(byte[],byte[])byte[]' | 'verify_biguint_mul', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_mul(byte[],byte[])byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_mul(byte[],byte[])byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_mul(byte[],byte[])byte[]'] + }> + & Record<'verify_biguint_mul_uint64(byte[],uint64)byte[]' | 'verify_biguint_mul_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_mul_uint64(byte[],uint64)byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_mul_uint64(byte[],uint64)byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_mul_uint64(byte[],uint64)byte[]'] + }> + & Record<'verify_biguint_div(byte[],byte[])byte[]' | 'verify_biguint_div', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_div(byte[],byte[])byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_div(byte[],byte[])byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_div(byte[],byte[])byte[]'] + }> + & Record<'verify_biguint_div_uint64(byte[],uint64)byte[]' | 'verify_biguint_div_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_div_uint64(byte[],uint64)byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_div_uint64(byte[],uint64)byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_div_uint64(byte[],uint64)byte[]'] + }> + & Record<'verify_biguint_mod(byte[],byte[])byte[]' | 'verify_biguint_mod', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_mod(byte[],byte[])byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_mod(byte[],byte[])byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_mod(byte[],byte[])byte[]'] + }> + & Record<'verify_biguint_mod_uint64(byte[],uint64)byte[]' | 'verify_biguint_mod_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_mod_uint64(byte[],uint64)byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_mod_uint64(byte[],uint64)byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_mod_uint64(byte[],uint64)byte[]'] + }> + & Record<'verify_biguint_and(byte[],byte[])byte[]' | 'verify_biguint_and', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_and(byte[],byte[])byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_and(byte[],byte[])byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_and(byte[],byte[])byte[]'] + }> + & Record<'verify_biguint_and_uint64(byte[],uint64)byte[]' | 'verify_biguint_and_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_and_uint64(byte[],uint64)byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_and_uint64(byte[],uint64)byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_and_uint64(byte[],uint64)byte[]'] + }> + & Record<'verify_biguint_or(byte[],byte[])byte[]' | 'verify_biguint_or', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_or(byte[],byte[])byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_or(byte[],byte[])byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_or(byte[],byte[])byte[]'] + }> + & Record<'verify_biguint_or_uint64(byte[],uint64)byte[]' | 'verify_biguint_or_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_or_uint64(byte[],uint64)byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_or_uint64(byte[],uint64)byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_or_uint64(byte[],uint64)byte[]'] + }> + & Record<'verify_biguint_xor(byte[],byte[])byte[]' | 'verify_biguint_xor', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_xor(byte[],byte[])byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_xor(byte[],byte[])byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_xor(byte[],byte[])byte[]'] + }> + & Record<'verify_biguint_xor_uint64(byte[],uint64)byte[]' | 'verify_biguint_xor_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_xor_uint64(byte[],uint64)byte[]'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_xor_uint64(byte[],uint64)byte[]'] + returns: PrimitiveOpsContractReturns['verify_biguint_xor_uint64(byte[],uint64)byte[]'] + }> + & Record<'verify_biguint_eq(byte[],byte[])bool' | 'verify_biguint_eq', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_eq(byte[],byte[])bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_eq(byte[],byte[])bool'] + returns: PrimitiveOpsContractReturns['verify_biguint_eq(byte[],byte[])bool'] + }> + & Record<'verify_biguint_eq_uint64(byte[],uint64)bool' | 'verify_biguint_eq_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_eq_uint64(byte[],uint64)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_eq_uint64(byte[],uint64)bool'] + returns: PrimitiveOpsContractReturns['verify_biguint_eq_uint64(byte[],uint64)bool'] + }> + & Record<'verify_biguint_ne(byte[],byte[])bool' | 'verify_biguint_ne', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_ne(byte[],byte[])bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_ne(byte[],byte[])bool'] + returns: PrimitiveOpsContractReturns['verify_biguint_ne(byte[],byte[])bool'] + }> + & Record<'verify_biguint_ne_uint64(byte[],uint64)bool' | 'verify_biguint_ne_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_ne_uint64(byte[],uint64)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_ne_uint64(byte[],uint64)bool'] + returns: PrimitiveOpsContractReturns['verify_biguint_ne_uint64(byte[],uint64)bool'] + }> + & Record<'verify_biguint_lt(byte[],byte[])bool' | 'verify_biguint_lt', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_lt(byte[],byte[])bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_lt(byte[],byte[])bool'] + returns: PrimitiveOpsContractReturns['verify_biguint_lt(byte[],byte[])bool'] + }> + & Record<'verify_biguint_lt_uint64(byte[],uint64)bool' | 'verify_biguint_lt_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_lt_uint64(byte[],uint64)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_lt_uint64(byte[],uint64)bool'] + returns: PrimitiveOpsContractReturns['verify_biguint_lt_uint64(byte[],uint64)bool'] + }> + & Record<'verify_biguint_le(byte[],byte[])bool' | 'verify_biguint_le', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_le(byte[],byte[])bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_le(byte[],byte[])bool'] + returns: PrimitiveOpsContractReturns['verify_biguint_le(byte[],byte[])bool'] + }> + & Record<'verify_biguint_le_uint64(byte[],uint64)bool' | 'verify_biguint_le_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_le_uint64(byte[],uint64)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_le_uint64(byte[],uint64)bool'] + returns: PrimitiveOpsContractReturns['verify_biguint_le_uint64(byte[],uint64)bool'] + }> + & Record<'verify_biguint_gt(byte[],byte[])bool' | 'verify_biguint_gt', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_gt(byte[],byte[])bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_gt(byte[],byte[])bool'] + returns: PrimitiveOpsContractReturns['verify_biguint_gt(byte[],byte[])bool'] + }> + & Record<'verify_biguint_gt_uint64(byte[],uint64)bool' | 'verify_biguint_gt_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_gt_uint64(byte[],uint64)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_gt_uint64(byte[],uint64)bool'] + returns: PrimitiveOpsContractReturns['verify_biguint_gt_uint64(byte[],uint64)bool'] + }> + & Record<'verify_biguint_ge(byte[],byte[])bool' | 'verify_biguint_ge', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_ge(byte[],byte[])bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_ge(byte[],byte[])bool'] + returns: PrimitiveOpsContractReturns['verify_biguint_ge(byte[],byte[])bool'] + }> + & Record<'verify_biguint_ge_uint64(byte[],uint64)bool' | 'verify_biguint_ge_uint64', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_biguint_ge_uint64(byte[],uint64)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_biguint_ge_uint64(byte[],uint64)bool'] + returns: PrimitiveOpsContractReturns['verify_biguint_ge_uint64(byte[],uint64)bool'] + }> + & Record<'verify_string_init(string)string' | 'verify_string_init', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_string_init(string)string'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_string_init(string)string'] + returns: PrimitiveOpsContractReturns['verify_string_init(string)string'] + }> + & Record<'verify_string_startswith(string,string)bool' | 'verify_string_startswith', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_string_startswith(string,string)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_string_startswith(string,string)bool'] + returns: PrimitiveOpsContractReturns['verify_string_startswith(string,string)bool'] + }> + & Record<'verify_string_endswith(string,string)bool' | 'verify_string_endswith', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_string_endswith(string,string)bool'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_string_endswith(string,string)bool'] + returns: PrimitiveOpsContractReturns['verify_string_endswith(string,string)bool'] + }> + & Record<'verify_string_join(string,string)string' | 'verify_string_join', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_string_join(string,string)string'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_string_join(string,string)string'] + returns: PrimitiveOpsContractReturns['verify_string_join(string,string)string'] + }> + & Record<'verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void' | 'verify_log', { + argsObj: PrimitiveOpsContractArgs['obj']['verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void'] + argsTuple: PrimitiveOpsContractArgs['tuple']['verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void'] + returns: PrimitiveOpsContractReturns['verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type PrimitiveOpsContractSignatures = keyof PrimitiveOpsContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type PrimitiveOpsContractNonVoidMethodSignatures = keyof PrimitiveOpsContractTypes['methods'] extends infer T ? T extends keyof PrimitiveOpsContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the PrimitiveOpsContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = PrimitiveOpsContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the PrimitiveOpsContract smart contract to the method's return type + */ +export type MethodReturn = PrimitiveOpsContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type PrimitiveOpsContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type PrimitiveOpsContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: PrimitiveOpsContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the PrimitiveOpsContract smart contract + */ +export abstract class PrimitiveOpsContractParamsFactory { + /** + * Constructs a no op call for the verify_uint64_init(byte[])uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Init(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_init(byte[])uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.rawValue], + } + } + /** + * Constructs a no op call for the verify_uint64_add(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Add(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_add(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_sub(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Sub(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_sub(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_mul(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Mul(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_mul(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_div(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Div(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_div(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_mod(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Mod(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_mod(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_and(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64And(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_and(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_or(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Or(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_or(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_xor(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Xor(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_xor(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_not(uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Not(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_not(uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_uint64_lshift(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Lshift(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_lshift(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_rshift(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Rshift(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_rshift(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_pow(uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Pow(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_pow(uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_eq(uint64,uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Eq(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_eq(uint64,uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_ne(uint64,uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Ne(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_ne(uint64,uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_lt(uint64,uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Lt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_lt(uint64,uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_le(uint64,uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Le(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_le(uint64,uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_gt(uint64,uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Gt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_gt(uint64,uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_uint64_ge(uint64,uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyUint64Ge(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_uint64_ge(uint64,uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_bytes_init(uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBytesInit(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bytes_init(uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.rawValue], + } + } + /** + * Constructs a no op call for the verify_bytes_add(byte[],byte[],uint64,uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBytesAdd(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bytes_add(byte[],byte[],uint64,uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.padASize, params.args.padBSize], + } + } + /** + * Constructs a no op call for the verify_bytes_eq(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBytesEq(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bytes_eq(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_bytes_ne(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBytesNe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bytes_ne(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_bytes_and(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBytesAnd(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bytes_and(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_bytes_or(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBytesOr(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bytes_or(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_bytes_xor(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBytesXor(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bytes_xor(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_bytes_not(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBytesNot(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_bytes_not(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.padSize], + } + } + /** + * Constructs a no op call for the verify_biguint_add(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintAdd(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_add(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_add_uint64(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintAddUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_add_uint64(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_sub(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintSub(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_sub(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_sub_uint64(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintSubUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_sub_uint64(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_mul(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintMul(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_mul(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_mul_uint64(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintMulUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_mul_uint64(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_div(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintDiv(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_div(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_div_uint64(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintDivUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_div_uint64(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_mod(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintMod(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_mod(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_mod_uint64(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintModUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_mod_uint64(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_and(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintAnd(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_and(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_and_uint64(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintAndUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_and_uint64(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_or(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintOr(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_or(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_or_uint64(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintOrUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_or_uint64(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_xor(byte[],byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintXor(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_xor(byte[],byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_xor_uint64(byte[],uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintXorUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_xor_uint64(byte[],uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_eq(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintEq(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_eq(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_eq_uint64(byte[],uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintEqUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_eq_uint64(byte[],uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_ne(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintNe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_ne(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_ne_uint64(byte[],uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintNeUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_ne_uint64(byte[],uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_lt(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintLt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_lt(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_lt_uint64(byte[],uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintLtUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_lt_uint64(byte[],uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_le(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintLe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_le(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_le_uint64(byte[],uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintLeUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_le_uint64(byte[],uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_gt(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintGt(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_gt(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_gt_uint64(byte[],uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintGtUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_gt_uint64(byte[],uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_ge(byte[],byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintGe(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_ge(byte[],byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_biguint_ge_uint64(byte[],uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyBiguintGeUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_biguint_ge_uint64(byte[],uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_string_init(string)string ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyStringInit(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_string_init(string)string' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_string_startswith(string,string)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyStringStartswith(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_string_startswith(string,string)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_string_endswith(string,string)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyStringEndswith(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_string_endswith(string,string)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_string_join(string,string)string ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyStringJoin(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_string_join(string,string)string' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyLog(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c, params.args.d, params.args.e, params.args.f, params.args.g, params.args.h, params.args.i, params.args.j, params.args.k, params.args.m, params.args.n, params.args.o], + } + } +} + +/** + * A factory to create and deploy one or more instance of the PrimitiveOpsContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class PrimitiveOpsContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `PrimitiveOpsContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new PrimitiveOpsContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new PrimitiveOpsContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the PrimitiveOpsContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: PrimitiveOpsContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new PrimitiveOpsContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the PrimitiveOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the PrimitiveOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the PrimitiveOpsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new PrimitiveOpsContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the PrimitiveOpsContract smart contract + */ +export class PrimitiveOpsContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `PrimitiveOpsContractClient` + * + * @param appClient An `AppClient` instance which has been created with the PrimitiveOpsContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `PrimitiveOpsContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `PrimitiveOpsContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new PrimitiveOpsContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `PrimitiveOpsContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new PrimitiveOpsContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the PrimitiveOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_init(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Init: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Init(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_add(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Add: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Add(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_sub(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Sub: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Sub(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_mul(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Mul: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Mul(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_div(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Div: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Div(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_mod(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Mod: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Mod(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_and(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64And: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64And(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_or(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Or: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Or(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_xor(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Xor: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Xor(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_not(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Not: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Not(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_lshift(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Lshift: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Lshift(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_rshift(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Rshift: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Rshift(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_pow(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Pow: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Pow(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_eq(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Eq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Eq(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_ne(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Ne: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Ne(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_lt(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Lt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Lt(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_le(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Le: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Le(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_gt(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Gt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Gt(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_ge(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyUint64Ge: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyUint64Ge(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_init(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBytesInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBytesInit(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_add(byte[],byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBytesAdd: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBytesAdd(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBytesEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBytesEq(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBytesNe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBytesNe(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_and(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBytesAnd: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBytesAnd(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_or(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBytesOr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBytesOr(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_xor(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBytesXor: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBytesXor(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_not(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBytesNot: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBytesNot(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_add(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintAdd: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintAdd(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_add_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintAddUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintAddUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_sub(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintSub: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintSub(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_sub_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintSubUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintSubUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_mul(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintMul: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintMul(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_mul_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintMulUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintMulUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_div(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintDiv: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintDiv(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_div_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintDivUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintDivUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_mod(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintMod: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintMod(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_mod_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintModUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintModUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_and(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintAnd: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintAnd(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_and_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintAndUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintAndUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_or(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintOr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintOr(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_or_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintOrUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintOrUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_xor(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintXor: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintXor(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_xor_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintXorUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintXorUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintEq(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_eq_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintEqUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintEqUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintNe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintNe(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_ne_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintNeUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintNeUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintLt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintLt(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_lt_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintLtUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintLtUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintLe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintLe(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_le_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintLeUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintLeUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintGt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintGt(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_gt_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintGtUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintGtUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintGe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintGe(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_ge_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyBiguintGeUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyBiguintGeUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_string_init(string)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyStringInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyStringInit(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_string_startswith(string,string)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyStringStartswith: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyStringStartswith(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_string_endswith(string,string)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyStringEndswith: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyStringEndswith(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_string_join(string,string)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyStringJoin: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyStringJoin(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(PrimitiveOpsContractParamsFactory.verifyLog(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the PrimitiveOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_init(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Init: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Init(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_add(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Add: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Add(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_sub(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Sub: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Sub(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_mul(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Mul: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Mul(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_div(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Div: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Div(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_mod(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Mod: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Mod(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_and(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64And: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64And(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_or(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Or: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Or(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_xor(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Xor: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Xor(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_not(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Not: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Not(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_lshift(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Lshift: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Lshift(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_rshift(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Rshift: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Rshift(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_pow(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Pow: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Pow(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_eq(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Eq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Eq(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_ne(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Ne: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Ne(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_lt(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Lt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Lt(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_le(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Le: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Le(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_gt(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Gt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Gt(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_ge(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyUint64Ge: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyUint64Ge(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_init(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBytesInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBytesInit(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_add(byte[],byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBytesAdd: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBytesAdd(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBytesEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBytesEq(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBytesNe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBytesNe(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_and(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBytesAnd: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBytesAnd(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_or(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBytesOr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBytesOr(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_xor(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBytesXor: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBytesXor(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_not(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBytesNot: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBytesNot(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_add(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintAdd: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintAdd(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_add_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintAddUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintAddUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_sub(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintSub: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintSub(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_sub_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintSubUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintSubUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_mul(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintMul: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintMul(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_mul_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintMulUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintMulUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_div(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintDiv: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintDiv(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_div_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintDivUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintDivUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_mod(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintMod: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintMod(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_mod_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintModUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintModUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_and(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintAnd: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintAnd(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_and_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintAndUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintAndUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_or(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintOr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintOr(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_or_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintOrUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintOrUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_xor(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintXor: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintXor(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_xor_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintXorUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintXorUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintEq: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintEq(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_eq_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintEqUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintEqUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintNe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintNe(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_ne_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintNeUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintNeUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintLt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintLt(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_lt_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintLtUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintLtUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintLe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintLe(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_le_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintLeUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintLeUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintGt: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintGt(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_gt_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintGtUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintGtUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintGe: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintGe(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_ge_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyBiguintGeUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyBiguintGeUint64(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_string_init(string)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyStringInit: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyStringInit(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_string_startswith(string,string)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyStringStartswith: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyStringStartswith(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_string_endswith(string,string)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyStringEndswith: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyStringEndswith(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_string_join(string,string)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyStringJoin: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyStringJoin(params)) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyLog: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(PrimitiveOpsContractParamsFactory.verifyLog(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the PrimitiveOpsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_init(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Init: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Init(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_init(byte[])uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_add(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Add: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Add(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_add(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_sub(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Sub: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Sub(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_sub(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_mul(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Mul: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Mul(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_mul(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_div(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Div: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Div(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_div(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_mod(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Mod: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Mod(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_mod(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_and(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64And: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64And(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_and(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_or(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Or: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Or(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_or(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_xor(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Xor: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Xor(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_xor(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_not(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Not: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Not(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_not(uint64)uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_lshift(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Lshift: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Lshift(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_lshift(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_rshift(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Rshift: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Rshift(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_rshift(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_pow(uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Pow: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Pow(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_pow(uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_eq(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Eq: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Eq(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_eq(uint64,uint64)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_ne(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Ne: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Ne(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_ne(uint64,uint64)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_lt(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Lt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Lt(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_lt(uint64,uint64)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_le(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Le: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Le(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_le(uint64,uint64)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_gt(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Gt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Gt(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_gt(uint64,uint64)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_uint64_ge(uint64,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyUint64Ge: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyUint64Ge(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_uint64_ge(uint64,uint64)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_init(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBytesInit: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBytesInit(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_bytes_init(uint64)byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_add(byte[],byte[],uint64,uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBytesAdd: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBytesAdd(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_bytes_add(byte[],byte[],uint64,uint64)byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBytesEq: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBytesEq(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_bytes_eq(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBytesNe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBytesNe(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_bytes_ne(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_and(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBytesAnd: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBytesAnd(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_bytes_and(byte[],byte[])byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_or(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBytesOr: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBytesOr(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_bytes_or(byte[],byte[])byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_xor(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBytesXor: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBytesXor(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_bytes_xor(byte[],byte[])byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_bytes_not(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBytesNot: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBytesNot(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_bytes_not(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_add(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintAdd: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintAdd(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_add(byte[],byte[])byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_add_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintAddUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintAddUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_add_uint64(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_sub(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintSub: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintSub(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_sub(byte[],byte[])byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_sub_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintSubUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintSubUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_sub_uint64(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_mul(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintMul: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintMul(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_mul(byte[],byte[])byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_mul_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintMulUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintMulUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_mul_uint64(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_div(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintDiv: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintDiv(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_div(byte[],byte[])byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_div_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintDivUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintDivUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_div_uint64(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_mod(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintMod: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintMod(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_mod(byte[],byte[])byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_mod_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintModUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintModUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_mod_uint64(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_and(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintAnd: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintAnd(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_and(byte[],byte[])byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_and_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintAndUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintAndUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_and_uint64(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_or(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintOr: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintOr(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_or(byte[],byte[])byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_or_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintOrUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintOrUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_or_uint64(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_xor(byte[],byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintXor: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintXor(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_xor(byte[],byte[])byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_xor_uint64(byte[],uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintXorUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintXorUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_xor_uint64(byte[],uint64)byte[]'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_eq(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintEq: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintEq(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_eq(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_eq_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintEqUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintEqUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_eq_uint64(byte[],uint64)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_ne(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintNe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintNe(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_ne(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_ne_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintNeUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintNeUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_ne_uint64(byte[],uint64)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_lt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintLt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintLt(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_lt(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_lt_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintLtUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintLtUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_lt_uint64(byte[],uint64)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_le(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintLe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintLe(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_le(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_le_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintLeUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintLeUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_le_uint64(byte[],uint64)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_gt(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintGt: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintGt(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_gt(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_gt_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintGtUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintGtUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_gt_uint64(byte[],uint64)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_ge(byte[],byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintGe: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintGe(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_ge(byte[],byte[])bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_biguint_ge_uint64(byte[],uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyBiguintGeUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyBiguintGeUint64(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_biguint_ge_uint64(byte[],uint64)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_string_init(string)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyStringInit: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyStringInit(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_string_init(string)string'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_string_startswith(string,string)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyStringStartswith: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyStringStartswith(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_string_startswith(string,string)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_string_endswith(string,string)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyStringEndswith: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyStringEndswith(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_string_endswith(string,string)bool'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_string_join(string,string)string` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyStringJoin: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyStringJoin(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_string_join(string,string)string'])} + }, + + /** + * Makes a call to the PrimitiveOpsContract smart contract using the `verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyLog: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(PrimitiveOpsContractParamsFactory.verifyLog(params)) + return {...result, return: result.return as unknown as (undefined | PrimitiveOpsContractReturns['verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new PrimitiveOpsContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current PrimitiveOpsContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): PrimitiveOpsContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify_uint64_init(byte[])uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64Init(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Init(params))) + return this + }, + /** + * Add a verify_uint64_add(uint64,uint64)uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64Add(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Add(params))) + return this + }, + /** + * Add a verify_uint64_sub(uint64,uint64)uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64Sub(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Sub(params))) + return this + }, + /** + * Add a verify_uint64_mul(uint64,uint64)uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64Mul(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Mul(params))) + return this + }, + /** + * Add a verify_uint64_div(uint64,uint64)uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64Div(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Div(params))) + return this + }, + /** + * Add a verify_uint64_mod(uint64,uint64)uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64Mod(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Mod(params))) + return this + }, + /** + * Add a verify_uint64_and(uint64,uint64)uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64And(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64And(params))) + return this + }, + /** + * Add a verify_uint64_or(uint64,uint64)uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64Or(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Or(params))) + return this + }, + /** + * Add a verify_uint64_xor(uint64,uint64)uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64Xor(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Xor(params))) + return this + }, + /** + * Add a verify_uint64_not(uint64)uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64Not(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Not(params))) + return this + }, + /** + * Add a verify_uint64_lshift(uint64,uint64)uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64Lshift(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Lshift(params))) + return this + }, + /** + * Add a verify_uint64_rshift(uint64,uint64)uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64Rshift(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Rshift(params))) + return this + }, + /** + * Add a verify_uint64_pow(uint64,uint64)uint64 method call against the PrimitiveOpsContract contract + */ + verifyUint64Pow(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Pow(params))) + return this + }, + /** + * Add a verify_uint64_eq(uint64,uint64)bool method call against the PrimitiveOpsContract contract + */ + verifyUint64Eq(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Eq(params))) + return this + }, + /** + * Add a verify_uint64_ne(uint64,uint64)bool method call against the PrimitiveOpsContract contract + */ + verifyUint64Ne(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Ne(params))) + return this + }, + /** + * Add a verify_uint64_lt(uint64,uint64)bool method call against the PrimitiveOpsContract contract + */ + verifyUint64Lt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Lt(params))) + return this + }, + /** + * Add a verify_uint64_le(uint64,uint64)bool method call against the PrimitiveOpsContract contract + */ + verifyUint64Le(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Le(params))) + return this + }, + /** + * Add a verify_uint64_gt(uint64,uint64)bool method call against the PrimitiveOpsContract contract + */ + verifyUint64Gt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Gt(params))) + return this + }, + /** + * Add a verify_uint64_ge(uint64,uint64)bool method call against the PrimitiveOpsContract contract + */ + verifyUint64Ge(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyUint64Ge(params))) + return this + }, + /** + * Add a verify_bytes_init(uint64)byte[] method call against the PrimitiveOpsContract contract + */ + verifyBytesInit(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBytesInit(params))) + return this + }, + /** + * Add a verify_bytes_add(byte[],byte[],uint64,uint64)byte[] method call against the PrimitiveOpsContract contract + */ + verifyBytesAdd(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBytesAdd(params))) + return this + }, + /** + * Add a verify_bytes_eq(byte[],byte[])bool method call against the PrimitiveOpsContract contract + */ + verifyBytesEq(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBytesEq(params))) + return this + }, + /** + * Add a verify_bytes_ne(byte[],byte[])bool method call against the PrimitiveOpsContract contract + */ + verifyBytesNe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBytesNe(params))) + return this + }, + /** + * Add a verify_bytes_and(byte[],byte[])byte[] method call against the PrimitiveOpsContract contract + */ + verifyBytesAnd(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBytesAnd(params))) + return this + }, + /** + * Add a verify_bytes_or(byte[],byte[])byte[] method call against the PrimitiveOpsContract contract + */ + verifyBytesOr(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBytesOr(params))) + return this + }, + /** + * Add a verify_bytes_xor(byte[],byte[])byte[] method call against the PrimitiveOpsContract contract + */ + verifyBytesXor(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBytesXor(params))) + return this + }, + /** + * Add a verify_bytes_not(byte[],uint64)byte[] method call against the PrimitiveOpsContract contract + */ + verifyBytesNot(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBytesNot(params))) + return this + }, + /** + * Add a verify_biguint_add(byte[],byte[])byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintAdd(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintAdd(params))) + return this + }, + /** + * Add a verify_biguint_add_uint64(byte[],uint64)byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintAddUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintAddUint64(params))) + return this + }, + /** + * Add a verify_biguint_sub(byte[],byte[])byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintSub(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintSub(params))) + return this + }, + /** + * Add a verify_biguint_sub_uint64(byte[],uint64)byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintSubUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintSubUint64(params))) + return this + }, + /** + * Add a verify_biguint_mul(byte[],byte[])byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintMul(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintMul(params))) + return this + }, + /** + * Add a verify_biguint_mul_uint64(byte[],uint64)byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintMulUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintMulUint64(params))) + return this + }, + /** + * Add a verify_biguint_div(byte[],byte[])byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintDiv(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintDiv(params))) + return this + }, + /** + * Add a verify_biguint_div_uint64(byte[],uint64)byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintDivUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintDivUint64(params))) + return this + }, + /** + * Add a verify_biguint_mod(byte[],byte[])byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintMod(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintMod(params))) + return this + }, + /** + * Add a verify_biguint_mod_uint64(byte[],uint64)byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintModUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintModUint64(params))) + return this + }, + /** + * Add a verify_biguint_and(byte[],byte[])byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintAnd(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintAnd(params))) + return this + }, + /** + * Add a verify_biguint_and_uint64(byte[],uint64)byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintAndUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintAndUint64(params))) + return this + }, + /** + * Add a verify_biguint_or(byte[],byte[])byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintOr(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintOr(params))) + return this + }, + /** + * Add a verify_biguint_or_uint64(byte[],uint64)byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintOrUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintOrUint64(params))) + return this + }, + /** + * Add a verify_biguint_xor(byte[],byte[])byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintXor(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintXor(params))) + return this + }, + /** + * Add a verify_biguint_xor_uint64(byte[],uint64)byte[] method call against the PrimitiveOpsContract contract + */ + verifyBiguintXorUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintXorUint64(params))) + return this + }, + /** + * Add a verify_biguint_eq(byte[],byte[])bool method call against the PrimitiveOpsContract contract + */ + verifyBiguintEq(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintEq(params))) + return this + }, + /** + * Add a verify_biguint_eq_uint64(byte[],uint64)bool method call against the PrimitiveOpsContract contract + */ + verifyBiguintEqUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintEqUint64(params))) + return this + }, + /** + * Add a verify_biguint_ne(byte[],byte[])bool method call against the PrimitiveOpsContract contract + */ + verifyBiguintNe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintNe(params))) + return this + }, + /** + * Add a verify_biguint_ne_uint64(byte[],uint64)bool method call against the PrimitiveOpsContract contract + */ + verifyBiguintNeUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintNeUint64(params))) + return this + }, + /** + * Add a verify_biguint_lt(byte[],byte[])bool method call against the PrimitiveOpsContract contract + */ + verifyBiguintLt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintLt(params))) + return this + }, + /** + * Add a verify_biguint_lt_uint64(byte[],uint64)bool method call against the PrimitiveOpsContract contract + */ + verifyBiguintLtUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintLtUint64(params))) + return this + }, + /** + * Add a verify_biguint_le(byte[],byte[])bool method call against the PrimitiveOpsContract contract + */ + verifyBiguintLe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintLe(params))) + return this + }, + /** + * Add a verify_biguint_le_uint64(byte[],uint64)bool method call against the PrimitiveOpsContract contract + */ + verifyBiguintLeUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintLeUint64(params))) + return this + }, + /** + * Add a verify_biguint_gt(byte[],byte[])bool method call against the PrimitiveOpsContract contract + */ + verifyBiguintGt(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintGt(params))) + return this + }, + /** + * Add a verify_biguint_gt_uint64(byte[],uint64)bool method call against the PrimitiveOpsContract contract + */ + verifyBiguintGtUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintGtUint64(params))) + return this + }, + /** + * Add a verify_biguint_ge(byte[],byte[])bool method call against the PrimitiveOpsContract contract + */ + verifyBiguintGe(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintGe(params))) + return this + }, + /** + * Add a verify_biguint_ge_uint64(byte[],uint64)bool method call against the PrimitiveOpsContract contract + */ + verifyBiguintGeUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyBiguintGeUint64(params))) + return this + }, + /** + * Add a verify_string_init(string)string method call against the PrimitiveOpsContract contract + */ + verifyStringInit(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyStringInit(params))) + return this + }, + /** + * Add a verify_string_startswith(string,string)bool method call against the PrimitiveOpsContract contract + */ + verifyStringStartswith(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyStringStartswith(params))) + return this + }, + /** + * Add a verify_string_endswith(string,string)bool method call against the PrimitiveOpsContract contract + */ + verifyStringEndswith(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyStringEndswith(params))) + return this + }, + /** + * Add a verify_string_join(string,string)string method call against the PrimitiveOpsContract contract + */ + verifyStringJoin(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyStringJoin(params))) + return this + }, + /** + * Add a verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void method call against the PrimitiveOpsContract contract + */ + verifyLog(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyLog(params))) + return this + }, + /** + * Add a clear state call to the PrimitiveOpsContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as PrimitiveOpsContractComposer + } +} +export type PrimitiveOpsContractComposer = { + /** + * Calls the verify_uint64_init(byte[])uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Init(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_init(byte[])uint64'] | undefined]> + + /** + * Calls the verify_uint64_add(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Add(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_add(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_sub(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Sub(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_sub(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_mul(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Mul(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_mul(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_div(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Div(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_div(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_mod(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Mod(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_mod(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_and(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64And(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_and(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_or(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Or(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_or(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_xor(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Xor(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_xor(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_not(uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Not(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_not(uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_lshift(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Lshift(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_lshift(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_rshift(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Rshift(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_rshift(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_pow(uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Pow(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_pow(uint64,uint64)uint64'] | undefined]> + + /** + * Calls the verify_uint64_eq(uint64,uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Eq(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_eq(uint64,uint64)bool'] | undefined]> + + /** + * Calls the verify_uint64_ne(uint64,uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Ne(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_ne(uint64,uint64)bool'] | undefined]> + + /** + * Calls the verify_uint64_lt(uint64,uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Lt(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_lt(uint64,uint64)bool'] | undefined]> + + /** + * Calls the verify_uint64_le(uint64,uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Le(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_le(uint64,uint64)bool'] | undefined]> + + /** + * Calls the verify_uint64_gt(uint64,uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Gt(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_gt(uint64,uint64)bool'] | undefined]> + + /** + * Calls the verify_uint64_ge(uint64,uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyUint64Ge(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_uint64_ge(uint64,uint64)bool'] | undefined]> + + /** + * Calls the verify_bytes_init(uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBytesInit(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_bytes_init(uint64)byte[]'] | undefined]> + + /** + * Calls the verify_bytes_add(byte[],byte[],uint64,uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBytesAdd(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_bytes_add(byte[],byte[],uint64,uint64)byte[]'] | undefined]> + + /** + * Calls the verify_bytes_eq(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBytesEq(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_bytes_eq(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_bytes_ne(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBytesNe(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_bytes_ne(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_bytes_and(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBytesAnd(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_bytes_and(byte[],byte[])byte[]'] | undefined]> + + /** + * Calls the verify_bytes_or(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBytesOr(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_bytes_or(byte[],byte[])byte[]'] | undefined]> + + /** + * Calls the verify_bytes_xor(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBytesXor(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_bytes_xor(byte[],byte[])byte[]'] | undefined]> + + /** + * Calls the verify_bytes_not(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBytesNot(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_bytes_not(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_biguint_add(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintAdd(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_add(byte[],byte[])byte[]'] | undefined]> + + /** + * Calls the verify_biguint_add_uint64(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintAddUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_add_uint64(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_biguint_sub(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintSub(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_sub(byte[],byte[])byte[]'] | undefined]> + + /** + * Calls the verify_biguint_sub_uint64(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintSubUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_sub_uint64(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_biguint_mul(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintMul(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_mul(byte[],byte[])byte[]'] | undefined]> + + /** + * Calls the verify_biguint_mul_uint64(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintMulUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_mul_uint64(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_biguint_div(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintDiv(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_div(byte[],byte[])byte[]'] | undefined]> + + /** + * Calls the verify_biguint_div_uint64(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintDivUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_div_uint64(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_biguint_mod(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintMod(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_mod(byte[],byte[])byte[]'] | undefined]> + + /** + * Calls the verify_biguint_mod_uint64(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintModUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_mod_uint64(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_biguint_and(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintAnd(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_and(byte[],byte[])byte[]'] | undefined]> + + /** + * Calls the verify_biguint_and_uint64(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintAndUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_and_uint64(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_biguint_or(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintOr(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_or(byte[],byte[])byte[]'] | undefined]> + + /** + * Calls the verify_biguint_or_uint64(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintOrUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_or_uint64(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_biguint_xor(byte[],byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintXor(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_xor(byte[],byte[])byte[]'] | undefined]> + + /** + * Calls the verify_biguint_xor_uint64(byte[],uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintXorUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_xor_uint64(byte[],uint64)byte[]'] | undefined]> + + /** + * Calls the verify_biguint_eq(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintEq(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_eq(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguint_eq_uint64(byte[],uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintEqUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_eq_uint64(byte[],uint64)bool'] | undefined]> + + /** + * Calls the verify_biguint_ne(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintNe(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_ne(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguint_ne_uint64(byte[],uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintNeUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_ne_uint64(byte[],uint64)bool'] | undefined]> + + /** + * Calls the verify_biguint_lt(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintLt(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_lt(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguint_lt_uint64(byte[],uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintLtUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_lt_uint64(byte[],uint64)bool'] | undefined]> + + /** + * Calls the verify_biguint_le(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintLe(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_le(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguint_le_uint64(byte[],uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintLeUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_le_uint64(byte[],uint64)bool'] | undefined]> + + /** + * Calls the verify_biguint_gt(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintGt(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_gt(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguint_gt_uint64(byte[],uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintGtUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_gt_uint64(byte[],uint64)bool'] | undefined]> + + /** + * Calls the verify_biguint_ge(byte[],byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintGe(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_ge(byte[],byte[])bool'] | undefined]> + + /** + * Calls the verify_biguint_ge_uint64(byte[],uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyBiguintGeUint64(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_biguint_ge_uint64(byte[],uint64)bool'] | undefined]> + + /** + * Calls the verify_string_init(string)string ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyStringInit(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_string_init(string)string'] | undefined]> + + /** + * Calls the verify_string_startswith(string,string)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyStringStartswith(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_string_startswith(string,string)bool'] | undefined]> + + /** + * Calls the verify_string_endswith(string,string)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyStringEndswith(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_string_endswith(string,string)bool'] | undefined]> + + /** + * Calls the verify_string_join(string,string)string ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyStringJoin(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_string_join(string,string)string'] | undefined]> + + /** + * Calls the verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyLog(params?: CallParams): PrimitiveOpsContractComposer<[...TReturns, PrimitiveOpsContractReturns['verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[],byte[5])void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the PrimitiveOpsContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): PrimitiveOpsContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): PrimitiveOpsContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type PrimitiveOpsContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/SignaturesContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/SignaturesContract.ts new file mode 100644 index 0000000..e810782 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/SignaturesContract.ts @@ -0,0 +1,1203 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"SignaturesContract","structs":{"AnotherStruct":[{"name":"one","type":"uint64"},{"name":"two","type":"string"}],"MyStruct":[{"name":"anotherStruct","type":"AnotherStruct"},{"name":"anotherStructAlias","type":"AnotherStruct"},{"name":"three","type":"uint128"},{"name":"four","type":"uint128"}]},"methods":[{"name":"create","args":[],"returns":{"type":"void"},"actions":{"create":["NoOp"],"call":[]},"readonly":false,"events":[],"recommendations":{}},{"name":"sink","args":[{"type":"string","name":"value"},{"type":"uint8[]","name":"arr"},{"type":"byte[4]","name":"fixed_bytes"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"alias","args":[{"type":"string","name":"value"},{"type":"uint8[]","name":"arr"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"with_txn","args":[{"type":"string","name":"value"},{"type":"pay","name":"pay"},{"type":"uint8[]","name":"arr"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"with_asset","args":[{"type":"string","name":"value"},{"type":"asset","name":"asset"},{"type":"uint8[]","name":"arr"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"with_app","args":[{"type":"string","name":"value"},{"type":"application","name":"app"},{"type":"uint64","name":"app_id"},{"type":"uint8[]","name":"arr"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"with_acc","args":[{"type":"string","name":"value"},{"type":"account","name":"acc"},{"type":"uint8[]","name":"arr"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"complex_sig","args":[{"type":"((uint64,string),(uint64,string),uint128,uint128)","struct":"MyStruct","name":"struct1"},{"type":"txn","name":"txn"},{"type":"account","name":"acc"},{"type":"uint8[]","name":"five"}],"returns":{"type":"((uint64,string),((uint64,string),(uint64,string),uint128,uint128))"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"echo_resource_by_index","args":[{"type":"asset","name":"asset"},{"type":"application","name":"app"},{"type":"account","name":"acc"}],"returns":{"type":"(uint64,uint64,address)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"echo_resource_by_value","args":[{"type":"uint64","name":"asset"},{"type":"uint64","name":"app"},{"type":"address","name":"acc"}],"returns":{"type":"(uint64,uint64,address)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":[],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[348,353,547,552],"errorMessage":"account funded"},{"pc":[284],"errorMessage":"application exists"},{"pc":[242],"errorMessage":"asset exists"},{"pc":[639],"errorMessage":"expected account to be passed by index"},{"pc":[693],"errorMessage":"expected account to be passed by value"},{"pc":[280],"errorMessage":"expected app id to match provided app id"},{"pc":[629],"errorMessage":"expected application to be passed by index"},{"pc":[687],"errorMessage":"expected application to be passed by value"},{"pc":[619],"errorMessage":"expected asset to be passed by index"},{"pc":[679],"errorMessage":"expected asset to be passed by value"},{"pc":[138],"errorMessage":"expected global to have app address"},{"pc":[132],"errorMessage":"expected global to have app id"},{"pc":[288],"errorMessage":"expected other app to have same creator"},{"pc":[143,147],"errorMessage":"expected txn to have 0"},{"pc":[392],"errorMessage":"invalid array length header"},{"pc":[400],"errorMessage":"invalid number of bytes for arc4.dynamic_array"},{"pc":[671],"errorMessage":"invalid number of bytes for arc4.static_array"},{"pc":[129,294],"errorMessage":"transaction type is appl"},{"pc":[190],"errorMessage":"transaction type is pay"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgNiAxMjMKICAgIGJ5dGVjYmxvY2sgMHgwMDAwIDB4MTUxZjdjNzUgMHgwMDAwMDAwMDAwMDAwMDAxIDB4MDAwMTMyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgU2lnbmF0dXJlc0NvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBieiBtYWluX2NyZWF0ZV9Ob09wQDEzCiAgICBwdXNoYnl0ZXNzIDB4MmUwMTc4MWUgMHgzYjA1Y2YxNyAweDA2NThkY2MzIDB4NWI2NDQ3ZGUgMHgwNjFmNGU3NyAweGVhYTg5MTM5IDB4NTEwZTcyYTQgMHhkNmMyYWM3ZiAweDQ4MTQyZDVlIC8vIG1ldGhvZCAic2luayhzdHJpbmcsdWludDhbXSxieXRlWzRdKXZvaWQiLCBtZXRob2QgImFsaWFzKHN0cmluZyx1aW50OFtdKXZvaWQiLCBtZXRob2QgIndpdGhfdHhuKHN0cmluZyxwYXksdWludDhbXSl2b2lkIiwgbWV0aG9kICJ3aXRoX2Fzc2V0KHN0cmluZyxhc3NldCx1aW50OFtdKXZvaWQiLCBtZXRob2QgIndpdGhfYXBwKHN0cmluZyxhcHBsaWNhdGlvbix1aW50NjQsdWludDhbXSl2b2lkIiwgbWV0aG9kICJ3aXRoX2FjYyhzdHJpbmcsYWNjb3VudCx1aW50OFtdKXZvaWQiLCBtZXRob2QgImNvbXBsZXhfc2lnKCgodWludDY0LHN0cmluZyksKHVpbnQ2NCxzdHJpbmcpLHVpbnQxMjgsdWludDEyOCksdHhuLGFjY291bnQsdWludDhbXSkoKHVpbnQ2NCxzdHJpbmcpLCgodWludDY0LHN0cmluZyksKHVpbnQ2NCxzdHJpbmcpLHVpbnQxMjgsdWludDEyOCkpIiwgbWV0aG9kICJlY2hvX3Jlc291cmNlX2J5X2luZGV4KGFzc2V0LGFwcGxpY2F0aW9uLGFjY291bnQpKHVpbnQ2NCx1aW50NjQsYWRkcmVzcykiLCBtZXRob2QgImVjaG9fcmVzb3VyY2VfYnlfdmFsdWUodWludDY0LHVpbnQ2NCxhZGRyZXNzKSh1aW50NjQsdWludDY0LGFkZHJlc3MpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggc2luayBzaW5rMiB3aXRoX3R4biB3aXRoX2Fzc2V0IHdpdGhfYXBwIHdpdGhfYWNjIGNvbXBsZXhfc2lnIGVjaG9fcmVzb3VyY2VfYnlfaW5kZXggZWNob19yZXNvdXJjZV9ieV92YWx1ZQogICAgZXJyCgptYWluX2NyZWF0ZV9Ob09wQDEzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIFNpZ25hdHVyZXNDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgcHVzaGJ5dGVzIDB4NGM1YzYxYmEgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGUKICAgIGVycgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0QUJJTWV0aG9kLmNvbnRyYWN0LlNpZ25hdHVyZXNDb250cmFjdC5jcmVhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weToyOAogICAgLy8gYXBwX3R4biA9IGd0eG4uQXBwbGljYXRpb25DYWxsVHJhbnNhY3Rpb24oMCkKICAgIGludGNfMSAvLyAwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18yIC8vIGFwcGwKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBhcHBsCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weToyOQogICAgLy8gYXNzZXJ0IG9wLkdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkICE9IDAsICJleHBlY3RlZCBnbG9iYWwgdG8gaGF2ZSBhcHAgaWQiCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBleHBlY3RlZCBnbG9iYWwgdG8gaGF2ZSBhcHAgaWQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjMxCiAgICAvLyBvcC5HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzICE9IG9wLkdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTozMC0zMgogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBvcC5HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzICE9IG9wLkdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIC8vICksICJleHBlY3RlZCBnbG9iYWwgdG8gaGF2ZSBhcHAgYWRkcmVzcyIKICAgIGFzc2VydCAvLyBleHBlY3RlZCBnbG9iYWwgdG8gaGF2ZSBhcHAgYWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MjgKICAgIC8vIGFwcF90eG4gPSBndHhuLkFwcGxpY2F0aW9uQ2FsbFRyYW5zYWN0aW9uKDApCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MzMKICAgIC8vIGFzc2VydCBhcHBfdHhuLmFwcF9pZCA9PSAwLCAiZXhwZWN0ZWQgdHhuIHRvIGhhdmUgMCIKICAgIGd0eG5zIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBleHBlY3RlZCB0eG4gdG8gaGF2ZSAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTozNAogICAgLy8gYXNzZXJ0IFR4bi5hcHBsaWNhdGlvbl9pZCA9PSAwLCAiZXhwZWN0ZWQgdHhuIHRvIGhhdmUgMCIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdHhuIHRvIGhhdmUgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0QUJJTWV0aG9kLmNvbnRyYWN0LlNpZ25hdHVyZXNDb250cmFjdC5zaW5rW3JvdXRpbmddKCkgLT4gdm9pZDoKc2luazoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo0MAogICAgLy8gYXNzZXJ0IHZhbHVlCiAgICBieXRlY18wIC8vIDB4MDAwMAogICAgIT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6NDEKICAgIC8vIGFzc2VydCBhcnIKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTozNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0QUJJTWV0aG9kLmNvbnRyYWN0LlNpZ25hdHVyZXNDb250cmFjdC5zaW5rMltyb3V0aW5nXSgpIC0+IHZvaWQ6CnNpbmsyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6NDQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPSJhbGlhcyIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo0NgogICAgLy8gYXNzZXJ0IHZhbHVlCiAgICBieXRlY18wIC8vIDB4MDAwMAogICAgIT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6NDcKICAgIC8vIGFzc2VydCBhcnIKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9ImFsaWFzIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNEFCSU1ldGhvZC5jb250cmFjdC5TaWduYXR1cmVzQ29udHJhY3Qud2l0aF90eG5bcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoX3R4bjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18wIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6NTEKICAgIC8vIGFzc2VydCB2YWx1ZQogICAgdW5jb3ZlciAyCiAgICBieXRlY18wIC8vIDB4MDAwMAogICAgIT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6NTIKICAgIC8vIGFzc2VydCBhcnIKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo1MwogICAgLy8gYXNzZXJ0IHBheS5ncm91cF9pbmRleCA9PSAwCiAgICBkdXAKICAgIGd0eG5zIEdyb3VwSW5kZXgKICAgICEKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6NTQKICAgIC8vIGFzc2VydCBUeG4uZ3JvdXBfaW5kZXggPT0gMQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo1NQogICAgLy8gYXNzZXJ0IHBheS5hbW91bnQgPT0gMTIzCiAgICBndHhucyBBbW91bnQKICAgIGludGNfMyAvLyAxMjMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNEFCSU1ldGhvZC5jb250cmFjdC5TaWduYXR1cmVzQ29udHJhY3Qud2l0aF9hc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6CndpdGhfYXNzZXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlc291cmNlX2VuY29kaW5nPSJpbmRleCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjU5CiAgICAvLyBhc3NlcnQgdmFsdWUKICAgIHVuY292ZXIgMgogICAgYnl0ZWNfMCAvLyAweDAwMDAKICAgICE9CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjYwCiAgICAvLyBhc3NlcnQgYXJyCiAgICBieXRlY18wIC8vIDB4MDAwMAogICAgIT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6NjEKICAgIC8vIGFzc2VydCBhc3NldC50b3RhbCA9PSAxMjMKICAgIGR1cAogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFRvdGFsCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpbnRjXzMgLy8gMTIzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo2MgogICAgLy8gYXNzZXJ0IFR4bi5hc3NldHMoMCkgPT0gYXNzZXQKICAgIHR4bmEgQXNzZXRzIDAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNEFCSU1ldGhvZC5jb250cmFjdC5TaWduYXR1cmVzQ29udHJhY3Qud2l0aF9hcHBbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoX2FwcDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6NjgKICAgIC8vIGFzc2VydCB2YWx1ZQogICAgdW5jb3ZlciAzCiAgICBieXRlY18wIC8vIDB4MDAwMAogICAgIT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6NjkKICAgIC8vIGFzc2VydCBhcnIKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo3MAogICAgLy8gYXNzZXJ0IGFwcC5pZCA9PSBhcHBfaWQsICJleHBlY3RlZCBhcHAgaWQgdG8gbWF0Y2ggcHJvdmlkZWQgYXBwIGlkIgogICAgZGlnIDEKICAgIGl0b2IKICAgIGI9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGFwcCBpZCB0byBtYXRjaCBwcm92aWRlZCBhcHAgaWQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjcxCiAgICAvLyBhc3NlcnQgYXBwLmNyZWF0b3IgPT0gb3AuR2xvYmFsLmNyZWF0b3JfYWRkcmVzcywgImV4cGVjdGVkIG90aGVyIGFwcCB0byBoYXZlIHNhbWUgY3JlYXRvciIKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIG90aGVyIGFwcCB0byBoYXZlIHNhbWUgY3JlYXRvcgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6NzIKICAgIC8vIGFwcF90eG4gPSBndHhuLkFwcGxpY2F0aW9uQ2FsbFRyYW5zYWN0aW9uKDApCiAgICBpbnRjXzEgLy8gMAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMiAvLyBhcHBsCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXBwbAogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjczCiAgICAvLyBhc3NlcnQgYXBwX3R4bi5hcHBzKDApID09IG9wLkdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkCiAgICBkdXAKICAgIGd0eG5zYXMgQXBwbGljYXRpb25zCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBhc3NlcnQgVHhuLmFwcGxpY2F0aW9ucygwKSA9PSBvcC5HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZAogICAgdHhuYSBBcHBsaWNhdGlvbnMgMAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo3MgogICAgLy8gYXBwX3R4biA9IGd0eG4uQXBwbGljYXRpb25DYWxsVHJhbnNhY3Rpb24oMCkKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo3NQogICAgLy8gYXNzZXJ0IGFwcF90eG4uYXBwcygxKSA9PSBhcHAKICAgIGludGNfMCAvLyAxCiAgICBndHhuc2FzIEFwcGxpY2F0aW9ucwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBhc3NlcnQgVHhuLmFwcGxpY2F0aW9ucygxKSA9PSBhcHAKICAgIHR4bmEgQXBwbGljYXRpb25zIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNEFCSU1ldGhvZC5jb250cmFjdC5TaWduYXR1cmVzQ29udHJhY3Qud2l0aF9hY2Nbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoX2FjYzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo4MAogICAgLy8gYXNzZXJ0IHZhbHVlCiAgICB1bmNvdmVyIDIKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo4MQogICAgLy8gYXNzZXJ0IGFycgogICAgYnl0ZWNfMCAvLyAweDAwMDAKICAgICE9CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjgyCiAgICAvLyBhc3NlcnQgYWNjLmJhbGFuY2UgPT0gYWNjLm1pbl9iYWxhbmNlICsgMTIzNAogICAgZHVwCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgZGlnIDEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICBwdXNoaW50IDEyMzQKICAgICsKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBhc3NlcnQgVHhuLmFjY291bnRzKDApID09IFR4bi5zZW5kZXIKICAgIHR4bmEgQWNjb3VudHMgMAogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBUeG4uYWNjb3VudHMoMSkgPT0gYWNjCiAgICB0eG5hIEFjY291bnRzIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNEFCSU1ldGhvZC5jb250cmFjdC5TaWduYXR1cmVzQ29udHJhY3QuY29tcGxleF9zaWdbcm91dGluZ10oKSAtPiB2b2lkOgpjb21wbGV4X3NpZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjkwCiAgICAvLyBmaXZlLnZhbGlkYXRlKCkKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo5MQogICAgLy8gYXNzZXJ0IFR4bi5udW1fYXBwX2FyZ3MgPT0gNAogICAgdHhuIE51bUFwcEFyZ3MKICAgIHB1c2hpbnQgNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6OTItOTMKICAgIC8vICMgc3RydWN0CiAgICAvLyBhc3NlcnQgc3RydWN0MS5hbm90aGVyX3N0cnVjdC5vbmUgPT0gMQogICAgZGlnIDMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDQKICAgIHB1c2hpbnQgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyA1CiAgICB1bmNvdmVyIDIKICAgIGRpZyAyCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGV4dHJhY3QgMCA4CiAgICBieXRlY18yIC8vIDB4MDAwMDAwMDAwMDAwMDAwMQogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjkyLTk0CiAgICAvLyAjIHN0cnVjdAogICAgLy8gYXNzZXJ0IHN0cnVjdDEuYW5vdGhlcl9zdHJ1Y3Qub25lID09IDEKICAgIC8vIGFzc2VydCBzdHJ1Y3QxLmFub3RoZXJfc3RydWN0LnR3byA9PSAiMiIKICAgIGR1cAogICAgcHVzaGludCA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGxlbgogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBhc3NlcnQgc3RydWN0MS5hbm90aGVyX3N0cnVjdC50d28gPT0gIjIiCiAgICBieXRlY18zIC8vIDB4MDAwMTMyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo5NQogICAgLy8gYXNzZXJ0IHN0cnVjdDEuYW5vdGhlcl9zdHJ1Y3RfYWxpYXMub25lID09IDEKICAgIGRpZyA2CiAgICBsZW4KICAgIGRpZyA3CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBleHRyYWN0IDAgOAogICAgYnl0ZWNfMiAvLyAweDAwMDAwMDAwMDAwMDAwMDEKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo5NS05NgogICAgLy8gYXNzZXJ0IHN0cnVjdDEuYW5vdGhlcl9zdHJ1Y3RfYWxpYXMub25lID09IDEKICAgIC8vIGFzc2VydCBzdHJ1Y3QxLmFub3RoZXJfc3RydWN0X2FsaWFzLnR3byA9PSAiMiIKICAgIGR1cAogICAgcHVzaGludCA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6OTQKICAgIC8vIGFzc2VydCBzdHJ1Y3QxLmFub3RoZXJfc3RydWN0LnR3byA9PSAiMiIKICAgIGJ5dGVjXzMgLy8gMHgwMDAxMzIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBhc3NlcnQgc3RydWN0MS5hbm90aGVyX3N0cnVjdF9hbGlhcy50d28gPT0gIjIiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo5NwogICAgLy8gYXNzZXJ0IHN0cnVjdDEudGhyZWUgPT0gMwogICAgZGlnIDUKICAgIGV4dHJhY3QgNCAxNgogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weTo5OAogICAgLy8gYXNzZXJ0IHN0cnVjdDEuZm91ciA9PSA0CiAgICBkaWcgNQogICAgZXh0cmFjdCAyMCAxNgogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weToxMDAtMTAxCiAgICAvLyAjIHR4bgogICAgLy8gYXNzZXJ0IHR4bi5ncm91cF9pbmRleCA9PSBUeG4uZ3JvdXBfaW5kZXggLSAxCiAgICB1bmNvdmVyIDQKICAgIGd0eG5zIEdyb3VwSW5kZXgKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MTAzLTEwNAogICAgLy8gIyBhY2MKICAgIC8vIGFzc2VydCBUeG4uYXBwbGljYXRpb25fYXJncygyKSA9PSBhcmM0LlVJbnQ4KDEpLmJ5dGVzICAjIGFjYyBhcnJheSByZWYKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHB1c2hieXRlcyAweDAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weToxMDUKICAgIC8vIGFzc2VydCBhY2MuYmFsYW5jZSA9PSBhY2MubWluX2JhbGFuY2UgKyAxMjM0CiAgICBkaWcgMwogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIHVuY292ZXIgNAogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIHB1c2hpbnQgMTIzNAogICAgKwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MTA2CiAgICAvLyBhc3NlcnQgZml2ZVswXSA9PSA1CiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3QgMiAxCiAgICBwdXNoYnl0ZXMgMHgwNQogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIHB1c2hpbnQgNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHB1c2hieXRlcyAweDAwMDQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJjNEFCSU1ldGhvZC5jb250cmFjdC5TaWduYXR1cmVzQ29udHJhY3QuZWNob19yZXNvdXJjZV9ieV9pbmRleFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmVjaG9fcmVzb3VyY2VfYnlfaW5kZXg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weToxMTAtMTEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoCiAgICAvLyAgICAgcmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IiwKICAgIC8vICkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MTE2CiAgICAvLyBhc3NldF9pZHggPSBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MTE3CiAgICAvLyBhc3NlcnQgYXNzZXQgPT0gVHhuLmFzc2V0cyhhc3NldF9pZHgpLCAiZXhwZWN0ZWQgYXNzZXQgdG8gYmUgcGFzc2VkIGJ5IGluZGV4IgogICAgdHhuYXMgQXNzZXRzCiAgICBkaWcgMwogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBhc3NldCB0byBiZSBwYXNzZWQgYnkgaW5kZXgKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjExOAogICAgLy8gYXBwX2lkeCA9IG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMikpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weToxMTkKICAgIC8vIGFzc2VydCBhcHAgPT0gVHhuLmFwcGxpY2F0aW9ucyhhcHBfaWR4KSwgImV4cGVjdGVkIGFwcGxpY2F0aW9uIHRvIGJlIHBhc3NlZCBieSBpbmRleCIKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgZGlnIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgYXBwbGljYXRpb24gdG8gYmUgcGFzc2VkIGJ5IGluZGV4CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weToxMjAKICAgIC8vIGFjY19pZHggPSBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDMpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MTIxCiAgICAvLyBhc3NlcnQgYWNjID09IFR4bi5hY2NvdW50cyhhY2NfaWR4KSwgImV4cGVjdGVkIGFjY291bnQgdG8gYmUgcGFzc2VkIGJ5IGluZGV4IgogICAgdHhuYXMgQWNjb3VudHMKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGFjY291bnQgdG8gYmUgcGFzc2VkIGJ5IGluZGV4CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weToxMTAtMTEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoCiAgICAvLyAgICAgcmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IiwKICAgIC8vICkKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcmM0QUJJTWV0aG9kLmNvbnRyYWN0LlNpZ25hdHVyZXNDb250cmFjdC5lY2hvX3Jlc291cmNlX2J5X3ZhbHVlW3JvdXRpbmddKCkgLT4gdm9pZDoKZWNob19yZXNvdXJjZV9ieV92YWx1ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjEyNC0xMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgKICAgIC8vICAgICByZXNvdXJjZV9lbmNvZGluZz0idmFsdWUiLAogICAgLy8gKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MTMwCiAgICAvLyBhY2MudmFsaWRhdGUoKQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MTMxCiAgICAvLyBhc3NldF9pZCA9IG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weToxMzIKICAgIC8vIGFzc2VydCBhc3NldC5pZCA9PSBhc3NldF9pZCwgImV4cGVjdGVkIGFzc2V0IHRvIGJlIHBhc3NlZCBieSB2YWx1ZSIKICAgIGRpZyAzCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGFzc2V0IHRvIGJlIHBhc3NlZCBieSB2YWx1ZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MTMzCiAgICAvLyBhcHBfaWQgPSBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDIpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MTM0CiAgICAvLyBhc3NlcnQgYXBwLmlkID09IGFwcF9pZCwgImV4cGVjdGVkIGFwcGxpY2F0aW9uIHRvIGJlIHBhc3NlZCBieSB2YWx1ZSIKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGFwcGxpY2F0aW9uIHRvIGJlIHBhc3NlZCBieSB2YWx1ZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MTM2CiAgICAvLyBhc3NlcnQgYWNjLmJ5dGVzID09IGFkZHJlc3MsICJleHBlY3RlZCBhY2NvdW50IHRvIGJlIHBhc3NlZCBieSB2YWx1ZSIKICAgIGR1cAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FyYzRBQklNZXRob2QvY29udHJhY3QucHk6MTM1CiAgICAvLyBhZGRyZXNzID0gVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMykKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcmM0QUJJTWV0aG9kL2NvbnRyYWN0LnB5OjEzNgogICAgLy8gYXNzZXJ0IGFjYy5ieXRlcyA9PSBhZGRyZXNzLCAiZXhwZWN0ZWQgYWNjb3VudCB0byBiZSBwYXNzZWQgYnkgdmFsdWUiCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGFjY291bnQgdG8gYmUgcGFzc2VkIGJ5IHZhbHVlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJjNEFCSU1ldGhvZC9jb250cmFjdC5weToxMjQtMTI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoCiAgICAvLyAgICAgcmVzb3VyY2VfZW5jb2Rpbmc9InZhbHVlIiwKICAgIC8vICkKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAEAQAGeyYEAgAABBUffHUIAAAAAAAAAAEDAAEyMRkURDEYQQBHggkELgF4HgQ7Bc8XBAZY3MMEW2RH3gQGH053BOqokTkEUQ5ypATWwqx/BEgULV42GgCOCQApADcARQBuAJAA2AEJAeMCIgCABExcYbo2GgCOAQABACM4ECQSRDIIRDIKMgMTRCM4GBREMRgURCJDNhoCNhoBKBNEKBNEIkM2GgI2GgEoE0QoE0QiQzYaATEWIglJOBAiEkQ2GgJPAigTRCgTREk4FhREMRYiEkQ4CCUSRCJDNhoBNhoCF8AwNhoDTwIoE0QoE0RJcQBEJRJENjAAEkQiQzYaATYaAhfAMjYaAzYaBE8DKBNEKBNESwEWqERJcgdEMgkSRCM4ECQSRCNJwjIyCBJENjIAMggSRCMiwjJLARJENjIBEkQiQzYaATYaAhfAHDYaA08CKBNEKBNESXMAREsBcwFEgdIJCBJENhwAMQASRDYcARJEIkM2GgExFiIJNhoCF8AcNhoDSSNZgQIISwEVEkQxG4EEEkRLAyNZSwSBAllLBU8CSwJSSVcACCqoREmBCFlLARVLAk8CSwJSKxJESwYVSwdPBE8CUklXAAgqqERJgQhZSwEVUisSREsFVwQQgBAAAAAAAAAAAAAAAAAAAAADqERLBVcUEIAQAAAAAAAAAAAAAAAAAAAABKhETwQ4FjEWIgkSRDYaAoABARJESwNzAERPBHMBRIHSCQgSRE8CVwIBgAEFqESBBAgWVwYCgAIABExQTFBMUClMULAiQzYaARfAMDYaAhfAMjYaAxfAHDYaARfAMEsDEkQ2GgIXwDJLAhJENhoDF8AcSwESRE8CFk8CFlBMUClMULAiQzYaARc2GgIXNhoDSRWBIBJENhoBF0sDEkQ2GgIXSwISREk2GgMSRE8CFk8CFlBMUClMULAiQw==","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +// Type definitions for ARC-56 structs + +export type AnotherStruct = { + one: bigint, + two: string +} + + +/** + * Converts the ABI tuple representation of a AnotherStruct to the struct representation + */ +export function AnotherStructFromTuple(abiTuple: [bigint, string]) { + const abiStructType = ABIStructType.fromStruct('AnotherStruct', APP_SPEC.structs) + return getStructValueFromTupleValue(abiStructType, abiTuple) as AnotherStruct +} + +export type MyStruct = { + anotherStruct: AnotherStruct, + anotherStructAlias: AnotherStruct, + three: bigint, + four: bigint +} + + +/** + * Converts the ABI tuple representation of a MyStruct to the struct representation + */ +export function MyStructFromTuple(abiTuple: [AnotherStruct, AnotherStruct, bigint, bigint]) { + const abiStructType = ABIStructType.fromStruct('MyStruct', APP_SPEC.structs) + return getStructValueFromTupleValue(abiStructType, abiTuple) as MyStruct +} + +/** + * The argument types for the SignaturesContract contract + */ +export type SignaturesContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'create()void': Record + 'sink(string,uint8[],byte[4])void': { + value: string + arr: bigint[] | number[] + fixedBytes: Uint8Array + } + 'alias(string,uint8[])void': { + value: string + arr: bigint[] | number[] + } + 'with_txn(string,pay,uint8[])void': { + value: string + pay: AppMethodCallTransactionArgument + arr: bigint[] | number[] + } + 'with_asset(string,asset,uint8[])void': { + value: string + asset: bigint + arr: bigint[] | number[] + } + 'with_app(string,application,uint64,uint8[])void': { + value: string + app: bigint + appId: bigint | number + arr: bigint[] | number[] + } + 'with_acc(string,account,uint8[])void': { + value: string + acc: Uint8Array | string + arr: bigint[] | number[] + } + 'complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))': { + struct1: MyStruct + txn: AppMethodCallTransactionArgument + acc: Uint8Array | string + five: bigint[] | number[] + } + 'echo_resource_by_index(asset,application,account)(uint64,uint64,address)': { + asset: bigint + app: bigint + acc: Uint8Array | string + } + 'echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)': { + asset: bigint | number + app: bigint | number + acc: string + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'create()void': [] + 'sink(string,uint8[],byte[4])void': [value: string, arr: bigint[] | number[], fixedBytes: Uint8Array] + 'alias(string,uint8[])void': [value: string, arr: bigint[] | number[]] + 'with_txn(string,pay,uint8[])void': [value: string, pay: AppMethodCallTransactionArgument, arr: bigint[] | number[]] + 'with_asset(string,asset,uint8[])void': [value: string, asset: bigint, arr: bigint[] | number[]] + 'with_app(string,application,uint64,uint8[])void': [value: string, app: bigint, appId: bigint | number, arr: bigint[] | number[]] + 'with_acc(string,account,uint8[])void': [value: string, acc: Uint8Array | string, arr: bigint[] | number[]] + 'complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))': [struct1: MyStruct, txn: AppMethodCallTransactionArgument, acc: Uint8Array | string, five: bigint[] | number[]] + 'echo_resource_by_index(asset,application,account)(uint64,uint64,address)': [asset: bigint, app: bigint, acc: Uint8Array | string] + 'echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)': [asset: bigint | number, app: bigint | number, acc: string] + } +} + +/** + * The return type for each method + */ +export type SignaturesContractReturns = { + 'create()void': void + 'sink(string,uint8[],byte[4])void': void + 'alias(string,uint8[])void': void + 'with_txn(string,pay,uint8[])void': void + 'with_asset(string,asset,uint8[])void': void + 'with_app(string,application,uint64,uint8[])void': void + 'with_acc(string,account,uint8[])void': void + 'complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))': [[bigint, string], [[bigint, string], [bigint, string], bigint, bigint]] + 'echo_resource_by_index(asset,application,account)(uint64,uint64,address)': [bigint, bigint, string] + 'echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)': [bigint, bigint, string] +} + +/** + * Defines the types of available calls and state of the SignaturesContract smart contract. + */ +export type SignaturesContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'create()void' | 'create', { + argsObj: SignaturesContractArgs['obj']['create()void'] + argsTuple: SignaturesContractArgs['tuple']['create()void'] + returns: SignaturesContractReturns['create()void'] + }> + & Record<'sink(string,uint8[],byte[4])void' | 'sink', { + argsObj: SignaturesContractArgs['obj']['sink(string,uint8[],byte[4])void'] + argsTuple: SignaturesContractArgs['tuple']['sink(string,uint8[],byte[4])void'] + returns: SignaturesContractReturns['sink(string,uint8[],byte[4])void'] + }> + & Record<'alias(string,uint8[])void' | 'alias', { + argsObj: SignaturesContractArgs['obj']['alias(string,uint8[])void'] + argsTuple: SignaturesContractArgs['tuple']['alias(string,uint8[])void'] + returns: SignaturesContractReturns['alias(string,uint8[])void'] + }> + & Record<'with_txn(string,pay,uint8[])void' | 'with_txn', { + argsObj: SignaturesContractArgs['obj']['with_txn(string,pay,uint8[])void'] + argsTuple: SignaturesContractArgs['tuple']['with_txn(string,pay,uint8[])void'] + returns: SignaturesContractReturns['with_txn(string,pay,uint8[])void'] + }> + & Record<'with_asset(string,asset,uint8[])void' | 'with_asset', { + argsObj: SignaturesContractArgs['obj']['with_asset(string,asset,uint8[])void'] + argsTuple: SignaturesContractArgs['tuple']['with_asset(string,asset,uint8[])void'] + returns: SignaturesContractReturns['with_asset(string,asset,uint8[])void'] + }> + & Record<'with_app(string,application,uint64,uint8[])void' | 'with_app', { + argsObj: SignaturesContractArgs['obj']['with_app(string,application,uint64,uint8[])void'] + argsTuple: SignaturesContractArgs['tuple']['with_app(string,application,uint64,uint8[])void'] + returns: SignaturesContractReturns['with_app(string,application,uint64,uint8[])void'] + }> + & Record<'with_acc(string,account,uint8[])void' | 'with_acc', { + argsObj: SignaturesContractArgs['obj']['with_acc(string,account,uint8[])void'] + argsTuple: SignaturesContractArgs['tuple']['with_acc(string,account,uint8[])void'] + returns: SignaturesContractReturns['with_acc(string,account,uint8[])void'] + }> + & Record<'complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))' | 'complex_sig', { + argsObj: SignaturesContractArgs['obj']['complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))'] + argsTuple: SignaturesContractArgs['tuple']['complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))'] + returns: SignaturesContractReturns['complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))'] + }> + & Record<'echo_resource_by_index(asset,application,account)(uint64,uint64,address)' | 'echo_resource_by_index', { + argsObj: SignaturesContractArgs['obj']['echo_resource_by_index(asset,application,account)(uint64,uint64,address)'] + argsTuple: SignaturesContractArgs['tuple']['echo_resource_by_index(asset,application,account)(uint64,uint64,address)'] + returns: SignaturesContractReturns['echo_resource_by_index(asset,application,account)(uint64,uint64,address)'] + }> + & Record<'echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)' | 'echo_resource_by_value', { + argsObj: SignaturesContractArgs['obj']['echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)'] + argsTuple: SignaturesContractArgs['tuple']['echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)'] + returns: SignaturesContractReturns['echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type SignaturesContractSignatures = keyof SignaturesContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type SignaturesContractNonVoidMethodSignatures = keyof SignaturesContractTypes['methods'] extends infer T ? T extends keyof SignaturesContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the SignaturesContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = SignaturesContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the SignaturesContract smart contract to the method's return type + */ +export type MethodReturn = SignaturesContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type SignaturesContractCreateCallParams = + | Expand & {method: 'create'} & { onComplete?: OnApplicationComplete.NoOp } & CreateSchema> + | Expand & {method: 'create()void'} & { onComplete?: OnApplicationComplete.NoOp } & CreateSchema> +/** + * Defines arguments required for the deploy method. + */ +export type SignaturesContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: SignaturesContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the SignaturesContract smart contract + */ +export abstract class SignaturesContractParamsFactory { + /** + * Gets available create ABI call param factories + */ + static get create() { + return { + _resolveByMethod(params: TParams) { + switch(params.method) { + case 'create': + case 'create()void': + return SignaturesContractParamsFactory.create.create(params) + } + throw new Error(`Unknown ' + verb + ' method`) + }, + + /** + * Constructs create ABI call params for the SignaturesContract smart contract using the create()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + create(params: CallParams & AppClientCompilationParams & { onComplete?: OnApplicationComplete.NoOp }): AppClientMethodCallParams & AppClientCompilationParams & { onComplete?: OnApplicationComplete.NoOp } { + return { + ...params, + method: 'create()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + }, + } + } + + /** + * Constructs a no op call for the sink(string,uint8[],byte[4])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static sink(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'sink(string,uint8[],byte[4])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value, params.args.arr, params.args.fixedBytes], + } + } + /** + * Constructs a no op call for the alias(string,uint8[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static alias(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'alias(string,uint8[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value, params.args.arr], + } + } + /** + * Constructs a no op call for the with_txn(string,pay,uint8[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static withTxn(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'with_txn(string,pay,uint8[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value, params.args.pay, params.args.arr], + } + } + /** + * Constructs a no op call for the with_asset(string,asset,uint8[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static withAsset(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'with_asset(string,asset,uint8[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value, params.args.asset, params.args.arr], + } + } + /** + * Constructs a no op call for the with_app(string,application,uint64,uint8[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static withApp(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'with_app(string,application,uint64,uint8[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value, params.args.app, params.args.appId, params.args.arr], + } + } + /** + * Constructs a no op call for the with_acc(string,account,uint8[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static withAcc(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'with_acc(string,account,uint8[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value, params.args.acc, params.args.arr], + } + } + /** + * Constructs a no op call for the complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128)) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static complexSig(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))' as const, + args: Array.isArray(params.args) ? params.args : [params.args.struct1, params.args.txn, params.args.acc, params.args.five], + } + } + /** + * Constructs a no op call for the echo_resource_by_index(asset,application,account)(uint64,uint64,address) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static echoResourceByIndex(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'echo_resource_by_index(asset,application,account)(uint64,uint64,address)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset, params.args.app, params.args.acc], + } + } + /** + * Constructs a no op call for the echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static echoResourceByValue(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset, params.args.app, params.args.acc], + } + } +} + +/** + * A factory to create and deploy one or more instance of the SignaturesContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class SignaturesContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `SignaturesContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new SignaturesContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new SignaturesContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the SignaturesContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: SignaturesContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + createParams: params.createParams?.method ? SignaturesContractParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (SignaturesContractCreateCallParams & { args: Uint8Array[] }) : undefined, + }) + return { result: result.result, appClient: new SignaturesContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the SignaturesContract smart contract using the create()void ABI method. + * + * @param params The params for the smart contract call + * @returns The create params + */ + create: (params: CallParams & AppClientCompilationParams & CreateSchema & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appFactory.params.create(SignaturesContractParamsFactory.create.create(params)) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the SignaturesContract smart contract using the create()void ABI method. + * + * @param params The params for the smart contract call + * @returns The create transaction + */ + create: (params: CallParams & AppClientCompilationParams & CreateSchema & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appFactory.createTransaction.create(SignaturesContractParamsFactory.create.create(params)) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the SignaturesContract smart contract using an ABI method call using the create()void ABI method. + * + * @param params The params for the smart contract call + * @returns The create result + */ + create: async (params: CallParams & AppClientCompilationParams & CreateSchema & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appFactory.send.create(SignaturesContractParamsFactory.create.create(params)) + return { result: { ...result.result, return: result.result.return as unknown as (undefined | SignaturesContractReturns['create()void']) }, appClient: new SignaturesContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the SignaturesContract smart contract + */ +export class SignaturesContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `SignaturesContractClient` + * + * @param appClient An `AppClient` instance which has been created with the SignaturesContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `SignaturesContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `SignaturesContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new SignaturesContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `SignaturesContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new SignaturesContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the SignaturesContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `sink(string,uint8[],byte[4])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + sink: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(SignaturesContractParamsFactory.sink(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `alias(string,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + alias: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(SignaturesContractParamsFactory.alias(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `with_txn(string,pay,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + withTxn: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(SignaturesContractParamsFactory.withTxn(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `with_asset(string,asset,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + withAsset: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(SignaturesContractParamsFactory.withAsset(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `with_app(string,application,uint64,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + withApp: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(SignaturesContractParamsFactory.withApp(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `with_acc(string,account,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + withAcc: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(SignaturesContractParamsFactory.withAcc(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + complexSig: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(SignaturesContractParamsFactory.complexSig(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `echo_resource_by_index(asset,application,account)(uint64,uint64,address)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + echoResourceByIndex: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(SignaturesContractParamsFactory.echoResourceByIndex(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + echoResourceByValue: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(SignaturesContractParamsFactory.echoResourceByValue(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the SignaturesContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `sink(string,uint8[],byte[4])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + sink: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(SignaturesContractParamsFactory.sink(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `alias(string,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + alias: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(SignaturesContractParamsFactory.alias(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `with_txn(string,pay,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + withTxn: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(SignaturesContractParamsFactory.withTxn(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `with_asset(string,asset,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + withAsset: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(SignaturesContractParamsFactory.withAsset(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `with_app(string,application,uint64,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + withApp: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(SignaturesContractParamsFactory.withApp(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `with_acc(string,account,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + withAcc: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(SignaturesContractParamsFactory.withAcc(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + complexSig: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(SignaturesContractParamsFactory.complexSig(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `echo_resource_by_index(asset,application,account)(uint64,uint64,address)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + echoResourceByIndex: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(SignaturesContractParamsFactory.echoResourceByIndex(params)) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + echoResourceByValue: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(SignaturesContractParamsFactory.echoResourceByValue(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the SignaturesContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `sink(string,uint8[],byte[4])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + sink: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(SignaturesContractParamsFactory.sink(params)) + return {...result, return: result.return as unknown as (undefined | SignaturesContractReturns['sink(string,uint8[],byte[4])void'])} + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `alias(string,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + alias: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(SignaturesContractParamsFactory.alias(params)) + return {...result, return: result.return as unknown as (undefined | SignaturesContractReturns['alias(string,uint8[])void'])} + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `with_txn(string,pay,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + withTxn: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(SignaturesContractParamsFactory.withTxn(params)) + return {...result, return: result.return as unknown as (undefined | SignaturesContractReturns['with_txn(string,pay,uint8[])void'])} + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `with_asset(string,asset,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + withAsset: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(SignaturesContractParamsFactory.withAsset(params)) + return {...result, return: result.return as unknown as (undefined | SignaturesContractReturns['with_asset(string,asset,uint8[])void'])} + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `with_app(string,application,uint64,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + withApp: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(SignaturesContractParamsFactory.withApp(params)) + return {...result, return: result.return as unknown as (undefined | SignaturesContractReturns['with_app(string,application,uint64,uint8[])void'])} + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `with_acc(string,account,uint8[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + withAcc: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(SignaturesContractParamsFactory.withAcc(params)) + return {...result, return: result.return as unknown as (undefined | SignaturesContractReturns['with_acc(string,account,uint8[])void'])} + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + complexSig: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(SignaturesContractParamsFactory.complexSig(params)) + return {...result, return: result.return as unknown as (undefined | SignaturesContractReturns['complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))'])} + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `echo_resource_by_index(asset,application,account)(uint64,uint64,address)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + echoResourceByIndex: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(SignaturesContractParamsFactory.echoResourceByIndex(params)) + return {...result, return: result.return as unknown as (undefined | SignaturesContractReturns['echo_resource_by_index(asset,application,account)(uint64,uint64,address)'])} + }, + + /** + * Makes a call to the SignaturesContract smart contract using the `echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + echoResourceByValue: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(SignaturesContractParamsFactory.echoResourceByValue(params)) + return {...result, return: result.return as unknown as (undefined | SignaturesContractReturns['echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new SignaturesContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current SignaturesContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): SignaturesContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a sink(string,uint8[],byte[4])void method call against the SignaturesContract contract + */ + sink(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.sink(params))) + return this + }, + /** + * Add a alias(string,uint8[])void method call against the SignaturesContract contract + */ + alias(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.alias(params))) + return this + }, + /** + * Add a with_txn(string,pay,uint8[])void method call against the SignaturesContract contract + */ + withTxn(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.withTxn(params))) + return this + }, + /** + * Add a with_asset(string,asset,uint8[])void method call against the SignaturesContract contract + */ + withAsset(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.withAsset(params))) + return this + }, + /** + * Add a with_app(string,application,uint64,uint8[])void method call against the SignaturesContract contract + */ + withApp(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.withApp(params))) + return this + }, + /** + * Add a with_acc(string,account,uint8[])void method call against the SignaturesContract contract + */ + withAcc(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.withAcc(params))) + return this + }, + /** + * Add a complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128)) method call against the SignaturesContract contract + */ + complexSig(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.complexSig(params))) + return this + }, + /** + * Add a echo_resource_by_index(asset,application,account)(uint64,uint64,address) method call against the SignaturesContract contract + */ + echoResourceByIndex(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.echoResourceByIndex(params))) + return this + }, + /** + * Add a echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address) method call against the SignaturesContract contract + */ + echoResourceByValue(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.echoResourceByValue(params))) + return this + }, + /** + * Add a clear state call to the SignaturesContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as SignaturesContractComposer + } +} +export type SignaturesContractComposer = { + /** + * Calls the sink(string,uint8[],byte[4])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + sink(params?: CallParams): SignaturesContractComposer<[...TReturns, SignaturesContractReturns['sink(string,uint8[],byte[4])void'] | undefined]> + + /** + * Calls the alias(string,uint8[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + alias(params?: CallParams): SignaturesContractComposer<[...TReturns, SignaturesContractReturns['alias(string,uint8[])void'] | undefined]> + + /** + * Calls the with_txn(string,pay,uint8[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + withTxn(params?: CallParams): SignaturesContractComposer<[...TReturns, SignaturesContractReturns['with_txn(string,pay,uint8[])void'] | undefined]> + + /** + * Calls the with_asset(string,asset,uint8[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + withAsset(params?: CallParams): SignaturesContractComposer<[...TReturns, SignaturesContractReturns['with_asset(string,asset,uint8[])void'] | undefined]> + + /** + * Calls the with_app(string,application,uint64,uint8[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + withApp(params?: CallParams): SignaturesContractComposer<[...TReturns, SignaturesContractReturns['with_app(string,application,uint64,uint8[])void'] | undefined]> + + /** + * Calls the with_acc(string,account,uint8[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + withAcc(params?: CallParams): SignaturesContractComposer<[...TReturns, SignaturesContractReturns['with_acc(string,account,uint8[])void'] | undefined]> + + /** + * Calls the complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128)) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + complexSig(params?: CallParams): SignaturesContractComposer<[...TReturns, SignaturesContractReturns['complex_sig(((uint64,string),(uint64,string),uint128,uint128),txn,account,uint8[])((uint64,string),((uint64,string),(uint64,string),uint128,uint128))'] | undefined]> + + /** + * Calls the echo_resource_by_index(asset,application,account)(uint64,uint64,address) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + echoResourceByIndex(params?: CallParams): SignaturesContractComposer<[...TReturns, SignaturesContractReturns['echo_resource_by_index(asset,application,account)(uint64,uint64,address)'] | undefined]> + + /** + * Calls the echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + echoResourceByValue(params?: CallParams): SignaturesContractComposer<[...TReturns, SignaturesContractReturns['echo_resource_by_value(uint64,uint64,address)(uint64,uint64,address)'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the SignaturesContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): SignaturesContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): SignaturesContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type SignaturesContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/StateAcctParamsGet.ts b/examples/p-py/projects/p-py-frontend/src/contracts/StateAcctParamsGet.ts new file mode 100644 index 0000000..62c4b5b --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/StateAcctParamsGet.ts @@ -0,0 +1,1319 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"arcs":[],"name":"StateAcctParamsGet","structs":{},"methods":[{"name":"verify_acct_balance","args":[{"name":"a","type":"account"}],"returns":{"type":"uint64"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"verify_acct_min_balance","args":[{"name":"a","type":"account"}],"returns":{"type":"uint64"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"verify_acct_auth_addr","args":[{"name":"a","type":"account"}],"returns":{"type":"byte[]"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"verify_acct_total_num_uint","args":[{"name":"a","type":"account"}],"returns":{"type":"uint64"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"verify_acct_total_num_byte_slice","args":[{"name":"a","type":"account"}],"returns":{"type":"uint64"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"verify_acct_total_extra_app_pages","args":[{"name":"a","type":"account"}],"returns":{"type":"uint64"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"verify_acct_total_apps_created","args":[{"name":"a","type":"account"}],"returns":{"type":"uint64"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"verify_acct_total_apps_opted_in","args":[{"name":"a","type":"account"}],"returns":{"type":"uint64"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"verify_acct_total_assets_created","args":[{"name":"a","type":"account"}],"returns":{"type":"uint64"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"verify_acct_total_assets","args":[{"name":"a","type":"account"}],"returns":{"type":"uint64"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"verify_acct_total_boxes","args":[{"name":"a","type":"account"}],"returns":{"type":"uint64"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"verify_acct_total_box_bytes","args":[{"name":"a","type":"account"}],"returns":{"type":"uint64"},"events":[],"actions":{"create":[],"call":["NoOp"]}}],"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBY2N0UGFyYW1zR2V0LmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTcKICAgIC8vIGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDE2CiAgICBtZXRob2QgInZlcmlmeV9hY2N0X2JhbGFuY2UoYWNjb3VudCl1aW50NjQiCiAgICBtZXRob2QgInZlcmlmeV9hY2N0X21pbl9iYWxhbmNlKGFjY291bnQpdWludDY0IgogICAgbWV0aG9kICJ2ZXJpZnlfYWNjdF9hdXRoX2FkZHIoYWNjb3VudClieXRlW10iCiAgICBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX251bV91aW50KGFjY291bnQpdWludDY0IgogICAgbWV0aG9kICJ2ZXJpZnlfYWNjdF90b3RhbF9udW1fYnl0ZV9zbGljZShhY2NvdW50KXVpbnQ2NCIKICAgIG1ldGhvZCAidmVyaWZ5X2FjY3RfdG90YWxfZXh0cmFfYXBwX3BhZ2VzKGFjY291bnQpdWludDY0IgogICAgbWV0aG9kICJ2ZXJpZnlfYWNjdF90b3RhbF9hcHBzX2NyZWF0ZWQoYWNjb3VudCl1aW50NjQiCiAgICBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfb3B0ZWRfaW4oYWNjb3VudCl1aW50NjQiCiAgICBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkKGFjY291bnQpdWludDY0IgogICAgbWV0aG9kICJ2ZXJpZnlfYWNjdF90b3RhbF9hc3NldHMoYWNjb3VudCl1aW50NjQiCiAgICBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX2JveGVzKGFjY291bnQpdWludDY0IgogICAgbWV0aG9kICJ2ZXJpZnlfYWNjdF90b3RhbF9ib3hfYnl0ZXMoYWNjb3VudCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3ZlcmlmeV9hY2N0X2JhbGFuY2Vfcm91dGVAMiBtYWluX3ZlcmlmeV9hY2N0X21pbl9iYWxhbmNlX3JvdXRlQDMgbWFpbl92ZXJpZnlfYWNjdF9hdXRoX2FkZHJfcm91dGVANCBtYWluX3ZlcmlmeV9hY2N0X3RvdGFsX251bV91aW50X3JvdXRlQDUgbWFpbl92ZXJpZnlfYWNjdF90b3RhbF9udW1fYnl0ZV9zbGljZV9yb3V0ZUA2IG1haW5fdmVyaWZ5X2FjY3RfdG90YWxfZXh0cmFfYXBwX3BhZ2VzX3JvdXRlQDcgbWFpbl92ZXJpZnlfYWNjdF90b3RhbF9hcHBzX2NyZWF0ZWRfcm91dGVAOCBtYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfb3B0ZWRfaW5fcm91dGVAOSBtYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkX3JvdXRlQDEwIG1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX3JvdXRlQDExIG1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYm94ZXNfcm91dGVAMTIgbWFpbl92ZXJpZnlfYWNjdF90b3RhbF9ib3hfYnl0ZXNfcm91dGVAMTMKICAgIGVyciAvLyByZWplY3QgdHJhbnNhY3Rpb24KCm1haW5fdmVyaWZ5X2FjY3RfYmFsYW5jZV9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE3CiAgICAvLyBjbGFzcyBTdGF0ZUFjY3RQYXJhbXNHZXQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hY2N0X2JhbGFuY2UKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfbWluX2JhbGFuY2Vfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNwogICAgLy8gY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF9taW5fYmFsYW5jZQogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYWNjdF9hdXRoX2FkZHJfcm91dGVANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNwogICAgLy8gY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF9hdXRoX2FkZHIKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X3RvdGFsX251bV91aW50X3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTcKICAgIC8vIGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FjY3RfdG90YWxfbnVtX3VpbnQKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfdG90YWxfbnVtX2J5dGVfc2xpY2Vfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNwogICAgLy8gY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF90b3RhbF9udW1fYnl0ZV9zbGljZQogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXNfcm91dGVANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNwogICAgLy8gY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXMKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYXBwc19jcmVhdGVkX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTcKICAgIC8vIGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FjY3RfdG90YWxfYXBwc19jcmVhdGVkCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfb3B0ZWRfaW5fcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNwogICAgLy8gY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF90b3RhbF9hcHBzX29wdGVkX2luCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkX3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE3CiAgICAvLyBjbGFzcyBTdGF0ZUFjY3RQYXJhbXNHZXQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNwogICAgLy8gY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF90b3RhbF9hc3NldHMKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYm94ZXNfcm91dGVAMTI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTcKICAgIC8vIGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FjY3RfdG90YWxfYm94ZXMKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYm94X2J5dGVzX3JvdXRlQDEzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE3CiAgICAvLyBjbGFzcyBTdGF0ZUFjY3RQYXJhbXNHZXQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hY2N0X3RvdGFsX2JveF9ieXRlcwogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTcKICAgIC8vIGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldChBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIHJlamVjdCB0cmFuc2FjdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBpcyBjcmVhdGluZwogICAgaW50IDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFjY3RQYXJhbXNHZXQudmVyaWZ5X2FjY3RfYmFsYW5jZShhOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYWNjdF9iYWxhbmNlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE4LTE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHZlcmlmeV9hY2N0X2JhbGFuY2Uoc2VsZiwgYTogYWxnb3B5LkFjY291bnQpIC0+IGFsZ29weS5VSW50NjQ6CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMAogICAgLy8gYmFsYW5jZSwgX3ZhbCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF9iYWxhbmNlKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBiYWxhbmNlCiAgICByZXRzdWIKCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBY2N0UGFyYW1zR2V0LnZlcmlmeV9hY2N0X21pbl9iYWxhbmNlKGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9hY2N0X21pbl9iYWxhbmNlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIzLTI0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHZlcmlmeV9hY2N0X21pbl9iYWxhbmNlKHNlbGYsIGE6IGFsZ29weS5BY2NvdW50KSAtPiBhbGdvcHkuVUludDY0OgogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjUKICAgIC8vIG1pbl9iYWxhbmNlLCBfdmFsID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X21pbl9iYWxhbmNlKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjYKICAgIC8vIHJldHVybiBtaW5fYmFsYW5jZQogICAgcmV0c3ViCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQWNjdFBhcmFtc0dldC52ZXJpZnlfYWNjdF9hdXRoX2FkZHIoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYWNjdF9hdXRoX2FkZHI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjgtMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdmVyaWZ5X2FjY3RfYXV0aF9hZGRyKHNlbGYsIGE6IGFsZ29weS5BY2NvdW50KSAtPiBhbGdvcHkuQnl0ZXM6CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMAogICAgLy8gYXV0aF9hZGRyLCBfdmFsID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X2F1dGhfYWRkcihhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMQogICAgLy8gcmV0dXJuIGF1dGhfYWRkci5ieXRlcwogICAgcmV0c3ViCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQWNjdFBhcmFtc0dldC52ZXJpZnlfYWNjdF90b3RhbF9udW1fdWludChhOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYWNjdF90b3RhbF9udW1fdWludDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMy0zNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB2ZXJpZnlfYWNjdF90b3RhbF9udW1fdWludChzZWxmLCBhOiBhbGdvcHkuQWNjb3VudCkgLT4gYWxnb3B5LlVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjM1CiAgICAvLyB0b3RhbF9udW1fdWludCwgX3ZhbCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF90b3RhbF9udW1fdWludChhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzYKICAgIC8vIHJldHVybiB0b3RhbF9udW1fdWludAogICAgcmV0c3ViCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQWNjdFBhcmFtc0dldC52ZXJpZnlfYWNjdF90b3RhbF9udW1fYnl0ZV9zbGljZShhOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYWNjdF90b3RhbF9udW1fYnl0ZV9zbGljZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozOC0zOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB2ZXJpZnlfYWNjdF90b3RhbF9udW1fYnl0ZV9zbGljZShzZWxmLCBhOiBhbGdvcHkuQWNjb3VudCkgLT4gYWxnb3B5LlVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQwCiAgICAvLyB0b3RhbF9udW1fYnl0ZV9zbGljZSwgX3ZhbCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF90b3RhbF9udW1fYnl0ZV9zbGljZShhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0MQogICAgLy8gcmV0dXJuIHRvdGFsX251bV9ieXRlX3NsaWNlCiAgICByZXRzdWIKCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBY2N0UGFyYW1zR2V0LnZlcmlmeV9hY2N0X3RvdGFsX2V4dHJhX2FwcF9wYWdlcyhhOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDMtNDQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdmVyaWZ5X2FjY3RfdG90YWxfZXh0cmFfYXBwX3BhZ2VzKHNlbGYsIGE6IGFsZ29weS5BY2NvdW50KSAtPiBhbGdvcHkuVUludDY0OgogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDUKICAgIC8vIHRvdGFsX2V4dHJhX2FwcF9wYWdlcywgX3ZhbCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXMoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ2CiAgICAvLyByZXR1cm4gdG90YWxfZXh0cmFfYXBwX3BhZ2VzCiAgICByZXRzdWIKCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBY2N0UGFyYW1zR2V0LnZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZChhOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYWNjdF90b3RhbF9hcHBzX2NyZWF0ZWQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDgtNDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdmVyaWZ5X2FjY3RfdG90YWxfYXBwc19jcmVhdGVkKHNlbGYsIGE6IGFsZ29weS5BY2NvdW50KSAtPiBhbGdvcHkuVUludDY0OgogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTAKICAgIC8vIHRvdGFsX2FwcHNfY3JlYXRlZCwgX3ZhbCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF90b3RhbF9hcHBzX2NyZWF0ZWQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MQogICAgLy8gcmV0dXJuIHRvdGFsX2FwcHNfY3JlYXRlZAogICAgcmV0c3ViCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQWNjdFBhcmFtc0dldC52ZXJpZnlfYWNjdF90b3RhbF9hcHBzX29wdGVkX2luKGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfb3B0ZWRfaW46CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTMtNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdmVyaWZ5X2FjY3RfdG90YWxfYXBwc19vcHRlZF9pbihzZWxmLCBhOiBhbGdvcHkuQWNjb3VudCkgLT4gYWxnb3B5LlVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU1CiAgICAvLyB0b3RhbF9hcHBzX29wdGVkX2luLCBfdmFsID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX2FwcHNfb3B0ZWRfaW4oYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1NgogICAgLy8gcmV0dXJuIHRvdGFsX2FwcHNfb3B0ZWRfaW4KICAgIHJldHN1YgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFjY3RQYXJhbXNHZXQudmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX2NyZWF0ZWQoYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX2NyZWF0ZWQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTgtNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX2NyZWF0ZWQoc2VsZiwgYTogYWxnb3B5LkFjY291bnQpIC0+IGFsZ29weS5VSW50NjQ6CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MAogICAgLy8gdG90YWxfYXNzZXRzX2NyZWF0ZWQsIF92YWwgPSBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfdG90YWxfYXNzZXRzX2NyZWF0ZWQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYxCiAgICAvLyByZXR1cm4gdG90YWxfYXNzZXRzX2NyZWF0ZWQKICAgIHJldHN1YgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFjY3RQYXJhbXNHZXQudmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzKGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0czoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2My02NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB2ZXJpZnlfYWNjdF90b3RhbF9hc3NldHMoc2VsZiwgYTogYWxnb3B5LkFjY291bnQpIC0+IGFsZ29weS5VSW50NjQ6CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2NQogICAgLy8gdG90YWxfYXNzZXRzLCBfdmFsID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX2Fzc2V0cyhhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2NgogICAgLy8gcmV0dXJuIHRvdGFsX2Fzc2V0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQWNjdFBhcmFtc0dldC52ZXJpZnlfYWNjdF90b3RhbF9ib3hlcyhhOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYWNjdF90b3RhbF9ib3hlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2OC02OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB2ZXJpZnlfYWNjdF90b3RhbF9ib3hlcyhzZWxmLCBhOiBhbGdvcHkuQWNjb3VudCkgLT4gYWxnb3B5LlVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcwCiAgICAvLyB0b3RhbF9ib3hlcywgX3ZhbCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF90b3RhbF9ib3hlcyhhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcxCiAgICAvLyByZXR1cm4gdG90YWxfYm94ZXMKICAgIHJldHN1YgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFjY3RQYXJhbXNHZXQudmVyaWZ5X2FjY3RfdG90YWxfYm94X2J5dGVzKGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9hY2N0X3RvdGFsX2JveF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3My03NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB2ZXJpZnlfYWNjdF90b3RhbF9ib3hfYnl0ZXMoc2VsZiwgYTogYWxnb3B5LkFjY291bnQpIC0+IGFsZ29weS5VSW50NjQ6CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3NQogICAgLy8gdG90YWxfYm94X2J5dGVzLCBfdmFsID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX2JveF9ieXRlcyhhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc2CiAgICAvLyByZXR1cm4gdG90YWxfYm94X2J5dGVzCiAgICByZXRzdWIK","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBY2N0UGFyYW1zR2V0LmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTcKICAgIC8vIGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldChBUkM0Q29udHJhY3QpOgogICAgaW50IDEKICAgIHJldHVybgo="},"bareActions":{"create":["NoOp"],"call":[]}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the StateAcctParamsGet contract + */ +export type StateAcctParamsGetArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'verify_acct_balance(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_min_balance(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_auth_addr(account)byte[]': { + a: Uint8Array | string + } + 'verify_acct_total_num_uint(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_num_byte_slice(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_extra_app_pages(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_apps_created(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_apps_opted_in(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_assets_created(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_assets(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_boxes(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_box_bytes(account)uint64': { + a: Uint8Array | string + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'verify_acct_balance(account)uint64': [a: Uint8Array | string] + 'verify_acct_min_balance(account)uint64': [a: Uint8Array | string] + 'verify_acct_auth_addr(account)byte[]': [a: Uint8Array | string] + 'verify_acct_total_num_uint(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_num_byte_slice(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_extra_app_pages(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_apps_created(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_apps_opted_in(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_assets_created(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_assets(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_boxes(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_box_bytes(account)uint64': [a: Uint8Array | string] + } +} + +/** + * The return type for each method + */ +export type StateAcctParamsGetReturns = { + 'verify_acct_balance(account)uint64': bigint + 'verify_acct_min_balance(account)uint64': bigint + 'verify_acct_auth_addr(account)byte[]': Uint8Array + 'verify_acct_total_num_uint(account)uint64': bigint + 'verify_acct_total_num_byte_slice(account)uint64': bigint + 'verify_acct_total_extra_app_pages(account)uint64': bigint + 'verify_acct_total_apps_created(account)uint64': bigint + 'verify_acct_total_apps_opted_in(account)uint64': bigint + 'verify_acct_total_assets_created(account)uint64': bigint + 'verify_acct_total_assets(account)uint64': bigint + 'verify_acct_total_boxes(account)uint64': bigint + 'verify_acct_total_box_bytes(account)uint64': bigint +} + +/** + * Defines the types of available calls and state of the StateAcctParamsGet smart contract. + */ +export type StateAcctParamsGetTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'verify_acct_balance(account)uint64' | 'verify_acct_balance', { + argsObj: StateAcctParamsGetArgs['obj']['verify_acct_balance(account)uint64'] + argsTuple: StateAcctParamsGetArgs['tuple']['verify_acct_balance(account)uint64'] + returns: StateAcctParamsGetReturns['verify_acct_balance(account)uint64'] + }> + & Record<'verify_acct_min_balance(account)uint64' | 'verify_acct_min_balance', { + argsObj: StateAcctParamsGetArgs['obj']['verify_acct_min_balance(account)uint64'] + argsTuple: StateAcctParamsGetArgs['tuple']['verify_acct_min_balance(account)uint64'] + returns: StateAcctParamsGetReturns['verify_acct_min_balance(account)uint64'] + }> + & Record<'verify_acct_auth_addr(account)byte[]' | 'verify_acct_auth_addr', { + argsObj: StateAcctParamsGetArgs['obj']['verify_acct_auth_addr(account)byte[]'] + argsTuple: StateAcctParamsGetArgs['tuple']['verify_acct_auth_addr(account)byte[]'] + returns: StateAcctParamsGetReturns['verify_acct_auth_addr(account)byte[]'] + }> + & Record<'verify_acct_total_num_uint(account)uint64' | 'verify_acct_total_num_uint', { + argsObj: StateAcctParamsGetArgs['obj']['verify_acct_total_num_uint(account)uint64'] + argsTuple: StateAcctParamsGetArgs['tuple']['verify_acct_total_num_uint(account)uint64'] + returns: StateAcctParamsGetReturns['verify_acct_total_num_uint(account)uint64'] + }> + & Record<'verify_acct_total_num_byte_slice(account)uint64' | 'verify_acct_total_num_byte_slice', { + argsObj: StateAcctParamsGetArgs['obj']['verify_acct_total_num_byte_slice(account)uint64'] + argsTuple: StateAcctParamsGetArgs['tuple']['verify_acct_total_num_byte_slice(account)uint64'] + returns: StateAcctParamsGetReturns['verify_acct_total_num_byte_slice(account)uint64'] + }> + & Record<'verify_acct_total_extra_app_pages(account)uint64' | 'verify_acct_total_extra_app_pages', { + argsObj: StateAcctParamsGetArgs['obj']['verify_acct_total_extra_app_pages(account)uint64'] + argsTuple: StateAcctParamsGetArgs['tuple']['verify_acct_total_extra_app_pages(account)uint64'] + returns: StateAcctParamsGetReturns['verify_acct_total_extra_app_pages(account)uint64'] + }> + & Record<'verify_acct_total_apps_created(account)uint64' | 'verify_acct_total_apps_created', { + argsObj: StateAcctParamsGetArgs['obj']['verify_acct_total_apps_created(account)uint64'] + argsTuple: StateAcctParamsGetArgs['tuple']['verify_acct_total_apps_created(account)uint64'] + returns: StateAcctParamsGetReturns['verify_acct_total_apps_created(account)uint64'] + }> + & Record<'verify_acct_total_apps_opted_in(account)uint64' | 'verify_acct_total_apps_opted_in', { + argsObj: StateAcctParamsGetArgs['obj']['verify_acct_total_apps_opted_in(account)uint64'] + argsTuple: StateAcctParamsGetArgs['tuple']['verify_acct_total_apps_opted_in(account)uint64'] + returns: StateAcctParamsGetReturns['verify_acct_total_apps_opted_in(account)uint64'] + }> + & Record<'verify_acct_total_assets_created(account)uint64' | 'verify_acct_total_assets_created', { + argsObj: StateAcctParamsGetArgs['obj']['verify_acct_total_assets_created(account)uint64'] + argsTuple: StateAcctParamsGetArgs['tuple']['verify_acct_total_assets_created(account)uint64'] + returns: StateAcctParamsGetReturns['verify_acct_total_assets_created(account)uint64'] + }> + & Record<'verify_acct_total_assets(account)uint64' | 'verify_acct_total_assets', { + argsObj: StateAcctParamsGetArgs['obj']['verify_acct_total_assets(account)uint64'] + argsTuple: StateAcctParamsGetArgs['tuple']['verify_acct_total_assets(account)uint64'] + returns: StateAcctParamsGetReturns['verify_acct_total_assets(account)uint64'] + }> + & Record<'verify_acct_total_boxes(account)uint64' | 'verify_acct_total_boxes', { + argsObj: StateAcctParamsGetArgs['obj']['verify_acct_total_boxes(account)uint64'] + argsTuple: StateAcctParamsGetArgs['tuple']['verify_acct_total_boxes(account)uint64'] + returns: StateAcctParamsGetReturns['verify_acct_total_boxes(account)uint64'] + }> + & Record<'verify_acct_total_box_bytes(account)uint64' | 'verify_acct_total_box_bytes', { + argsObj: StateAcctParamsGetArgs['obj']['verify_acct_total_box_bytes(account)uint64'] + argsTuple: StateAcctParamsGetArgs['tuple']['verify_acct_total_box_bytes(account)uint64'] + returns: StateAcctParamsGetReturns['verify_acct_total_box_bytes(account)uint64'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type StateAcctParamsGetSignatures = keyof StateAcctParamsGetTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type StateAcctParamsGetNonVoidMethodSignatures = keyof StateAcctParamsGetTypes['methods'] extends infer T ? T extends keyof StateAcctParamsGetTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the StateAcctParamsGet smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = StateAcctParamsGetTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the StateAcctParamsGet smart contract to the method's return type + */ +export type MethodReturn = StateAcctParamsGetTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type StateAcctParamsGetCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type StateAcctParamsGetDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: StateAcctParamsGetCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the StateAcctParamsGet smart contract + */ +export abstract class StateAcctParamsGetParamsFactory { + /** + * Constructs a no op call for the verify_acct_balance(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctBalance(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_balance(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_min_balance(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctMinBalance(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_min_balance(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_auth_addr(account)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctAuthAddr(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_auth_addr(account)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_num_uint(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalNumUint(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_num_uint(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_num_byte_slice(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalNumByteSlice(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_num_byte_slice(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_extra_app_pages(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalExtraAppPages(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_extra_app_pages(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_apps_created(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalAppsCreated(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_apps_created(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_apps_opted_in(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalAppsOptedIn(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_apps_opted_in(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_assets_created(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalAssetsCreated(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_assets_created(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_assets(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalAssets(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_assets(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_boxes(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalBoxes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_boxes(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_box_bytes(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalBoxBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_box_bytes(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } +} + +/** + * A factory to create and deploy one or more instance of the StateAcctParamsGet smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class StateAcctParamsGetFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `StateAcctParamsGetFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new StateAcctParamsGetClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new StateAcctParamsGetClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the StateAcctParamsGet smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: StateAcctParamsGetDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new StateAcctParamsGetClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAcctParamsGet smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAcctParamsGet smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAcctParamsGet smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new StateAcctParamsGetClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the StateAcctParamsGet smart contract + */ +export class StateAcctParamsGetClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `StateAcctParamsGetClient` + * + * @param appClient An `AppClient` instance which has been created with the StateAcctParamsGet app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `StateAcctParamsGetClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `StateAcctParamsGetClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new StateAcctParamsGetClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `StateAcctParamsGetClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new StateAcctParamsGetClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the StateAcctParamsGet smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_balance(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctBalance: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetParamsFactory.verifyAcctBalance(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_min_balance(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctMinBalance: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetParamsFactory.verifyAcctMinBalance(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_auth_addr(account)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctAuthAddr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetParamsFactory.verifyAcctAuthAddr(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_num_uint(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalNumUint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetParamsFactory.verifyAcctTotalNumUint(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_num_byte_slice(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalNumByteSlice: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetParamsFactory.verifyAcctTotalNumByteSlice(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_extra_app_pages(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalExtraAppPages: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetParamsFactory.verifyAcctTotalExtraAppPages(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_apps_created(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalAppsCreated: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetParamsFactory.verifyAcctTotalAppsCreated(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_apps_opted_in(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalAppsOptedIn: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetParamsFactory.verifyAcctTotalAppsOptedIn(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_assets_created(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalAssetsCreated: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetParamsFactory.verifyAcctTotalAssetsCreated(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_assets(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalAssets: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetParamsFactory.verifyAcctTotalAssets(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_boxes(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalBoxes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetParamsFactory.verifyAcctTotalBoxes(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_box_bytes(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalBoxBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetParamsFactory.verifyAcctTotalBoxBytes(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the StateAcctParamsGet smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_balance(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctBalance: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetParamsFactory.verifyAcctBalance(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_min_balance(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctMinBalance: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetParamsFactory.verifyAcctMinBalance(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_auth_addr(account)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctAuthAddr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetParamsFactory.verifyAcctAuthAddr(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_num_uint(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalNumUint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetParamsFactory.verifyAcctTotalNumUint(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_num_byte_slice(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalNumByteSlice: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetParamsFactory.verifyAcctTotalNumByteSlice(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_extra_app_pages(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalExtraAppPages: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetParamsFactory.verifyAcctTotalExtraAppPages(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_apps_created(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalAppsCreated: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetParamsFactory.verifyAcctTotalAppsCreated(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_apps_opted_in(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalAppsOptedIn: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetParamsFactory.verifyAcctTotalAppsOptedIn(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_assets_created(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalAssetsCreated: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetParamsFactory.verifyAcctTotalAssetsCreated(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_assets(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalAssets: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetParamsFactory.verifyAcctTotalAssets(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_boxes(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalBoxes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetParamsFactory.verifyAcctTotalBoxes(params)) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_box_bytes(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalBoxBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetParamsFactory.verifyAcctTotalBoxBytes(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the StateAcctParamsGet smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_balance(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctBalance: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetParamsFactory.verifyAcctBalance(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetReturns['verify_acct_balance(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_min_balance(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctMinBalance: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetParamsFactory.verifyAcctMinBalance(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetReturns['verify_acct_min_balance(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_auth_addr(account)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctAuthAddr: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetParamsFactory.verifyAcctAuthAddr(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetReturns['verify_acct_auth_addr(account)byte[]'])} + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_num_uint(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalNumUint: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetParamsFactory.verifyAcctTotalNumUint(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetReturns['verify_acct_total_num_uint(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_num_byte_slice(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalNumByteSlice: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetParamsFactory.verifyAcctTotalNumByteSlice(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetReturns['verify_acct_total_num_byte_slice(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_extra_app_pages(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalExtraAppPages: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetParamsFactory.verifyAcctTotalExtraAppPages(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetReturns['verify_acct_total_extra_app_pages(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_apps_created(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalAppsCreated: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetParamsFactory.verifyAcctTotalAppsCreated(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetReturns['verify_acct_total_apps_created(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_apps_opted_in(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalAppsOptedIn: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetParamsFactory.verifyAcctTotalAppsOptedIn(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetReturns['verify_acct_total_apps_opted_in(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_assets_created(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalAssetsCreated: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetParamsFactory.verifyAcctTotalAssetsCreated(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetReturns['verify_acct_total_assets_created(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_assets(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalAssets: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetParamsFactory.verifyAcctTotalAssets(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetReturns['verify_acct_total_assets(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_boxes(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalBoxes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetParamsFactory.verifyAcctTotalBoxes(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetReturns['verify_acct_total_boxes(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGet smart contract using the `verify_acct_total_box_bytes(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalBoxBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetParamsFactory.verifyAcctTotalBoxBytes(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetReturns['verify_acct_total_box_bytes(account)uint64'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new StateAcctParamsGetClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current StateAcctParamsGet app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): StateAcctParamsGetComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify_acct_balance(account)uint64 method call against the StateAcctParamsGet contract + */ + verifyAcctBalance(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctBalance(params))) + return this + }, + /** + * Add a verify_acct_min_balance(account)uint64 method call against the StateAcctParamsGet contract + */ + verifyAcctMinBalance(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctMinBalance(params))) + return this + }, + /** + * Add a verify_acct_auth_addr(account)byte[] method call against the StateAcctParamsGet contract + */ + verifyAcctAuthAddr(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctAuthAddr(params))) + return this + }, + /** + * Add a verify_acct_total_num_uint(account)uint64 method call against the StateAcctParamsGet contract + */ + verifyAcctTotalNumUint(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalNumUint(params))) + return this + }, + /** + * Add a verify_acct_total_num_byte_slice(account)uint64 method call against the StateAcctParamsGet contract + */ + verifyAcctTotalNumByteSlice(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalNumByteSlice(params))) + return this + }, + /** + * Add a verify_acct_total_extra_app_pages(account)uint64 method call against the StateAcctParamsGet contract + */ + verifyAcctTotalExtraAppPages(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalExtraAppPages(params))) + return this + }, + /** + * Add a verify_acct_total_apps_created(account)uint64 method call against the StateAcctParamsGet contract + */ + verifyAcctTotalAppsCreated(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalAppsCreated(params))) + return this + }, + /** + * Add a verify_acct_total_apps_opted_in(account)uint64 method call against the StateAcctParamsGet contract + */ + verifyAcctTotalAppsOptedIn(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalAppsOptedIn(params))) + return this + }, + /** + * Add a verify_acct_total_assets_created(account)uint64 method call against the StateAcctParamsGet contract + */ + verifyAcctTotalAssetsCreated(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalAssetsCreated(params))) + return this + }, + /** + * Add a verify_acct_total_assets(account)uint64 method call against the StateAcctParamsGet contract + */ + verifyAcctTotalAssets(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalAssets(params))) + return this + }, + /** + * Add a verify_acct_total_boxes(account)uint64 method call against the StateAcctParamsGet contract + */ + verifyAcctTotalBoxes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalBoxes(params))) + return this + }, + /** + * Add a verify_acct_total_box_bytes(account)uint64 method call against the StateAcctParamsGet contract + */ + verifyAcctTotalBoxBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalBoxBytes(params))) + return this + }, + /** + * Add a clear state call to the StateAcctParamsGet contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as StateAcctParamsGetComposer + } +} +export type StateAcctParamsGetComposer = { + /** + * Calls the verify_acct_balance(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctBalance(params?: CallParams): StateAcctParamsGetComposer<[...TReturns, StateAcctParamsGetReturns['verify_acct_balance(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_min_balance(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctMinBalance(params?: CallParams): StateAcctParamsGetComposer<[...TReturns, StateAcctParamsGetReturns['verify_acct_min_balance(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_auth_addr(account)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctAuthAddr(params?: CallParams): StateAcctParamsGetComposer<[...TReturns, StateAcctParamsGetReturns['verify_acct_auth_addr(account)byte[]'] | undefined]> + + /** + * Calls the verify_acct_total_num_uint(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalNumUint(params?: CallParams): StateAcctParamsGetComposer<[...TReturns, StateAcctParamsGetReturns['verify_acct_total_num_uint(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_num_byte_slice(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalNumByteSlice(params?: CallParams): StateAcctParamsGetComposer<[...TReturns, StateAcctParamsGetReturns['verify_acct_total_num_byte_slice(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_extra_app_pages(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalExtraAppPages(params?: CallParams): StateAcctParamsGetComposer<[...TReturns, StateAcctParamsGetReturns['verify_acct_total_extra_app_pages(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_apps_created(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalAppsCreated(params?: CallParams): StateAcctParamsGetComposer<[...TReturns, StateAcctParamsGetReturns['verify_acct_total_apps_created(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_apps_opted_in(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalAppsOptedIn(params?: CallParams): StateAcctParamsGetComposer<[...TReturns, StateAcctParamsGetReturns['verify_acct_total_apps_opted_in(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_assets_created(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalAssetsCreated(params?: CallParams): StateAcctParamsGetComposer<[...TReturns, StateAcctParamsGetReturns['verify_acct_total_assets_created(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_assets(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalAssets(params?: CallParams): StateAcctParamsGetComposer<[...TReturns, StateAcctParamsGetReturns['verify_acct_total_assets(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_boxes(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalBoxes(params?: CallParams): StateAcctParamsGetComposer<[...TReturns, StateAcctParamsGetReturns['verify_acct_total_boxes(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_box_bytes(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalBoxBytes(params?: CallParams): StateAcctParamsGetComposer<[...TReturns, StateAcctParamsGetReturns['verify_acct_total_box_bytes(account)uint64'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the StateAcctParamsGet smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): StateAcctParamsGetComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): StateAcctParamsGetComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type StateAcctParamsGetComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/StateAcctParamsGetContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/StateAcctParamsGetContract.ts new file mode 100644 index 0000000..01c1c8f --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/StateAcctParamsGetContract.ts @@ -0,0 +1,1526 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"StateAcctParamsGetContract","structs":{},"methods":[{"name":"verify_acct_balance","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_min_balance","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_auth_addr","args":[{"type":"account","name":"a"}],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_total_num_uint","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_total_num_byte_slice","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_total_extra_app_pages","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_total_apps_created","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_total_apps_opted_in","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_total_assets_created","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_total_assets","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_total_boxes","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_total_box_bytes","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_incentive_eligible","args":[{"type":"account","name":"a"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_last_heartbeat","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_acct_last_proposed","args":[{"type":"account","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[171,225],"errorMessage":"account funded"},{"pc":[175],"errorMessage":"expected Account balance to match"},{"pc":[229],"errorMessage":"expected Account min_balance to match"},{"pc":[166,220,273,301,330,359,388,417,446,475,504,533,562,598,627],"errorMessage":"expected funded by index to match"},{"pc":[190],"errorMessage":"expected op.balance by index to match"},{"pc":[181],"errorMessage":"expected op.balance to match"},{"pc":[244],"errorMessage":"expected op.min_balance by index to match"},{"pc":[235],"errorMessage":"expected op.min_balance to match"},{"pc":[164,218,271,299,328,357,386,415,444,473,502,531,560,596,625],"errorMessage":"expected value by index to match"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNAogICAgLy8gY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QoQVJDNENvbnRyYWN0LCBhdm1fdmVyc2lvbj0xMSk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAyMgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4NWY1YjQzZTQgMHg3M2RjOTNjNyAweDU2MjZkZmViIDB4ZGM4YTI1YmYgMHgxOThlYmQ4YyAweDIzMDFhYjI2IDB4OWY2OGZjYTYgMHhhOTc1YzJkMSAweGQxZTA0ODAxIDB4YjY5NjZiZTUgMHgxOTVkNTQxOCAweDZhZGFlM2YxIDB4ZGY4Y2ZlZTUgMHg2YWQ3MGQyMSAweDE3MzVmZDIyIC8vIG1ldGhvZCAidmVyaWZ5X2FjY3RfYmFsYW5jZShhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfbWluX2JhbGFuY2UoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X2F1dGhfYWRkcihhY2NvdW50KWFkZHJlc3MiLCBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX251bV91aW50KGFjY291bnQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYWNjdF90b3RhbF9udW1fYnl0ZV9zbGljZShhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfdG90YWxfZXh0cmFfYXBwX3BhZ2VzKGFjY291bnQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYWNjdF90b3RhbF9hcHBzX2NyZWF0ZWQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfb3B0ZWRfaW4oYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkKGFjY291bnQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYWNjdF90b3RhbF9hc3NldHMoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX2JveGVzKGFjY291bnQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYWNjdF90b3RhbF9ib3hfYnl0ZXMoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X2luY2VudGl2ZV9lbGlnaWJsZShhY2NvdW50KWJvb2wiLCBtZXRob2QgInZlcmlmeV9hY2N0X2xhc3RfaGVhcnRiZWF0KGFjY291bnQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYWNjdF9sYXN0X3Byb3Bvc2VkKGFjY291bnQpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggdmVyaWZ5X2FjY3RfYmFsYW5jZSB2ZXJpZnlfYWNjdF9taW5fYmFsYW5jZSB2ZXJpZnlfYWNjdF9hdXRoX2FkZHIgdmVyaWZ5X2FjY3RfdG90YWxfbnVtX3VpbnQgdmVyaWZ5X2FjY3RfdG90YWxfbnVtX2J5dGVfc2xpY2UgdmVyaWZ5X2FjY3RfdG90YWxfZXh0cmFfYXBwX3BhZ2VzIHZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZCB2ZXJpZnlfYWNjdF90b3RhbF9hcHBzX29wdGVkX2luIHZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkIHZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0cyB2ZXJpZnlfYWNjdF90b3RhbF9ib3hlcyB2ZXJpZnlfYWNjdF90b3RhbF9ib3hfYnl0ZXMgdmVyaWZ5X2FjY3RfaW5jZW50aXZlX2VsaWdpYmxlIHZlcmlmeV9hY2N0X2xhc3RfaGVhcnRiZWF0IHZlcmlmeV9hY2N0X2xhc3RfcHJvcG9zZWQKICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAyMjoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X2JhbGFuY2Vbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYWNjdF9iYWxhbmNlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjcKICAgIC8vIHZhbHVlLCBmdW5kZWQgPSBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfYmFsYW5jZShhKQogICAgZHVwCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjgKICAgIC8vIHZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXggPSBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfYmFsYW5jZShfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjI5CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMAogICAgLy8gYXNzZXJ0IGZ1bmRlZCA9PSBmdW5kZWRfaW5kZXgsICJleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjMxCiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gYS5iYWxhbmNlLCAiZXhwZWN0ZWQgQWNjb3VudCBiYWxhbmNlIHRvIG1hdGNoIgogICAgZGlnIDEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBBY2NvdW50IGJhbGFuY2UgdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMgogICAgLy8gYXNzZXJ0IHZhbHVlID09IGFsZ29weS5vcC5iYWxhbmNlKGEpLCAiZXhwZWN0ZWQgb3AuYmFsYW5jZSB0byBtYXRjaCIKICAgIHN3YXAKICAgIGJhbGFuY2UKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIG9wLmJhbGFuY2UgdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzMtMzUKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSBhbGdvcHkub3AuYmFsYW5jZSgKICAgIC8vICAgICBfZ2V0XzFzdF9yZWZfaW5kZXgoKQogICAgLy8gKSwgImV4cGVjdGVkIG9wLmJhbGFuY2UgYnkgaW5kZXggdG8gbWF0Y2giCiAgICBiYWxhbmNlCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBvcC5iYWxhbmNlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZXNvdXJjZV9lbmNvZGluZz0iaW5kZXgiKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF9taW5fYmFsYW5jZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9hY2N0X21pbl9iYWxhbmNlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDAKICAgIC8vIHZhbHVlLCBmdW5kZWQgPSBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfbWluX2JhbGFuY2UoYSkKICAgIGR1cAogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQxCiAgICAvLyB2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4ID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X21pbl9iYWxhbmNlKF9nZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDIKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSB2YWx1ZV9pbmRleCwgImV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBhc3NlcnQgZnVuZGVkID09IGZ1bmRlZF9pbmRleCwgImV4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaCIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSBhLm1pbl9iYWxhbmNlLCAiZXhwZWN0ZWQgQWNjb3VudCBtaW5fYmFsYW5jZSB0byBtYXRjaCIKICAgIGRpZyAxCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgQWNjb3VudCBtaW5fYmFsYW5jZSB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ1CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gYWxnb3B5Lm9wLm1pbl9iYWxhbmNlKGEpLCAiZXhwZWN0ZWQgb3AubWluX2JhbGFuY2UgdG8gbWF0Y2giCiAgICBzd2FwCiAgICBtaW5fYmFsYW5jZQogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgb3AubWluX2JhbGFuY2UgdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDYtNDgKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSBhbGdvcHkub3AubWluX2JhbGFuY2UoCiAgICAvLyAgICAgX2dldF8xc3RfcmVmX2luZGV4KCkKICAgIC8vICksICJleHBlY3RlZCBvcC5taW5fYmFsYW5jZSBieSBpbmRleCB0byBtYXRjaCIKICAgIG1pbl9iYWxhbmNlCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBvcC5taW5fYmFsYW5jZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QudmVyaWZ5X2FjY3RfYXV0aF9hZGRyW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2FjY3RfYXV0aF9hZGRyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTMKICAgIC8vIHZhbHVlLCBmdW5kZWQgPSBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfYXV0aF9hZGRyKGEpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU0CiAgICAvLyB2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4ID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X2F1dGhfYWRkcihfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1NQogICAgLy8gYXNzZXJ0IHZhbHVlID09IHZhbHVlX2luZGV4LCAiZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2giCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTYKICAgIC8vIGFzc2VydCBmdW5kZWQgPT0gZnVuZGVkX2luZGV4LCAiZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlc291cmNlX2VuY29kaW5nPSJpbmRleCIpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X3RvdGFsX251bV91aW50W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2FjY3RfdG90YWxfbnVtX3VpbnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZXNvdXJjZV9lbmNvZGluZz0iaW5kZXgiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2MQogICAgLy8gdmFsdWUsIGZ1bmRlZCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF90b3RhbF9udW1fdWludChhKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjIKICAgIC8vIHZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXggPSBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfdG90YWxfbnVtX3VpbnQoX2dldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2NAogICAgLy8gYXNzZXJ0IGZ1bmRlZCA9PSBmdW5kZWRfaW5kZXgsICJleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QudmVyaWZ5X2FjY3RfdG90YWxfbnVtX2J5dGVfc2xpY2Vbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYWNjdF90b3RhbF9udW1fYnl0ZV9zbGljZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlc291cmNlX2VuY29kaW5nPSJpbmRleCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjY5CiAgICAvLyB2YWx1ZSwgZnVuZGVkID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX251bV9ieXRlX3NsaWNlKGEpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjcwLTcyCiAgICAvLyB2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4ID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX251bV9ieXRlX3NsaWNlKAogICAgLy8gICAgIF9nZXRfMXN0X3JlZl9pbmRleCgpCiAgICAvLyApCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzMKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSB2YWx1ZV9pbmRleCwgImV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBhc3NlcnQgZnVuZGVkID09IGZ1bmRlZF9pbmRleCwgImV4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaCIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZXNvdXJjZV9lbmNvZGluZz0iaW5kZXgiKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXNbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZXNvdXJjZV9lbmNvZGluZz0iaW5kZXgiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3OQogICAgLy8gdmFsdWUsIGZ1bmRlZCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXMoYSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjgwLTgyCiAgICAvLyB2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4ID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX2V4dHJhX2FwcF9wYWdlcygKICAgIC8vICAgICBfZ2V0XzFzdF9yZWZfaW5kZXgoKQogICAgLy8gKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo4MwogICAgLy8gYXNzZXJ0IHZhbHVlID09IHZhbHVlX2luZGV4LCAiZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2giCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBmdW5kZWQgPT0gZnVuZGVkX2luZGV4LCAiZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlc291cmNlX2VuY29kaW5nPSJpbmRleCIpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo4NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlc291cmNlX2VuY29kaW5nPSJpbmRleCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojg5CiAgICAvLyB2YWx1ZSwgZnVuZGVkID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZChhKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjkwCiAgICAvLyB2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4ID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZChfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjkxCiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo5MgogICAgLy8gYXNzZXJ0IGZ1bmRlZCA9PSBmdW5kZWRfaW5kZXgsICJleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QudmVyaWZ5X2FjY3RfdG90YWxfYXBwc19vcHRlZF9pbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfb3B0ZWRfaW46CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6OTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZXNvdXJjZV9lbmNvZGluZz0iaW5kZXgiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo5NwogICAgLy8gdmFsdWUsIGZ1bmRlZCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF90b3RhbF9hcHBzX29wdGVkX2luKGEpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6OTgKICAgIC8vIHZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXggPSBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfdG90YWxfYXBwc19vcHRlZF9pbihfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5Ojk5CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxMDAKICAgIC8vIGFzc2VydCBmdW5kZWQgPT0gZnVuZGVkX2luZGV4LCAiZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlc291cmNlX2VuY29kaW5nPSJpbmRleCIpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX2NyZWF0ZWQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTA1CiAgICAvLyB2YWx1ZSwgZnVuZGVkID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkKGEpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25fYXJncygxKSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxMDYtMTA4CiAgICAvLyB2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4ID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkKAogICAgLy8gICAgIF9nZXRfMXN0X3JlZl9pbmRleCgpCiAgICAvLyApCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjEwOQogICAgLy8gYXNzZXJ0IHZhbHVlID09IHZhbHVlX2luZGV4LCAiZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2giCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTEwCiAgICAvLyBhc3NlcnQgZnVuZGVkID09IGZ1bmRlZF9pbmRleCwgImV4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaCIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QudmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjExMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlc291cmNlX2VuY29kaW5nPSJpbmRleCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjExNQogICAgLy8gdmFsdWUsIGZ1bmRlZCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF90b3RhbF9hc3NldHMoYSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTE2CiAgICAvLyB2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4ID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX2Fzc2V0cyhfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxMTcKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSB2YWx1ZV9pbmRleCwgImV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjExOAogICAgLy8gYXNzZXJ0IGZ1bmRlZCA9PSBmdW5kZWRfaW5kZXgsICJleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjExMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlc291cmNlX2VuY29kaW5nPSJpbmRleCIpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X3RvdGFsX2JveGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2FjY3RfdG90YWxfYm94ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTIzCiAgICAvLyB2YWx1ZSwgZnVuZGVkID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX2JveGVzKGEpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTI0CiAgICAvLyB2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4ID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX2JveGVzKF9nZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveGVzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTI1CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxMjYKICAgIC8vIGFzc2VydCBmdW5kZWQgPT0gZnVuZGVkX2luZGV4LCAiZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZXNvdXJjZV9lbmNvZGluZz0iaW5kZXgiKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF90b3RhbF9ib3hfYnl0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYWNjdF90b3RhbF9ib3hfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVzb3VyY2VfZW5jb2Rpbmc9ImluZGV4IikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTMxCiAgICAvLyB2YWx1ZSwgZnVuZGVkID0gb3AuQWNjdFBhcmFtc0dldC5hY2N0X3RvdGFsX2JveF9ieXRlcyhhKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveEJ5dGVzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjEzMgogICAgLy8gdmFsdWVfaW5kZXgsIGZ1bmRlZF9pbmRleCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF90b3RhbF9ib3hfYnl0ZXMoX2dldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxMzMKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSB2YWx1ZV9pbmRleCwgImV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjEzNAogICAgLy8gYXNzZXJ0IGZ1bmRlZCA9PSBmdW5kZWRfaW5kZXgsICJleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjEyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlc291cmNlX2VuY29kaW5nPSJpbmRleCIpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X2luY2VudGl2ZV9lbGlnaWJsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9hY2N0X2luY2VudGl2ZV9lbGlnaWJsZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxMzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZXNvdXJjZV9lbmNvZGluZz0iaW5kZXgiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxMzkKICAgIC8vIHZhbHVlLCBmdW5kZWQgPSBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfaW5jZW50aXZlX2VsaWdpYmxlKGEpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEluY2VudGl2ZUVsaWdpYmxlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE0MAogICAgLy8gdmFsdWVfaW5kZXgsIGZ1bmRlZF9pbmRleCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF9pbmNlbnRpdmVfZWxpZ2libGUoX2dldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEluY2VudGl2ZUVsaWdpYmxlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTQxCiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNDIKICAgIC8vIGFzc2VydCBmdW5kZWQgPT0gZnVuZGVkX2luZGV4LCAiZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxMzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZXNvdXJjZV9lbmNvZGluZz0iaW5kZXgiKQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIHB1c2hpbnQgMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QudmVyaWZ5X2FjY3RfbGFzdF9oZWFydGJlYXRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYWNjdF9sYXN0X2hlYXJ0YmVhdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZXNvdXJjZV9lbmNvZGluZz0iaW5kZXgiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNDcKICAgIC8vIHZhbHVlLCBmdW5kZWQgPSBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfbGFzdF9oZWFydGJlYXQoYSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TGFzdEhlYXJ0YmVhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25fYXJncygxKSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNDgKICAgIC8vIHZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXggPSBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfbGFzdF9oZWFydGJlYXQoX2dldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdExhc3RIZWFydGJlYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNDkKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSB2YWx1ZV9pbmRleCwgImV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE1MAogICAgLy8gYXNzZXJ0IGZ1bmRlZCA9PSBmdW5kZWRfaW5kZXgsICJleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlc291cmNlX2VuY29kaW5nPSJpbmRleCIpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X2xhc3RfcHJvcG9zZWRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYWNjdF9sYXN0X3Byb3Bvc2VkOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlc291cmNlX2VuY29kaW5nPSJpbmRleCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE1NQogICAgLy8gdmFsdWUsIGZ1bmRlZCA9IG9wLkFjY3RQYXJhbXNHZXQuYWNjdF9sYXN0X3Byb3Bvc2VkKGEpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdExhc3RQcm9wb3NlZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25fYXJncygxKSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNTYKICAgIC8vIHZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXggPSBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfbGFzdF9wcm9wb3NlZChfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TGFzdFByb3Bvc2VkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTU3CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNTgKICAgIC8vIGFzc2VydCBmdW5kZWQgPT0gZnVuZGVkX2luZGV4LCAiZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZXNvdXJjZV9lbmNvZGluZz0iaW5kZXgiKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyABASYBBBUffHUxG0EAeDEZFEQxGESCDwRfW0PkBHPck8cEVibf6wTciiW/BBmOvYwEIwGrJgSfaPymBKl1wtEE0eBIAQS2lmvlBBldVBgEatrj8QTfjP7lBGrXDSEEFzX9IjYaAI4PAAkAPwB1AJEArgDLAOgBBQEiAT8BXAF5AZYBugHXADEZFDEYFBBDNhoBF8AcSXMANhoBF3MASwNPAhJEEkRLAXMAREsBEkRMYEsBEkQ2GgEXYEsBEkQWKExQsCJDNhoBF8AcSXMBNhoBF3MBSwNPAhJEEkRLAXMBREsBEkRMeEsBEkQ2GgEXeEsBEkQWKExQsCJDNhoBF8AccwI2GgEXcwJLA08CEkQSRChMULAiQzYaARfAHHMDNhoBF3MDSwNPAhJEEkQWKExQsCJDNhoBF8AccwQ2GgEXcwRLA08CEkQSRBYoTFCwIkM2GgEXwBxzBTYaARdzBUsDTwISRBJEFihMULAiQzYaARfAHHMGNhoBF3MGSwNPAhJEEkQWKExQsCJDNhoBF8Accwc2GgEXcwdLA08CEkQSRBYoTFCwIkM2GgEXwBxzCDYaARdzCEsDTwISRBJEFihMULAiQzYaARfAHHMJNhoBF3MJSwNPAhJEEkQWKExQsCJDNhoBF8Accwo2GgEXcwpLA08CEkQSRBYoTFCwIkM2GgEXwBxzCzYaARdzC0sDTwISRBJEFihMULAiQzYaARfAHHMMNhoBF3MMSwNPAhJEEkSAAQCBAE8CVChMULAiQzYaARfAHHMONhoBF3MOSwNPAhJEEkQWKExQsCJDNhoBF8Accw02GgEXcw1LA08CEkQSRBYoTFCwIkM=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the StateAcctParamsGetContract contract + */ +export type StateAcctParamsGetContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'verify_acct_balance(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_min_balance(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_auth_addr(account)address': { + a: Uint8Array | string + } + 'verify_acct_total_num_uint(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_num_byte_slice(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_extra_app_pages(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_apps_created(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_apps_opted_in(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_assets_created(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_assets(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_boxes(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_total_box_bytes(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_incentive_eligible(account)bool': { + a: Uint8Array | string + } + 'verify_acct_last_heartbeat(account)uint64': { + a: Uint8Array | string + } + 'verify_acct_last_proposed(account)uint64': { + a: Uint8Array | string + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'verify_acct_balance(account)uint64': [a: Uint8Array | string] + 'verify_acct_min_balance(account)uint64': [a: Uint8Array | string] + 'verify_acct_auth_addr(account)address': [a: Uint8Array | string] + 'verify_acct_total_num_uint(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_num_byte_slice(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_extra_app_pages(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_apps_created(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_apps_opted_in(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_assets_created(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_assets(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_boxes(account)uint64': [a: Uint8Array | string] + 'verify_acct_total_box_bytes(account)uint64': [a: Uint8Array | string] + 'verify_acct_incentive_eligible(account)bool': [a: Uint8Array | string] + 'verify_acct_last_heartbeat(account)uint64': [a: Uint8Array | string] + 'verify_acct_last_proposed(account)uint64': [a: Uint8Array | string] + } +} + +/** + * The return type for each method + */ +export type StateAcctParamsGetContractReturns = { + 'verify_acct_balance(account)uint64': bigint + 'verify_acct_min_balance(account)uint64': bigint + 'verify_acct_auth_addr(account)address': string + 'verify_acct_total_num_uint(account)uint64': bigint + 'verify_acct_total_num_byte_slice(account)uint64': bigint + 'verify_acct_total_extra_app_pages(account)uint64': bigint + 'verify_acct_total_apps_created(account)uint64': bigint + 'verify_acct_total_apps_opted_in(account)uint64': bigint + 'verify_acct_total_assets_created(account)uint64': bigint + 'verify_acct_total_assets(account)uint64': bigint + 'verify_acct_total_boxes(account)uint64': bigint + 'verify_acct_total_box_bytes(account)uint64': bigint + 'verify_acct_incentive_eligible(account)bool': boolean + 'verify_acct_last_heartbeat(account)uint64': bigint + 'verify_acct_last_proposed(account)uint64': bigint +} + +/** + * Defines the types of available calls and state of the StateAcctParamsGetContract smart contract. + */ +export type StateAcctParamsGetContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'verify_acct_balance(account)uint64' | 'verify_acct_balance', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_balance(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_balance(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_balance(account)uint64'] + }> + & Record<'verify_acct_min_balance(account)uint64' | 'verify_acct_min_balance', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_min_balance(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_min_balance(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_min_balance(account)uint64'] + }> + & Record<'verify_acct_auth_addr(account)address' | 'verify_acct_auth_addr', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_auth_addr(account)address'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_auth_addr(account)address'] + returns: StateAcctParamsGetContractReturns['verify_acct_auth_addr(account)address'] + }> + & Record<'verify_acct_total_num_uint(account)uint64' | 'verify_acct_total_num_uint', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_total_num_uint(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_total_num_uint(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_total_num_uint(account)uint64'] + }> + & Record<'verify_acct_total_num_byte_slice(account)uint64' | 'verify_acct_total_num_byte_slice', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_total_num_byte_slice(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_total_num_byte_slice(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_total_num_byte_slice(account)uint64'] + }> + & Record<'verify_acct_total_extra_app_pages(account)uint64' | 'verify_acct_total_extra_app_pages', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_total_extra_app_pages(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_total_extra_app_pages(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_total_extra_app_pages(account)uint64'] + }> + & Record<'verify_acct_total_apps_created(account)uint64' | 'verify_acct_total_apps_created', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_total_apps_created(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_total_apps_created(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_total_apps_created(account)uint64'] + }> + & Record<'verify_acct_total_apps_opted_in(account)uint64' | 'verify_acct_total_apps_opted_in', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_total_apps_opted_in(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_total_apps_opted_in(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_total_apps_opted_in(account)uint64'] + }> + & Record<'verify_acct_total_assets_created(account)uint64' | 'verify_acct_total_assets_created', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_total_assets_created(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_total_assets_created(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_total_assets_created(account)uint64'] + }> + & Record<'verify_acct_total_assets(account)uint64' | 'verify_acct_total_assets', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_total_assets(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_total_assets(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_total_assets(account)uint64'] + }> + & Record<'verify_acct_total_boxes(account)uint64' | 'verify_acct_total_boxes', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_total_boxes(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_total_boxes(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_total_boxes(account)uint64'] + }> + & Record<'verify_acct_total_box_bytes(account)uint64' | 'verify_acct_total_box_bytes', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_total_box_bytes(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_total_box_bytes(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_total_box_bytes(account)uint64'] + }> + & Record<'verify_acct_incentive_eligible(account)bool' | 'verify_acct_incentive_eligible', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_incentive_eligible(account)bool'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_incentive_eligible(account)bool'] + returns: StateAcctParamsGetContractReturns['verify_acct_incentive_eligible(account)bool'] + }> + & Record<'verify_acct_last_heartbeat(account)uint64' | 'verify_acct_last_heartbeat', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_last_heartbeat(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_last_heartbeat(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_last_heartbeat(account)uint64'] + }> + & Record<'verify_acct_last_proposed(account)uint64' | 'verify_acct_last_proposed', { + argsObj: StateAcctParamsGetContractArgs['obj']['verify_acct_last_proposed(account)uint64'] + argsTuple: StateAcctParamsGetContractArgs['tuple']['verify_acct_last_proposed(account)uint64'] + returns: StateAcctParamsGetContractReturns['verify_acct_last_proposed(account)uint64'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type StateAcctParamsGetContractSignatures = keyof StateAcctParamsGetContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type StateAcctParamsGetContractNonVoidMethodSignatures = keyof StateAcctParamsGetContractTypes['methods'] extends infer T ? T extends keyof StateAcctParamsGetContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the StateAcctParamsGetContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = StateAcctParamsGetContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the StateAcctParamsGetContract smart contract to the method's return type + */ +export type MethodReturn = StateAcctParamsGetContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type StateAcctParamsGetContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type StateAcctParamsGetContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: StateAcctParamsGetContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the StateAcctParamsGetContract smart contract + */ +export abstract class StateAcctParamsGetContractParamsFactory { + /** + * Constructs a no op call for the verify_acct_balance(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctBalance(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_balance(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_min_balance(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctMinBalance(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_min_balance(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_auth_addr(account)address ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctAuthAddr(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_auth_addr(account)address' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_num_uint(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalNumUint(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_num_uint(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_num_byte_slice(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalNumByteSlice(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_num_byte_slice(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_extra_app_pages(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalExtraAppPages(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_extra_app_pages(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_apps_created(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalAppsCreated(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_apps_created(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_apps_opted_in(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalAppsOptedIn(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_apps_opted_in(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_assets_created(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalAssetsCreated(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_assets_created(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_assets(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalAssets(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_assets(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_boxes(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalBoxes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_boxes(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_total_box_bytes(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctTotalBoxBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_total_box_bytes(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_incentive_eligible(account)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctIncentiveEligible(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_incentive_eligible(account)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_last_heartbeat(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctLastHeartbeat(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_last_heartbeat(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_acct_last_proposed(account)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAcctLastProposed(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_acct_last_proposed(account)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } +} + +/** + * A factory to create and deploy one or more instance of the StateAcctParamsGetContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class StateAcctParamsGetContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `StateAcctParamsGetContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new StateAcctParamsGetContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new StateAcctParamsGetContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the StateAcctParamsGetContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: StateAcctParamsGetContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new StateAcctParamsGetContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAcctParamsGetContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAcctParamsGetContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAcctParamsGetContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new StateAcctParamsGetContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the StateAcctParamsGetContract smart contract + */ +export class StateAcctParamsGetContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `StateAcctParamsGetContractClient` + * + * @param appClient An `AppClient` instance which has been created with the StateAcctParamsGetContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `StateAcctParamsGetContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `StateAcctParamsGetContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new StateAcctParamsGetContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `StateAcctParamsGetContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new StateAcctParamsGetContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the StateAcctParamsGetContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_balance(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctBalance: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctBalance(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_min_balance(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctMinBalance: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctMinBalance(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_auth_addr(account)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctAuthAddr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctAuthAddr(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_num_uint(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalNumUint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalNumUint(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_num_byte_slice(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalNumByteSlice: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalNumByteSlice(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_extra_app_pages(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalExtraAppPages: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalExtraAppPages(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_apps_created(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalAppsCreated: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalAppsCreated(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_apps_opted_in(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalAppsOptedIn: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalAppsOptedIn(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_assets_created(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalAssetsCreated: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalAssetsCreated(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_assets(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalAssets: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalAssets(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_boxes(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalBoxes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalBoxes(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_box_bytes(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctTotalBoxBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalBoxBytes(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_incentive_eligible(account)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctIncentiveEligible: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctIncentiveEligible(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_last_heartbeat(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctLastHeartbeat: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctLastHeartbeat(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_last_proposed(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAcctLastProposed: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAcctParamsGetContractParamsFactory.verifyAcctLastProposed(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the StateAcctParamsGetContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_balance(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctBalance: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctBalance(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_min_balance(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctMinBalance: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctMinBalance(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_auth_addr(account)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctAuthAddr: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctAuthAddr(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_num_uint(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalNumUint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalNumUint(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_num_byte_slice(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalNumByteSlice: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalNumByteSlice(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_extra_app_pages(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalExtraAppPages: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalExtraAppPages(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_apps_created(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalAppsCreated: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalAppsCreated(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_apps_opted_in(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalAppsOptedIn: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalAppsOptedIn(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_assets_created(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalAssetsCreated: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalAssetsCreated(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_assets(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalAssets: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalAssets(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_boxes(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalBoxes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalBoxes(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_box_bytes(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctTotalBoxBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalBoxBytes(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_incentive_eligible(account)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctIncentiveEligible: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctIncentiveEligible(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_last_heartbeat(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctLastHeartbeat: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctLastHeartbeat(params)) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_last_proposed(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAcctLastProposed: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAcctParamsGetContractParamsFactory.verifyAcctLastProposed(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the StateAcctParamsGetContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_balance(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctBalance: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctBalance(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_balance(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_min_balance(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctMinBalance: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctMinBalance(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_min_balance(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_auth_addr(account)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctAuthAddr: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctAuthAddr(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_auth_addr(account)address'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_num_uint(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalNumUint: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalNumUint(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_total_num_uint(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_num_byte_slice(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalNumByteSlice: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalNumByteSlice(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_total_num_byte_slice(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_extra_app_pages(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalExtraAppPages: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalExtraAppPages(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_total_extra_app_pages(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_apps_created(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalAppsCreated: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalAppsCreated(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_total_apps_created(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_apps_opted_in(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalAppsOptedIn: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalAppsOptedIn(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_total_apps_opted_in(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_assets_created(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalAssetsCreated: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalAssetsCreated(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_total_assets_created(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_assets(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalAssets: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalAssets(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_total_assets(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_boxes(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalBoxes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalBoxes(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_total_boxes(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_total_box_bytes(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctTotalBoxBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctTotalBoxBytes(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_total_box_bytes(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_incentive_eligible(account)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctIncentiveEligible: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctIncentiveEligible(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_incentive_eligible(account)bool'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_last_heartbeat(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctLastHeartbeat: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctLastHeartbeat(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_last_heartbeat(account)uint64'])} + }, + + /** + * Makes a call to the StateAcctParamsGetContract smart contract using the `verify_acct_last_proposed(account)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAcctLastProposed: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAcctParamsGetContractParamsFactory.verifyAcctLastProposed(params)) + return {...result, return: result.return as unknown as (undefined | StateAcctParamsGetContractReturns['verify_acct_last_proposed(account)uint64'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new StateAcctParamsGetContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current StateAcctParamsGetContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): StateAcctParamsGetContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify_acct_balance(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctBalance(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctBalance(params))) + return this + }, + /** + * Add a verify_acct_min_balance(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctMinBalance(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctMinBalance(params))) + return this + }, + /** + * Add a verify_acct_auth_addr(account)address method call against the StateAcctParamsGetContract contract + */ + verifyAcctAuthAddr(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctAuthAddr(params))) + return this + }, + /** + * Add a verify_acct_total_num_uint(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctTotalNumUint(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalNumUint(params))) + return this + }, + /** + * Add a verify_acct_total_num_byte_slice(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctTotalNumByteSlice(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalNumByteSlice(params))) + return this + }, + /** + * Add a verify_acct_total_extra_app_pages(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctTotalExtraAppPages(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalExtraAppPages(params))) + return this + }, + /** + * Add a verify_acct_total_apps_created(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctTotalAppsCreated(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalAppsCreated(params))) + return this + }, + /** + * Add a verify_acct_total_apps_opted_in(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctTotalAppsOptedIn(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalAppsOptedIn(params))) + return this + }, + /** + * Add a verify_acct_total_assets_created(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctTotalAssetsCreated(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalAssetsCreated(params))) + return this + }, + /** + * Add a verify_acct_total_assets(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctTotalAssets(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalAssets(params))) + return this + }, + /** + * Add a verify_acct_total_boxes(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctTotalBoxes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalBoxes(params))) + return this + }, + /** + * Add a verify_acct_total_box_bytes(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctTotalBoxBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctTotalBoxBytes(params))) + return this + }, + /** + * Add a verify_acct_incentive_eligible(account)bool method call against the StateAcctParamsGetContract contract + */ + verifyAcctIncentiveEligible(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctIncentiveEligible(params))) + return this + }, + /** + * Add a verify_acct_last_heartbeat(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctLastHeartbeat(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctLastHeartbeat(params))) + return this + }, + /** + * Add a verify_acct_last_proposed(account)uint64 method call against the StateAcctParamsGetContract contract + */ + verifyAcctLastProposed(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAcctLastProposed(params))) + return this + }, + /** + * Add a clear state call to the StateAcctParamsGetContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as StateAcctParamsGetContractComposer + } +} +export type StateAcctParamsGetContractComposer = { + /** + * Calls the verify_acct_balance(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctBalance(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_balance(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_min_balance(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctMinBalance(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_min_balance(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_auth_addr(account)address ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctAuthAddr(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_auth_addr(account)address'] | undefined]> + + /** + * Calls the verify_acct_total_num_uint(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalNumUint(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_total_num_uint(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_num_byte_slice(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalNumByteSlice(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_total_num_byte_slice(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_extra_app_pages(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalExtraAppPages(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_total_extra_app_pages(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_apps_created(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalAppsCreated(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_total_apps_created(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_apps_opted_in(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalAppsOptedIn(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_total_apps_opted_in(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_assets_created(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalAssetsCreated(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_total_assets_created(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_assets(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalAssets(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_total_assets(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_boxes(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalBoxes(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_total_boxes(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_total_box_bytes(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctTotalBoxBytes(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_total_box_bytes(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_incentive_eligible(account)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctIncentiveEligible(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_incentive_eligible(account)bool'] | undefined]> + + /** + * Calls the verify_acct_last_heartbeat(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctLastHeartbeat(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_last_heartbeat(account)uint64'] | undefined]> + + /** + * Calls the verify_acct_last_proposed(account)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAcctLastProposed(params?: CallParams): StateAcctParamsGetContractComposer<[...TReturns, StateAcctParamsGetContractReturns['verify_acct_last_proposed(account)uint64'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the StateAcctParamsGetContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): StateAcctParamsGetContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): StateAcctParamsGetContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type StateAcctParamsGetContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/StateAppGlobalContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/StateAppGlobalContract.ts new file mode 100644 index 0000000..fc6b74f --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/StateAppGlobalContract.ts @@ -0,0 +1,1018 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"StateAppGlobalContract","structs":{},"methods":[{"name":"verify_get_bytes","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_get_uint64","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_get_ex_bytes","args":[{"type":"uint64","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"(byte[],bool)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_get_ex_uint64","args":[{"type":"uint64","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"(uint64,bool)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_delete","args":[{"type":"byte[]","name":"a"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_put_uint64","args":[{"type":"byte[]","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_put_bytes","args":[{"type":"byte[]","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":1,"bytes":1},"local":{"ints":0,"bytes":0}},"keys":{"global":{"global_uint64":{"keyType":"AVMString","valueType":"AVMUint64","key":"Z2xvYmFsX3VpbnQ2NA=="},"global_bytes":{"keyType":"AVMString","valueType":"AVMBytes","key":"Z2xvYmFsX2J5dGVz"}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDQ1CiAgICAvLyBjbGFzcyBTdGF0ZUFwcEdsb2JhbENvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxNgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4YTk5N2ExODcgMHg0ZGI4YWE0MSAweDBjMWY1NmE3IDB4YWZkZGIwODggMHg5M2E4NTJlMSAweDM2OTk2NDUxIDB4MzkyMGE1N2IgLy8gbWV0aG9kICJ2ZXJpZnlfZ2V0X2J5dGVzKGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9nZXRfdWludDY0KGJ5dGVbXSl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9nZXRfZXhfYnl0ZXModWludDY0LGJ5dGVbXSkoYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJ2ZXJpZnlfZ2V0X2V4X3VpbnQ2NCh1aW50NjQsYnl0ZVtdKSh1aW50NjQsYm9vbCkiLCBtZXRob2QgInZlcmlmeV9kZWxldGUoYnl0ZVtdKXZvaWQiLCBtZXRob2QgInZlcmlmeV9wdXRfdWludDY0KGJ5dGVbXSx1aW50NjQpdm9pZCIsIG1ldGhvZCAidmVyaWZ5X3B1dF9ieXRlcyhieXRlW10sYnl0ZVtdKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCB2ZXJpZnlfZ2V0X2J5dGVzIHZlcmlmeV9nZXRfdWludDY0IHZlcmlmeV9nZXRfZXhfYnl0ZXMgdmVyaWZ5X2dldF9leF91aW50NjQgdmVyaWZ5X2RlbGV0ZSB2ZXJpZnlfcHV0X3VpbnQ2NCB2ZXJpZnlfcHV0X2J5dGVzCiAgICBlcnIKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTY6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFwcEdsb2JhbENvbnRyYWN0LnZlcmlmeV9nZXRfYnl0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfZ2V0X2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDU5CiAgICAvLyB2YWx1ZSA9IG9wLkFwcEdsb2JhbC5nZXRfYnl0ZXMoYSkKICAgIGFwcF9nbG9iYWxfZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBHbG9iYWxDb250cmFjdC52ZXJpZnlfZ2V0X3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9nZXRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ2MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDY0CiAgICAvLyB2YWx1ZSA9IG9wLkFwcEdsb2JhbC5nZXRfdWludDY0KGEpCiAgICBhcHBfZ2xvYmFsX2dldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ2MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBHbG9iYWxDb250cmFjdC52ZXJpZnlfZ2V0X2V4X2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2dldF9leF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0NjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ2OQogICAgLy8gcmV0dXJuIG9wLkFwcEdsb2JhbC5nZXRfZXhfYnl0ZXMoYSwgYikKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgcHVzaGJ5dGVzIDB4MDAwMwogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBHbG9iYWxDb250cmFjdC52ZXJpZnlfZ2V0X2V4X3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9nZXRfZXhfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ3MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDczCiAgICAvLyByZXR1cm4gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoYSwgYikKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFwcEdsb2JhbENvbnRyYWN0LnZlcmlmeV9kZWxldGVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfZGVsZXRlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDc3CiAgICAvLyBvcC5BcHBHbG9iYWwuZGVsZXRlKGEpCiAgICBhcHBfZ2xvYmFsX2RlbAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBHbG9iYWxDb250cmFjdC52ZXJpZnlfcHV0X3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9wdXRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDgxCiAgICAvLyBvcC5BcHBHbG9iYWwucHV0KGEsIGIpCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBHbG9iYWxDb250cmFjdC52ZXJpZnlfcHV0X2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X3B1dF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0ODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0ODUKICAgIC8vIG9wLkFwcEdsb2JhbC5wdXQoYSwgYikKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyACAQAmAgQVH3x1AQAxG0EAQDEZFEQxGESCBwSpl6GHBE24qkEEDB9WpwSv3bCIBJOoUuEENplkUQQ5IKV7NhoAjgcACQAeACwAVABtAHYAgwAxGRQxGBQQQzYaAVcCAGRJFRZXBgJMUChMULAiQzYaAVcCAGQWKExQsCJDNhoBFzYaAlcCAGVLARUWVwYCTwJQKSNPA1SAAgADTFBMUChMULAiQzYaARc2GgJXAgBlTBYpI08DVFAoTFCwIkM2GgFXAgBpIkM2GgFXAgA2GgIXZyJDNhoBVwIANhoCVwIAZyJD","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the StateAppGlobalContract contract + */ +export type StateAppGlobalContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'verify_get_bytes(byte[])byte[]': { + a: Uint8Array + } + 'verify_get_uint64(byte[])uint64': { + a: Uint8Array + } + 'verify_get_ex_bytes(uint64,byte[])(byte[],bool)': { + a: bigint | number + b: Uint8Array + } + 'verify_get_ex_uint64(uint64,byte[])(uint64,bool)': { + a: bigint | number + b: Uint8Array + } + 'verify_delete(byte[])void': { + a: Uint8Array + } + 'verify_put_uint64(byte[],uint64)void': { + a: Uint8Array + b: bigint | number + } + 'verify_put_bytes(byte[],byte[])void': { + a: Uint8Array + b: Uint8Array + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'verify_get_bytes(byte[])byte[]': [a: Uint8Array] + 'verify_get_uint64(byte[])uint64': [a: Uint8Array] + 'verify_get_ex_bytes(uint64,byte[])(byte[],bool)': [a: bigint | number, b: Uint8Array] + 'verify_get_ex_uint64(uint64,byte[])(uint64,bool)': [a: bigint | number, b: Uint8Array] + 'verify_delete(byte[])void': [a: Uint8Array] + 'verify_put_uint64(byte[],uint64)void': [a: Uint8Array, b: bigint | number] + 'verify_put_bytes(byte[],byte[])void': [a: Uint8Array, b: Uint8Array] + } +} + +/** + * The return type for each method + */ +export type StateAppGlobalContractReturns = { + 'verify_get_bytes(byte[])byte[]': Uint8Array + 'verify_get_uint64(byte[])uint64': bigint + 'verify_get_ex_bytes(uint64,byte[])(byte[],bool)': [Uint8Array, boolean] + 'verify_get_ex_uint64(uint64,byte[])(uint64,bool)': [bigint, boolean] + 'verify_delete(byte[])void': void + 'verify_put_uint64(byte[],uint64)void': void + 'verify_put_bytes(byte[],byte[])void': void +} + +/** + * Defines the types of available calls and state of the StateAppGlobalContract smart contract. + */ +export type StateAppGlobalContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'verify_get_bytes(byte[])byte[]' | 'verify_get_bytes', { + argsObj: StateAppGlobalContractArgs['obj']['verify_get_bytes(byte[])byte[]'] + argsTuple: StateAppGlobalContractArgs['tuple']['verify_get_bytes(byte[])byte[]'] + returns: StateAppGlobalContractReturns['verify_get_bytes(byte[])byte[]'] + }> + & Record<'verify_get_uint64(byte[])uint64' | 'verify_get_uint64', { + argsObj: StateAppGlobalContractArgs['obj']['verify_get_uint64(byte[])uint64'] + argsTuple: StateAppGlobalContractArgs['tuple']['verify_get_uint64(byte[])uint64'] + returns: StateAppGlobalContractReturns['verify_get_uint64(byte[])uint64'] + }> + & Record<'verify_get_ex_bytes(uint64,byte[])(byte[],bool)' | 'verify_get_ex_bytes', { + argsObj: StateAppGlobalContractArgs['obj']['verify_get_ex_bytes(uint64,byte[])(byte[],bool)'] + argsTuple: StateAppGlobalContractArgs['tuple']['verify_get_ex_bytes(uint64,byte[])(byte[],bool)'] + returns: StateAppGlobalContractReturns['verify_get_ex_bytes(uint64,byte[])(byte[],bool)'] + }> + & Record<'verify_get_ex_uint64(uint64,byte[])(uint64,bool)' | 'verify_get_ex_uint64', { + argsObj: StateAppGlobalContractArgs['obj']['verify_get_ex_uint64(uint64,byte[])(uint64,bool)'] + argsTuple: StateAppGlobalContractArgs['tuple']['verify_get_ex_uint64(uint64,byte[])(uint64,bool)'] + returns: StateAppGlobalContractReturns['verify_get_ex_uint64(uint64,byte[])(uint64,bool)'] + }> + & Record<'verify_delete(byte[])void' | 'verify_delete', { + argsObj: StateAppGlobalContractArgs['obj']['verify_delete(byte[])void'] + argsTuple: StateAppGlobalContractArgs['tuple']['verify_delete(byte[])void'] + returns: StateAppGlobalContractReturns['verify_delete(byte[])void'] + }> + & Record<'verify_put_uint64(byte[],uint64)void' | 'verify_put_uint64', { + argsObj: StateAppGlobalContractArgs['obj']['verify_put_uint64(byte[],uint64)void'] + argsTuple: StateAppGlobalContractArgs['tuple']['verify_put_uint64(byte[],uint64)void'] + returns: StateAppGlobalContractReturns['verify_put_uint64(byte[],uint64)void'] + }> + & Record<'verify_put_bytes(byte[],byte[])void' | 'verify_put_bytes', { + argsObj: StateAppGlobalContractArgs['obj']['verify_put_bytes(byte[],byte[])void'] + argsTuple: StateAppGlobalContractArgs['tuple']['verify_put_bytes(byte[],byte[])void'] + returns: StateAppGlobalContractReturns['verify_put_bytes(byte[],byte[])void'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + global: { + keys: { + globalUint64: bigint + globalBytes: BinaryState + } + maps: {} + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type StateAppGlobalContractSignatures = keyof StateAppGlobalContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type StateAppGlobalContractNonVoidMethodSignatures = keyof StateAppGlobalContractTypes['methods'] extends infer T ? T extends keyof StateAppGlobalContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the StateAppGlobalContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = StateAppGlobalContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the StateAppGlobalContract smart contract to the method's return type + */ +export type MethodReturn = StateAppGlobalContractTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed global state of the application. + */ +export type GlobalKeysState = StateAppGlobalContractTypes['state']['global']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type StateAppGlobalContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type StateAppGlobalContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: StateAppGlobalContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the StateAppGlobalContract smart contract + */ +export abstract class StateAppGlobalContractParamsFactory { + /** + * Constructs a no op call for the verify_get_bytes(byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyGetBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_get_bytes(byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_get_uint64(byte[])uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyGetUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_get_uint64(byte[])uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_get_ex_bytes(uint64,byte[])(byte[],bool) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyGetExBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_get_ex_bytes(uint64,byte[])(byte[],bool)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_get_ex_uint64(uint64,byte[])(uint64,bool) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyGetExUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_get_ex_uint64(uint64,byte[])(uint64,bool)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_delete(byte[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyDelete(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_delete(byte[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_put_uint64(byte[],uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyPutUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_put_uint64(byte[],uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_put_bytes(byte[],byte[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyPutBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_put_bytes(byte[],byte[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } +} + +/** + * A factory to create and deploy one or more instance of the StateAppGlobalContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class StateAppGlobalContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `StateAppGlobalContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new StateAppGlobalContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new StateAppGlobalContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the StateAppGlobalContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: StateAppGlobalContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new StateAppGlobalContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppGlobalContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppGlobalContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppGlobalContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new StateAppGlobalContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the StateAppGlobalContract smart contract + */ +export class StateAppGlobalContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `StateAppGlobalContractClient` + * + * @param appClient An `AppClient` instance which has been created with the StateAppGlobalContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `StateAppGlobalContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `StateAppGlobalContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new StateAppGlobalContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `StateAppGlobalContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new StateAppGlobalContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the StateAppGlobalContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_get_bytes(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyGetBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppGlobalContractParamsFactory.verifyGetBytes(params)) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_get_uint64(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyGetUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppGlobalContractParamsFactory.verifyGetUint64(params)) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_get_ex_bytes(uint64,byte[])(byte[],bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyGetExBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppGlobalContractParamsFactory.verifyGetExBytes(params)) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_get_ex_uint64(uint64,byte[])(uint64,bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyGetExUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppGlobalContractParamsFactory.verifyGetExUint64(params)) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_delete(byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyDelete: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppGlobalContractParamsFactory.verifyDelete(params)) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_put_uint64(byte[],uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyPutUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppGlobalContractParamsFactory.verifyPutUint64(params)) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_put_bytes(byte[],byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyPutBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppGlobalContractParamsFactory.verifyPutBytes(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the StateAppGlobalContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_get_bytes(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyGetBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppGlobalContractParamsFactory.verifyGetBytes(params)) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_get_uint64(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyGetUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppGlobalContractParamsFactory.verifyGetUint64(params)) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_get_ex_bytes(uint64,byte[])(byte[],bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyGetExBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppGlobalContractParamsFactory.verifyGetExBytes(params)) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_get_ex_uint64(uint64,byte[])(uint64,bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyGetExUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppGlobalContractParamsFactory.verifyGetExUint64(params)) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_delete(byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyDelete: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppGlobalContractParamsFactory.verifyDelete(params)) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_put_uint64(byte[],uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyPutUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppGlobalContractParamsFactory.verifyPutUint64(params)) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_put_bytes(byte[],byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyPutBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppGlobalContractParamsFactory.verifyPutBytes(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the StateAppGlobalContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_get_bytes(byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyGetBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppGlobalContractParamsFactory.verifyGetBytes(params)) + return {...result, return: result.return as unknown as (undefined | StateAppGlobalContractReturns['verify_get_bytes(byte[])byte[]'])} + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_get_uint64(byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyGetUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppGlobalContractParamsFactory.verifyGetUint64(params)) + return {...result, return: result.return as unknown as (undefined | StateAppGlobalContractReturns['verify_get_uint64(byte[])uint64'])} + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_get_ex_bytes(uint64,byte[])(byte[],bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyGetExBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppGlobalContractParamsFactory.verifyGetExBytes(params)) + return {...result, return: result.return as unknown as (undefined | StateAppGlobalContractReturns['verify_get_ex_bytes(uint64,byte[])(byte[],bool)'])} + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_get_ex_uint64(uint64,byte[])(uint64,bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyGetExUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppGlobalContractParamsFactory.verifyGetExUint64(params)) + return {...result, return: result.return as unknown as (undefined | StateAppGlobalContractReturns['verify_get_ex_uint64(uint64,byte[])(uint64,bool)'])} + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_delete(byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyDelete: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppGlobalContractParamsFactory.verifyDelete(params)) + return {...result, return: result.return as unknown as (undefined | StateAppGlobalContractReturns['verify_delete(byte[])void'])} + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_put_uint64(byte[],uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyPutUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppGlobalContractParamsFactory.verifyPutUint64(params)) + return {...result, return: result.return as unknown as (undefined | StateAppGlobalContractReturns['verify_put_uint64(byte[],uint64)void'])} + }, + + /** + * Makes a call to the StateAppGlobalContract smart contract using the `verify_put_bytes(byte[],byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyPutBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppGlobalContractParamsFactory.verifyPutBytes(params)) + return {...result, return: result.return as unknown as (undefined | StateAppGlobalContractReturns['verify_put_bytes(byte[],byte[])void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new StateAppGlobalContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current StateAppGlobalContract app + */ + state = { + /** + * Methods to access global state for the current StateAppGlobalContract app + */ + global: { + /** + * Get all current keyed values from global state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.global.getAll() + return { + globalUint64: result.global_uint64, + globalBytes: new BinaryStateValue(result.global_bytes), + } + }, + /** + * Get the current value of the global_uint64 key in global state + */ + globalUint64: async (): Promise => { return (await this.appClient.state.global.getValue("global_uint64")) as bigint | undefined }, + /** + * Get the current value of the global_bytes key in global state + */ + globalBytes: async (): Promise => { return new BinaryStateValue((await this.appClient.state.global.getValue("global_bytes")) as Uint8Array | undefined) }, + }, + } + + public newGroup(composerConfig?: TransactionComposerConfig): StateAppGlobalContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify_get_bytes(byte[])byte[] method call against the StateAppGlobalContract contract + */ + verifyGetBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyGetBytes(params))) + return this + }, + /** + * Add a verify_get_uint64(byte[])uint64 method call against the StateAppGlobalContract contract + */ + verifyGetUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyGetUint64(params))) + return this + }, + /** + * Add a verify_get_ex_bytes(uint64,byte[])(byte[],bool) method call against the StateAppGlobalContract contract + */ + verifyGetExBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyGetExBytes(params))) + return this + }, + /** + * Add a verify_get_ex_uint64(uint64,byte[])(uint64,bool) method call against the StateAppGlobalContract contract + */ + verifyGetExUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyGetExUint64(params))) + return this + }, + /** + * Add a verify_delete(byte[])void method call against the StateAppGlobalContract contract + */ + verifyDelete(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyDelete(params))) + return this + }, + /** + * Add a verify_put_uint64(byte[],uint64)void method call against the StateAppGlobalContract contract + */ + verifyPutUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyPutUint64(params))) + return this + }, + /** + * Add a verify_put_bytes(byte[],byte[])void method call against the StateAppGlobalContract contract + */ + verifyPutBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyPutBytes(params))) + return this + }, + /** + * Add a clear state call to the StateAppGlobalContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as StateAppGlobalContractComposer + } +} +export type StateAppGlobalContractComposer = { + /** + * Calls the verify_get_bytes(byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyGetBytes(params?: CallParams): StateAppGlobalContractComposer<[...TReturns, StateAppGlobalContractReturns['verify_get_bytes(byte[])byte[]'] | undefined]> + + /** + * Calls the verify_get_uint64(byte[])uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyGetUint64(params?: CallParams): StateAppGlobalContractComposer<[...TReturns, StateAppGlobalContractReturns['verify_get_uint64(byte[])uint64'] | undefined]> + + /** + * Calls the verify_get_ex_bytes(uint64,byte[])(byte[],bool) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyGetExBytes(params?: CallParams): StateAppGlobalContractComposer<[...TReturns, StateAppGlobalContractReturns['verify_get_ex_bytes(uint64,byte[])(byte[],bool)'] | undefined]> + + /** + * Calls the verify_get_ex_uint64(uint64,byte[])(uint64,bool) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyGetExUint64(params?: CallParams): StateAppGlobalContractComposer<[...TReturns, StateAppGlobalContractReturns['verify_get_ex_uint64(uint64,byte[])(uint64,bool)'] | undefined]> + + /** + * Calls the verify_delete(byte[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyDelete(params?: CallParams): StateAppGlobalContractComposer<[...TReturns, StateAppGlobalContractReturns['verify_delete(byte[])void'] | undefined]> + + /** + * Calls the verify_put_uint64(byte[],uint64)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyPutUint64(params?: CallParams): StateAppGlobalContractComposer<[...TReturns, StateAppGlobalContractReturns['verify_put_uint64(byte[],uint64)void'] | undefined]> + + /** + * Calls the verify_put_bytes(byte[],byte[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyPutBytes(params?: CallParams): StateAppGlobalContractComposer<[...TReturns, StateAppGlobalContractReturns['verify_put_bytes(byte[],byte[])void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the StateAppGlobalContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): StateAppGlobalContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): StateAppGlobalContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type StateAppGlobalContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/StateAppGlobalExContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/StateAppGlobalExContract.ts new file mode 100644 index 0000000..cf78371 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/StateAppGlobalExContract.ts @@ -0,0 +1,551 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"StateAppGlobalExContract","structs":{},"methods":[],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":2,"bytes":4},"local":{"ints":0,"bytes":0}},"keys":{"global":{"global_uint64":{"keyType":"AVMString","valueType":"AVMUint64","key":"Z2xvYmFsX3VpbnQ2NA=="},"global_bytes":{"keyType":"AVMString","valueType":"AVMBytes","key":"Z2xvYmFsX2J5dGVz"},"global_uint64_explicit":{"keyType":"AVMString","valueType":"AVMUint64","key":"Z2xvYmFsX3VpbnQ2NF9leHBsaWNpdA=="},"global_bytes_explicit":{"keyType":"AVMString","valueType":"AVMBytes","key":"Z2xvYmFsX2J5dGVzX2V4cGxpY2l0"},"global_arc4_bytes":{"keyType":"AVMString","valueType":"byte[]","key":"Z2xvYmFsX2FyYzRfYnl0ZXM="},"global_arc4_bytes_explicit":{"keyType":"AVMString","valueType":"byte[]","key":"Z2xvYmFsX2FyYzRfYnl0ZXNfZXhwbGljaXQ="}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGJ5dGVjYmxvY2sgMHg2NDc1NmQ2ZDc5NWY2Mjc5NzQ2NTczIDB4MDAxMDY0NzU2ZDZkNzk1ZjYxNzI2MzM0NWY2Mjc5NzQ2NTczCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDMxCiAgICAvLyBrZXk9Imdsb2JhbF91aW50NjQiLAogICAgcHVzaGJ5dGVzICJnbG9iYWxfdWludDY0IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQzMAogICAgLy8gVUludDY0KDIpLAogICAgcHVzaGludCAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDI5LTQzMgogICAgLy8gc2VsZi5nbG9iYWxfdWludDY0ID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgVUludDY0KDIpLAogICAgLy8gICAgIGtleT0iZ2xvYmFsX3VpbnQ2NCIsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQzNQogICAgLy8ga2V5PSJnbG9iYWxfYnl0ZXMiLAogICAgcHVzaGJ5dGVzICJnbG9iYWxfYnl0ZXMiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDM0CiAgICAvLyBCeXRlcyhiImR1bW15X2J5dGVzIiksCiAgICBieXRlY18wIC8vIDB4NjQ3NTZkNmQ3OTVmNjI3OTc0NjU3MwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQzMy00MzYKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgQnl0ZXMoYiJkdW1teV9ieXRlcyIpLAogICAgLy8gICAgIGtleT0iZ2xvYmFsX2J5dGVzIiwKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDM3CiAgICAvLyBzZWxmLmdsb2JhbF91aW50NjRfZXhwbGljaXQgPSBhbGdvcHkuVUludDY0KDIpCiAgICBwdXNoYnl0ZXMgImdsb2JhbF91aW50NjRfZXhwbGljaXQiCiAgICBwdXNoaW50IDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDM4CiAgICAvLyBzZWxmLmdsb2JhbF9ieXRlc19leHBsaWNpdCA9IGFsZ29weS5CeXRlcyhiImR1bW15X2J5dGVzIikKICAgIHB1c2hieXRlcyAiZ2xvYmFsX2J5dGVzX2V4cGxpY2l0IgogICAgYnl0ZWNfMCAvLyAweDY0NzU2ZDZkNzk1ZjYyNzk3NDY1NzMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDQwCiAgICAvLyBhbGdvcHkuYXJjNC5EeW5hbWljQnl0ZXMoYiJkdW1teV9hcmM0X2J5dGVzIiksIGtleT0iZ2xvYmFsX2FyYzRfYnl0ZXMiCiAgICBwdXNoYnl0ZXMgImdsb2JhbF9hcmM0X2J5dGVzIgogICAgYnl0ZWNfMSAvLyAweDAwMTA2NDc1NmQ2ZDc5NWY2MTcyNjMzNDVmNjI3OTc0NjU3MwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQzOS00NDEKICAgIC8vIHNlbGYuZ2xvYmFsX2FyYzRfYnl0ZXMgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBhbGdvcHkuYXJjNC5EeW5hbWljQnl0ZXMoYiJkdW1teV9hcmM0X2J5dGVzIiksIGtleT0iZ2xvYmFsX2FyYzRfYnl0ZXMiCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQ0MgogICAgLy8gc2VsZi5nbG9iYWxfYXJjNF9ieXRlc19leHBsaWNpdCA9IGFsZ29weS5hcmM0LkR5bmFtaWNCeXRlcyhiImR1bW15X2FyYzRfYnl0ZXMiKQogICAgcHVzaGJ5dGVzICJnbG9iYWxfYXJjNF9ieXRlc19leHBsaWNpdCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0NDAKICAgIC8vIGFsZ29weS5hcmM0LkR5bmFtaWNCeXRlcyhiImR1bW15X2FyYzRfYnl0ZXMiKSwga2V5PSJnbG9iYWxfYXJjNF9ieXRlcyIKICAgIGJ5dGVjXzEgLy8gMHgwMDEwNjQ3NTZkNmQ3OTVmNjE3MjYzMzQ1ZjYyNzk3NDY1NzMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0NDIKICAgIC8vIHNlbGYuZ2xvYmFsX2FyYzRfYnl0ZXNfZXhwbGljaXQgPSBhbGdvcHkuYXJjNC5EeW5hbWljQnl0ZXMoYiJkdW1teV9hcmM0X2J5dGVzIikKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0MjcKICAgIC8vIGNsYXNzIFN0YXRlQXBwR2xvYmFsRXhDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgICEKICAgIGFzc2VydAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyYCC2R1bW15X2J5dGVzEgAQZHVtbXlfYXJjNF9ieXRlczEYQACJgA1nbG9iYWxfdWludDY0gQJngAxnbG9iYWxfYnl0ZXMoZ4AWZ2xvYmFsX3VpbnQ2NF9leHBsaWNpdIECZ4AVZ2xvYmFsX2J5dGVzX2V4cGxpY2l0KGeAEWdsb2JhbF9hcmM0X2J5dGVzKWeAGmdsb2JhbF9hcmM0X2J5dGVzX2V4cGxpY2l0KWcxGxREMRkUMRgUEEM=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the StateAppGlobalExContract contract + */ +export type StateAppGlobalExContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + } +} + +/** + * The return type for each method + */ +export type StateAppGlobalExContractReturns = { +} + +/** + * Defines the types of available calls and state of the StateAppGlobalExContract smart contract. + */ +export type StateAppGlobalExContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: {} + /** + * Defines the shape of the state of the application. + */ + state: { + global: { + keys: { + globalUint64: bigint + globalBytes: BinaryState + globalUint64Explicit: bigint + globalBytesExplicit: BinaryState + globalArc4Bytes: Uint8Array + globalArc4BytesExplicit: Uint8Array + } + maps: {} + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type StateAppGlobalExContractSignatures = keyof StateAppGlobalExContractTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the StateAppGlobalExContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = StateAppGlobalExContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the StateAppGlobalExContract smart contract to the method's return type + */ +export type MethodReturn = StateAppGlobalExContractTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed global state of the application. + */ +export type GlobalKeysState = StateAppGlobalExContractTypes['state']['global']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type StateAppGlobalExContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type StateAppGlobalExContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: StateAppGlobalExContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the StateAppGlobalExContract smart contract + */ +export abstract class StateAppGlobalExContractParamsFactory { +} + +/** + * A factory to create and deploy one or more instance of the StateAppGlobalExContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class StateAppGlobalExContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `StateAppGlobalExContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new StateAppGlobalExContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new StateAppGlobalExContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the StateAppGlobalExContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: StateAppGlobalExContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new StateAppGlobalExContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppGlobalExContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppGlobalExContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppGlobalExContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new StateAppGlobalExContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the StateAppGlobalExContract smart contract + */ +export class StateAppGlobalExContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `StateAppGlobalExContractClient` + * + * @param appClient An `AppClient` instance which has been created with the StateAppGlobalExContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `StateAppGlobalExContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `StateAppGlobalExContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new StateAppGlobalExContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `StateAppGlobalExContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new StateAppGlobalExContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the StateAppGlobalExContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the StateAppGlobalExContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the StateAppGlobalExContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new StateAppGlobalExContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current StateAppGlobalExContract app + */ + state = { + /** + * Methods to access global state for the current StateAppGlobalExContract app + */ + global: { + /** + * Get all current keyed values from global state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.global.getAll() + return { + globalUint64: result.global_uint64, + globalBytes: new BinaryStateValue(result.global_bytes), + globalUint64Explicit: result.global_uint64_explicit, + globalBytesExplicit: new BinaryStateValue(result.global_bytes_explicit), + globalArc4Bytes: result.global_arc4_bytes, + globalArc4BytesExplicit: result.global_arc4_bytes_explicit, + } + }, + /** + * Get the current value of the global_uint64 key in global state + */ + globalUint64: async (): Promise => { return (await this.appClient.state.global.getValue("global_uint64")) as bigint | undefined }, + /** + * Get the current value of the global_bytes key in global state + */ + globalBytes: async (): Promise => { return new BinaryStateValue((await this.appClient.state.global.getValue("global_bytes")) as Uint8Array | undefined) }, + /** + * Get the current value of the global_uint64_explicit key in global state + */ + globalUint64Explicit: async (): Promise => { return (await this.appClient.state.global.getValue("global_uint64_explicit")) as bigint | undefined }, + /** + * Get the current value of the global_bytes_explicit key in global state + */ + globalBytesExplicit: async (): Promise => { return new BinaryStateValue((await this.appClient.state.global.getValue("global_bytes_explicit")) as Uint8Array | undefined) }, + /** + * Get the current value of the global_arc4_bytes key in global state + */ + globalArc4Bytes: async (): Promise => { return (await this.appClient.state.global.getValue("global_arc4_bytes")) as Uint8Array | undefined }, + /** + * Get the current value of the global_arc4_bytes_explicit key in global state + */ + globalArc4BytesExplicit: async (): Promise => { return (await this.appClient.state.global.getValue("global_arc4_bytes_explicit")) as Uint8Array | undefined }, + }, + } + + public newGroup(composerConfig?: TransactionComposerConfig): StateAppGlobalExContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a clear state call to the StateAppGlobalExContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as StateAppGlobalExContractComposer + } +} +export type StateAppGlobalExContractComposer = { + /** + * Makes a clear_state call to an existing instance of the StateAppGlobalExContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): StateAppGlobalExContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): StateAppGlobalExContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type StateAppGlobalExContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/StateAppLocalContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/StateAppLocalContract.ts new file mode 100644 index 0000000..be9dae8 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/StateAppLocalContract.ts @@ -0,0 +1,1197 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"StateAppLocalContract","structs":{},"methods":[{"name":"opt_in","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["OptIn"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_get_bytes","args":[{"type":"address","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_get_uint64","args":[{"type":"address","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_get_ex_bytes","args":[{"type":"address","name":"a"},{"type":"uint64","name":"b"},{"type":"byte[]","name":"c"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_get_ex_uint64","args":[{"type":"address","name":"a"},{"type":"uint64","name":"b"},{"type":"byte[]","name":"c"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_delete","args":[{"type":"address","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_exists","args":[{"type":"address","name":"a"},{"type":"byte[]","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_put_uint64","args":[{"type":"address","name":"a"},{"type":"byte[]","name":"b"},{"type":"uint64","name":"c"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_put_bytes","args":[{"type":"address","name":"a"},{"type":"byte[]","name":"b"},{"type":"byte[]","name":"c"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":1,"bytes":1}},"keys":{"global":{},"local":{"local_uint64":{"keyType":"AVMString","valueType":"AVMUint64","key":"bG9jYWxfdWludDY0"},"local_bytes":{"keyType":"AVMString","valueType":"AVMBytes","key":"bG9jYWxfYnl0ZXM="}},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjM3MgogICAgLy8gY2xhc3MgU3RhdGVBcHBMb2NhbENvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxOQogICAgcHVzaGJ5dGVzIDB4MzBjNmQ1OGEgLy8gbWV0aG9kICJvcHRfaW4oKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX29wdF9pbl9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX25leHRANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozNzIKICAgIC8vIGNsYXNzIFN0YXRlQXBwTG9jYWxDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4YTg4MzAyZmUgMHg0OWI3ZGRmOSAweGMwNzhiZWFkIDB4YTUyZjk5MmIgMHg4YzU2YWQ5MCAweDRjN2FkODIzIDB4Y2FhN2I4NjQgMHgyNGY5ZjA4NSAvLyBtZXRob2QgInZlcmlmeV9nZXRfYnl0ZXMoYWRkcmVzcyxieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfZ2V0X3VpbnQ2NChhZGRyZXNzLGJ5dGVbXSl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9nZXRfZXhfYnl0ZXMoYWRkcmVzcyx1aW50NjQsYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2dldF9leF91aW50NjQoYWRkcmVzcyx1aW50NjQsYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2RlbGV0ZShhZGRyZXNzLGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2ZXJpZnlfZXhpc3RzKGFkZHJlc3MsYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9wdXRfdWludDY0KGFkZHJlc3MsYnl0ZVtdLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ2ZXJpZnlfcHV0X2J5dGVzKGFkZHJlc3MsYnl0ZVtdLGJ5dGVbXSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggdmVyaWZ5X2dldF9ieXRlcyB2ZXJpZnlfZ2V0X3VpbnQ2NCB2ZXJpZnlfZ2V0X2V4X2J5dGVzIHZlcmlmeV9nZXRfZXhfdWludDY0IHZlcmlmeV9kZWxldGUgdmVyaWZ5X2V4aXN0cyB2ZXJpZnlfcHV0X3VpbnQ2NCB2ZXJpZnlfcHV0X2J5dGVzCiAgICBlcnIKCm1haW5fb3B0X2luX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6Mzg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoYWxsb3dfYWN0aW9ucz1bIk9wdEluIl0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gT3B0SW4KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydAogICAgYiBvcHRfaW4KCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFwcExvY2FsQ29udHJhY3Qub3B0X2luW3JvdXRpbmddKCkgLT4gdm9pZDoKb3B0X2luOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjM4NgogICAgLy8gc2VsZi5sb2NhbF9ieXRlc1tHbG9iYWwuY3JlYXRvcl9hZGRyZXNzXSA9IEJ5dGVzKGIiZHVtbXlfYnl0ZXMiKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICBwdXNoYnl0ZXNzICJsb2NhbF9ieXRlcyIgMHg2NDc1NmQ2ZDc5NWY2Mjc5NzQ2NTczCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6Mzg3CiAgICAvLyBzZWxmLmxvY2FsX3VpbnQ2NFtHbG9iYWwuY3JlYXRvcl9hZGRyZXNzXSA9IFVJbnQ2NCg5OTkpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIHB1c2hieXRlcyAibG9jYWxfdWludDY0IgogICAgcHVzaGludCA5OTkKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiT3B0SW4iXSkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBMb2NhbENvbnRyYWN0LnZlcmlmeV9nZXRfYnl0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfZ2V0X2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjM4OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzkxCiAgICAvLyB2YWx1ZSA9IG9wLkFwcExvY2FsLmdldF9ieXRlcyhhLCBiKQogICAgYXBwX2xvY2FsX2dldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjM4OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXBwTG9jYWxDb250cmFjdC52ZXJpZnlfZ2V0X3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9nZXRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjM5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6Mzk2CiAgICAvLyB2YWx1ZSA9IG9wLkFwcExvY2FsLmdldF91aW50NjQoYSwgYikKICAgIGFwcF9sb2NhbF9nZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozOTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXBwTG9jYWxDb250cmFjdC52ZXJpZnlfZ2V0X2V4X2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2dldF9leF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozOTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQwMQogICAgLy8gdmFsdWUsIF92YWwgPSBvcC5BcHBMb2NhbC5nZXRfZXhfYnl0ZXMoYSwgYiwgYykKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjM5OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXBwTG9jYWxDb250cmFjdC52ZXJpZnlfZ2V0X2V4X3VpbnQ2NFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9nZXRfZXhfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDA2CiAgICAvLyB2YWx1ZSwgX3ZhbCA9IG9wLkFwcExvY2FsLmdldF9leF91aW50NjQoYSwgYiwgYykKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBMb2NhbENvbnRyYWN0LnZlcmlmeV9kZWxldGVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfZGVsZXRlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDExCiAgICAvLyBvcC5BcHBMb2NhbC5kZWxldGUoYSwgYikKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0MDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXBwTG9jYWxDb250cmFjdC52ZXJpZnlfZXhpc3RzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2V4aXN0czoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0MTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQxNQogICAgLy8gX3ZhbHVlLCBleGlzdHMgPSBvcC5BcHBMb2NhbC5nZXRfZXhfdWludDY0KGEsIDAsIGIpCiAgICBpbnRjXzEgLy8gMAogICAgc3dhcAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFwcExvY2FsQ29udHJhY3QudmVyaWZ5X3B1dF91aW50NjRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfcHV0X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0MTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjQyMAogICAgLy8gb3AuQXBwTG9jYWwucHV0KGEsIGIsIGMpCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFwcExvY2FsQ29udHJhY3QudmVyaWZ5X3B1dF9ieXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9wdXRfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6NDI0CiAgICAvLyBvcC5BcHBMb2NhbC5wdXQoYSwgYiwgYykKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTo0MjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyACAQAmAQQVH3x1MRtBAF+ABDDG1Yo2GgCOAQBHMRkURDEYRIIIBKiDAv4ESbfd+QTAeL6tBKUvmSsEjFatkARMetgjBMqnuGQEJPnwhTYaAI4IAEcAXwBwAI0AowCvAMoA2gAxGSISMRgQREIACDEZFDEYFBBDMgmCAgtsb2NhbF9ieXRlcwtkdW1teV9ieXRlc2YyCYAMbG9jYWxfdWludDY0gecHZiJDNhoBNhoCVwIAYkkVFlcGAkxQKExQsCJDNhoBNhoCVwIAYhYoTFCwIkM2GgE2GgIXNhoDVwIAY0hJFRZXBgJMUChMULAiQzYaATYaAhc2GgNXAgBjSBYoTFCwIkM2GgE2GgJXAgBoIkM2GgE2GgJXAgAjTGNFAYABACNPAlQoTFCwIkM2GgE2GgJXAgA2GgMXZiJDNhoBNhoCVwIANhoDVwIAZiJD","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the StateAppLocalContract contract + */ +export type StateAppLocalContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'opt_in()void': Record + 'verify_get_bytes(address,byte[])byte[]': { + a: string + b: Uint8Array + } + 'verify_get_uint64(address,byte[])uint64': { + a: string + b: Uint8Array + } + 'verify_get_ex_bytes(address,uint64,byte[])byte[]': { + a: string + b: bigint | number + c: Uint8Array + } + 'verify_get_ex_uint64(address,uint64,byte[])uint64': { + a: string + b: bigint | number + c: Uint8Array + } + 'verify_delete(address,byte[])void': { + a: string + b: Uint8Array + } + 'verify_exists(address,byte[])bool': { + a: string + b: Uint8Array + } + 'verify_put_uint64(address,byte[],uint64)void': { + a: string + b: Uint8Array + c: bigint | number + } + 'verify_put_bytes(address,byte[],byte[])void': { + a: string + b: Uint8Array + c: Uint8Array + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'opt_in()void': [] + 'verify_get_bytes(address,byte[])byte[]': [a: string, b: Uint8Array] + 'verify_get_uint64(address,byte[])uint64': [a: string, b: Uint8Array] + 'verify_get_ex_bytes(address,uint64,byte[])byte[]': [a: string, b: bigint | number, c: Uint8Array] + 'verify_get_ex_uint64(address,uint64,byte[])uint64': [a: string, b: bigint | number, c: Uint8Array] + 'verify_delete(address,byte[])void': [a: string, b: Uint8Array] + 'verify_exists(address,byte[])bool': [a: string, b: Uint8Array] + 'verify_put_uint64(address,byte[],uint64)void': [a: string, b: Uint8Array, c: bigint | number] + 'verify_put_bytes(address,byte[],byte[])void': [a: string, b: Uint8Array, c: Uint8Array] + } +} + +/** + * The return type for each method + */ +export type StateAppLocalContractReturns = { + 'opt_in()void': void + 'verify_get_bytes(address,byte[])byte[]': Uint8Array + 'verify_get_uint64(address,byte[])uint64': bigint + 'verify_get_ex_bytes(address,uint64,byte[])byte[]': Uint8Array + 'verify_get_ex_uint64(address,uint64,byte[])uint64': bigint + 'verify_delete(address,byte[])void': void + 'verify_exists(address,byte[])bool': boolean + 'verify_put_uint64(address,byte[],uint64)void': void + 'verify_put_bytes(address,byte[],byte[])void': void +} + +/** + * Defines the types of available calls and state of the StateAppLocalContract smart contract. + */ +export type StateAppLocalContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'opt_in()void' | 'opt_in', { + argsObj: StateAppLocalContractArgs['obj']['opt_in()void'] + argsTuple: StateAppLocalContractArgs['tuple']['opt_in()void'] + returns: StateAppLocalContractReturns['opt_in()void'] + }> + & Record<'verify_get_bytes(address,byte[])byte[]' | 'verify_get_bytes', { + argsObj: StateAppLocalContractArgs['obj']['verify_get_bytes(address,byte[])byte[]'] + argsTuple: StateAppLocalContractArgs['tuple']['verify_get_bytes(address,byte[])byte[]'] + returns: StateAppLocalContractReturns['verify_get_bytes(address,byte[])byte[]'] + }> + & Record<'verify_get_uint64(address,byte[])uint64' | 'verify_get_uint64', { + argsObj: StateAppLocalContractArgs['obj']['verify_get_uint64(address,byte[])uint64'] + argsTuple: StateAppLocalContractArgs['tuple']['verify_get_uint64(address,byte[])uint64'] + returns: StateAppLocalContractReturns['verify_get_uint64(address,byte[])uint64'] + }> + & Record<'verify_get_ex_bytes(address,uint64,byte[])byte[]' | 'verify_get_ex_bytes', { + argsObj: StateAppLocalContractArgs['obj']['verify_get_ex_bytes(address,uint64,byte[])byte[]'] + argsTuple: StateAppLocalContractArgs['tuple']['verify_get_ex_bytes(address,uint64,byte[])byte[]'] + returns: StateAppLocalContractReturns['verify_get_ex_bytes(address,uint64,byte[])byte[]'] + }> + & Record<'verify_get_ex_uint64(address,uint64,byte[])uint64' | 'verify_get_ex_uint64', { + argsObj: StateAppLocalContractArgs['obj']['verify_get_ex_uint64(address,uint64,byte[])uint64'] + argsTuple: StateAppLocalContractArgs['tuple']['verify_get_ex_uint64(address,uint64,byte[])uint64'] + returns: StateAppLocalContractReturns['verify_get_ex_uint64(address,uint64,byte[])uint64'] + }> + & Record<'verify_delete(address,byte[])void' | 'verify_delete', { + argsObj: StateAppLocalContractArgs['obj']['verify_delete(address,byte[])void'] + argsTuple: StateAppLocalContractArgs['tuple']['verify_delete(address,byte[])void'] + returns: StateAppLocalContractReturns['verify_delete(address,byte[])void'] + }> + & Record<'verify_exists(address,byte[])bool' | 'verify_exists', { + argsObj: StateAppLocalContractArgs['obj']['verify_exists(address,byte[])bool'] + argsTuple: StateAppLocalContractArgs['tuple']['verify_exists(address,byte[])bool'] + returns: StateAppLocalContractReturns['verify_exists(address,byte[])bool'] + }> + & Record<'verify_put_uint64(address,byte[],uint64)void' | 'verify_put_uint64', { + argsObj: StateAppLocalContractArgs['obj']['verify_put_uint64(address,byte[],uint64)void'] + argsTuple: StateAppLocalContractArgs['tuple']['verify_put_uint64(address,byte[],uint64)void'] + returns: StateAppLocalContractReturns['verify_put_uint64(address,byte[],uint64)void'] + }> + & Record<'verify_put_bytes(address,byte[],byte[])void' | 'verify_put_bytes', { + argsObj: StateAppLocalContractArgs['obj']['verify_put_bytes(address,byte[],byte[])void'] + argsTuple: StateAppLocalContractArgs['tuple']['verify_put_bytes(address,byte[],byte[])void'] + returns: StateAppLocalContractReturns['verify_put_bytes(address,byte[],byte[])void'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + local: { + keys: { + localUint64: bigint + localBytes: BinaryState + } + maps: {} + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type StateAppLocalContractSignatures = keyof StateAppLocalContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type StateAppLocalContractNonVoidMethodSignatures = keyof StateAppLocalContractTypes['methods'] extends infer T ? T extends keyof StateAppLocalContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the StateAppLocalContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = StateAppLocalContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the StateAppLocalContract smart contract to the method's return type + */ +export type MethodReturn = StateAppLocalContractTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed local state of the application. + */ +export type LocalKeysState = StateAppLocalContractTypes['state']['local']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type StateAppLocalContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type StateAppLocalContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: StateAppLocalContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the StateAppLocalContract smart contract + */ +export abstract class StateAppLocalContractParamsFactory { + /** + * Gets available optIn ABI call param factories + */ + static get optIn() { + return { + /** + * Constructs opt-in ABI call params for the StateAppLocalContract smart contract using the opt_in()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + optIn(params: CallParams): AppClientMethodCallParams { + return { + ...params, + method: 'opt_in()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + }, + } + } + + /** + * Constructs a no op call for the verify_get_bytes(address,byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyGetBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_get_bytes(address,byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_get_uint64(address,byte[])uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyGetUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_get_uint64(address,byte[])uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_get_ex_bytes(address,uint64,byte[])byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyGetExBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_get_ex_bytes(address,uint64,byte[])byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_get_ex_uint64(address,uint64,byte[])uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyGetExUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_get_ex_uint64(address,uint64,byte[])uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_delete(address,byte[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyDelete(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_delete(address,byte[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_exists(address,byte[])bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyExists(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_exists(address,byte[])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_put_uint64(address,byte[],uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyPutUint64(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_put_uint64(address,byte[],uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } + /** + * Constructs a no op call for the verify_put_bytes(address,byte[],byte[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyPutBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_put_bytes(address,byte[],byte[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b, params.args.c], + } + } +} + +/** + * A factory to create and deploy one or more instance of the StateAppLocalContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class StateAppLocalContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `StateAppLocalContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new StateAppLocalContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new StateAppLocalContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the StateAppLocalContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: StateAppLocalContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new StateAppLocalContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppLocalContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppLocalContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppLocalContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new StateAppLocalContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the StateAppLocalContract smart contract + */ +export class StateAppLocalContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `StateAppLocalContractClient` + * + * @param appClient An `AppClient` instance which has been created with the StateAppLocalContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `StateAppLocalContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `StateAppLocalContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new StateAppLocalContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `StateAppLocalContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new StateAppLocalContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available optIn methods + */ + optIn: { + /** + * Opts the user into an existing instance of the StateAppLocalContract smart contract using the `opt_in()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The optIn params + */ + optIn: (params: CallParams & { onComplete?: OnApplicationComplete.OptIn } = {args: []}) => { + return this.appClient.params.optIn(StateAppLocalContractParamsFactory.optIn.optIn(params)) + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the StateAppLocalContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_get_bytes(address,byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyGetBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppLocalContractParamsFactory.verifyGetBytes(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_get_uint64(address,byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyGetUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppLocalContractParamsFactory.verifyGetUint64(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_get_ex_bytes(address,uint64,byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyGetExBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppLocalContractParamsFactory.verifyGetExBytes(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_get_ex_uint64(address,uint64,byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyGetExUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppLocalContractParamsFactory.verifyGetExUint64(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_delete(address,byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyDelete: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppLocalContractParamsFactory.verifyDelete(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_exists(address,byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyExists: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppLocalContractParamsFactory.verifyExists(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_put_uint64(address,byte[],uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyPutUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppLocalContractParamsFactory.verifyPutUint64(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_put_bytes(address,byte[],byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyPutBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppLocalContractParamsFactory.verifyPutBytes(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available optIn methods + */ + optIn: { + /** + * Opts the user into an existing instance of the StateAppLocalContract smart contract using the `opt_in()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The optIn transaction + */ + optIn: (params: CallParams & { onComplete?: OnApplicationComplete.OptIn } = {args: []}) => { + return this.appClient.createTransaction.optIn(StateAppLocalContractParamsFactory.optIn.optIn(params)) + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the StateAppLocalContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_get_bytes(address,byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyGetBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppLocalContractParamsFactory.verifyGetBytes(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_get_uint64(address,byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyGetUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppLocalContractParamsFactory.verifyGetUint64(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_get_ex_bytes(address,uint64,byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyGetExBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppLocalContractParamsFactory.verifyGetExBytes(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_get_ex_uint64(address,uint64,byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyGetExUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppLocalContractParamsFactory.verifyGetExUint64(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_delete(address,byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyDelete: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppLocalContractParamsFactory.verifyDelete(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_exists(address,byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyExists: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppLocalContractParamsFactory.verifyExists(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_put_uint64(address,byte[],uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyPutUint64: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppLocalContractParamsFactory.verifyPutUint64(params)) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_put_bytes(address,byte[],byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyPutBytes: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppLocalContractParamsFactory.verifyPutBytes(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available optIn methods + */ + optIn: { + /** + * Opts the user into an existing instance of the StateAppLocalContract smart contract using the `opt_in()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The optIn result + */ + optIn: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.OptIn } = {args: []}) => { + const result = await this.appClient.send.optIn(StateAppLocalContractParamsFactory.optIn.optIn(params)) + return {...result, return: result.return as unknown as (undefined | StateAppLocalContractReturns['opt_in()void'])} + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the StateAppLocalContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_get_bytes(address,byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyGetBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppLocalContractParamsFactory.verifyGetBytes(params)) + return {...result, return: result.return as unknown as (undefined | StateAppLocalContractReturns['verify_get_bytes(address,byte[])byte[]'])} + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_get_uint64(address,byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyGetUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppLocalContractParamsFactory.verifyGetUint64(params)) + return {...result, return: result.return as unknown as (undefined | StateAppLocalContractReturns['verify_get_uint64(address,byte[])uint64'])} + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_get_ex_bytes(address,uint64,byte[])byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyGetExBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppLocalContractParamsFactory.verifyGetExBytes(params)) + return {...result, return: result.return as unknown as (undefined | StateAppLocalContractReturns['verify_get_ex_bytes(address,uint64,byte[])byte[]'])} + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_get_ex_uint64(address,uint64,byte[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyGetExUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppLocalContractParamsFactory.verifyGetExUint64(params)) + return {...result, return: result.return as unknown as (undefined | StateAppLocalContractReturns['verify_get_ex_uint64(address,uint64,byte[])uint64'])} + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_delete(address,byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyDelete: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppLocalContractParamsFactory.verifyDelete(params)) + return {...result, return: result.return as unknown as (undefined | StateAppLocalContractReturns['verify_delete(address,byte[])void'])} + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_exists(address,byte[])bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyExists: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppLocalContractParamsFactory.verifyExists(params)) + return {...result, return: result.return as unknown as (undefined | StateAppLocalContractReturns['verify_exists(address,byte[])bool'])} + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_put_uint64(address,byte[],uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyPutUint64: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppLocalContractParamsFactory.verifyPutUint64(params)) + return {...result, return: result.return as unknown as (undefined | StateAppLocalContractReturns['verify_put_uint64(address,byte[],uint64)void'])} + }, + + /** + * Makes a call to the StateAppLocalContract smart contract using the `verify_put_bytes(address,byte[],byte[])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyPutBytes: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppLocalContractParamsFactory.verifyPutBytes(params)) + return {...result, return: result.return as unknown as (undefined | StateAppLocalContractReturns['verify_put_bytes(address,byte[],byte[])void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new StateAppLocalContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current StateAppLocalContract app + */ + state = { + /** + * Methods to access local state for the current StateAppLocalContract app + */ + local: (address: string | Address) => { + const encodedAddress = typeof address === 'string' ? address : encodeAddress(address.publicKey) + return { + /** + * Get all current keyed values from local state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.local(encodedAddress).getAll() + return { + localUint64: result.local_uint64, + localBytes: new BinaryStateValue(result.local_bytes), + } + }, + /** + * Get the current value of the local_uint64 key in local state + */ + localUint64: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("local_uint64")) as bigint | undefined }, + /** + * Get the current value of the local_bytes key in local state + */ + localBytes: async (): Promise => { return new BinaryStateValue((await this.appClient.state.local(encodedAddress).getValue("local_bytes")) as Uint8Array | undefined) }, + } + }, + } + + public newGroup(composerConfig?: TransactionComposerConfig): StateAppLocalContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify_get_bytes(address,byte[])byte[] method call against the StateAppLocalContract contract + */ + verifyGetBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyGetBytes(params))) + return this + }, + /** + * Add a verify_get_uint64(address,byte[])uint64 method call against the StateAppLocalContract contract + */ + verifyGetUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyGetUint64(params))) + return this + }, + /** + * Add a verify_get_ex_bytes(address,uint64,byte[])byte[] method call against the StateAppLocalContract contract + */ + verifyGetExBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyGetExBytes(params))) + return this + }, + /** + * Add a verify_get_ex_uint64(address,uint64,byte[])uint64 method call against the StateAppLocalContract contract + */ + verifyGetExUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyGetExUint64(params))) + return this + }, + /** + * Add a verify_delete(address,byte[])void method call against the StateAppLocalContract contract + */ + verifyDelete(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyDelete(params))) + return this + }, + /** + * Add a verify_exists(address,byte[])bool method call against the StateAppLocalContract contract + */ + verifyExists(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyExists(params))) + return this + }, + /** + * Add a verify_put_uint64(address,byte[],uint64)void method call against the StateAppLocalContract contract + */ + verifyPutUint64(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyPutUint64(params))) + return this + }, + /** + * Add a verify_put_bytes(address,byte[],byte[])void method call against the StateAppLocalContract contract + */ + verifyPutBytes(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyPutBytes(params))) + return this + }, + get optIn() { + return { + optIn: (params: CallParams) => { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.optIn.optIn(params))) + return this + }, + } + }, + /** + * Add a clear state call to the StateAppLocalContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as StateAppLocalContractComposer + } +} +export type StateAppLocalContractComposer = { + /** + * Calls the verify_get_bytes(address,byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyGetBytes(params?: CallParams): StateAppLocalContractComposer<[...TReturns, StateAppLocalContractReturns['verify_get_bytes(address,byte[])byte[]'] | undefined]> + + /** + * Calls the verify_get_uint64(address,byte[])uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyGetUint64(params?: CallParams): StateAppLocalContractComposer<[...TReturns, StateAppLocalContractReturns['verify_get_uint64(address,byte[])uint64'] | undefined]> + + /** + * Calls the verify_get_ex_bytes(address,uint64,byte[])byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyGetExBytes(params?: CallParams): StateAppLocalContractComposer<[...TReturns, StateAppLocalContractReturns['verify_get_ex_bytes(address,uint64,byte[])byte[]'] | undefined]> + + /** + * Calls the verify_get_ex_uint64(address,uint64,byte[])uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyGetExUint64(params?: CallParams): StateAppLocalContractComposer<[...TReturns, StateAppLocalContractReturns['verify_get_ex_uint64(address,uint64,byte[])uint64'] | undefined]> + + /** + * Calls the verify_delete(address,byte[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyDelete(params?: CallParams): StateAppLocalContractComposer<[...TReturns, StateAppLocalContractReturns['verify_delete(address,byte[])void'] | undefined]> + + /** + * Calls the verify_exists(address,byte[])bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyExists(params?: CallParams): StateAppLocalContractComposer<[...TReturns, StateAppLocalContractReturns['verify_exists(address,byte[])bool'] | undefined]> + + /** + * Calls the verify_put_uint64(address,byte[],uint64)void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyPutUint64(params?: CallParams): StateAppLocalContractComposer<[...TReturns, StateAppLocalContractReturns['verify_put_uint64(address,byte[],uint64)void'] | undefined]> + + /** + * Calls the verify_put_bytes(address,byte[],byte[])void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyPutBytes(params?: CallParams): StateAppLocalContractComposer<[...TReturns, StateAppLocalContractReturns['verify_put_bytes(address,byte[],byte[])void'] | undefined]> + + /** + * Gets available optIn methods + */ + readonly optIn: { + /** + * Opts the user into an existing instance of the StateAppLocalContract smart contract using the opt_in()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + optIn(params?: CallParams): StateAppLocalContractComposer<[...TReturns, StateAppLocalContractReturns['opt_in()void'] | undefined]> + } + + /** + * Makes a clear_state call to an existing instance of the StateAppLocalContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): StateAppLocalContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): StateAppLocalContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type StateAppLocalContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/StateAppLocalExContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/StateAppLocalExContract.ts new file mode 100644 index 0000000..53a53bd --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/StateAppLocalExContract.ts @@ -0,0 +1,635 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"StateAppLocalExContract","structs":{},"methods":[{"name":"opt_in","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["OptIn"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":1,"bytes":2}},"keys":{"global":{},"local":{"local_uint64":{"keyType":"AVMString","valueType":"AVMUint64","key":"bG9jYWxfdWludDY0"},"local_bytes":{"keyType":"AVMString","valueType":"AVMBytes","key":"bG9jYWxfYnl0ZXM="},"local_arc4_bytes":{"keyType":"AVMString","valueType":"byte[]","key":"bG9jYWxfYXJjNF9ieXRlcw=="}},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozNDYKICAgIC8vIGNsYXNzIFN0YXRlQXBwTG9jYWxFeENvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA3CiAgICBwdXNoYnl0ZXMgMHgzMGM2ZDU4YSAvLyBtZXRob2QgIm9wdF9pbigpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0X2luX3JvdXRlQDUKICAgIGVycgoKbWFpbl9vcHRfaW5fcm91dGVANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozNjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiT3B0SW4iXSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgMSAvLyBPcHRJbgogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0CiAgICBiIG9wdF9pbgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBMb2NhbEV4Q29udHJhY3Qub3B0X2luW3JvdXRpbmddKCkgLT4gdm9pZDoKb3B0X2luOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjM2NQogICAgLy8gc2VsZi5sb2NhbF9ieXRlc1tHbG9iYWwuY3JlYXRvcl9hZGRyZXNzXSA9IEJ5dGVzKGIiZHVtbXlfYnl0ZXNfZnJvbV9leHRlcm5hbF9jb250cmFjdCIpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIHB1c2hieXRlc3MgImxvY2FsX2J5dGVzIiAweDY0NzU2ZDZkNzk1ZjYyNzk3NDY1NzM1ZjY2NzI2ZjZkNWY2NTc4NzQ2NTcyNmU2MTZjNWY2MzZmNmU3NDcyNjE2Mzc0CiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzY2CiAgICAvLyBzZWxmLmxvY2FsX3VpbnQ2NFtHbG9iYWwuY3JlYXRvcl9hZGRyZXNzXSA9IFVJbnQ2NCg5OSkKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgcHVzaGJ5dGVzICJsb2NhbF91aW50NjQiCiAgICBwdXNoaW50IDk5CiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzY3CiAgICAvLyBzZWxmLmxvY2FsX2FyYzRfYnl0ZXNbR2xvYmFsLmNyZWF0b3JfYWRkcmVzc10gPSBhbGdvcHkuYXJjNC5EeW5hbWljQnl0ZXMoCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozNjctMzY5CiAgICAvLyBzZWxmLmxvY2FsX2FyYzRfYnl0ZXNbR2xvYmFsLmNyZWF0b3JfYWRkcmVzc10gPSBhbGdvcHkuYXJjNC5EeW5hbWljQnl0ZXMoCiAgICAvLyAgICAgYiJkdW1teV9hcmM0X2J5dGVzIgogICAgLy8gKQogICAgcHVzaGJ5dGVzcyAibG9jYWxfYXJjNF9ieXRlcyIgMHgwMDEwNjQ3NTZkNmQ3OTVmNjE3MjYzMzQ1ZjYyNzk3NDY1NzMKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozNjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiT3B0SW4iXSkKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CzEbQQAagAQwxtWKNhoAjgEAAQAxGYEBEjEYEERCAAgxGRQxGBQQQzIJggILbG9jYWxfYnl0ZXMiZHVtbXlfYnl0ZXNfZnJvbV9leHRlcm5hbF9jb250cmFjdGYyCYAMbG9jYWxfdWludDY0gWNmMgmCAhBsb2NhbF9hcmM0X2J5dGVzEgAQZHVtbXlfYXJjNF9ieXRlc2aBAUM=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the StateAppLocalExContract contract + */ +export type StateAppLocalExContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'opt_in()void': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'opt_in()void': [] + } +} + +/** + * The return type for each method + */ +export type StateAppLocalExContractReturns = { + 'opt_in()void': void +} + +/** + * Defines the types of available calls and state of the StateAppLocalExContract smart contract. + */ +export type StateAppLocalExContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'opt_in()void' | 'opt_in', { + argsObj: StateAppLocalExContractArgs['obj']['opt_in()void'] + argsTuple: StateAppLocalExContractArgs['tuple']['opt_in()void'] + returns: StateAppLocalExContractReturns['opt_in()void'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + local: { + keys: { + localUint64: bigint + localBytes: BinaryState + localArc4Bytes: Uint8Array + } + maps: {} + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type StateAppLocalExContractSignatures = keyof StateAppLocalExContractTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the StateAppLocalExContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = StateAppLocalExContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the StateAppLocalExContract smart contract to the method's return type + */ +export type MethodReturn = StateAppLocalExContractTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed local state of the application. + */ +export type LocalKeysState = StateAppLocalExContractTypes['state']['local']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type StateAppLocalExContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type StateAppLocalExContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: StateAppLocalExContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the StateAppLocalExContract smart contract + */ +export abstract class StateAppLocalExContractParamsFactory { + /** + * Gets available optIn ABI call param factories + */ + static get optIn() { + return { + /** + * Constructs opt-in ABI call params for the StateAppLocalExContract smart contract using the opt_in()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + optIn(params: CallParams): AppClientMethodCallParams { + return { + ...params, + method: 'opt_in()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + }, + } + } + +} + +/** + * A factory to create and deploy one or more instance of the StateAppLocalExContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class StateAppLocalExContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `StateAppLocalExContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new StateAppLocalExContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new StateAppLocalExContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the StateAppLocalExContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: StateAppLocalExContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new StateAppLocalExContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppLocalExContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppLocalExContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppLocalExContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new StateAppLocalExContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the StateAppLocalExContract smart contract + */ +export class StateAppLocalExContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `StateAppLocalExContractClient` + * + * @param appClient An `AppClient` instance which has been created with the StateAppLocalExContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `StateAppLocalExContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `StateAppLocalExContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new StateAppLocalExContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `StateAppLocalExContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new StateAppLocalExContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available optIn methods + */ + optIn: { + /** + * Opts the user into an existing instance of the StateAppLocalExContract smart contract using the `opt_in()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The optIn params + */ + optIn: (params: CallParams & { onComplete?: OnApplicationComplete.OptIn } = {args: []}) => { + return this.appClient.params.optIn(StateAppLocalExContractParamsFactory.optIn.optIn(params)) + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the StateAppLocalExContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available optIn methods + */ + optIn: { + /** + * Opts the user into an existing instance of the StateAppLocalExContract smart contract using the `opt_in()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The optIn transaction + */ + optIn: (params: CallParams & { onComplete?: OnApplicationComplete.OptIn } = {args: []}) => { + return this.appClient.createTransaction.optIn(StateAppLocalExContractParamsFactory.optIn.optIn(params)) + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the StateAppLocalExContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available optIn methods + */ + optIn: { + /** + * Opts the user into an existing instance of the StateAppLocalExContract smart contract using the `opt_in()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The optIn result + */ + optIn: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.OptIn } = {args: []}) => { + const result = await this.appClient.send.optIn(StateAppLocalExContractParamsFactory.optIn.optIn(params)) + return {...result, return: result.return as unknown as (undefined | StateAppLocalExContractReturns['opt_in()void'])} + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the StateAppLocalExContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new StateAppLocalExContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current StateAppLocalExContract app + */ + state = { + /** + * Methods to access local state for the current StateAppLocalExContract app + */ + local: (address: string | Address) => { + const encodedAddress = typeof address === 'string' ? address : encodeAddress(address.publicKey) + return { + /** + * Get all current keyed values from local state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.local(encodedAddress).getAll() + return { + localUint64: result.local_uint64, + localBytes: new BinaryStateValue(result.local_bytes), + localArc4Bytes: result.local_arc4_bytes, + } + }, + /** + * Get the current value of the local_uint64 key in local state + */ + localUint64: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("local_uint64")) as bigint | undefined }, + /** + * Get the current value of the local_bytes key in local state + */ + localBytes: async (): Promise => { return new BinaryStateValue((await this.appClient.state.local(encodedAddress).getValue("local_bytes")) as Uint8Array | undefined) }, + /** + * Get the current value of the local_arc4_bytes key in local state + */ + localArc4Bytes: async (): Promise => { return (await this.appClient.state.local(encodedAddress).getValue("local_arc4_bytes")) as Uint8Array | undefined }, + } + }, + } + + public newGroup(composerConfig?: TransactionComposerConfig): StateAppLocalExContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + get optIn() { + return { + optIn: (params: CallParams) => { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.optIn.optIn(params))) + return this + }, + } + }, + /** + * Add a clear state call to the StateAppLocalExContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as StateAppLocalExContractComposer + } +} +export type StateAppLocalExContractComposer = { + /** + * Gets available optIn methods + */ + readonly optIn: { + /** + * Opts the user into an existing instance of the StateAppLocalExContract smart contract using the opt_in()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + optIn(params?: CallParams): StateAppLocalExContractComposer<[...TReturns, StateAppLocalExContractReturns['opt_in()void'] | undefined]> + } + + /** + * Makes a clear_state call to an existing instance of the StateAppLocalExContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): StateAppLocalExContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): StateAppLocalExContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type StateAppLocalExContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/StateAppParamsContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/StateAppParamsContract.ts new file mode 100644 index 0000000..182a6a4 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/StateAppParamsContract.ts @@ -0,0 +1,1112 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"StateAppParamsContract","structs":{},"methods":[{"name":"verify_app_params_get_approval_program","args":[{"type":"uint64","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_app_params_get_clear_state_program","args":[{"type":"uint64","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_app_params_get_global_num_uint","args":[{"type":"uint64","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_app_params_get_global_num_byte_slice","args":[{"type":"uint64","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_app_params_get_local_num_uint","args":[{"type":"uint64","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_app_params_get_local_num_byte_slice","args":[{"type":"uint64","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_app_params_get_extra_program_pages","args":[{"type":"uint64","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_app_params_get_creator","args":[{"type":"uint64","name":"a"}],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_app_params_get_address","args":[{"type":"uint64","name":"a"}],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[121,155,189,216,243,270,297,324,350],"errorMessage":"expected exists by index to match"},{"pc":[119,153,187,214,241,268,295,322,348],"errorMessage":"expected value by index to match"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNzIKICAgIC8vIGNsYXNzIFN0YXRlQXBwUGFyYW1zQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE2CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHhiOWQxM2MxYiAweGU1YzNjODg5IDB4ZWU0ZTdiMmEgMHg3ZmEyMzRjYiAweDE5Zjc3NDM5IDB4OTJjNTcyYWEgMHhhZTljNmVmYiAweGUzNmVkNzA1IDB4OGM2NmE4NDIgLy8gbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfYXBwcm92YWxfcHJvZ3JhbSh1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfY2xlYXJfc3RhdGVfcHJvZ3JhbSh1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV91aW50KHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX2J5dGVfc2xpY2UodWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2xvY2FsX251bV91aW50KHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hcHBfcGFyYW1zX2dldF9sb2NhbF9udW1fYnl0ZV9zbGljZSh1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZXh0cmFfcHJvZ3JhbV9wYWdlcyh1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfY3JlYXRvcih1aW50NjQpYWRkcmVzcyIsIG1ldGhvZCAidmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2FkZHJlc3ModWludDY0KWFkZHJlc3MiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfYXBwcm92YWxfcHJvZ3JhbSB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfY2xlYXJfc3RhdGVfcHJvZ3JhbSB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV91aW50IHZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX2J5dGVfc2xpY2UgdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2xvY2FsX251bV91aW50IHZlcmlmeV9hcHBfcGFyYW1zX2dldF9sb2NhbF9udW1fYnl0ZV9zbGljZSB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZXh0cmFfcHJvZ3JhbV9wYWdlcyB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfY3JlYXRvciB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfYWRkcmVzcwogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE2OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfYXBwcm92YWxfcHJvZ3JhbVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9hcHByb3ZhbF9wcm9ncmFtOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjI3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNzUKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBvcC5BcHBQYXJhbXNHZXQuYXBwX2FwcHJvdmFsX3Byb2dyYW0oYSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFwcHJvdmFsUHJvZ3JhbQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25fYXJncygxKSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNzYKICAgIC8vIHZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXggPSBvcC5BcHBQYXJhbXNHZXQuYXBwX2FwcHJvdmFsX3Byb2dyYW0oX2dldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBcHByb3ZhbFByb2dyYW0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNzcKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSB2YWx1ZV9pbmRleCwgImV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjI3OAogICAgLy8gYXNzZXJ0IGV4aXN0cyA9PSBleGlzdHNfaW5kZXgsICJleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjI3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXBwUGFyYW1zQ29udHJhY3QudmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2NsZWFyX3N0YXRlX3Byb2dyYW1bcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYXBwX3BhcmFtc19nZXRfY2xlYXJfc3RhdGVfcHJvZ3JhbToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjgzCiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwUGFyYW1zR2V0LmFwcF9jbGVhcl9zdGF0ZV9wcm9ncmFtKGEpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBDbGVhclN0YXRlUHJvZ3JhbQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25fYXJncygxKSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyODQKICAgIC8vIHZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXggPSBvcC5BcHBQYXJhbXNHZXQuYXBwX2NsZWFyX3N0YXRlX3Byb2dyYW0oX2dldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBDbGVhclN0YXRlUHJvZ3JhbQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjI4NQogICAgLy8gYXNzZXJ0IHZhbHVlID09IHZhbHVlX2luZGV4LCAiZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2giCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6Mjg2CiAgICAvLyBhc3NlcnQgZXhpc3RzID09IGV4aXN0c19pbmRleCwgImV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjgxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV91aW50W3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2dsb2JhbF9udW1fdWludDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjkxCiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwUGFyYW1zR2V0LmFwcF9nbG9iYWxfbnVtX3VpbnQoYSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEdsb2JhbE51bVVpbnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjkyCiAgICAvLyB2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4ID0gb3AuQXBwUGFyYW1zR2V0LmFwcF9nbG9iYWxfbnVtX3VpbnQoX2dldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBHbG9iYWxOdW1VaW50CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjkzCiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyOTQKICAgIC8vIGFzc2VydCBleGlzdHMgPT0gZXhpc3RzX2luZGV4LCAiZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXBwUGFyYW1zQ29udHJhY3QudmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2dsb2JhbF9udW1fYnl0ZV9zbGljZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX2J5dGVfc2xpY2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6Mjk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjI5OQogICAgLy8gdmFsdWUsIGV4aXN0cyA9IG9wLkFwcFBhcmFtc0dldC5hcHBfZ2xvYmFsX251bV9ieXRlX3NsaWNlKGEpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzAwCiAgICAvLyB2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4ID0gb3AuQXBwUGFyYW1zR2V0LmFwcF9nbG9iYWxfbnVtX2J5dGVfc2xpY2UoX2dldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMDEKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSB2YWx1ZV9pbmRleCwgImV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjMwMgogICAgLy8gYXNzZXJ0IGV4aXN0cyA9PSBleGlzdHNfaW5kZXgsICJleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjI5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfbG9jYWxfbnVtX3VpbnRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYXBwX3BhcmFtc19nZXRfbG9jYWxfbnVtX3VpbnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjMwNwogICAgLy8gdmFsdWUsIGV4aXN0cyA9IG9wLkFwcFBhcmFtc0dldC5hcHBfbG9jYWxfbnVtX3VpbnQoYSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcExvY2FsTnVtVWludAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25fYXJncygxKSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMDgKICAgIC8vIHZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXggPSBvcC5BcHBQYXJhbXNHZXQuYXBwX2xvY2FsX251bV91aW50KF9nZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXBwX3BhcmFtc19nZXQgQXBwTG9jYWxOdW1VaW50CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzA5CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMTAKICAgIC8vIGFzc2VydCBleGlzdHMgPT0gZXhpc3RzX2luZGV4LCAiZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXBwUGFyYW1zQ29udHJhY3QudmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2xvY2FsX251bV9ieXRlX3NsaWNlW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2xvY2FsX251bV9ieXRlX3NsaWNlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjMxMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMTUKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBvcC5BcHBQYXJhbXNHZXQuYXBwX2xvY2FsX251bV9ieXRlX3NsaWNlKGEpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBMb2NhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25fYXJncygxKSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMTYKICAgIC8vIHZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXggPSBvcC5BcHBQYXJhbXNHZXQuYXBwX2xvY2FsX251bV9ieXRlX3NsaWNlKF9nZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXBwX3BhcmFtc19nZXQgQXBwTG9jYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMTcKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSB2YWx1ZV9pbmRleCwgImV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjMxOAogICAgLy8gYXNzZXJ0IGV4aXN0cyA9PSBleGlzdHNfaW5kZXgsICJleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjMxMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfZXh0cmFfcHJvZ3JhbV9wYWdlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9leHRyYV9wcm9ncmFtX3BhZ2VzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjMyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMjMKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBvcC5BcHBQYXJhbXNHZXQuYXBwX2V4dHJhX3Byb2dyYW1fcGFnZXMoYSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEV4dHJhUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjMyNAogICAgLy8gdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleCA9IG9wLkFwcFBhcmFtc0dldC5hcHBfZXh0cmFfcHJvZ3JhbV9wYWdlcyhfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEV4dHJhUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzI1CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMjYKICAgIC8vIGFzc2VydCBleGlzdHMgPT0gZXhpc3RzX2luZGV4LCAiZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXBwUGFyYW1zQ29udHJhY3QudmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2NyZWF0b3Jbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYXBwX3BhcmFtc19nZXRfY3JlYXRvcjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzMxCiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwUGFyYW1zR2V0LmFwcF9jcmVhdG9yKGEpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjMzMgogICAgLy8gdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleCA9IG9wLkFwcFBhcmFtc0dldC5hcHBfY3JlYXRvcihfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMzMKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSB2YWx1ZV9pbmRleCwgImV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjMzNAogICAgLy8gYXNzZXJ0IGV4aXN0cyA9PSBleGlzdHNfaW5kZXgsICJleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjMyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfYWRkcmVzc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9hZGRyZXNzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjMzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weTozMzkKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBvcC5BcHBQYXJhbXNHZXQuYXBwX2FkZHJlc3MoYSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzQwCiAgICAvLyB2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4ID0gb3AuQXBwUGFyYW1zR2V0LmFwcF9hZGRyZXNzKF9nZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjM0MQogICAgLy8gYXNzZXJ0IHZhbHVlID09IHZhbHVlX2luZGV4LCAiZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2giCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzQyCiAgICAvLyBhc3NlcnQgZXhpc3RzID09IGV4aXN0c19pbmRleCwgImV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MzM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyABASYBBBUffHUxG0EATjEZFEQxGESCCQS50TwbBOXDyIkE7k57KgR/ojTLBBn3dDkEksVyqgSunG77BONu1wUEjGaoQjYaAI4JAAkAKwBNAGgAgwCeALkA1ADuADEZFDEYFBBDNhoBF3IANhoBF3IASwNPAhJEEkRJFRZXBgJMUChMULAiQzYaARdyATYaARdyAUsDTwISRBJESRUWVwYCTFAoTFCwIkM2GgEXcgI2GgEXcgJLA08CEkQSRBYoTFCwIkM2GgEXcgM2GgEXcgNLA08CEkQSRBYoTFCwIkM2GgEXcgQ2GgEXcgRLA08CEkQSRBYoTFCwIkM2GgEXcgU2GgEXcgVLA08CEkQSRBYoTFCwIkM2GgEXcgY2GgEXcgZLA08CEkQSRBYoTFCwIkM2GgEXcgc2GgEXcgdLA08CEkQSRChMULAiQzYaARdyCDYaARdyCEsDTwISRBJEKExQsCJD","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the StateAppParamsContract contract + */ +export type StateAppParamsContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'verify_app_params_get_approval_program(uint64)byte[]': { + a: bigint | number + } + 'verify_app_params_get_clear_state_program(uint64)byte[]': { + a: bigint | number + } + 'verify_app_params_get_global_num_uint(uint64)uint64': { + a: bigint | number + } + 'verify_app_params_get_global_num_byte_slice(uint64)uint64': { + a: bigint | number + } + 'verify_app_params_get_local_num_uint(uint64)uint64': { + a: bigint | number + } + 'verify_app_params_get_local_num_byte_slice(uint64)uint64': { + a: bigint | number + } + 'verify_app_params_get_extra_program_pages(uint64)uint64': { + a: bigint | number + } + 'verify_app_params_get_creator(uint64)address': { + a: bigint | number + } + 'verify_app_params_get_address(uint64)address': { + a: bigint | number + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'verify_app_params_get_approval_program(uint64)byte[]': [a: bigint | number] + 'verify_app_params_get_clear_state_program(uint64)byte[]': [a: bigint | number] + 'verify_app_params_get_global_num_uint(uint64)uint64': [a: bigint | number] + 'verify_app_params_get_global_num_byte_slice(uint64)uint64': [a: bigint | number] + 'verify_app_params_get_local_num_uint(uint64)uint64': [a: bigint | number] + 'verify_app_params_get_local_num_byte_slice(uint64)uint64': [a: bigint | number] + 'verify_app_params_get_extra_program_pages(uint64)uint64': [a: bigint | number] + 'verify_app_params_get_creator(uint64)address': [a: bigint | number] + 'verify_app_params_get_address(uint64)address': [a: bigint | number] + } +} + +/** + * The return type for each method + */ +export type StateAppParamsContractReturns = { + 'verify_app_params_get_approval_program(uint64)byte[]': Uint8Array + 'verify_app_params_get_clear_state_program(uint64)byte[]': Uint8Array + 'verify_app_params_get_global_num_uint(uint64)uint64': bigint + 'verify_app_params_get_global_num_byte_slice(uint64)uint64': bigint + 'verify_app_params_get_local_num_uint(uint64)uint64': bigint + 'verify_app_params_get_local_num_byte_slice(uint64)uint64': bigint + 'verify_app_params_get_extra_program_pages(uint64)uint64': bigint + 'verify_app_params_get_creator(uint64)address': string + 'verify_app_params_get_address(uint64)address': string +} + +/** + * Defines the types of available calls and state of the StateAppParamsContract smart contract. + */ +export type StateAppParamsContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'verify_app_params_get_approval_program(uint64)byte[]' | 'verify_app_params_get_approval_program', { + argsObj: StateAppParamsContractArgs['obj']['verify_app_params_get_approval_program(uint64)byte[]'] + argsTuple: StateAppParamsContractArgs['tuple']['verify_app_params_get_approval_program(uint64)byte[]'] + returns: StateAppParamsContractReturns['verify_app_params_get_approval_program(uint64)byte[]'] + }> + & Record<'verify_app_params_get_clear_state_program(uint64)byte[]' | 'verify_app_params_get_clear_state_program', { + argsObj: StateAppParamsContractArgs['obj']['verify_app_params_get_clear_state_program(uint64)byte[]'] + argsTuple: StateAppParamsContractArgs['tuple']['verify_app_params_get_clear_state_program(uint64)byte[]'] + returns: StateAppParamsContractReturns['verify_app_params_get_clear_state_program(uint64)byte[]'] + }> + & Record<'verify_app_params_get_global_num_uint(uint64)uint64' | 'verify_app_params_get_global_num_uint', { + argsObj: StateAppParamsContractArgs['obj']['verify_app_params_get_global_num_uint(uint64)uint64'] + argsTuple: StateAppParamsContractArgs['tuple']['verify_app_params_get_global_num_uint(uint64)uint64'] + returns: StateAppParamsContractReturns['verify_app_params_get_global_num_uint(uint64)uint64'] + }> + & Record<'verify_app_params_get_global_num_byte_slice(uint64)uint64' | 'verify_app_params_get_global_num_byte_slice', { + argsObj: StateAppParamsContractArgs['obj']['verify_app_params_get_global_num_byte_slice(uint64)uint64'] + argsTuple: StateAppParamsContractArgs['tuple']['verify_app_params_get_global_num_byte_slice(uint64)uint64'] + returns: StateAppParamsContractReturns['verify_app_params_get_global_num_byte_slice(uint64)uint64'] + }> + & Record<'verify_app_params_get_local_num_uint(uint64)uint64' | 'verify_app_params_get_local_num_uint', { + argsObj: StateAppParamsContractArgs['obj']['verify_app_params_get_local_num_uint(uint64)uint64'] + argsTuple: StateAppParamsContractArgs['tuple']['verify_app_params_get_local_num_uint(uint64)uint64'] + returns: StateAppParamsContractReturns['verify_app_params_get_local_num_uint(uint64)uint64'] + }> + & Record<'verify_app_params_get_local_num_byte_slice(uint64)uint64' | 'verify_app_params_get_local_num_byte_slice', { + argsObj: StateAppParamsContractArgs['obj']['verify_app_params_get_local_num_byte_slice(uint64)uint64'] + argsTuple: StateAppParamsContractArgs['tuple']['verify_app_params_get_local_num_byte_slice(uint64)uint64'] + returns: StateAppParamsContractReturns['verify_app_params_get_local_num_byte_slice(uint64)uint64'] + }> + & Record<'verify_app_params_get_extra_program_pages(uint64)uint64' | 'verify_app_params_get_extra_program_pages', { + argsObj: StateAppParamsContractArgs['obj']['verify_app_params_get_extra_program_pages(uint64)uint64'] + argsTuple: StateAppParamsContractArgs['tuple']['verify_app_params_get_extra_program_pages(uint64)uint64'] + returns: StateAppParamsContractReturns['verify_app_params_get_extra_program_pages(uint64)uint64'] + }> + & Record<'verify_app_params_get_creator(uint64)address' | 'verify_app_params_get_creator', { + argsObj: StateAppParamsContractArgs['obj']['verify_app_params_get_creator(uint64)address'] + argsTuple: StateAppParamsContractArgs['tuple']['verify_app_params_get_creator(uint64)address'] + returns: StateAppParamsContractReturns['verify_app_params_get_creator(uint64)address'] + }> + & Record<'verify_app_params_get_address(uint64)address' | 'verify_app_params_get_address', { + argsObj: StateAppParamsContractArgs['obj']['verify_app_params_get_address(uint64)address'] + argsTuple: StateAppParamsContractArgs['tuple']['verify_app_params_get_address(uint64)address'] + returns: StateAppParamsContractReturns['verify_app_params_get_address(uint64)address'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type StateAppParamsContractSignatures = keyof StateAppParamsContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type StateAppParamsContractNonVoidMethodSignatures = keyof StateAppParamsContractTypes['methods'] extends infer T ? T extends keyof StateAppParamsContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the StateAppParamsContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = StateAppParamsContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the StateAppParamsContract smart contract to the method's return type + */ +export type MethodReturn = StateAppParamsContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type StateAppParamsContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type StateAppParamsContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: StateAppParamsContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the StateAppParamsContract smart contract + */ +export abstract class StateAppParamsContractParamsFactory { + /** + * Constructs a no op call for the verify_app_params_get_approval_program(uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAppParamsGetApprovalProgram(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_app_params_get_approval_program(uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_app_params_get_clear_state_program(uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAppParamsGetClearStateProgram(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_app_params_get_clear_state_program(uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_app_params_get_global_num_uint(uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAppParamsGetGlobalNumUint(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_app_params_get_global_num_uint(uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_app_params_get_global_num_byte_slice(uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAppParamsGetGlobalNumByteSlice(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_app_params_get_global_num_byte_slice(uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_app_params_get_local_num_uint(uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAppParamsGetLocalNumUint(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_app_params_get_local_num_uint(uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_app_params_get_local_num_byte_slice(uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAppParamsGetLocalNumByteSlice(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_app_params_get_local_num_byte_slice(uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_app_params_get_extra_program_pages(uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAppParamsGetExtraProgramPages(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_app_params_get_extra_program_pages(uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_app_params_get_creator(uint64)address ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAppParamsGetCreator(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_app_params_get_creator(uint64)address' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_app_params_get_address(uint64)address ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAppParamsGetAddress(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_app_params_get_address(uint64)address' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } +} + +/** + * A factory to create and deploy one or more instance of the StateAppParamsContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class StateAppParamsContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `StateAppParamsContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new StateAppParamsContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new StateAppParamsContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the StateAppParamsContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: StateAppParamsContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new StateAppParamsContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppParamsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppParamsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAppParamsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new StateAppParamsContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the StateAppParamsContract smart contract + */ +export class StateAppParamsContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `StateAppParamsContractClient` + * + * @param appClient An `AppClient` instance which has been created with the StateAppParamsContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `StateAppParamsContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `StateAppParamsContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new StateAppParamsContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `StateAppParamsContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new StateAppParamsContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the StateAppParamsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_approval_program(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAppParamsGetApprovalProgram: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppParamsContractParamsFactory.verifyAppParamsGetApprovalProgram(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_clear_state_program(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAppParamsGetClearStateProgram: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppParamsContractParamsFactory.verifyAppParamsGetClearStateProgram(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_global_num_uint(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAppParamsGetGlobalNumUint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppParamsContractParamsFactory.verifyAppParamsGetGlobalNumUint(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_global_num_byte_slice(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAppParamsGetGlobalNumByteSlice: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppParamsContractParamsFactory.verifyAppParamsGetGlobalNumByteSlice(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_local_num_uint(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAppParamsGetLocalNumUint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppParamsContractParamsFactory.verifyAppParamsGetLocalNumUint(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_local_num_byte_slice(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAppParamsGetLocalNumByteSlice: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppParamsContractParamsFactory.verifyAppParamsGetLocalNumByteSlice(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_extra_program_pages(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAppParamsGetExtraProgramPages: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppParamsContractParamsFactory.verifyAppParamsGetExtraProgramPages(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_creator(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAppParamsGetCreator: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppParamsContractParamsFactory.verifyAppParamsGetCreator(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_address(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAppParamsGetAddress: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAppParamsContractParamsFactory.verifyAppParamsGetAddress(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the StateAppParamsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_approval_program(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAppParamsGetApprovalProgram: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppParamsContractParamsFactory.verifyAppParamsGetApprovalProgram(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_clear_state_program(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAppParamsGetClearStateProgram: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppParamsContractParamsFactory.verifyAppParamsGetClearStateProgram(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_global_num_uint(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAppParamsGetGlobalNumUint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppParamsContractParamsFactory.verifyAppParamsGetGlobalNumUint(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_global_num_byte_slice(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAppParamsGetGlobalNumByteSlice: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppParamsContractParamsFactory.verifyAppParamsGetGlobalNumByteSlice(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_local_num_uint(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAppParamsGetLocalNumUint: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppParamsContractParamsFactory.verifyAppParamsGetLocalNumUint(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_local_num_byte_slice(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAppParamsGetLocalNumByteSlice: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppParamsContractParamsFactory.verifyAppParamsGetLocalNumByteSlice(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_extra_program_pages(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAppParamsGetExtraProgramPages: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppParamsContractParamsFactory.verifyAppParamsGetExtraProgramPages(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_creator(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAppParamsGetCreator: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppParamsContractParamsFactory.verifyAppParamsGetCreator(params)) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_address(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAppParamsGetAddress: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAppParamsContractParamsFactory.verifyAppParamsGetAddress(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the StateAppParamsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_approval_program(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAppParamsGetApprovalProgram: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppParamsContractParamsFactory.verifyAppParamsGetApprovalProgram(params)) + return {...result, return: result.return as unknown as (undefined | StateAppParamsContractReturns['verify_app_params_get_approval_program(uint64)byte[]'])} + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_clear_state_program(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAppParamsGetClearStateProgram: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppParamsContractParamsFactory.verifyAppParamsGetClearStateProgram(params)) + return {...result, return: result.return as unknown as (undefined | StateAppParamsContractReturns['verify_app_params_get_clear_state_program(uint64)byte[]'])} + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_global_num_uint(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAppParamsGetGlobalNumUint: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppParamsContractParamsFactory.verifyAppParamsGetGlobalNumUint(params)) + return {...result, return: result.return as unknown as (undefined | StateAppParamsContractReturns['verify_app_params_get_global_num_uint(uint64)uint64'])} + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_global_num_byte_slice(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAppParamsGetGlobalNumByteSlice: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppParamsContractParamsFactory.verifyAppParamsGetGlobalNumByteSlice(params)) + return {...result, return: result.return as unknown as (undefined | StateAppParamsContractReturns['verify_app_params_get_global_num_byte_slice(uint64)uint64'])} + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_local_num_uint(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAppParamsGetLocalNumUint: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppParamsContractParamsFactory.verifyAppParamsGetLocalNumUint(params)) + return {...result, return: result.return as unknown as (undefined | StateAppParamsContractReturns['verify_app_params_get_local_num_uint(uint64)uint64'])} + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_local_num_byte_slice(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAppParamsGetLocalNumByteSlice: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppParamsContractParamsFactory.verifyAppParamsGetLocalNumByteSlice(params)) + return {...result, return: result.return as unknown as (undefined | StateAppParamsContractReturns['verify_app_params_get_local_num_byte_slice(uint64)uint64'])} + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_extra_program_pages(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAppParamsGetExtraProgramPages: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppParamsContractParamsFactory.verifyAppParamsGetExtraProgramPages(params)) + return {...result, return: result.return as unknown as (undefined | StateAppParamsContractReturns['verify_app_params_get_extra_program_pages(uint64)uint64'])} + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_creator(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAppParamsGetCreator: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppParamsContractParamsFactory.verifyAppParamsGetCreator(params)) + return {...result, return: result.return as unknown as (undefined | StateAppParamsContractReturns['verify_app_params_get_creator(uint64)address'])} + }, + + /** + * Makes a call to the StateAppParamsContract smart contract using the `verify_app_params_get_address(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAppParamsGetAddress: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAppParamsContractParamsFactory.verifyAppParamsGetAddress(params)) + return {...result, return: result.return as unknown as (undefined | StateAppParamsContractReturns['verify_app_params_get_address(uint64)address'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new StateAppParamsContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current StateAppParamsContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): StateAppParamsContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify_app_params_get_approval_program(uint64)byte[] method call against the StateAppParamsContract contract + */ + verifyAppParamsGetApprovalProgram(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAppParamsGetApprovalProgram(params))) + return this + }, + /** + * Add a verify_app_params_get_clear_state_program(uint64)byte[] method call against the StateAppParamsContract contract + */ + verifyAppParamsGetClearStateProgram(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAppParamsGetClearStateProgram(params))) + return this + }, + /** + * Add a verify_app_params_get_global_num_uint(uint64)uint64 method call against the StateAppParamsContract contract + */ + verifyAppParamsGetGlobalNumUint(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAppParamsGetGlobalNumUint(params))) + return this + }, + /** + * Add a verify_app_params_get_global_num_byte_slice(uint64)uint64 method call against the StateAppParamsContract contract + */ + verifyAppParamsGetGlobalNumByteSlice(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAppParamsGetGlobalNumByteSlice(params))) + return this + }, + /** + * Add a verify_app_params_get_local_num_uint(uint64)uint64 method call against the StateAppParamsContract contract + */ + verifyAppParamsGetLocalNumUint(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAppParamsGetLocalNumUint(params))) + return this + }, + /** + * Add a verify_app_params_get_local_num_byte_slice(uint64)uint64 method call against the StateAppParamsContract contract + */ + verifyAppParamsGetLocalNumByteSlice(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAppParamsGetLocalNumByteSlice(params))) + return this + }, + /** + * Add a verify_app_params_get_extra_program_pages(uint64)uint64 method call against the StateAppParamsContract contract + */ + verifyAppParamsGetExtraProgramPages(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAppParamsGetExtraProgramPages(params))) + return this + }, + /** + * Add a verify_app_params_get_creator(uint64)address method call against the StateAppParamsContract contract + */ + verifyAppParamsGetCreator(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAppParamsGetCreator(params))) + return this + }, + /** + * Add a verify_app_params_get_address(uint64)address method call against the StateAppParamsContract contract + */ + verifyAppParamsGetAddress(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAppParamsGetAddress(params))) + return this + }, + /** + * Add a clear state call to the StateAppParamsContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as StateAppParamsContractComposer + } +} +export type StateAppParamsContractComposer = { + /** + * Calls the verify_app_params_get_approval_program(uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAppParamsGetApprovalProgram(params?: CallParams): StateAppParamsContractComposer<[...TReturns, StateAppParamsContractReturns['verify_app_params_get_approval_program(uint64)byte[]'] | undefined]> + + /** + * Calls the verify_app_params_get_clear_state_program(uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAppParamsGetClearStateProgram(params?: CallParams): StateAppParamsContractComposer<[...TReturns, StateAppParamsContractReturns['verify_app_params_get_clear_state_program(uint64)byte[]'] | undefined]> + + /** + * Calls the verify_app_params_get_global_num_uint(uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAppParamsGetGlobalNumUint(params?: CallParams): StateAppParamsContractComposer<[...TReturns, StateAppParamsContractReturns['verify_app_params_get_global_num_uint(uint64)uint64'] | undefined]> + + /** + * Calls the verify_app_params_get_global_num_byte_slice(uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAppParamsGetGlobalNumByteSlice(params?: CallParams): StateAppParamsContractComposer<[...TReturns, StateAppParamsContractReturns['verify_app_params_get_global_num_byte_slice(uint64)uint64'] | undefined]> + + /** + * Calls the verify_app_params_get_local_num_uint(uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAppParamsGetLocalNumUint(params?: CallParams): StateAppParamsContractComposer<[...TReturns, StateAppParamsContractReturns['verify_app_params_get_local_num_uint(uint64)uint64'] | undefined]> + + /** + * Calls the verify_app_params_get_local_num_byte_slice(uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAppParamsGetLocalNumByteSlice(params?: CallParams): StateAppParamsContractComposer<[...TReturns, StateAppParamsContractReturns['verify_app_params_get_local_num_byte_slice(uint64)uint64'] | undefined]> + + /** + * Calls the verify_app_params_get_extra_program_pages(uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAppParamsGetExtraProgramPages(params?: CallParams): StateAppParamsContractComposer<[...TReturns, StateAppParamsContractReturns['verify_app_params_get_extra_program_pages(uint64)uint64'] | undefined]> + + /** + * Calls the verify_app_params_get_creator(uint64)address ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAppParamsGetCreator(params?: CallParams): StateAppParamsContractComposer<[...TReturns, StateAppParamsContractReturns['verify_app_params_get_creator(uint64)address'] | undefined]> + + /** + * Calls the verify_app_params_get_address(uint64)address ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAppParamsGetAddress(params?: CallParams): StateAppParamsContractComposer<[...TReturns, StateAppParamsContractReturns['verify_app_params_get_address(uint64)address'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the StateAppParamsContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): StateAppParamsContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): StateAppParamsContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type StateAppParamsContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/StateAssetHoldingContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/StateAssetHoldingContract.ts new file mode 100644 index 0000000..c46961a --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/StateAssetHoldingContract.ts @@ -0,0 +1,631 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"StateAssetHoldingContract","structs":{},"methods":[{"name":"verify_asset_holding_get","args":[{"type":"address","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_asset_frozen_get","args":[{"type":"address","name":"a"},{"type":"uint64","name":"b"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE2MgogICAgLy8gY2xhc3MgU3RhdGVBc3NldEhvbGRpbmdDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAOQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4OGY1MjM1YjQgMHhkZTdhMzlmNiAvLyBtZXRob2QgInZlcmlmeV9hc3NldF9ob2xkaW5nX2dldChhZGRyZXNzLHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hc3NldF9mcm96ZW5fZ2V0KGFkZHJlc3MsdWludDY0KWJvb2wiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCB2ZXJpZnlfYXNzZXRfaG9sZGluZ19nZXQgdmVyaWZ5X2Fzc2V0X2Zyb3plbl9nZXQKICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA5OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBc3NldEhvbGRpbmdDb250cmFjdC52ZXJpZnlfYXNzZXRfaG9sZGluZ19nZXRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYXNzZXRfaG9sZGluZ19nZXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE2NQogICAgLy8gYmFsYW5jZSwgX3ZhbCA9IG9wLkFzc2V0SG9sZGluZ0dldC5hc3NldF9iYWxhbmNlKGEsIGIpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXNzZXRIb2xkaW5nQ29udHJhY3QudmVyaWZ5X2Fzc2V0X2Zyb3plbl9nZXRbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYXNzZXRfZnJvemVuX2dldDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTcwCiAgICAvLyBmcm96ZW4sIF92YWwgPSBvcC5Bc3NldEhvbGRpbmdHZXQuYXNzZXRfZnJvemVuKGEsIGIpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEZyb3plbgogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTY4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIHB1c2hpbnQgMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyYBBBUffHUxG0EAHTEZFEQxGESCAgSPUjW0BN56OfY2GgCOAgAJABsAMRkUMRgUEEM2GgE2GgIXcABIFihMULCBAUM2GgE2GgIXcAFIgAEAgQBPAlQoTFCwgQFD","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the StateAssetHoldingContract contract + */ +export type StateAssetHoldingContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'verify_asset_holding_get(address,uint64)uint64': { + a: string + b: bigint | number + } + 'verify_asset_frozen_get(address,uint64)bool': { + a: string + b: bigint | number + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'verify_asset_holding_get(address,uint64)uint64': [a: string, b: bigint | number] + 'verify_asset_frozen_get(address,uint64)bool': [a: string, b: bigint | number] + } +} + +/** + * The return type for each method + */ +export type StateAssetHoldingContractReturns = { + 'verify_asset_holding_get(address,uint64)uint64': bigint + 'verify_asset_frozen_get(address,uint64)bool': boolean +} + +/** + * Defines the types of available calls and state of the StateAssetHoldingContract smart contract. + */ +export type StateAssetHoldingContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'verify_asset_holding_get(address,uint64)uint64' | 'verify_asset_holding_get', { + argsObj: StateAssetHoldingContractArgs['obj']['verify_asset_holding_get(address,uint64)uint64'] + argsTuple: StateAssetHoldingContractArgs['tuple']['verify_asset_holding_get(address,uint64)uint64'] + returns: StateAssetHoldingContractReturns['verify_asset_holding_get(address,uint64)uint64'] + }> + & Record<'verify_asset_frozen_get(address,uint64)bool' | 'verify_asset_frozen_get', { + argsObj: StateAssetHoldingContractArgs['obj']['verify_asset_frozen_get(address,uint64)bool'] + argsTuple: StateAssetHoldingContractArgs['tuple']['verify_asset_frozen_get(address,uint64)bool'] + returns: StateAssetHoldingContractReturns['verify_asset_frozen_get(address,uint64)bool'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type StateAssetHoldingContractSignatures = keyof StateAssetHoldingContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type StateAssetHoldingContractNonVoidMethodSignatures = keyof StateAssetHoldingContractTypes['methods'] extends infer T ? T extends keyof StateAssetHoldingContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the StateAssetHoldingContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = StateAssetHoldingContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the StateAssetHoldingContract smart contract to the method's return type + */ +export type MethodReturn = StateAssetHoldingContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type StateAssetHoldingContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type StateAssetHoldingContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: StateAssetHoldingContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the StateAssetHoldingContract smart contract + */ +export abstract class StateAssetHoldingContractParamsFactory { + /** + * Constructs a no op call for the verify_asset_holding_get(address,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetHoldingGet(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_holding_get(address,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } + /** + * Constructs a no op call for the verify_asset_frozen_get(address,uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetFrozenGet(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_frozen_get(address,uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a, params.args.b], + } + } +} + +/** + * A factory to create and deploy one or more instance of the StateAssetHoldingContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class StateAssetHoldingContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `StateAssetHoldingContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new StateAssetHoldingContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new StateAssetHoldingContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the StateAssetHoldingContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: StateAssetHoldingContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new StateAssetHoldingContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAssetHoldingContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAssetHoldingContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAssetHoldingContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new StateAssetHoldingContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the StateAssetHoldingContract smart contract + */ +export class StateAssetHoldingContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `StateAssetHoldingContractClient` + * + * @param appClient An `AppClient` instance which has been created with the StateAssetHoldingContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `StateAssetHoldingContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `StateAssetHoldingContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new StateAssetHoldingContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `StateAssetHoldingContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new StateAssetHoldingContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the StateAssetHoldingContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the StateAssetHoldingContract smart contract using the `verify_asset_holding_get(address,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetHoldingGet: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetHoldingContractParamsFactory.verifyAssetHoldingGet(params)) + }, + + /** + * Makes a call to the StateAssetHoldingContract smart contract using the `verify_asset_frozen_get(address,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetFrozenGet: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetHoldingContractParamsFactory.verifyAssetFrozenGet(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the StateAssetHoldingContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the StateAssetHoldingContract smart contract using the `verify_asset_holding_get(address,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetHoldingGet: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetHoldingContractParamsFactory.verifyAssetHoldingGet(params)) + }, + + /** + * Makes a call to the StateAssetHoldingContract smart contract using the `verify_asset_frozen_get(address,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetFrozenGet: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetHoldingContractParamsFactory.verifyAssetFrozenGet(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the StateAssetHoldingContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the StateAssetHoldingContract smart contract using the `verify_asset_holding_get(address,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetHoldingGet: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetHoldingContractParamsFactory.verifyAssetHoldingGet(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetHoldingContractReturns['verify_asset_holding_get(address,uint64)uint64'])} + }, + + /** + * Makes a call to the StateAssetHoldingContract smart contract using the `verify_asset_frozen_get(address,uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetFrozenGet: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetHoldingContractParamsFactory.verifyAssetFrozenGet(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetHoldingContractReturns['verify_asset_frozen_get(address,uint64)bool'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new StateAssetHoldingContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current StateAssetHoldingContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): StateAssetHoldingContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify_asset_holding_get(address,uint64)uint64 method call against the StateAssetHoldingContract contract + */ + verifyAssetHoldingGet(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetHoldingGet(params))) + return this + }, + /** + * Add a verify_asset_frozen_get(address,uint64)bool method call against the StateAssetHoldingContract contract + */ + verifyAssetFrozenGet(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetFrozenGet(params))) + return this + }, + /** + * Add a clear state call to the StateAssetHoldingContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as StateAssetHoldingContractComposer + } +} +export type StateAssetHoldingContractComposer = { + /** + * Calls the verify_asset_holding_get(address,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetHoldingGet(params?: CallParams): StateAssetHoldingContractComposer<[...TReturns, StateAssetHoldingContractReturns['verify_asset_holding_get(address,uint64)uint64'] | undefined]> + + /** + * Calls the verify_asset_frozen_get(address,uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetFrozenGet(params?: CallParams): StateAssetHoldingContractComposer<[...TReturns, StateAssetHoldingContractReturns['verify_asset_frozen_get(address,uint64)bool'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the StateAssetHoldingContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): StateAssetHoldingContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): StateAssetHoldingContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type StateAssetHoldingContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/StateAssetParamsContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/StateAssetParamsContract.ts new file mode 100644 index 0000000..b627ecf --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/StateAssetParamsContract.ts @@ -0,0 +1,1319 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"StateAssetParamsContract","structs":{},"methods":[{"name":"verify_asset_params_get_total","args":[{"type":"uint64","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_asset_params_get_decimals","args":[{"type":"uint64","name":"a"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_asset_params_get_default_frozen","args":[{"type":"uint64","name":"a"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_asset_params_get_unit_name","args":[{"type":"uint64","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_asset_params_get_name","args":[{"type":"uint64","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_asset_params_get_url","args":[{"type":"uint64","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_asset_params_get_metadata_hash","args":[{"type":"uint64","name":"a"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_asset_params_get_manager","args":[{"type":"uint64","name":"a"}],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_asset_params_get_reserve","args":[{"type":"uint64","name":"a"}],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_asset_params_get_freeze","args":[{"type":"uint64","name":"a"}],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_asset_params_get_clawback","args":[{"type":"uint64","name":"a"}],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"verify_asset_params_get_creator","args":[{"type":"uint64","name":"a"}],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[142,169,196,230,264,298,332,366,392,418,444,470],"errorMessage":"expected exists by index to match"},{"pc":[140,167,194,228,262,296,330,364,390,416,442,468],"errorMessage":"expected value by index to match"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNzQKICAgIC8vIGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweGYwNWRhN2E0IDB4YzBlOWMzMTUgMHhkODUyODI3MyAweGY0NDY4YWQ5IDB4MjI5ZDEyZjcgMHhkZjUzNGY3YiAweGUwNTBiNWE5IDB4OGIyYTJkNTggMHhlZTE1YzRmNyAweDE1NzU0NGZmIDB4MTA0OTJjMDcgMHg1MjI5ZmEzNyAvLyBtZXRob2QgInZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3RvdGFsKHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2RlY2ltYWxzKHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2RlZmF1bHRfZnJvemVuKHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWUodWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbmFtZSh1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91cmwodWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWV0YWRhdGFfaGFzaCh1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9tYW5hZ2VyKHVpbnQ2NClhZGRyZXNzIiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9yZXNlcnZlKHVpbnQ2NClhZGRyZXNzIiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9mcmVlemUodWludDY0KWFkZHJlc3MiLCBtZXRob2QgInZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2NsYXdiYWNrKHVpbnQ2NClhZGRyZXNzIiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jcmVhdG9yKHVpbnQ2NClhZGRyZXNzIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfdG90YWwgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVjaW1hbHMgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVmYXVsdF9mcm96ZW4gdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfdW5pdF9uYW1lIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X25hbWUgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfdXJsIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21ldGFkYXRhX2hhc2ggdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWFuYWdlciB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9yZXNlcnZlIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2ZyZWV6ZSB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jbGF3YmFjayB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jcmVhdG9yCiAgICBlcnIKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QudmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfdG90YWxbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF90b3RhbDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTc3CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfdG90YWwoYSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRUb3RhbAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25fYXJncygxKSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxNzgKICAgIC8vIHZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXggPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF90b3RhbChfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRUb3RhbAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE3OQogICAgLy8gYXNzZXJ0IHZhbHVlID09IHZhbHVlX2luZGV4LCAiZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2giCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTgwCiAgICAvLyBhc3NlcnQgZXhpc3RzID09IGV4aXN0c19pbmRleCwgImV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QudmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVjaW1hbHNbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWNpbWFsczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTg1CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfZGVjaW1hbHMoYSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25fYXJncygxKSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxODYKICAgIC8vIHZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXggPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF9kZWNpbWFscyhfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE4NwogICAgLy8gYXNzZXJ0IHZhbHVlID09IHZhbHVlX2luZGV4LCAiZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2giCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTg4CiAgICAvLyBhc3NlcnQgZXhpc3RzID09IGV4aXN0c19pbmRleCwgImV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QudmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVmYXVsdF9mcm96ZW5bcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWZhdWx0X2Zyb3plbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxOTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTkzCiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfZGVmYXVsdF9mcm96ZW4oYSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWZhdWx0RnJvemVuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE5NAogICAgLy8gdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleCA9IG9wLkFzc2V0UGFyYW1zR2V0LmFzc2V0X2RlZmF1bHRfZnJvemVuKF9nZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlZmF1bHRGcm96ZW4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToxOTUKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSB2YWx1ZV9pbmRleCwgImV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE5NgogICAgLy8gYXNzZXJ0IGV4aXN0cyA9PSBleGlzdHNfaW5kZXgsICJleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjE5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHB1c2hieXRlcyAweDAwCiAgICBwdXNoaW50IDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIwMQogICAgLy8gdmFsdWUsIGV4aXN0cyA9IG9wLkFzc2V0UGFyYW1zR2V0LmFzc2V0X3VuaXRfbmFtZShhKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIwMgogICAgLy8gdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleCA9IG9wLkFzc2V0UGFyYW1zR2V0LmFzc2V0X3VuaXRfbmFtZShfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRVbml0TmFtZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIwMwogICAgLy8gYXNzZXJ0IHZhbHVlID09IHZhbHVlX2luZGV4LCAiZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2giCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjA0CiAgICAvLyBhc3NlcnQgZXhpc3RzID09IGV4aXN0c19pbmRleCwgImV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MTk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVPcHMuY29udHJhY3QuU3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X25hbWVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9uYW1lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIwNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMDkKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF9uYW1lKGEpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25fYXJncygxKSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMTAKICAgIC8vIHZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXggPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF9uYW1lKF9nZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE5hbWUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMTEKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSB2YWx1ZV9pbmRleCwgImV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxMgogICAgLy8gYXNzZXJ0IGV4aXN0cyA9PSBleGlzdHNfaW5kZXgsICJleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIwNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91cmxbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91cmw6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxNwogICAgLy8gdmFsdWUsIGV4aXN0cyA9IG9wLkFzc2V0UGFyYW1zR2V0LmFzc2V0X3VybChhKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVSTAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25fYXJncygxKSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMTgKICAgIC8vIHZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXggPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF91cmwoX2dldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VVJMCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjE5CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMjAKICAgIC8vIGFzc2VydCBleGlzdHMgPT0gZXhpc3RzX2luZGV4LCAiZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU9wcy5jb250cmFjdC5TdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QudmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWV0YWRhdGFfaGFzaFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21ldGFkYXRhX2hhc2g6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIyNQogICAgLy8gdmFsdWUsIGV4aXN0cyA9IG9wLkFzc2V0UGFyYW1zR2V0LmFzc2V0X21ldGFkYXRhX2hhc2goYSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNZXRhZGF0YUhhc2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjI2CiAgICAvLyB2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4ID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfbWV0YWRhdGFfaGFzaChfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNZXRhZGF0YUhhc2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMjcKICAgIC8vIGFzc2VydCB2YWx1ZSA9PSB2YWx1ZV9pbmRleCwgImV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIyOAogICAgLy8gYXNzZXJ0IGV4aXN0cyA9PSBleGlzdHNfaW5kZXgsICJleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2giCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9tYW5hZ2VyW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWFuYWdlcjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjMzCiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfbWFuYWdlcihhKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE1hbmFnZXIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjM0CiAgICAvLyB2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4ID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfbWFuYWdlcihfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNYW5hZ2VyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjM1CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMzYKICAgIC8vIGFzc2VydCBleGlzdHMgPT0gZXhpc3RzX2luZGV4LCAiZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9yZXNlcnZlW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfcmVzZXJ2ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjQxCiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfcmVzZXJ2ZShhKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFJlc2VydmUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjQyCiAgICAvLyB2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4ID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfcmVzZXJ2ZShfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRSZXNlcnZlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjQzCiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNDQKICAgIC8vIGFzc2VydCBleGlzdHMgPT0gZXhpc3RzX2luZGV4LCAiZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9mcmVlemVbcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9mcmVlemU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjI0OQogICAgLy8gdmFsdWUsIGV4aXN0cyA9IG9wLkFzc2V0UGFyYW1zR2V0LmFzc2V0X2ZyZWV6ZShhKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldEZyZWV6ZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjIxCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25fYXJncygxKSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNTAKICAgIC8vIHZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXggPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF9mcmVlemUoX2dldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RnJlZXplCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjUxCiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNTIKICAgIC8vIGFzc2VydCBleGlzdHMgPT0gZXhpc3RzX2luZGV4LCAiZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jbGF3YmFja1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2NsYXdiYWNrOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjI1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNTcKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF9jbGF3YmFjayhhKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENsYXdiYWNrCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjEKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbl9hcmdzKDEpKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlT3BzL2NvbnRyYWN0LnB5OjI1OAogICAgLy8gdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleCA9IG9wLkFzc2V0UGFyYW1zR2V0LmFzc2V0X2NsYXdiYWNrKF9nZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENsYXdiYWNrCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjU5CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNjAKICAgIC8vIGFzc2VydCBleGlzdHMgPT0gZXhpc3RzX2luZGV4LCAiZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLlN0YXRlT3BzLmNvbnRyYWN0LlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jcmVhdG9yW3JvdXRpbmddKCkgLT4gdm9pZDoKdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY3JlYXRvcjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjY1CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfY3JlYXRvcihhKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyMQogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMSkpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjY2CiAgICAvLyB2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4ID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfY3JlYXRvcihfZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVPcHMvY29udHJhY3QucHk6MjY3CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gdmFsdWVfaW5kZXgsICJleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCIKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNjgKICAgIC8vIGFzc2VydCBleGlzdHMgPT0gZXhpc3RzX2luZGV4LCAiZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU9wcy9jb250cmFjdC5weToyNjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyABASYBBBUffHUxG0EAYzEZFEQxGESCDATwXaekBMDpwxUE2FKCcwT0RorZBCKdEvcE31NPewTgULWpBIsqLVgE7hXE9wQVdUT/BBBJLAcEUin6NzYaAI4MAAkAJAA/AGEAgwClAMcA6QEDAR0BNwFRADEZFDEYFBBDNhoBF3EANhoBF3EASwNPAhJEEkQWKExQsCJDNhoBF3EBNhoBF3EBSwNPAhJEEkQWKExQsCJDNhoBF3ECNhoBF3ECSwNPAhJEEkSAAQCBAE8CVChMULAiQzYaARdxAzYaARdxA0sDTwISRBJESRUWVwYCTFAoTFCwIkM2GgEXcQQ2GgEXcQRLA08CEkQSREkVFlcGAkxQKExQsCJDNhoBF3EFNhoBF3EFSwNPAhJEEkRJFRZXBgJMUChMULAiQzYaARdxBjYaARdxBksDTwISRBJESRUWVwYCTFAoTFCwIkM2GgEXcQc2GgEXcQdLA08CEkQSRChMULAiQzYaARdxCDYaARdxCEsDTwISRBJEKExQsCJDNhoBF3EJNhoBF3EJSwNPAhJEEkQoTFCwIkM2GgEXcQo2GgEXcQpLA08CEkQSRChMULAiQzYaARdxCzYaARdxC0sDTwISRBJEKExQsCJD","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the StateAssetParamsContract contract + */ +export type StateAssetParamsContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'verify_asset_params_get_total(uint64)uint64': { + a: bigint | number + } + 'verify_asset_params_get_decimals(uint64)uint64': { + a: bigint | number + } + 'verify_asset_params_get_default_frozen(uint64)bool': { + a: bigint | number + } + 'verify_asset_params_get_unit_name(uint64)byte[]': { + a: bigint | number + } + 'verify_asset_params_get_name(uint64)byte[]': { + a: bigint | number + } + 'verify_asset_params_get_url(uint64)byte[]': { + a: bigint | number + } + 'verify_asset_params_get_metadata_hash(uint64)byte[]': { + a: bigint | number + } + 'verify_asset_params_get_manager(uint64)address': { + a: bigint | number + } + 'verify_asset_params_get_reserve(uint64)address': { + a: bigint | number + } + 'verify_asset_params_get_freeze(uint64)address': { + a: bigint | number + } + 'verify_asset_params_get_clawback(uint64)address': { + a: bigint | number + } + 'verify_asset_params_get_creator(uint64)address': { + a: bigint | number + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'verify_asset_params_get_total(uint64)uint64': [a: bigint | number] + 'verify_asset_params_get_decimals(uint64)uint64': [a: bigint | number] + 'verify_asset_params_get_default_frozen(uint64)bool': [a: bigint | number] + 'verify_asset_params_get_unit_name(uint64)byte[]': [a: bigint | number] + 'verify_asset_params_get_name(uint64)byte[]': [a: bigint | number] + 'verify_asset_params_get_url(uint64)byte[]': [a: bigint | number] + 'verify_asset_params_get_metadata_hash(uint64)byte[]': [a: bigint | number] + 'verify_asset_params_get_manager(uint64)address': [a: bigint | number] + 'verify_asset_params_get_reserve(uint64)address': [a: bigint | number] + 'verify_asset_params_get_freeze(uint64)address': [a: bigint | number] + 'verify_asset_params_get_clawback(uint64)address': [a: bigint | number] + 'verify_asset_params_get_creator(uint64)address': [a: bigint | number] + } +} + +/** + * The return type for each method + */ +export type StateAssetParamsContractReturns = { + 'verify_asset_params_get_total(uint64)uint64': bigint + 'verify_asset_params_get_decimals(uint64)uint64': bigint + 'verify_asset_params_get_default_frozen(uint64)bool': boolean + 'verify_asset_params_get_unit_name(uint64)byte[]': Uint8Array + 'verify_asset_params_get_name(uint64)byte[]': Uint8Array + 'verify_asset_params_get_url(uint64)byte[]': Uint8Array + 'verify_asset_params_get_metadata_hash(uint64)byte[]': Uint8Array + 'verify_asset_params_get_manager(uint64)address': string + 'verify_asset_params_get_reserve(uint64)address': string + 'verify_asset_params_get_freeze(uint64)address': string + 'verify_asset_params_get_clawback(uint64)address': string + 'verify_asset_params_get_creator(uint64)address': string +} + +/** + * Defines the types of available calls and state of the StateAssetParamsContract smart contract. + */ +export type StateAssetParamsContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'verify_asset_params_get_total(uint64)uint64' | 'verify_asset_params_get_total', { + argsObj: StateAssetParamsContractArgs['obj']['verify_asset_params_get_total(uint64)uint64'] + argsTuple: StateAssetParamsContractArgs['tuple']['verify_asset_params_get_total(uint64)uint64'] + returns: StateAssetParamsContractReturns['verify_asset_params_get_total(uint64)uint64'] + }> + & Record<'verify_asset_params_get_decimals(uint64)uint64' | 'verify_asset_params_get_decimals', { + argsObj: StateAssetParamsContractArgs['obj']['verify_asset_params_get_decimals(uint64)uint64'] + argsTuple: StateAssetParamsContractArgs['tuple']['verify_asset_params_get_decimals(uint64)uint64'] + returns: StateAssetParamsContractReturns['verify_asset_params_get_decimals(uint64)uint64'] + }> + & Record<'verify_asset_params_get_default_frozen(uint64)bool' | 'verify_asset_params_get_default_frozen', { + argsObj: StateAssetParamsContractArgs['obj']['verify_asset_params_get_default_frozen(uint64)bool'] + argsTuple: StateAssetParamsContractArgs['tuple']['verify_asset_params_get_default_frozen(uint64)bool'] + returns: StateAssetParamsContractReturns['verify_asset_params_get_default_frozen(uint64)bool'] + }> + & Record<'verify_asset_params_get_unit_name(uint64)byte[]' | 'verify_asset_params_get_unit_name', { + argsObj: StateAssetParamsContractArgs['obj']['verify_asset_params_get_unit_name(uint64)byte[]'] + argsTuple: StateAssetParamsContractArgs['tuple']['verify_asset_params_get_unit_name(uint64)byte[]'] + returns: StateAssetParamsContractReturns['verify_asset_params_get_unit_name(uint64)byte[]'] + }> + & Record<'verify_asset_params_get_name(uint64)byte[]' | 'verify_asset_params_get_name', { + argsObj: StateAssetParamsContractArgs['obj']['verify_asset_params_get_name(uint64)byte[]'] + argsTuple: StateAssetParamsContractArgs['tuple']['verify_asset_params_get_name(uint64)byte[]'] + returns: StateAssetParamsContractReturns['verify_asset_params_get_name(uint64)byte[]'] + }> + & Record<'verify_asset_params_get_url(uint64)byte[]' | 'verify_asset_params_get_url', { + argsObj: StateAssetParamsContractArgs['obj']['verify_asset_params_get_url(uint64)byte[]'] + argsTuple: StateAssetParamsContractArgs['tuple']['verify_asset_params_get_url(uint64)byte[]'] + returns: StateAssetParamsContractReturns['verify_asset_params_get_url(uint64)byte[]'] + }> + & Record<'verify_asset_params_get_metadata_hash(uint64)byte[]' | 'verify_asset_params_get_metadata_hash', { + argsObj: StateAssetParamsContractArgs['obj']['verify_asset_params_get_metadata_hash(uint64)byte[]'] + argsTuple: StateAssetParamsContractArgs['tuple']['verify_asset_params_get_metadata_hash(uint64)byte[]'] + returns: StateAssetParamsContractReturns['verify_asset_params_get_metadata_hash(uint64)byte[]'] + }> + & Record<'verify_asset_params_get_manager(uint64)address' | 'verify_asset_params_get_manager', { + argsObj: StateAssetParamsContractArgs['obj']['verify_asset_params_get_manager(uint64)address'] + argsTuple: StateAssetParamsContractArgs['tuple']['verify_asset_params_get_manager(uint64)address'] + returns: StateAssetParamsContractReturns['verify_asset_params_get_manager(uint64)address'] + }> + & Record<'verify_asset_params_get_reserve(uint64)address' | 'verify_asset_params_get_reserve', { + argsObj: StateAssetParamsContractArgs['obj']['verify_asset_params_get_reserve(uint64)address'] + argsTuple: StateAssetParamsContractArgs['tuple']['verify_asset_params_get_reserve(uint64)address'] + returns: StateAssetParamsContractReturns['verify_asset_params_get_reserve(uint64)address'] + }> + & Record<'verify_asset_params_get_freeze(uint64)address' | 'verify_asset_params_get_freeze', { + argsObj: StateAssetParamsContractArgs['obj']['verify_asset_params_get_freeze(uint64)address'] + argsTuple: StateAssetParamsContractArgs['tuple']['verify_asset_params_get_freeze(uint64)address'] + returns: StateAssetParamsContractReturns['verify_asset_params_get_freeze(uint64)address'] + }> + & Record<'verify_asset_params_get_clawback(uint64)address' | 'verify_asset_params_get_clawback', { + argsObj: StateAssetParamsContractArgs['obj']['verify_asset_params_get_clawback(uint64)address'] + argsTuple: StateAssetParamsContractArgs['tuple']['verify_asset_params_get_clawback(uint64)address'] + returns: StateAssetParamsContractReturns['verify_asset_params_get_clawback(uint64)address'] + }> + & Record<'verify_asset_params_get_creator(uint64)address' | 'verify_asset_params_get_creator', { + argsObj: StateAssetParamsContractArgs['obj']['verify_asset_params_get_creator(uint64)address'] + argsTuple: StateAssetParamsContractArgs['tuple']['verify_asset_params_get_creator(uint64)address'] + returns: StateAssetParamsContractReturns['verify_asset_params_get_creator(uint64)address'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type StateAssetParamsContractSignatures = keyof StateAssetParamsContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type StateAssetParamsContractNonVoidMethodSignatures = keyof StateAssetParamsContractTypes['methods'] extends infer T ? T extends keyof StateAssetParamsContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the StateAssetParamsContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = StateAssetParamsContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the StateAssetParamsContract smart contract to the method's return type + */ +export type MethodReturn = StateAssetParamsContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type StateAssetParamsContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type StateAssetParamsContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: StateAssetParamsContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the StateAssetParamsContract smart contract + */ +export abstract class StateAssetParamsContractParamsFactory { + /** + * Constructs a no op call for the verify_asset_params_get_total(uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetParamsGetTotal(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_params_get_total(uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_asset_params_get_decimals(uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetParamsGetDecimals(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_params_get_decimals(uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_asset_params_get_default_frozen(uint64)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetParamsGetDefaultFrozen(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_params_get_default_frozen(uint64)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_asset_params_get_unit_name(uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetParamsGetUnitName(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_params_get_unit_name(uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_asset_params_get_name(uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetParamsGetName(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_params_get_name(uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_asset_params_get_url(uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetParamsGetUrl(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_params_get_url(uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_asset_params_get_metadata_hash(uint64)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetParamsGetMetadataHash(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_params_get_metadata_hash(uint64)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_asset_params_get_manager(uint64)address ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetParamsGetManager(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_params_get_manager(uint64)address' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_asset_params_get_reserve(uint64)address ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetParamsGetReserve(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_params_get_reserve(uint64)address' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_asset_params_get_freeze(uint64)address ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetParamsGetFreeze(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_params_get_freeze(uint64)address' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_asset_params_get_clawback(uint64)address ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetParamsGetClawback(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_params_get_clawback(uint64)address' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } + /** + * Constructs a no op call for the verify_asset_params_get_creator(uint64)address ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verifyAssetParamsGetCreator(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify_asset_params_get_creator(uint64)address' as const, + args: Array.isArray(params.args) ? params.args : [params.args.a], + } + } +} + +/** + * A factory to create and deploy one or more instance of the StateAssetParamsContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class StateAssetParamsContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `StateAssetParamsContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new StateAssetParamsContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new StateAssetParamsContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the StateAssetParamsContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: StateAssetParamsContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new StateAssetParamsContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAssetParamsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAssetParamsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateAssetParamsContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new StateAssetParamsContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the StateAssetParamsContract smart contract + */ +export class StateAssetParamsContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `StateAssetParamsContractClient` + * + * @param appClient An `AppClient` instance which has been created with the StateAssetParamsContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `StateAssetParamsContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `StateAssetParamsContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new StateAssetParamsContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `StateAssetParamsContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new StateAssetParamsContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the StateAssetParamsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_total(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetParamsGetTotal: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetTotal(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_decimals(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetParamsGetDecimals: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetDecimals(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_default_frozen(uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetParamsGetDefaultFrozen: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetDefaultFrozen(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_unit_name(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetParamsGetUnitName: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetUnitName(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_name(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetParamsGetName: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetName(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_url(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetParamsGetUrl: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetUrl(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_metadata_hash(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetParamsGetMetadataHash: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetMetadataHash(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_manager(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetParamsGetManager: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetManager(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_reserve(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetParamsGetReserve: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetReserve(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_freeze(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetParamsGetFreeze: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetFreeze(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_clawback(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetParamsGetClawback: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetClawback(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_creator(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verifyAssetParamsGetCreator: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetCreator(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the StateAssetParamsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_total(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetParamsGetTotal: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetTotal(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_decimals(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetParamsGetDecimals: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetDecimals(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_default_frozen(uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetParamsGetDefaultFrozen: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetDefaultFrozen(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_unit_name(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetParamsGetUnitName: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetUnitName(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_name(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetParamsGetName: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetName(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_url(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetParamsGetUrl: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetUrl(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_metadata_hash(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetParamsGetMetadataHash: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetMetadataHash(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_manager(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetParamsGetManager: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetManager(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_reserve(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetParamsGetReserve: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetReserve(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_freeze(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetParamsGetFreeze: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetFreeze(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_clawback(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetParamsGetClawback: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetClawback(params)) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_creator(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verifyAssetParamsGetCreator: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetCreator(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the StateAssetParamsContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_total(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetParamsGetTotal: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetTotal(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetParamsContractReturns['verify_asset_params_get_total(uint64)uint64'])} + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_decimals(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetParamsGetDecimals: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetDecimals(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetParamsContractReturns['verify_asset_params_get_decimals(uint64)uint64'])} + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_default_frozen(uint64)bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetParamsGetDefaultFrozen: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetDefaultFrozen(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetParamsContractReturns['verify_asset_params_get_default_frozen(uint64)bool'])} + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_unit_name(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetParamsGetUnitName: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetUnitName(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetParamsContractReturns['verify_asset_params_get_unit_name(uint64)byte[]'])} + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_name(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetParamsGetName: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetName(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetParamsContractReturns['verify_asset_params_get_name(uint64)byte[]'])} + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_url(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetParamsGetUrl: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetUrl(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetParamsContractReturns['verify_asset_params_get_url(uint64)byte[]'])} + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_metadata_hash(uint64)byte[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetParamsGetMetadataHash: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetMetadataHash(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetParamsContractReturns['verify_asset_params_get_metadata_hash(uint64)byte[]'])} + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_manager(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetParamsGetManager: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetManager(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetParamsContractReturns['verify_asset_params_get_manager(uint64)address'])} + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_reserve(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetParamsGetReserve: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetReserve(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetParamsContractReturns['verify_asset_params_get_reserve(uint64)address'])} + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_freeze(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetParamsGetFreeze: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetFreeze(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetParamsContractReturns['verify_asset_params_get_freeze(uint64)address'])} + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_clawback(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetParamsGetClawback: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetClawback(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetParamsContractReturns['verify_asset_params_get_clawback(uint64)address'])} + }, + + /** + * Makes a call to the StateAssetParamsContract smart contract using the `verify_asset_params_get_creator(uint64)address` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verifyAssetParamsGetCreator: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StateAssetParamsContractParamsFactory.verifyAssetParamsGetCreator(params)) + return {...result, return: result.return as unknown as (undefined | StateAssetParamsContractReturns['verify_asset_params_get_creator(uint64)address'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new StateAssetParamsContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current StateAssetParamsContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): StateAssetParamsContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify_asset_params_get_total(uint64)uint64 method call against the StateAssetParamsContract contract + */ + verifyAssetParamsGetTotal(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetParamsGetTotal(params))) + return this + }, + /** + * Add a verify_asset_params_get_decimals(uint64)uint64 method call against the StateAssetParamsContract contract + */ + verifyAssetParamsGetDecimals(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetParamsGetDecimals(params))) + return this + }, + /** + * Add a verify_asset_params_get_default_frozen(uint64)bool method call against the StateAssetParamsContract contract + */ + verifyAssetParamsGetDefaultFrozen(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetParamsGetDefaultFrozen(params))) + return this + }, + /** + * Add a verify_asset_params_get_unit_name(uint64)byte[] method call against the StateAssetParamsContract contract + */ + verifyAssetParamsGetUnitName(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetParamsGetUnitName(params))) + return this + }, + /** + * Add a verify_asset_params_get_name(uint64)byte[] method call against the StateAssetParamsContract contract + */ + verifyAssetParamsGetName(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetParamsGetName(params))) + return this + }, + /** + * Add a verify_asset_params_get_url(uint64)byte[] method call against the StateAssetParamsContract contract + */ + verifyAssetParamsGetUrl(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetParamsGetUrl(params))) + return this + }, + /** + * Add a verify_asset_params_get_metadata_hash(uint64)byte[] method call against the StateAssetParamsContract contract + */ + verifyAssetParamsGetMetadataHash(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetParamsGetMetadataHash(params))) + return this + }, + /** + * Add a verify_asset_params_get_manager(uint64)address method call against the StateAssetParamsContract contract + */ + verifyAssetParamsGetManager(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetParamsGetManager(params))) + return this + }, + /** + * Add a verify_asset_params_get_reserve(uint64)address method call against the StateAssetParamsContract contract + */ + verifyAssetParamsGetReserve(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetParamsGetReserve(params))) + return this + }, + /** + * Add a verify_asset_params_get_freeze(uint64)address method call against the StateAssetParamsContract contract + */ + verifyAssetParamsGetFreeze(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetParamsGetFreeze(params))) + return this + }, + /** + * Add a verify_asset_params_get_clawback(uint64)address method call against the StateAssetParamsContract contract + */ + verifyAssetParamsGetClawback(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetParamsGetClawback(params))) + return this + }, + /** + * Add a verify_asset_params_get_creator(uint64)address method call against the StateAssetParamsContract contract + */ + verifyAssetParamsGetCreator(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verifyAssetParamsGetCreator(params))) + return this + }, + /** + * Add a clear state call to the StateAssetParamsContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as StateAssetParamsContractComposer + } +} +export type StateAssetParamsContractComposer = { + /** + * Calls the verify_asset_params_get_total(uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetParamsGetTotal(params?: CallParams): StateAssetParamsContractComposer<[...TReturns, StateAssetParamsContractReturns['verify_asset_params_get_total(uint64)uint64'] | undefined]> + + /** + * Calls the verify_asset_params_get_decimals(uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetParamsGetDecimals(params?: CallParams): StateAssetParamsContractComposer<[...TReturns, StateAssetParamsContractReturns['verify_asset_params_get_decimals(uint64)uint64'] | undefined]> + + /** + * Calls the verify_asset_params_get_default_frozen(uint64)bool ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetParamsGetDefaultFrozen(params?: CallParams): StateAssetParamsContractComposer<[...TReturns, StateAssetParamsContractReturns['verify_asset_params_get_default_frozen(uint64)bool'] | undefined]> + + /** + * Calls the verify_asset_params_get_unit_name(uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetParamsGetUnitName(params?: CallParams): StateAssetParamsContractComposer<[...TReturns, StateAssetParamsContractReturns['verify_asset_params_get_unit_name(uint64)byte[]'] | undefined]> + + /** + * Calls the verify_asset_params_get_name(uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetParamsGetName(params?: CallParams): StateAssetParamsContractComposer<[...TReturns, StateAssetParamsContractReturns['verify_asset_params_get_name(uint64)byte[]'] | undefined]> + + /** + * Calls the verify_asset_params_get_url(uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetParamsGetUrl(params?: CallParams): StateAssetParamsContractComposer<[...TReturns, StateAssetParamsContractReturns['verify_asset_params_get_url(uint64)byte[]'] | undefined]> + + /** + * Calls the verify_asset_params_get_metadata_hash(uint64)byte[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetParamsGetMetadataHash(params?: CallParams): StateAssetParamsContractComposer<[...TReturns, StateAssetParamsContractReturns['verify_asset_params_get_metadata_hash(uint64)byte[]'] | undefined]> + + /** + * Calls the verify_asset_params_get_manager(uint64)address ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetParamsGetManager(params?: CallParams): StateAssetParamsContractComposer<[...TReturns, StateAssetParamsContractReturns['verify_asset_params_get_manager(uint64)address'] | undefined]> + + /** + * Calls the verify_asset_params_get_reserve(uint64)address ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetParamsGetReserve(params?: CallParams): StateAssetParamsContractComposer<[...TReturns, StateAssetParamsContractReturns['verify_asset_params_get_reserve(uint64)address'] | undefined]> + + /** + * Calls the verify_asset_params_get_freeze(uint64)address ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetParamsGetFreeze(params?: CallParams): StateAssetParamsContractComposer<[...TReturns, StateAssetParamsContractReturns['verify_asset_params_get_freeze(uint64)address'] | undefined]> + + /** + * Calls the verify_asset_params_get_clawback(uint64)address ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetParamsGetClawback(params?: CallParams): StateAssetParamsContractComposer<[...TReturns, StateAssetParamsContractReturns['verify_asset_params_get_clawback(uint64)address'] | undefined]> + + /** + * Calls the verify_asset_params_get_creator(uint64)address ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verifyAssetParamsGetCreator(params?: CallParams): StateAssetParamsContractComposer<[...TReturns, StateAssetParamsContractReturns['verify_asset_params_get_creator(uint64)address'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the StateAssetParamsContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): StateAssetParamsContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): StateAssetParamsContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type StateAssetParamsContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/StateMutations.ts b/examples/p-py/projects/p-py-frontend/src/contracts/StateMutations.ts new file mode 100644 index 0000000..01c58bc --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/StateMutations.ts @@ -0,0 +1,880 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"StateMutations","structs":{},"methods":[{"name":"append","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"modify","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get","args":[],"returns":{"type":"(uint64,string)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":3},"local":{"ints":0,"bytes":1}},"keys":{"global":{"no_proxy":{"keyType":"AVMString","valueType":"(uint64,string)[]","key":"bm9fcHJveHk="},"glob_assign":{"keyType":"AVMString","valueType":"(uint64,string)[]","key":"Z2xvYl9hc3NpZ24="},"glob":{"keyType":"AVMString","valueType":"(uint64,string)[]","key":"Z2xvYg=="}},"local":{"loc":{"keyType":"AVMString","valueType":"(uint64,string)[]","key":"bG9j"}},"box":{"box":{"keyType":"AVMString","valueType":"(uint64,string)[]","key":"Ym94"}}},"maps":{"global":{},"local":{},"box":{"map":{"keyType":"address","valueType":"(uint64,string)[]","prefix":"bWFw"}}}},"bareActions":{"create":["NoOp"],"call":["OptIn"]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[526,795,931],"errorMessage":"check self.box exists"},{"pc":[481,684,921],"errorMessage":"check self.glob exists"},{"pc":[440,577,916],"errorMessage":"check self.glob_assign exists"},{"pc":[506,742,928],"errorMessage":"check self.loc exists for account"},{"pc":[553,855,938],"errorMessage":"check self.map entry exists"},{"pc":[460,630,912],"errorMessage":"check self.no_proxy exists"},{"pc":[962],"errorMessage":"expected box == no_proxy"},{"pc":[950],"errorMessage":"expected global == no_proxy"},{"pc":[944],"errorMessage":"expected global assign == no_proxy"},{"pc":[956],"errorMessage":"expected local == no_proxy"},{"pc":[966],"errorMessage":"expected map == no_proxy"},{"pc":[593,619,646,672,700,726,758,784,811,837,871,897],"errorMessage":"index access is out of bounds"},{"pc":[585,638,692,750,803,863],"errorMessage":"invalid array length header"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMiA4CiAgICBieXRlY2Jsb2NrICJib3giICJub19wcm94eSIgMHgwMDAwICJnbG9iX2Fzc2lnbiIgImdsb2IiICJsb2MiIDB4MDAwMjAwMDAwMDAwMDAwMDAwMDEwMDBhMDAwMzYyNjE3YSAweDAwMDg2ZDZmNjQ2OTY2Njk2NTY0ICJtYXAiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6MjQKICAgIC8vIHNlbGYubm9fcHJveHkgPSBNeUFycmF5KCkKICAgIGJ5dGVjXzEgLy8gIm5vX3Byb3h5IgogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weToyMgogICAgLy8gY2xhc3MgU3RhdGVNdXRhdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxMgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4NTI2ZThiYmYgMHg5NWZlZjEzZCAweDBjMjk0NDRiIC8vIG1ldGhvZCAiYXBwZW5kKCl2b2lkIiwgbWV0aG9kICJtb2RpZnkoKXZvaWQiLCBtZXRob2QgImdldCgpKHVpbnQ2NCxzdHJpbmcpW10iCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBhcHBlbmQgbW9kaWZ5IGdldAogICAgZXJyCgptYWluX2JhcmVfcm91dGluZ0AxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weToyMgogICAgLy8gY2xhc3MgU3RhdGVNdXRhdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHN3aXRjaCBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDEzIG1haW5fb3B0X2luQDE0CiAgICBlcnIKCm1haW5fb3B0X2luQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjMxCiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJPcHRJbiJdKQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjMzCiAgICAvLyBzZWxmLmdsb2JfYXNzaWduLnZhbHVlID0gTXlBcnJheSgpCiAgICBieXRlY18zIC8vICJnbG9iX2Fzc2lnbiIKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjM0CiAgICAvLyBzZWxmLmdsb2IudmFsdWUgPSBNeUFycmF5KCkKICAgIGJ5dGVjIDQgLy8gImdsb2IiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6MzMKICAgIC8vIHNlbGYuZ2xvYl9hc3NpZ24udmFsdWUgPSBNeUFycmF5KCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6MzQKICAgIC8vIHNlbGYuZ2xvYi52YWx1ZSA9IE15QXJyYXkoKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTozNQogICAgLy8gc2VsZi5ib3gudmFsdWUgPSBNeUFycmF5KCkKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjMzCiAgICAvLyBzZWxmLmdsb2JfYXNzaWduLnZhbHVlID0gTXlBcnJheSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjM1CiAgICAvLyBzZWxmLmJveC52YWx1ZSA9IE15QXJyYXkoKQogICAgYm94X3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjM2CiAgICAvLyBzZWxmLmxvY1tUeG4uc2VuZGVyXSA9IE15QXJyYXkoKQogICAgdHhuIFNlbmRlcgogICAgYnl0ZWMgNSAvLyAibG9jIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjMzCiAgICAvLyBzZWxmLmdsb2JfYXNzaWduLnZhbHVlID0gTXlBcnJheSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjM2CiAgICAvLyBzZWxmLmxvY1tUeG4uc2VuZGVyXSA9IE15QXJyYXkoKQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjM3CiAgICAvLyBzZWxmLm1hcFtUeG4uc2VuZGVyXSA9IE15QXJyYXkoKQogICAgYnl0ZWMgOCAvLyAibWFwIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjMzCiAgICAvLyBzZWxmLmdsb2JfYXNzaWduLnZhbHVlID0gTXlBcnJheSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjM3CiAgICAvLyBzZWxmLm1hcFtUeG4uc2VuZGVyXSA9IE15QXJyYXkoKQogICAgYm94X3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjMxCiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJPcHRJbiJdKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxMzoKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICByZXR1cm4KCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQoYXJyYXlfaXRlbXNfY291bnQ6IHVpbnQ2NCwgYXJyYXlfaGVhZF9hbmRfdGFpbDogYnl0ZXMsIG5ld19pdGVtc19jb3VudDogdWludDY0LCBuZXdfaGVhZF9hbmRfdGFpbDogYnl0ZXMpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQ6CiAgICBwcm90byA0IDEKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBmcmFtZV9kaWcgLTQKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBpbnRjXzAgLy8gMAoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJAMToKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMwogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA0CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgMgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMQogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgNAogICAgYiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQ6CiAgICBmcmFtZV9kaWcgLTMKICAgIGxlbgogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA0CgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckA1OgogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAyCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAwCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDUKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JAODoKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0yCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDAKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIF9wdXlhX2xpYi5hcmM0LmR5bmFtaWNfYXJyYXlfcmVwbGFjZV9keW5hbWljX2VsZW1lbnQoc291cmNlOiBieXRlcywgbmV3X2l0ZW06IGJ5dGVzLCBpbmRleDogdWludDY0KSAtPiBieXRlczoKZHluYW1pY19hcnJheV9yZXBsYWNlX2R5bmFtaWNfZWxlbWVudDoKICAgIHByb3RvIDMgMQogICAgZnJhbWVfZGlnIC0zCiAgICBzdWJzdHJpbmcgMCAyCiAgICBkdXAKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMwogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAyCiAgICBkaWcgMQogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAzCiAgICBsZW4KICAgIGRpZyA1CiAgICBmcmFtZV9kaWcgLTEKICAgIC0KICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkaWcgMQogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZHVwCiAgICBkaWcgNAogICAgLQogICAgY292ZXIgNgogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGNvdmVyIDYKICAgIGRpZyA0CiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA1CiAgICBzdWJzdHJpbmczCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMwogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBjb3ZlciAyCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgc3dhcAoKZHluYW1pY19hcnJheV9yZXBsYWNlX2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDI6CiAgICBmcmFtZV9kaWcgNQogICAgZnJhbWVfZGlnIDQKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfcmVwbGFjZV9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDUKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGZyYW1lX2RpZyA1CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgMgogICAgKwogICAgZnJhbWVfZGlnIDEKICAgIC0KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBkaWcgMgogICAgc3dhcAogICAgcmVwbGFjZTMKICAgIGZyYW1lX2J1cnkgMwogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgNQogICAgYiBkeW5hbWljX2FycmF5X3JlcGxhY2VfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJAMgoKZHluYW1pY19hcnJheV9yZXBsYWNlX2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMwogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU11dGF0aW9ucy5zdGF0ZW11dGF0aW9ucy5TdGF0ZU11dGF0aW9ucy5hcHBlbmRbcm91dGluZ10oKSAtPiB2b2lkOgphcHBlbmQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NDIKICAgIC8vIGFyciA9IHNlbGYuZ2xvYl9hc3NpZ24udmFsdWUuY29weSgpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiZ2xvYl9hc3NpZ24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYl9hc3NpZ24gZXhpc3RzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NDMKICAgIC8vIGFyci5hcHBlbmQoc3RydWN0LmNvcHkoKSkKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIGJ5dGVjIDYgLy8gMHgwMDAyMDAwMDAwMDAwMDAwMDAwMTAwMGEwMDAzNjI2MTdhCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjQ1CiAgICAvLyBzZWxmLmdsb2JfYXNzaWduLnZhbHVlID0gYXJyLmNvcHkoKQogICAgYnl0ZWNfMyAvLyAiZ2xvYl9hc3NpZ24iCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjQ2CiAgICAvLyBzZWxmLm5vX3Byb3h5LmFwcGVuZChzdHJ1Y3QuY29weSgpKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIm5vX3Byb3h5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm5vX3Byb3h5IGV4aXN0cwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBpbnRjXzEgLy8gMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjQzCiAgICAvLyBhcnIuYXBwZW5kKHN0cnVjdC5jb3B5KCkpCiAgICBieXRlYyA2IC8vIDB4MDAwMjAwMDAwMDAwMDAwMDAwMDEwMDBhMDAwMzYyNjE3YQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjQ2CiAgICAvLyBzZWxmLm5vX3Byb3h5LmFwcGVuZChzdHJ1Y3QuY29weSgpKQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGJ5dGVjXzEgLy8gIm5vX3Byb3h5IgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo0NwogICAgLy8gc2VsZi5nbG9iLnZhbHVlLmFwcGVuZChzdHJ1Y3QuY29weSgpKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImdsb2IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYiBleGlzdHMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo0MwogICAgLy8gYXJyLmFwcGVuZChzdHJ1Y3QuY29weSgpKQogICAgYnl0ZWMgNiAvLyAweDAwMDIwMDAwMDAwMDAwMDAwMDAxMDAwYTAwMDM2MjYxN2EKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo0NwogICAgLy8gc2VsZi5nbG9iLnZhbHVlLmFwcGVuZChzdHJ1Y3QuY29weSgpKQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGJ5dGVjIDQgLy8gImdsb2IiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjQ4CiAgICAvLyBzZWxmLmxvY1tUeG4uc2VuZGVyXS5hcHBlbmQoc3RydWN0LmNvcHkoKSkKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImxvYyIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxvYyBleGlzdHMgZm9yIGFjY291bnQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo0MwogICAgLy8gYXJyLmFwcGVuZChzdHJ1Y3QuY29weSgpKQogICAgYnl0ZWMgNiAvLyAweDAwMDIwMDAwMDAwMDAwMDAwMDAxMDAwYTAwMDM2MjYxN2EKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo0OAogICAgLy8gc2VsZi5sb2NbVHhuLnNlbmRlcl0uYXBwZW5kKHN0cnVjdC5jb3B5KCkpCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnl0ZWMgNSAvLyAibG9jIgogICAgc3dhcAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjQ5CiAgICAvLyBzZWxmLmJveC52YWx1ZS5hcHBlbmQoc3RydWN0LmNvcHkoKSkKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveCBleGlzdHMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo0MwogICAgLy8gYXJyLmFwcGVuZChzdHJ1Y3QuY29weSgpKQogICAgYnl0ZWMgNiAvLyAweDAwMDIwMDAwMDAwMDAwMDAwMDAxMDAwYTAwMDM2MjYxN2EKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo0OQogICAgLy8gc2VsZi5ib3gudmFsdWUuYXBwZW5kKHN0cnVjdC5jb3B5KCkpCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlY18wIC8vICJib3giCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NTAKICAgIC8vIHNlbGYubWFwW1R4bi5zZW5kZXJdLmFwcGVuZChzdHJ1Y3QuY29weSgpKQogICAgYnl0ZWMgOCAvLyAibWFwIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hcCBlbnRyeSBleGlzdHMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo0MwogICAgLy8gYXJyLmFwcGVuZChzdHJ1Y3QuY29weSgpKQogICAgYnl0ZWMgNiAvLyAweDAwMDIwMDAwMDAwMDAwMDAwMDAxMDAwYTAwMDM2MjYxN2EKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo1MAogICAgLy8gc2VsZi5tYXBbVHhuLnNlbmRlcl0uYXBwZW5kKHN0cnVjdC5jb3B5KCkpCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgZGlnIDEKICAgIGJveF9kZWwKICAgIHBvcAogICAgYm94X3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuU3RhdGVNdXRhdGlvbnMuc3RhdGVtdXRhdGlvbnMuU3RhdGVNdXRhdGlvbnMubW9kaWZ5W3JvdXRpbmddKCkgLT4gdm9pZDoKbW9kaWZ5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjU2CiAgICAvLyBhcnIgPSBzZWxmLmdsb2JfYXNzaWduLnZhbHVlLmNvcHkoKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImdsb2JfYXNzaWduIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JfYXNzaWduIGV4aXN0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjU3CiAgICAvLyBhcnJbMF0uYmF6ID0gbW9kaWZpZWQKICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgZGlnIDQKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBleHRyYWN0MwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjU0CiAgICAvLyBtb2RpZmllZCA9IGFyYzQuU3RyaW5nKCJtb2RpZmllZCIpCiAgICBieXRlYyA3IC8vIDB4MDAwODZkNmY2NDY5NjY2OTY1NjQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo1NwogICAgLy8gYXJyWzBdLmJheiA9IG1vZGlmaWVkCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGFzc2VydCAvLyBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9yZXBsYWNlX2R5bmFtaWNfZWxlbWVudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjU4CiAgICAvLyBzZWxmLmdsb2JfYXNzaWduLnZhbHVlID0gYXJyLmNvcHkoKQogICAgYnl0ZWNfMyAvLyAiZ2xvYl9hc3NpZ24iCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjYwCiAgICAvLyBzZWxmLm5vX3Byb3h5WzBdLmJheiA9IG1vZGlmaWVkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibm9fcHJveHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubm9fcHJveHkgZXhpc3RzCiAgICBkdXAKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMQogICAgLSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAzCiAgICBsZW4KICAgIGRpZyA0CiAgICBpbnRjXzIgLy8gMgogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICB1bmNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgZXh0cmFjdDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo1NAogICAgLy8gbW9kaWZpZWQgPSBhcmM0LlN0cmluZygibW9kaWZpZWQiKQogICAgYnl0ZWMgNyAvLyAweDAwMDg2ZDZmNjQ2OTY2Njk2NTY0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NjAKICAgIC8vIHNlbGYubm9fcHJveHlbMF0uYmF6ID0gbW9kaWZpZWQKICAgIGNvbmNhdAogICAgc3dhcAogICAgYXNzZXJ0IC8vIGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3JlcGxhY2VfZHluYW1pY19lbGVtZW50CiAgICBieXRlY18xIC8vICJub19wcm94eSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NjEKICAgIC8vIHNlbGYuZ2xvYi52YWx1ZVswXS5iYXogPSBtb2RpZmllZAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImdsb2IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYiBleGlzdHMKICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgZGlnIDQKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBleHRyYWN0MwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjU0CiAgICAvLyBtb2RpZmllZCA9IGFyYzQuU3RyaW5nKCJtb2RpZmllZCIpCiAgICBieXRlYyA3IC8vIDB4MDAwODZkNmY2NDY5NjY2OTY1NjQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo2MQogICAgLy8gc2VsZi5nbG9iLnZhbHVlWzBdLmJheiA9IG1vZGlmaWVkCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGFzc2VydCAvLyBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9yZXBsYWNlX2R5bmFtaWNfZWxlbWVudAogICAgYnl0ZWMgNCAvLyAiZ2xvYiIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NjIKICAgIC8vIHNlbGYubG9jW1R4bi5zZW5kZXJdWzBdLmJheiA9IG1vZGlmaWVkCiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJsb2MiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sb2MgZXhpc3RzIGZvciBhY2NvdW50CiAgICBkdXAKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMQogICAgLSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAzCiAgICBsZW4KICAgIGRpZyA0CiAgICBpbnRjXzIgLy8gMgogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICB1bmNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgZXh0cmFjdDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo1NAogICAgLy8gbW9kaWZpZWQgPSBhcmM0LlN0cmluZygibW9kaWZpZWQiKQogICAgYnl0ZWMgNyAvLyAweDAwMDg2ZDZmNjQ2OTY2Njk2NTY0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NjIKICAgIC8vIHNlbGYubG9jW1R4bi5zZW5kZXJdWzBdLmJheiA9IG1vZGlmaWVkCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGFzc2VydCAvLyBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9yZXBsYWNlX2R5bmFtaWNfZWxlbWVudAogICAgYnl0ZWMgNSAvLyAibG9jIgogICAgc3dhcAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjYzCiAgICAvLyBzZWxmLmJveC52YWx1ZVswXS5iYXogPSBtb2RpZmllZAogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94IGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgaW50Y18xIC8vIDEKICAgIC0gLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkaWcgMwogICAgbGVuCiAgICBkaWcgNAogICAgaW50Y18yIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIGV4dHJhY3QzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NTQKICAgIC8vIG1vZGlmaWVkID0gYXJjNC5TdHJpbmcoIm1vZGlmaWVkIikKICAgIGJ5dGVjIDcgLy8gMHgwMDA4NmQ2ZjY0Njk2NjY5NjU2NAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjYzCiAgICAvLyBzZWxmLmJveC52YWx1ZVswXS5iYXogPSBtb2RpZmllZAogICAgY29uY2F0CiAgICBzd2FwCiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfcmVwbGFjZV9keW5hbWljX2VsZW1lbnQKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjY0CiAgICAvLyBzZWxmLm1hcFtUeG4uc2VuZGVyXVswXS5iYXogPSBtb2RpZmllZAogICAgYnl0ZWMgOCAvLyAibWFwIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hcCBlbnRyeSBleGlzdHMKICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgZGlnIDQKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBleHRyYWN0MwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjU0CiAgICAvLyBtb2RpZmllZCA9IGFyYzQuU3RyaW5nKCJtb2RpZmllZCIpCiAgICBieXRlYyA3IC8vIDB4MDAwODZkNmY2NDY5NjY2OTY1NjQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo2NAogICAgLy8gc2VsZi5tYXBbVHhuLnNlbmRlcl1bMF0uYmF6ID0gbW9kaWZpZWQKICAgIGNvbmNhdAogICAgc3dhcAogICAgYXNzZXJ0IC8vIGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3JlcGxhY2VfZHluYW1pY19lbGVtZW50CiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5TdGF0ZU11dGF0aW9ucy5zdGF0ZW11dGF0aW9ucy5TdGF0ZU11dGF0aW9ucy5nZXRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NjgKICAgIC8vIGEwID0gc2VsZi5ub19wcm94eS5jb3B5KCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJub19wcm94eSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ub19wcm94eSBleGlzdHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo2OQogICAgLy8gYTEgPSBzZWxmLmdsb2JfYXNzaWduLnZhbHVlLmNvcHkoKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImdsb2JfYXNzaWduIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JfYXNzaWduIGV4aXN0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjcwCiAgICAvLyBhMiA9IHNlbGYuZ2xvYi52YWx1ZS5jb3B5KCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJnbG9iIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2IgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NzEKICAgIC8vIGEzID0gc2VsZi5sb2NbVHhuLnNlbmRlcl0uY29weSgpCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAibG9jIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9jIGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjcyCiAgICAvLyBhNCA9IHNlbGYuYm94LnZhbHVlLmNvcHkoKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94IGV4aXN0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjczCiAgICAvLyBhNSA9IHNlbGYubWFwW1R4bi5zZW5kZXJdLmNvcHkoKQogICAgYnl0ZWMgOCAvLyAibWFwIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXAgZW50cnkgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NzUKICAgIC8vIGFzc2VydCBhMCA9PSBhMSwgImV4cGVjdGVkIGdsb2JhbCBhc3NpZ24gPT0gbm9fcHJveHkiCiAgICBkaWcgNQogICAgdW5jb3ZlciA1CiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGdsb2JhbCBhc3NpZ24gPT0gbm9fcHJveHkKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo3NgogICAgLy8gYXNzZXJ0IGEwID09IGEyLCAiZXhwZWN0ZWQgZ2xvYmFsID09IG5vX3Byb3h5IgogICAgZGlnIDQKICAgIHVuY292ZXIgNAogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBnbG9iYWwgPT0gbm9fcHJveHkKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9TdGF0ZU11dGF0aW9ucy9zdGF0ZW11dGF0aW9ucy5weTo3NwogICAgLy8gYXNzZXJ0IGEwID09IGEzLCAiZXhwZWN0ZWQgbG9jYWwgPT0gbm9fcHJveHkiCiAgICBkaWcgMwogICAgdW5jb3ZlciAzCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGxvY2FsID09IG5vX3Byb3h5CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NzgKICAgIC8vIGFzc2VydCBhMCA9PSBhNCwgImV4cGVjdGVkIGJveCA9PSBub19wcm94eSIKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgYm94ID09IG5vX3Byb3h5CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvU3RhdGVNdXRhdGlvbnMvc3RhdGVtdXRhdGlvbnMucHk6NzkKICAgIC8vIGFzc2VydCBhMCA9PSBhNSwgImV4cGVjdGVkIG1hcCA9PSBub19wcm94eSIKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIG1hcCA9PSBub19wcm94eQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL1N0YXRlTXV0YXRpb25zL3N0YXRlbXV0YXRpb25zLnB5OjY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAEAAECCCYJA2JveAhub19wcm94eQIAAAtnbG9iX2Fzc2lnbgRnbG9iA2xvYxEAAgAAAAAAAAABAAoAA2JhegoACG1vZGlmaWVkA21hcDEYQAADKSpnMRtBACQxGRREMRhEggMEUm6LvwSV/vE9BAwpREs2GgCOAwE2Ab8DDgAxGY0CACMAAQAxGEQrKmcnBCpnKLxIKCq/MQAnBSpmJwgxAFBJvEgqvyNDMRgUQ4oEAYAASYv+JAuL/CQLIosEiwMMQQAci/2LBElOAlmLAggWVwYCiwFMUIwBJAiMBEL/3Iv9FYwAIowEiwSLAgxBAByL/4sESU4CWYsACBZXBgKLAUxQjAEkCIwEQv/ci/yL/ggWVwYCiwFQi/2LA4sAUlCL/xWL/4sCTwJSUIwAiYoDAYv9UQACSReL/VcCAIv/JAtLAUxZi/8jCCQLSwJLAVlLAxVLBYv/CSMJSwFPA08CTUlLBAlOBov+FU4GSwQiTwVSi/5QTwRPAk8DUlBOAkwkC0yLBYsEDEEAIIsDSYsFSU4DWYsCCIsBCRZXBgJLAkxdjAMkCIwFQv/YiwCLA1CMAIkiK2VESSJZTFcCACMnBoj+6StMZyIpZURJIllMVwIAIycGiP7VKUxnIicEZURJIllMVwIAIycGiP7AJwRMZzEASSInBWNESSJZTFcCACMnBoj+pycFTGYovkRJIllMVwIAIycGiP6TKLxIKEy/JwgxAFBJvkRJIllMVwIAIycGiP54SwG8SL8jQyIrZURJVwIASwEiWUsBIllLASMJSwMVSwQkWU8CTU8DTgJSSSVZIkxYJwdQTEQiiP7AK0xnIillRElXAgBLASJZSwEiWUsBIwlLAxVLBCRZTwJNTwNOAlJJJVkiTFgnB1BMRCKI/ospTGciJwRlRElXAgBLASJZSwEiWUsBIwlLAxVLBCRZTwJNTwNOAlJJJVkiTFgnB1BMRCKI/lUnBExnMQBJIicFY0RJVwIASwEiWUsBIllLASMJSwMVSwQkWU8CTU8DTgJSSSVZIkxYJwdQTEQiiP4bJwVMZii+RElXAgBLASJZSwEiWUsBIwlLAxVLBCRZTwJNTwNOAlJJJVkiTFgnB1BMRCKI/eYovEgoTL8nCDEAUEm+RElXAgBLASJZSwEiWUsBIwlLAxVLBCRZTwJNTwNOAlJJJVkiTFgnB1BMRCKI/apLAbxIvyNDIillRCIrZUQiJwRlRDEAIicFY0QovkQnCDEAUL5ESwVPBRJESwRPBBJESwNPAxJESwJPAhJESwESRIAEFR98dUxQsCND","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the StateMutations contract + */ +export type StateMutationsArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'append()void': Record + 'modify()void': Record + 'get()(uint64,string)[]': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'append()void': [] + 'modify()void': [] + 'get()(uint64,string)[]': [] + } +} + +/** + * The return type for each method + */ +export type StateMutationsReturns = { + 'append()void': void + 'modify()void': void + 'get()(uint64,string)[]': [bigint, string][] +} + +/** + * Defines the types of available calls and state of the StateMutations smart contract. + */ +export type StateMutationsTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'append()void' | 'append', { + argsObj: StateMutationsArgs['obj']['append()void'] + argsTuple: StateMutationsArgs['tuple']['append()void'] + returns: StateMutationsReturns['append()void'] + }> + & Record<'modify()void' | 'modify', { + argsObj: StateMutationsArgs['obj']['modify()void'] + argsTuple: StateMutationsArgs['tuple']['modify()void'] + returns: StateMutationsReturns['modify()void'] + }> + & Record<'get()(uint64,string)[]' | 'get', { + argsObj: StateMutationsArgs['obj']['get()(uint64,string)[]'] + argsTuple: StateMutationsArgs['tuple']['get()(uint64,string)[]'] + returns: StateMutationsReturns['get()(uint64,string)[]'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + global: { + keys: { + noProxy: [bigint, string][] + globAssign: [bigint, string][] + glob: [bigint, string][] + } + maps: {} + } + local: { + keys: { + loc: [bigint, string][] + } + maps: {} + } + box: { + keys: { + box: [bigint, string][] + } + maps: { + map: Map + } + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type StateMutationsSignatures = keyof StateMutationsTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type StateMutationsNonVoidMethodSignatures = keyof StateMutationsTypes['methods'] extends infer T ? T extends keyof StateMutationsTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the StateMutations smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = StateMutationsTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the StateMutations smart contract to the method's return type + */ +export type MethodReturn = StateMutationsTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed global state of the application. + */ +export type GlobalKeysState = StateMutationsTypes['state']['global']['keys'] + +/** + * Defines the shape of the keyed local state of the application. + */ +export type LocalKeysState = StateMutationsTypes['state']['local']['keys'] + +/** + * Defines the shape of the keyed box state of the application. + */ +export type BoxKeysState = StateMutationsTypes['state']['box']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type StateMutationsCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type StateMutationsDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: StateMutationsCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the StateMutations smart contract + */ +export abstract class StateMutationsParamsFactory { + /** + * Constructs a no op call for the append()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static append(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'append()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the modify()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static modify(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'modify()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the get()(uint64,string)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static get(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get()(uint64,string)[]' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } +} + +/** + * A factory to create and deploy one or more instance of the StateMutations smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class StateMutationsFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `StateMutationsFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new StateMutationsClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new StateMutationsClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the StateMutations smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: StateMutationsDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new StateMutationsClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateMutations smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateMutations smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StateMutations smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new StateMutationsClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the StateMutations smart contract + */ +export class StateMutationsClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `StateMutationsClient` + * + * @param appClient An `AppClient` instance which has been created with the StateMutations app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `StateMutationsClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `StateMutationsClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new StateMutationsClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `StateMutationsClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new StateMutationsClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available optIn methods + */ + optIn: { + /** + * Opts the user into an existing instance of the StateMutations smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The optIn result + */ + bare: (params?: Expand) => { + return this.appClient.params.bare.optIn(params) + }, + }, + + /** + * Makes a clear_state call to an existing instance of the StateMutations smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the StateMutations smart contract using the `append()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + append: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(StateMutationsParamsFactory.append(params)) + }, + + /** + * Makes a call to the StateMutations smart contract using the `modify()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + modify: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(StateMutationsParamsFactory.modify(params)) + }, + + /** + * Makes a call to the StateMutations smart contract using the `get()(uint64,string)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + get: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(StateMutationsParamsFactory.get(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available optIn methods + */ + optIn: { + /** + * Opts the user into an existing instance of the StateMutations smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The optIn result + */ + bare: (params?: Expand) => { + return this.appClient.createTransaction.bare.optIn(params) + }, + }, + + /** + * Makes a clear_state call to an existing instance of the StateMutations smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the StateMutations smart contract using the `append()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + append: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(StateMutationsParamsFactory.append(params)) + }, + + /** + * Makes a call to the StateMutations smart contract using the `modify()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + modify: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(StateMutationsParamsFactory.modify(params)) + }, + + /** + * Makes a call to the StateMutations smart contract using the `get()(uint64,string)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + get: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(StateMutationsParamsFactory.get(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available optIn methods + */ + optIn: { + /** + * Opts the user into an existing instance of the StateMutations smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The optIn result + */ + bare: (params?: Expand) => { + return this.appClient.send.bare.optIn(params) + }, + }, + + /** + * Makes a clear_state call to an existing instance of the StateMutations smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the StateMutations smart contract using the `append()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + append: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(StateMutationsParamsFactory.append(params)) + return {...result, return: result.return as unknown as (undefined | StateMutationsReturns['append()void'])} + }, + + /** + * Makes a call to the StateMutations smart contract using the `modify()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + modify: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(StateMutationsParamsFactory.modify(params)) + return {...result, return: result.return as unknown as (undefined | StateMutationsReturns['modify()void'])} + }, + + /** + * Makes a call to the StateMutations smart contract using the `get()(uint64,string)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + get: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(StateMutationsParamsFactory.get(params)) + return {...result, return: result.return as unknown as (undefined | StateMutationsReturns['get()(uint64,string)[]'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new StateMutationsClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current StateMutations app + */ + state = { + /** + * Methods to access global state for the current StateMutations app + */ + global: { + /** + * Get all current keyed values from global state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.global.getAll() + return { + noProxy: result.no_proxy, + globAssign: result.glob_assign, + glob: result.glob, + } + }, + /** + * Get the current value of the no_proxy key in global state + */ + noProxy: async (): Promise<[bigint, string][] | undefined> => { return (await this.appClient.state.global.getValue("no_proxy")) as [bigint, string][] | undefined }, + /** + * Get the current value of the glob_assign key in global state + */ + globAssign: async (): Promise<[bigint, string][] | undefined> => { return (await this.appClient.state.global.getValue("glob_assign")) as [bigint, string][] | undefined }, + /** + * Get the current value of the glob key in global state + */ + glob: async (): Promise<[bigint, string][] | undefined> => { return (await this.appClient.state.global.getValue("glob")) as [bigint, string][] | undefined }, + }, + /** + * Methods to access local state for the current StateMutations app + */ + local: (address: string | Address) => { + const encodedAddress = typeof address === 'string' ? address : encodeAddress(address.publicKey) + return { + /** + * Get all current keyed values from local state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.local(encodedAddress).getAll() + return { + loc: result.loc, + } + }, + /** + * Get the current value of the loc key in local state + */ + loc: async (): Promise<[bigint, string][] | undefined> => { return (await this.appClient.state.local(encodedAddress).getValue("loc")) as [bigint, string][] | undefined }, + } + }, + /** + * Methods to access box state for the current StateMutations app + */ + box: { + /** + * Get all current keyed values from box state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.box.getAll() + return { + box: result.box, + } + }, + /** + * Get the current value of the box key in box state + */ + box: async (): Promise<[bigint, string][] | undefined> => { return (await this.appClient.state.box.getValue("box")) as [bigint, string][] | undefined }, + /** + * Get values from the map map in box state + */ + map: { + /** + * Get all current values of the map map in box state + */ + getMap: async (): Promise> => { return (await this.appClient.state.box.getMap("map")) as Map }, + /** + * Get a current value of the map map by key from box state + */ + value: async (key: string): Promise<[bigint, string][] | undefined> => { return await this.appClient.state.box.getMapValue("map", key) as [bigint, string][] | undefined }, + }, + }, + } + + public newGroup(composerConfig?: TransactionComposerConfig): StateMutationsComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a append()void method call against the StateMutations contract + */ + append(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.append(params))) + return this + }, + /** + * Add a modify()void method call against the StateMutations contract + */ + modify(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.modify(params))) + return this + }, + /** + * Add a get()(uint64,string)[] method call against the StateMutations contract + */ + get(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.get(params))) + return this + }, + get optIn() { + return { + bare: (params?: AppClientBareCallParams ) => { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.optIn.bare(params))) + return this + }, + } + }, + /** + * Add a clear state call to the StateMutations contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as StateMutationsComposer + } +} +export type StateMutationsComposer = { + /** + * Calls the append()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + append(params?: CallParams): StateMutationsComposer<[...TReturns, StateMutationsReturns['append()void'] | undefined]> + + /** + * Calls the modify()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + modify(params?: CallParams): StateMutationsComposer<[...TReturns, StateMutationsReturns['modify()void'] | undefined]> + + /** + * Calls the get()(uint64,string)[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + get(params?: CallParams): StateMutationsComposer<[...TReturns, StateMutationsReturns['get()(uint64,string)[]'] | undefined]> + + /** + * Gets available optIn methods + */ + readonly optIn: { + /** + * Opts the user into an existing instance of the StateMutations smart contract using a bare call. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + bare(params?: AppClientBareCallParams ): StateMutationsComposer + } + + /** + * Makes a clear_state call to an existing instance of the StateMutations smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): StateMutationsComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): StateMutationsComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type StateMutationsComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/StaticSizeContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/StaticSizeContract.ts new file mode 100644 index 0000000..a0eb9be --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/StaticSizeContract.ts @@ -0,0 +1,1009 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"StaticSizeContract","structs":{},"methods":[{"name":"test_array","args":[{"type":"uint64","name":"x1"},{"type":"uint64","name":"y1"},{"type":"uint64","name":"x2"},{"type":"uint64","name":"y2"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_extend_from_tuple","args":[{"type":"((uint64,uint64),(uint64,uint64))","name":"some_more"}],"returns":{"type":"(uint64,uint64)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_extend_from_arc4_tuple","args":[{"type":"((uint64,uint64),(uint64,uint64))","name":"some_more"}],"returns":{"type":"(uint64,uint64)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_bool_array","args":[{"type":"uint64","name":"length"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_arc4_conversion","args":[{"type":"uint64","name":"length"}],"returns":{"type":"uint64[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"sum_array","args":[{"type":"uint64[]","name":"arc4_arr"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"test_arc4_bool","args":[],"returns":{"type":"bool[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":1,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{"count":{"keyType":"AVMString","valueType":"AVMUint64","key":"Y291bnQ="}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[1188,1205,1215],"errorMessage":"check self.count exists"},{"pc":[1033],"errorMessage":"expected 3 bytes"},{"pc":[750,761,861,1026,1115],"errorMessage":"expected correct length"},{"pc":[1053,1128],"errorMessage":"expected correct value at 0"},{"pc":[1073,1141],"errorMessage":"expected correct value at 1"},{"pc":[1154],"errorMessage":"expected correct value at 2"},{"pc":[1166],"errorMessage":"expected correct value at 3"},{"pc":[403,478,517,637,665,784,883,1035,1056,1117,1130,1143,1155],"errorMessage":"index access is out of bounds"},{"pc":[653,1018],"errorMessage":"invalid array length header"},{"pc":[729,753,840,908,999,1098],"errorMessage":"max array length exceeded"},{"pc":[283,342,377],"errorMessage":"overflow"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAxNiAxNDQKICAgIGJ5dGVjYmxvY2sgMHggMHgxNTFmN2M3NSAiY291bnQiIDB4MDAgMHgwMDAwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjM5CiAgICAvLyBzZWxmLmNvdW50ID0gVUludDY0KDApCiAgICBieXRlY18yIC8vICJjb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjM3CiAgICAvLyBjbGFzcyBTdGF0aWNTaXplQ29udHJhY3QoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTYKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDI4ZDdjMWI4IDB4ZmE5Y2I5NzMgMHg2MDM5YTI0MCAweGY4ZmQ2OGE3IDB4MWYwMjhkYjEgMHgwOTZiM2E1OSAweDhkNmUzYTI1IC8vIG1ldGhvZCAidGVzdF9hcnJheSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ0ZXN0X2V4dGVuZF9mcm9tX3R1cGxlKCgodWludDY0LHVpbnQ2NCksKHVpbnQ2NCx1aW50NjQpKSkodWludDY0LHVpbnQ2NClbXSIsIG1ldGhvZCAidGVzdF9leHRlbmRfZnJvbV9hcmM0X3R1cGxlKCgodWludDY0LHVpbnQ2NCksKHVpbnQ2NCx1aW50NjQpKSkodWludDY0LHVpbnQ2NClbXSIsIG1ldGhvZCAidGVzdF9ib29sX2FycmF5KHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInRlc3RfYXJjNF9jb252ZXJzaW9uKHVpbnQ2NCl1aW50NjRbXSIsIG1ldGhvZCAic3VtX2FycmF5KHVpbnQ2NFtdKXVpbnQ2NCIsIG1ldGhvZCAidGVzdF9hcmM0X2Jvb2woKWJvb2xbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHRlc3RfYXJyYXkgdGVzdF9leHRlbmRfZnJvbV90dXBsZSB0ZXN0X2V4dGVuZF9mcm9tX2FyYzRfdHVwbGUgdGVzdF9ib29sX2FycmF5IHRlc3RfYXJjNF9jb252ZXJzaW9uIHN1bV9hcnJheSB0ZXN0X2FyYzRfYm9vbAogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE2OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9iaXRzKGFycmF5OiBieXRlcywgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQsIHJlYWRfc3RlcDogdWludDY0KSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfYml0czoKICAgIHByb3RvIDQgMQogICAgYnl0ZWNfMCAvLyAiIgogICAgZHVwbiAyCiAgICBmcmFtZV9kaWcgLTQKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwbiAyCiAgICBmcmFtZV9kaWcgLTIKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIGZyYW1lX2RpZyAtNAogICAgc3dhcAogICAgcmVwbGFjZTIgMAogICAgY292ZXIgMgogICAgc3dhcAogICAgcHVzaGludCA3CiAgICArCiAgICBpbnRjXzIgLy8gOAogICAgLwogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIHB1c2hpbnQgNwogICAgKwogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGR1cAogICAgY292ZXIgMgogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYml0c19hZnRlcl9pZl9lbHNlQDIKICAgIGZyYW1lX2RpZyA2CiAgICBmcmFtZV9kaWcgNQogICAgLQogICAgYnplcm8KICAgIGZyYW1lX2RpZyA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgNAoKZHluYW1pY19hcnJheV9jb25jYXRfYml0c19hZnRlcl9pZl9lbHNlQDI6CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18zIC8vIDE2CiAgICArCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMgogICAgZnJhbWVfZGlnIC0yCiAgICArCiAgICBmcmFtZV9idXJ5IDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHNfd2hpbGVfdG9wQDM6CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHNfYWZ0ZXJfd2hpbGVANQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBnZXRiaXQKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2J1cnkgMAogICAgYiBkeW5hbWljX2FycmF5X2NvbmNhdF9iaXRzX3doaWxlX3RvcEAzCgpkeW5hbWljX2FycmF5X2NvbmNhdF9iaXRzX2FmdGVyX3doaWxlQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLnN0YXRpY19zaXplLlN0YXRpY1NpemVDb250cmFjdC50ZXN0X2FycmF5W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9hcnJheToKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIGJ5dGVjXzAgLy8gIiIKICAgIGR1cG4gNQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6NDMKICAgIC8vIHNlbGYuY291bnQgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzIgLy8gImNvdW50IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjQ2CiAgICAvLyBQb2ludCh4PWFyYzQuVUludDY0KCksIHk9VUludDY0KCksIG90aGVyPXNlbGYueHRyYSgpKSwKICAgIGNhbGxzdWIgeHRyYQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo0NwogICAgLy8gUG9pbnQoeD14MSwgeT15MSwgb3RoZXI9c2VsZi54dHJhKCkpLAogICAgY2FsbHN1YiB4dHJhCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjQ4CiAgICAvLyBQb2ludCh4PXgyLCB5PXkyLCBvdGhlcj1zZWxmLnh0cmEoKSksCiAgICBjYWxsc3ViIHh0cmEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6NDQtNTAKICAgIC8vIHBhdGggPSBSZWZlcmVuY2VBcnJheSgKICAgIC8vICAgICAoCiAgICAvLyAgICAgICAgIFBvaW50KHg9YXJjNC5VSW50NjQoKSwgeT1VSW50NjQoKSwgb3RoZXI9c2VsZi54dHJhKCkpLAogICAgLy8gICAgICAgICBQb2ludCh4PXgxLCB5PXkxLCBvdGhlcj1zZWxmLnh0cmEoKSksCiAgICAvLyAgICAgICAgIFBvaW50KHg9eDIsIHk9eTIsIG90aGVyPXNlbGYueHRyYSgpKSwKICAgIC8vICAgICApCiAgICAvLyApCiAgICB1bmNvdmVyIDE0CiAgICBpdG9iCiAgICB1bmNvdmVyIDE0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxMgogICAgY29uY2F0CiAgICBkaWcgMTEKICAgIGxlbgogICAgcHVzaGludCA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgcHVzaGludCA2NAogICAgYnplcm8KICAgIHVuY292ZXIgMTIKICAgIGRpZyAxCiAgICBifAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTQKICAgIGl0b2IKICAgIHVuY292ZXIgMTUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxMgogICAgaXRvYgogICAgdW5jb3ZlciAxMgogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDExCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTAKICAgIGNvbmNhdAogICAgZGlnIDkKICAgIGxlbgogICAgcHVzaGludCA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgdW5jb3ZlciA5CiAgICBkaWcgNAogICAgYnwKICAgIGNvbmNhdAogICAgY29uY2F0CiAgICBjb25jYXQKICAgIHVuY292ZXIgNwogICAgaXRvYgogICAgdW5jb3ZlciA4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgNwogICAgaXRvYgogICAgdW5jb3ZlciA3CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgNgogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGNvbmNhdAogICAgZGlnIDQKICAgIGxlbgogICAgcHVzaGludCA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIGJ8CiAgICBjb25jYXQKICAgIGNvbmNhdAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjUxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMyk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9hcnJheV9mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjUxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMyk6CiAgICBkdXAKICAgIHB1c2hpbnQgMwogICAgPAogICAgYnogdGVzdF9hcnJheV9hZnRlcl9mb3JANQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo1MgogICAgLy8gYXNzZXJ0IHBhdGhbaV0ub3RoZXIuYiA9PSBpICsgMQogICAgZHVwMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjIDQgLy8gMTQ0CiAgICAqCiAgICBpbnRjIDQgLy8gMTQ0CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGV4dHJhY3QgMTYgMTI4CiAgICBkdXAKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo1MwogICAgLy8gYXNzZXJ0IHBhdGhbaV0ub3RoZXIuZC5mb28gPT0gaSArIDIKICAgIHN3YXAKICAgIGV4dHJhY3QgNDggMTYKICAgIGR1cAogICAgZXh0cmFjdCAwIDgKICAgIHVuY292ZXIgMwogICAgcHVzaGludCAyCiAgICArCiAgICBpdG9iCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo1NAogICAgLy8gYXNzZXJ0IHBhdGhbaV0ub3RoZXIuZC5iYXIgPT0gKGkgKyAxKSAqIChpICsgMSkKICAgIGV4dHJhY3QgOCA4CiAgICBkaWcgMQogICAgZGlnIDIKICAgICoKICAgIGl0b2IKICAgIGI9PQogICAgYXNzZXJ0CiAgICBidXJ5IDEKICAgIGIgdGVzdF9hcnJheV9mb3JfaGVhZGVyQDIKCnRlc3RfYXJyYXlfYWZ0ZXJfZm9yQDU6CiAgICBkaWcgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo1NgogICAgLy8gQm94KEltbXV0YWJsZUFycmF5W1BvaW50XSwga2V5PSJhIikudmFsdWUgPSBwYXRoLmZyZWV6ZSgpCiAgICBkdXAKICAgIGxlbgogICAgaW50YyA0IC8vIDE0NAogICAgLwogICAgZHVwCiAgICBidXJ5IDEwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzICJhIgogICAgYm94X2RlbAogICAgcG9wCiAgICBwdXNoYnl0ZXMgImEiCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjE2OAogICAgLy8gbGFzdF9wb2ludCA9IHBhdGhbMF0KICAgIGV4dHJhY3QgMCAxNDQgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGJ1cnkgMTEKICAgIGR1cAogICAgZXh0cmFjdCAwIDgKICAgIGJ1cnkgMTAKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgYnVyeSA2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjE2OQogICAgLy8gbGVuZ3RoID0gVUludDY0KCkKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTcwCiAgICAvLyBmb3IgcG9pbnRfaWR4IGluIHVyYW5nZSgxLCBwYXRoLmxlbmd0aCk6CiAgICBpbnRjXzEgLy8gMQogICAgYnVyeSAzCgp0ZXN0X2FycmF5X2Zvcl9oZWFkZXJANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTcwCiAgICAvLyBmb3IgcG9pbnRfaWR4IGluIHVyYW5nZSgxLCBwYXRoLmxlbmd0aCk6CiAgICBkaWcgMgogICAgZGlnIDgKICAgIDwKICAgIGJ6IHRlc3RfYXJyYXlfYWZ0ZXJfZm9yQDE1CiAgICBkaWcgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNzEKICAgIC8vIHBvaW50ID0gcGF0aFtwb2ludF9pZHhdCiAgICBkaWcgMwogICAgaW50YyA0IC8vIDE0NAogICAgKgogICAgaW50YyA0IC8vIDE0NAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXBuIDIKICAgIGV4dHJhY3QgMCA4CiAgICBzd2FwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ1cnkgNgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNzIKICAgIC8vIGlmIHBvaW50LnggPCBsYXN0X3BvaW50Lng6CiAgICBkaWcgMTAKICAgIGI8CiAgICBieiB0ZXN0X2FycmF5X2Vsc2VfYm9keUAxMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNzMKICAgIC8vIGR4ID0gbGFzdF9wb2ludC54LmFzX3VpbnQ2NCgpIC0gcG9pbnQueC5hc191aW50NjQoKQogICAgZGlnIDEwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjE2OAogICAgLy8gbGFzdF9wb2ludCA9IHBhdGhbMF0KICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjE3MwogICAgLy8gZHggPSBsYXN0X3BvaW50LnguYXNfdWludDY0KCkgLSBwb2ludC54LmFzX3VpbnQ2NCgpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNzEKICAgIC8vIHBvaW50ID0gcGF0aFtwb2ludF9pZHhdCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNzMKICAgIC8vIGR4ID0gbGFzdF9wb2ludC54LmFzX3VpbnQ2NCgpIC0gcG9pbnQueC5hc191aW50NjQoKQogICAgZXh0cmFjdF91aW50NjQKICAgIC0KICAgIGJ1cnkgNwoKdGVzdF9hcnJheV9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNzYKICAgIC8vIGlmIHBvaW50LnkgPCBsYXN0X3BvaW50Lnk6CiAgICBkaWcgMwogICAgZGlnIDYKICAgIDwKICAgIGJ6IHRlc3RfYXJyYXlfZWxzZV9ib2R5QDEzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjE3NwogICAgLy8gZHkgPSBsYXN0X3BvaW50LnkgLSBwb2ludC55CiAgICBkaWcgNQogICAgZGlnIDQKICAgIC0KCnRlc3RfYXJyYXlfYWZ0ZXJfaWZfZWxzZUAxNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTgwCiAgICAvLyBsZW5ndGggKz0gb3Auc3FydChkeCAqIGR4ICsgZHkgKiBkeSkKICAgIGRpZyA3CiAgICBkdXAKICAgICoKICAgIHN3YXAKICAgIGR1cAogICAgKgogICAgKwogICAgc3FydAogICAgZGlnIDUKICAgICsKICAgIGJ1cnkgNQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNzAKICAgIC8vIGZvciBwb2ludF9pZHggaW4gdXJhbmdlKDEsIHBhdGgubGVuZ3RoKToKICAgIGRpZyAyCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAzCiAgICBiIHRlc3RfYXJyYXlfZm9yX2hlYWRlckA3Cgp0ZXN0X2FycmF5X2Vsc2VfYm9keUAxMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTc5CiAgICAvLyBkeSA9IHBvaW50LnkgLSBsYXN0X3BvaW50LnkKICAgIGRpZyAzCiAgICBkaWcgNgogICAgLQogICAgYiB0ZXN0X2FycmF5X2FmdGVyX2lmX2Vsc2VAMTQKCnRlc3RfYXJyYXlfZWxzZV9ib2R5QDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNzEKICAgIC8vIHBvaW50ID0gcGF0aFtwb2ludF9pZHhdCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNzUKICAgIC8vIGR4ID0gcG9pbnQueC5hc191aW50NjQoKSAtIGxhc3RfcG9pbnQueC5hc191aW50NjQoKQogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNjgKICAgIC8vIGxhc3RfcG9pbnQgPSBwYXRoWzBdCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNzUKICAgIC8vIGR4ID0gcG9pbnQueC5hc191aW50NjQoKSAtIGxhc3RfcG9pbnQueC5hc191aW50NjQoKQogICAgZXh0cmFjdF91aW50NjQKICAgIC0KICAgIGJ1cnkgNwogICAgYiB0ZXN0X2FycmF5X2FmdGVyX2lmX2Vsc2VAMTEKCnRlc3RfYXJyYXlfYWZ0ZXJfZm9yQDE1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGRpZyA0CiAgICBpdG9iCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5zdGF0aWNfc2l6ZS5TdGF0aWNTaXplQ29udHJhY3QudGVzdF9leHRlbmRfZnJvbV90dXBsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfZXh0ZW5kX2Zyb21fdHVwbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBleHRyYWN0IDAgMTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMTYgMTYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6NjIKICAgIC8vIGFyci5leHRlbmQoc29tZV9tb3JlKQogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo2MwogICAgLy8gbGFzdCA9IGFyclstMV0KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMTYKICAgIC8KICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGludGNfMyAvLyAxNgogICAgKgogICAgZGlnIDIKICAgIHN3YXAKICAgIGludGNfMyAvLyAxNgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjY0CiAgICAvLyBhc3NlcnQgbGFzdCA9PSBzb21lX21vcmVbMV0KICAgIGR1cAogICAgdW5jb3ZlciA0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjY1CiAgICAvLyByZXN1bHQgPSBhcnIuZnJlZXplKCkKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo2NgogICAgLy8gYXNzZXJ0IHJlc3VsdFstMV0gPT0gbGFzdAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18zIC8vIDE2CiAgICAqCiAgICBpbnRjXzMgLy8gMTYKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuc3RhdGljX3NpemUuU3RhdGljU2l6ZUNvbnRyYWN0LnRlc3RfZXh0ZW5kX2Zyb21fYXJjNF90dXBsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfZXh0ZW5kX2Zyb21fYXJjNF90dXBsZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6NjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5Ojc1CiAgICAvLyByZXR1cm4gYXJyLmZyZWV6ZSgpCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDE2CiAgICAvCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuc3RhdGljX3NpemUuU3RhdGljU2l6ZUNvbnRyYWN0LnRlc3RfYm9vbF9hcnJheVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfYm9vbF9hcnJheToKICAgIGJ5dGVjXzAgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIGR1cAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo3OQogICAgLy8gYXJyID0gUmVmZXJlbmNlQXJyYXlbYm9vbF0oKQogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo4MgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDEsIGxlbmd0aCArIDEpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGludGNfMSAvLyAxCgp0ZXN0X2Jvb2xfYXJyYXlfZm9yX2hlYWRlckAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo4MgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDEsIGxlbmd0aCArIDEpOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogdGVzdF9ib29sX2FycmF5X2FmdGVyX2ZvckA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjgzCiAgICAvLyBhcnIuYXBwZW5kKGkgJSAyID09IDApCiAgICBkdXBuIDIKICAgIHB1c2hpbnQgMgogICAgJQogICAgIQogICAgZGlnIDQKICAgIHN3YXAKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIGJ1cnkgNAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo4MgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDEsIGxlbmd0aCArIDEpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2Jvb2xfYXJyYXlfZm9yX2hlYWRlckAyCgp0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfZm9yQDU6CiAgICBkaWcgMgogICAgZHVwbiAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5Ojg0CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSBsZW5ndGgsICJleHBlY3RlZCBjb3JyZWN0IGxlbmd0aCIKICAgIGxlbgogICAgZGlnIDYKICAgIGR1cAogICAgY292ZXIgNAogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBjb3JyZWN0IGxlbmd0aAogICAgZGlnIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6ODcKICAgIC8vIGFycjIuZXh0ZW5kKGFycikKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo4OAogICAgLy8gYXNzZXJ0IGFycjIubGVuZ3RoID09IGxlbmd0aCAqIDIsICJleHBlY3RlZCBjb3JyZWN0IGxlbmd0aCIKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDIKICAgICoKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgY29ycmVjdCBsZW5ndGgKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6OTAKICAgIC8vIGNvdW50ID0gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSA3CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjkxCiAgICAvLyBmb3IgdmFsIGluIGFycjoKICAgIGxlbgogICAgYnVyeSA3CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSA1Cgp0ZXN0X2Jvb2xfYXJyYXlfZm9yX2hlYWRlckA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo5MQogICAgLy8gZm9yIHZhbCBpbiBhcnI6CiAgICBkaWcgNAogICAgZGlnIDcKICAgIDwKICAgIGJ6IHRlc3RfYm9vbF9hcnJheV9hZnRlcl9mb3JAMTEKICAgIGRpZyAyCiAgICBkaWcgNQogICAgaW50Y18xIC8vIDEKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo5MgogICAgLy8gaWYgdmFsOgogICAgYnogdGVzdF9ib29sX2FycmF5X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo5MwogICAgLy8gY291bnQgKz0gMQogICAgZGlnIDUKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDYKCnRlc3RfYm9vbF9hcnJheV9hZnRlcl9pZl9lbHNlQDk6CiAgICBkaWcgNAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgNQogICAgYiB0ZXN0X2Jvb2xfYXJyYXlfZm9yX2hlYWRlckA2Cgp0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfZm9yQDExOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGRpZyA1CiAgICBpdG9iCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5zdGF0aWNfc2l6ZS5TdGF0aWNTaXplQ29udHJhY3QudGVzdF9hcmM0X2NvbnZlcnNpb25bcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2FyYzRfY29udmVyc2lvbjoKICAgIGJ5dGVjXzAgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo5NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIGR1cAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo5OAogICAgLy8gYXJyID0gUmVmZXJlbmNlQXJyYXlbYXJjNC5VSW50NjRdKCkKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTAxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMSwgbGVuZ3RoICsgMSk6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaW50Y18xIC8vIDEKCnRlc3RfYXJjNF9jb252ZXJzaW9uX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTAxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMSwgbGVuZ3RoICsgMSk6CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiB0ZXN0X2FyYzRfY29udmVyc2lvbl9hZnRlcl9mb3JANQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxMDIKICAgIC8vIGFyci5hcHBlbmQoYXJjNC5VSW50NjQoaSkpCiAgICBkdXBuIDIKICAgIGl0b2IKICAgIGRpZyA0CiAgICBzd2FwCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIGJ1cnkgNAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxMDEKICAgIC8vIGZvciBpIGluIHVyYW5nZSgxLCBsZW5ndGggKyAxKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgdGVzdF9hcmM0X2NvbnZlcnNpb25fZm9yX2hlYWRlckAyCgp0ZXN0X2FyYzRfY29udmVyc2lvbl9hZnRlcl9mb3JANToKICAgIGRpZyAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjEwMwogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gbGVuZ3RoLCAiZXhwZWN0ZWQgY29ycmVjdCBsZW5ndGgiCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICAvCiAgICBkdXAKICAgIGJ1cnkgOAogICAgZGlnIDQKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgY29ycmVjdCBsZW5ndGgKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTA0CiAgICAvLyBjb3VudCA9IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNgogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNQoKdGVzdF9hcmM0X2NvbnZlcnNpb25fZm9yX2hlYWRlckA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxMDUKICAgIC8vIGZvciB2YWwgaW4gYXJyOgogICAgZGlnIDQKICAgIGRpZyA3CiAgICA8CiAgICBieiB0ZXN0X2FyYzRfY29udmVyc2lvbl9hZnRlcl9mb3JAMTEKICAgIGRpZyAyCiAgICBkaWcgNQogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTA2CiAgICAvLyBpZiB2YWw6CiAgICBieXRlY18wIC8vIDB4CiAgICBiIT0KICAgIGJ6IHRlc3RfYXJjNF9jb252ZXJzaW9uX2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxMDcKICAgIC8vIGNvdW50ICs9IDEKICAgIGRpZyA1CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSA2Cgp0ZXN0X2FyYzRfY29udmVyc2lvbl9hZnRlcl9pZl9lbHNlQDk6CiAgICBkaWcgNAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgNQogICAgYiB0ZXN0X2FyYzRfY29udmVyc2lvbl9mb3JfaGVhZGVyQDYKCnRlc3RfYXJjNF9jb252ZXJzaW9uX2FmdGVyX2ZvckAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTA5CiAgICAvLyBhcmM0X2FyciA9IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XSgpCiAgICBieXRlYyA0IC8vIDB4MDAwMAogICAgZGlnIDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTEwCiAgICAvLyBhcmM0X2Fyci5leHRlbmQoYXJyKQogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBkdXAKICAgIGV4dHJhY3QgMiAwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICAvCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weTo5NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLnN0YXRpY19zaXplLlN0YXRpY1NpemVDb250cmFjdC5zdW1fYXJyYXlbcm91dGluZ10oKSAtPiB2b2lkOgpzdW1fYXJyYXk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjExNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTE3CiAgICAvLyBhcnIuZXh0ZW5kKGFyYzRfYXJyKQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxMTkKICAgIC8vIHRvdGFsID0gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxMjAKICAgIC8vIGZvciBpdGVtIGluIGFycjoKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGludGNfMCAvLyAwCgpzdW1fYXJyYXlfZm9yX2hlYWRlckAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxMjAKICAgIC8vIGZvciBpdGVtIGluIGFycjoKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IHN1bV9hcnJheV9hZnRlcl9mb3JANQogICAgZGlnIDMKICAgIGRpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyA4CiAgICAqCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjEyMQogICAgLy8gdG90YWwgKz0gaXRlbS5hc191aW50NjQoKQogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyA0CiAgICArCiAgICBidXJ5IDQKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgc3VtX2FycmF5X2Zvcl9oZWFkZXJAMgoKc3VtX2FycmF5X2FmdGVyX2ZvckA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxMTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuc3RhdGljX3NpemUuU3RhdGljU2l6ZUNvbnRyYWN0LnRlc3RfYXJjNF9ib29sW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9hcmM0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjE0MgogICAgLy8gYXJyLmFwcGVuZChhcmM0LkJvb2woVHhuLnNlbmRlciA9PSBUeG4ucmVjZWl2ZXIpKQogICAgdHhuIFNlbmRlcgogICAgdHhuIFJlY2VpdmVyCiAgICA9PQogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTQzCiAgICAvLyBhcnIuYXBwZW5kKGFyYzQuQm9vbChUeG4uc2VuZGVyICE9IFR4bi5yZWNlaXZlcikpCiAgICB0eG4gU2VuZGVyCiAgICB0eG4gUmVjZWl2ZXIKICAgICE9CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBkdXBuIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTQ2CiAgICAvLyBkeW5fYXJyLmV4dGVuZChhcnIpCiAgICBsZW4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTQ1CiAgICAvLyBkeW5fYXJyID0gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5Cb29sXSgpCiAgICBieXRlYyA0IC8vIDB4MDAwMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNDYKICAgIC8vIGR5bl9hcnIuZXh0ZW5kKGFycikKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIGludGNfMiAvLyA4CiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHMKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNDcKICAgIC8vIGFzc2VydCBkeW5fYXJyLmxlbmd0aCA9PSAyLCAiZXhwZWN0ZWQgY29ycmVjdCBsZW5ndGgiCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGR1cAogICAgcHVzaGludCAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGNvcnJlY3QgbGVuZ3RoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjE0OAogICAgLy8gYXNzZXJ0IGR5bl9hcnIuYnl0ZXMubGVuZ3RoID09IDMsICJleHBlY3RlZCAzIGJ5dGVzIgogICAgZGlnIDEKICAgIGxlbgogICAgcHVzaGludCAzCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIDMgYnl0ZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTQ5CiAgICAvLyBhc3NlcnQgZHluX2FyclswXSA9PSAoVHhuLnNlbmRlciA9PSBUeG4ucmVjZWl2ZXIpLCAiZXhwZWN0ZWQgY29ycmVjdCB2YWx1ZSBhdCAwIgogICAgZHVwCiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gMTYKICAgIGdldGJpdAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4biBTZW5kZXIKICAgIHR4biBSZWNlaXZlcgogICAgPT0KICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgY29ycmVjdCB2YWx1ZSBhdCAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjE1MAogICAgLy8gYXNzZXJ0IGR5bl9hcnJbMV0gPT0gKFR4bi5zZW5kZXIgIT0gVHhuLnJlY2VpdmVyKSwgImV4cGVjdGVkIGNvcnJlY3QgdmFsdWUgYXQgMSIKICAgIGludGNfMSAvLyAxCiAgICA+CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hpbnQgMTcKICAgIGdldGJpdAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4biBTZW5kZXIKICAgIHR4biBSZWNlaXZlcgogICAgIT0KICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgY29ycmVjdCB2YWx1ZSBhdCAxCiAgICBpbnRjXzAgLy8gMAoKdGVzdF9hcmM0X2Jvb2xfZm9yX2hlYWRlckAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNTMtMTU1CiAgICAvLyAjIG5vdGU6IG5vdCBzdXBwb3J0ZWQgY3VycmVudGx5CiAgICAvLyAjIGFycjIuZXh0ZW5kKGR5bl9hcnJheSkKICAgIC8vIGZvciBiIGluIGR5bl9hcnI6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiB0ZXN0X2FyYzRfYm9vbF9hZnRlcl9mb3JANQogICAgZHVwbiAyCiAgICBpbnRjXzMgLy8gMTYKICAgICsKICAgIGRpZyA1CiAgICBzd2FwCiAgICBnZXRiaXQKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBkaWcgMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNTYKICAgIC8vIGFycjIuYXBwZW5kKGIpCiAgICBzd2FwCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIGJ1cnkgMwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2FyYzRfYm9vbF9mb3JfaGVhZGVyQDIKCnRlc3RfYXJjNF9ib29sX2FmdGVyX2ZvckA1OgogICAgZGlnIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTU3CiAgICAvLyBhc3NlcnQgYXJyMi5sZW5ndGggPT0gNCwgImV4cGVjdGVkIGNvcnJlY3QgbGVuZ3RoIgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgNAogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBjb3JyZWN0IGxlbmd0aAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNTgKICAgIC8vIGFzc2VydCBhcnIyWzBdID09IChUeG4uc2VuZGVyID09IFR4bi5yZWNlaXZlciksICJleHBlY3RlZCBjb3JyZWN0IHZhbHVlIGF0IDAiCiAgICBkdXAKICAgIGV4dHJhY3QgMCAxIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuIFNlbmRlcgogICAgdHhuIFJlY2VpdmVyCiAgICA9PQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBjb3JyZWN0IHZhbHVlIGF0IDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTU5CiAgICAvLyBhc3NlcnQgYXJyMlsxXSA9PSAoVHhuLnNlbmRlciAhPSBUeG4ucmVjZWl2ZXIpLCAiZXhwZWN0ZWQgY29ycmVjdCB2YWx1ZSBhdCAxIgogICAgZHVwCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4biBTZW5kZXIKICAgIHR4biBSZWNlaXZlcgogICAgIT0KICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgY29ycmVjdCB2YWx1ZSBhdCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjE2MAogICAgLy8gYXNzZXJ0IGFycjJbMl0gPT0gKFR4bi5zZW5kZXIgPT0gVHhuLnJlY2VpdmVyKSwgImV4cGVjdGVkIGNvcnJlY3QgdmFsdWUgYXQgMiIKICAgIGR1cAogICAgZXh0cmFjdCAyIDEgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICB0eG4gU2VuZGVyCiAgICB0eG4gUmVjZWl2ZXIKICAgID09CiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGNvcnJlY3QgdmFsdWUgYXQgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNjEKICAgIC8vIGFzc2VydCBhcnIyWzNdID09IChUeG4uc2VuZGVyICE9IFR4bi5yZWNlaXZlciksICJleHBlY3RlZCBjb3JyZWN0IHZhbHVlIGF0IDMiCiAgICBleHRyYWN0IDMgMSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4biBTZW5kZXIKICAgIHR4biBSZWNlaXZlcgogICAgIT0KICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgY29ycmVjdCB2YWx1ZSBhdCAzCiAgICBkaWcgNAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxNjMKICAgIC8vIHJldHVybiBhcnIuZnJlZXplKCkKICAgIGR1cAogICAgbGVuCiAgICBieXRlYyA0IC8vIDB4MDAwMAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYml0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxMzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5zdGF0aWNfc2l6ZS5TdGF0aWNTaXplQ29udHJhY3QueHRyYSgpIC0+IHVpbnQ2NCwgdWludDY0LCBieXRlcywgYnl0ZXMsIGJ5dGVzOgp4dHJhOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxMjYKICAgIC8vIHNlbGYuY291bnQgKz0gMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImNvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvdW50IGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ5dGVjXzIgLy8gImNvdW50IgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjEyOAogICAgLy8gYT1UeG4ubnVtX2FwcF9hcmdzLAogICAgdHhuIE51bUFwcEFyZ3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTMwCiAgICAvLyBjPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL3N0YXRpY19zaXplLnB5OjEzMQogICAgLy8gZD1zZWxmLm1vcmUoKSwKICAgIGNhbGxzdWIgbW9yZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9zdGF0aWNfc2l6ZS5weToxMzIKICAgIC8vIGU9QmlnVUludChzZWxmLmNvdW50KSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJjb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jb3VudCBleGlzdHMKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTI3LTEzMwogICAgLy8gcmV0dXJuIFh0cmEoCiAgICAvLyAgICAgYT1UeG4ubnVtX2FwcF9hcmdzLAogICAgLy8gICAgIGI9c2VsZi5jb3VudCwKICAgIC8vICAgICBjPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgZD1zZWxmLm1vcmUoKSwKICAgIC8vICAgICBlPUJpZ1VJbnQoc2VsZi5jb3VudCksCiAgICAvLyApCiAgICB1bmNvdmVyIDMKICAgIGNvdmVyIDQKICAgIHJldHN1YgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuc3RhdGljX3NpemUuU3RhdGljU2l6ZUNvbnRyYWN0Lm1vcmUoKSAtPiBieXRlczoKbW9yZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvc3RhdGljX3NpemUucHk6MTM3CiAgICAvLyByZXR1cm4gTW9yZShmb289YXJjNC5VSW50NjQoc2VsZi5jb3VudCArIDEpLCBiYXI9YXJjNC5VSW50NjQoc2VsZi5jb3VudCAqIHNlbGYuY291bnQpKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImNvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvdW50IGV4aXN0cwogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZGlnIDEKICAgIHVuY292ZXIgMgogICAgKgogICAgaXRvYgogICAgY29uY2F0CiAgICByZXRzdWIK","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAFAAEIEJABJgUABBUffHUFY291bnQBAAIAADEYQAADKiJnMRtBAEAxGRREMRhEggcEKNfBuAT6nLlzBGA5okAE+P1opwQfAo2xBAlrOlkEjW46JTYaAI4HAIEB+QI8Ak8CxgM4A2sAMRkUMRgUEEOKBAEoRwKL/CJZRwKL/ghJFlcGAIv8TFwATgJMgQcIJApJTwKBBwgkCklOAgxBAAyLBosFCa+LBExQjAQijACLAyUISYwCi/4IjAGLAosBDEEAIIv9iwBJTgJTiwSLAklOA08CVIwEIwiMAov/CIwAQv/YiwSMAIkiSShHBTYaATYaAhc2GgM2GgQXKiJniAOfiAOciAOZTw4WTw4WUE8NUE8MUEsLFYFADkSBQK9PDEsBq08CTFCAEAAAAAAAAAAAAAAAAAAAAABMUE8OFk8PTFBPDBZPDBZQTwtQTwpQSwkVgUAORE8JSwSrUFBQTwcWTwhMUE8HFk8HFlBPBlBPBVBLBBWBQA5ETwRPBKtQUFAiSYEDDEEAOUpJTgIhBAshBFhXEIBJJFtLAiMITEsBEkRMVzAQSVcACE8DgQIIFqhEVwgISwFLAgsWqERFAUL/wEsBSRUhBApJRQoWVwYCSwFQgAFhvEiAAWFMv1cAkElFC0lXAAhFCiRbRQYiRQUjRQNLAksIDEEAXEsBSwMhBAshBFhHAlcACEwkW0UGSwqkQQA2SwoiW0wiWwlFB0sDSwYMQQAcSwVLBAlLB0kLTEkLCJJLBQhFBUsCIwhFA0L/sEsDSwYJQv/hIltLCiJbCUUHQv/ISwQWKUxQsCNDNhoBSVcAEExXEBBMSwFQSRUlCkkjCSULSwJMJVhJTwQSREwWVwYCTwJQSSJZIwlLAVcCAEwlCyVYTwISRClMULAjQzYaAUkVJQoWVwYCTFApTFCwI0MoRwI2GgEXSShMIwgjSUsCDEEAGEcCgQIYFEsETCsiTwJUUEUEIwhFAUL/4UsCRwIVSwZJTgQSREsBUBVPAoECCxJEIkUHFUUHIkUFSwRLBwxBABpLAksFI1giU0EABksFIwhFBksEIwhFBUL/3ksFFilMULAjQyhHAjYaARdJKEwjCCNJSwIMQQAQRwIWSwRMUEUEIwhFAUL/6UsCFSQKSUUISwQSRCJFBiJFBUsESwcMQQAcSwJLBSQLJFgoqUEABksFIwhFBksEIwhFBUL/3CcESwNQSVcCABUkChZXBgJcAClMULAjQzYaAVcCAEkiTBUkCiJJSwIMQQAWSwNLAUlOAiQLW0sECEUEIwhFAUL/40sCFilMULAjQzEAMQcSKyJPAlQxADEHEysiTwJUUEcCFScESwJPAiSI/HxJTgJJIllJTgNJgQISREsBFYEDEkRJREsBJVMrIk8CVCJTMQAxBxISRCMNRIERUysiTwJUIlMxADEHExJEIklLAwxBABpHAiUISwVMUysiTwJUSwNMUEUDIwhFAUL/30sBSRWBBBJESVcAASJTMQAxBxISRElXAQEiUzEAMQcTEkRJVwIBIlMxADEHEhJEVwMBIlMxADEHExJESwRJFScETgIkiPvWKUxQsCNDIiplRCMIKksBZzEbMQCIAAoiKmVEFk8DTgSJIiplREkjCBZLAU8CCxZQiQ==","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the StaticSizeContract contract + */ +export type StaticSizeContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'test_array(uint64,uint64,uint64,uint64)uint64': { + x1: bigint | number + y1: bigint | number + x2: bigint | number + y2: bigint | number + } + 'test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]': { + someMore: [[bigint | number, bigint | number], [bigint | number, bigint | number]] + } + 'test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]': { + someMore: [[bigint | number, bigint | number], [bigint | number, bigint | number]] + } + 'test_bool_array(uint64)uint64': { + length: bigint | number + } + 'test_arc4_conversion(uint64)uint64[]': { + length: bigint | number + } + 'sum_array(uint64[])uint64': { + arc4Arr: bigint[] | number[] + } + 'test_arc4_bool()bool[]': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'test_array(uint64,uint64,uint64,uint64)uint64': [x1: bigint | number, y1: bigint | number, x2: bigint | number, y2: bigint | number] + 'test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]': [someMore: [[bigint | number, bigint | number], [bigint | number, bigint | number]]] + 'test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]': [someMore: [[bigint | number, bigint | number], [bigint | number, bigint | number]]] + 'test_bool_array(uint64)uint64': [length: bigint | number] + 'test_arc4_conversion(uint64)uint64[]': [length: bigint | number] + 'sum_array(uint64[])uint64': [arc4Arr: bigint[] | number[]] + 'test_arc4_bool()bool[]': [] + } +} + +/** + * The return type for each method + */ +export type StaticSizeContractReturns = { + 'test_array(uint64,uint64,uint64,uint64)uint64': bigint + 'test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]': [bigint, bigint][] + 'test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]': [bigint, bigint][] + 'test_bool_array(uint64)uint64': bigint + 'test_arc4_conversion(uint64)uint64[]': bigint[] + 'sum_array(uint64[])uint64': bigint + 'test_arc4_bool()bool[]': boolean[] +} + +/** + * Defines the types of available calls and state of the StaticSizeContract smart contract. + */ +export type StaticSizeContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'test_array(uint64,uint64,uint64,uint64)uint64' | 'test_array', { + argsObj: StaticSizeContractArgs['obj']['test_array(uint64,uint64,uint64,uint64)uint64'] + argsTuple: StaticSizeContractArgs['tuple']['test_array(uint64,uint64,uint64,uint64)uint64'] + returns: StaticSizeContractReturns['test_array(uint64,uint64,uint64,uint64)uint64'] + }> + & Record<'test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]' | 'test_extend_from_tuple', { + argsObj: StaticSizeContractArgs['obj']['test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]'] + argsTuple: StaticSizeContractArgs['tuple']['test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]'] + returns: StaticSizeContractReturns['test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]'] + }> + & Record<'test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]' | 'test_extend_from_arc4_tuple', { + argsObj: StaticSizeContractArgs['obj']['test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]'] + argsTuple: StaticSizeContractArgs['tuple']['test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]'] + returns: StaticSizeContractReturns['test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]'] + }> + & Record<'test_bool_array(uint64)uint64' | 'test_bool_array', { + argsObj: StaticSizeContractArgs['obj']['test_bool_array(uint64)uint64'] + argsTuple: StaticSizeContractArgs['tuple']['test_bool_array(uint64)uint64'] + returns: StaticSizeContractReturns['test_bool_array(uint64)uint64'] + }> + & Record<'test_arc4_conversion(uint64)uint64[]' | 'test_arc4_conversion', { + argsObj: StaticSizeContractArgs['obj']['test_arc4_conversion(uint64)uint64[]'] + argsTuple: StaticSizeContractArgs['tuple']['test_arc4_conversion(uint64)uint64[]'] + returns: StaticSizeContractReturns['test_arc4_conversion(uint64)uint64[]'] + }> + & Record<'sum_array(uint64[])uint64' | 'sum_array', { + argsObj: StaticSizeContractArgs['obj']['sum_array(uint64[])uint64'] + argsTuple: StaticSizeContractArgs['tuple']['sum_array(uint64[])uint64'] + returns: StaticSizeContractReturns['sum_array(uint64[])uint64'] + }> + & Record<'test_arc4_bool()bool[]' | 'test_arc4_bool', { + argsObj: StaticSizeContractArgs['obj']['test_arc4_bool()bool[]'] + argsTuple: StaticSizeContractArgs['tuple']['test_arc4_bool()bool[]'] + returns: StaticSizeContractReturns['test_arc4_bool()bool[]'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + global: { + keys: { + count: bigint + } + maps: {} + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type StaticSizeContractSignatures = keyof StaticSizeContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type StaticSizeContractNonVoidMethodSignatures = keyof StaticSizeContractTypes['methods'] extends infer T ? T extends keyof StaticSizeContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the StaticSizeContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = StaticSizeContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the StaticSizeContract smart contract to the method's return type + */ +export type MethodReturn = StaticSizeContractTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed global state of the application. + */ +export type GlobalKeysState = StaticSizeContractTypes['state']['global']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type StaticSizeContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type StaticSizeContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: StaticSizeContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the StaticSizeContract smart contract + */ +export abstract class StaticSizeContractParamsFactory { + /** + * Constructs a no op call for the test_array(uint64,uint64,uint64,uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testArray(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_array(uint64,uint64,uint64,uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.x1, params.args.y1, params.args.x2, params.args.y2], + } + } + /** + * Constructs a no op call for the test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testExtendFromTuple(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.someMore], + } + } + /** + * Constructs a no op call for the test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testExtendFromArc4Tuple(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.someMore], + } + } + /** + * Constructs a no op call for the test_bool_array(uint64)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testBoolArray(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_bool_array(uint64)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.length], + } + } + /** + * Constructs a no op call for the test_arc4_conversion(uint64)uint64[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testArc4Conversion(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_arc4_conversion(uint64)uint64[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.length], + } + } + /** + * Constructs a no op call for the sum_array(uint64[])uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static sumArray(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'sum_array(uint64[])uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.arc4Arr], + } + } + /** + * Constructs a no op call for the test_arc4_bool()bool[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testArc4Bool(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_arc4_bool()bool[]' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } +} + +/** + * A factory to create and deploy one or more instance of the StaticSizeContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class StaticSizeContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `StaticSizeContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new StaticSizeContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new StaticSizeContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the StaticSizeContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: StaticSizeContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new StaticSizeContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StaticSizeContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StaticSizeContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the StaticSizeContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new StaticSizeContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the StaticSizeContract smart contract + */ +export class StaticSizeContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `StaticSizeContractClient` + * + * @param appClient An `AppClient` instance which has been created with the StaticSizeContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `StaticSizeContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `StaticSizeContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new StaticSizeContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `StaticSizeContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new StaticSizeContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the StaticSizeContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_array(uint64,uint64,uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StaticSizeContractParamsFactory.testArray(params)) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testExtendFromTuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StaticSizeContractParamsFactory.testExtendFromTuple(params)) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testExtendFromArc4Tuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StaticSizeContractParamsFactory.testExtendFromArc4Tuple(params)) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_bool_array(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testBoolArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StaticSizeContractParamsFactory.testBoolArray(params)) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_arc4_conversion(uint64)uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testArc4Conversion: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StaticSizeContractParamsFactory.testArc4Conversion(params)) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `sum_array(uint64[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + sumArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.params.call(StaticSizeContractParamsFactory.sumArray(params)) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_arc4_bool()bool[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(StaticSizeContractParamsFactory.testArc4Bool(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the StaticSizeContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_array(uint64,uint64,uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StaticSizeContractParamsFactory.testArray(params)) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testExtendFromTuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StaticSizeContractParamsFactory.testExtendFromTuple(params)) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testExtendFromArc4Tuple: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StaticSizeContractParamsFactory.testExtendFromArc4Tuple(params)) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_bool_array(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testBoolArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StaticSizeContractParamsFactory.testBoolArray(params)) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_arc4_conversion(uint64)uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testArc4Conversion: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StaticSizeContractParamsFactory.testArc4Conversion(params)) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `sum_array(uint64[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + sumArray: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) => { + return this.appClient.createTransaction.call(StaticSizeContractParamsFactory.sumArray(params)) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_arc4_bool()bool[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testArc4Bool: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(StaticSizeContractParamsFactory.testArc4Bool(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the StaticSizeContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_array(uint64,uint64,uint64,uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testArray: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StaticSizeContractParamsFactory.testArray(params)) + return {...result, return: result.return as unknown as (undefined | StaticSizeContractReturns['test_array(uint64,uint64,uint64,uint64)uint64'])} + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testExtendFromTuple: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StaticSizeContractParamsFactory.testExtendFromTuple(params)) + return {...result, return: result.return as unknown as (undefined | StaticSizeContractReturns['test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]'])} + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testExtendFromArc4Tuple: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StaticSizeContractParamsFactory.testExtendFromArc4Tuple(params)) + return {...result, return: result.return as unknown as (undefined | StaticSizeContractReturns['test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]'])} + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_bool_array(uint64)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testBoolArray: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StaticSizeContractParamsFactory.testBoolArray(params)) + return {...result, return: result.return as unknown as (undefined | StaticSizeContractReturns['test_bool_array(uint64)uint64'])} + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_arc4_conversion(uint64)uint64[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testArc4Conversion: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StaticSizeContractParamsFactory.testArc4Conversion(params)) + return {...result, return: result.return as unknown as (undefined | StaticSizeContractReturns['test_arc4_conversion(uint64)uint64[]'])} + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `sum_array(uint64[])uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + sumArray: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp }) => { + const result = await this.appClient.send.call(StaticSizeContractParamsFactory.sumArray(params)) + return {...result, return: result.return as unknown as (undefined | StaticSizeContractReturns['sum_array(uint64[])uint64'])} + }, + + /** + * Makes a call to the StaticSizeContract smart contract using the `test_arc4_bool()bool[]` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testArc4Bool: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(StaticSizeContractParamsFactory.testArc4Bool(params)) + return {...result, return: result.return as unknown as (undefined | StaticSizeContractReturns['test_arc4_bool()bool[]'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new StaticSizeContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current StaticSizeContract app + */ + state = { + /** + * Methods to access global state for the current StaticSizeContract app + */ + global: { + /** + * Get all current keyed values from global state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.global.getAll() + return { + count: result.count, + } + }, + /** + * Get the current value of the count key in global state + */ + count: async (): Promise => { return (await this.appClient.state.global.getValue("count")) as bigint | undefined }, + }, + } + + public newGroup(composerConfig?: TransactionComposerConfig): StaticSizeContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a test_array(uint64,uint64,uint64,uint64)uint64 method call against the StaticSizeContract contract + */ + testArray(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testArray(params))) + return this + }, + /** + * Add a test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[] method call against the StaticSizeContract contract + */ + testExtendFromTuple(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testExtendFromTuple(params))) + return this + }, + /** + * Add a test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[] method call against the StaticSizeContract contract + */ + testExtendFromArc4Tuple(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testExtendFromArc4Tuple(params))) + return this + }, + /** + * Add a test_bool_array(uint64)uint64 method call against the StaticSizeContract contract + */ + testBoolArray(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testBoolArray(params))) + return this + }, + /** + * Add a test_arc4_conversion(uint64)uint64[] method call against the StaticSizeContract contract + */ + testArc4Conversion(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testArc4Conversion(params))) + return this + }, + /** + * Add a sum_array(uint64[])uint64 method call against the StaticSizeContract contract + */ + sumArray(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.sumArray(params))) + return this + }, + /** + * Add a test_arc4_bool()bool[] method call against the StaticSizeContract contract + */ + testArc4Bool(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testArc4Bool(params))) + return this + }, + /** + * Add a clear state call to the StaticSizeContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as StaticSizeContractComposer + } +} +export type StaticSizeContractComposer = { + /** + * Calls the test_array(uint64,uint64,uint64,uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testArray(params?: CallParams): StaticSizeContractComposer<[...TReturns, StaticSizeContractReturns['test_array(uint64,uint64,uint64,uint64)uint64'] | undefined]> + + /** + * Calls the test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testExtendFromTuple(params?: CallParams): StaticSizeContractComposer<[...TReturns, StaticSizeContractReturns['test_extend_from_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]'] | undefined]> + + /** + * Calls the test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testExtendFromArc4Tuple(params?: CallParams): StaticSizeContractComposer<[...TReturns, StaticSizeContractReturns['test_extend_from_arc4_tuple(((uint64,uint64),(uint64,uint64)))(uint64,uint64)[]'] | undefined]> + + /** + * Calls the test_bool_array(uint64)uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testBoolArray(params?: CallParams): StaticSizeContractComposer<[...TReturns, StaticSizeContractReturns['test_bool_array(uint64)uint64'] | undefined]> + + /** + * Calls the test_arc4_conversion(uint64)uint64[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testArc4Conversion(params?: CallParams): StaticSizeContractComposer<[...TReturns, StaticSizeContractReturns['test_arc4_conversion(uint64)uint64[]'] | undefined]> + + /** + * Calls the sum_array(uint64[])uint64 ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + sumArray(params?: CallParams): StaticSizeContractComposer<[...TReturns, StaticSizeContractReturns['sum_array(uint64[])uint64'] | undefined]> + + /** + * Calls the test_arc4_bool()bool[] ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testArc4Bool(params?: CallParams): StaticSizeContractComposer<[...TReturns, StaticSizeContractReturns['test_arc4_bool()bool[]'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the StaticSizeContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): StaticSizeContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): StaticSizeContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type StaticSizeContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/TuplesContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/TuplesContract.ts new file mode 100644 index 0000000..1e2fe54 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/TuplesContract.ts @@ -0,0 +1,558 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"TuplesContract","structs":{},"methods":[{"name":"test_tuple_with_primitive_type","args":[],"returns":{"type":"(uint64,bool)"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OAogICAgLy8gY2xhc3MgVHVwbGVzQ29udHJhY3QoQVJDNENvbnRyYWN0LCBhdm1fdmVyc2lvbj0xMSk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA1CiAgICBwdXNoYnl0ZXMgMHg3MjI5ZDc5YSAvLyBtZXRob2QgInRlc3RfdHVwbGVfd2l0aF9wcmltaXRpdmVfdHlwZSgpKHVpbnQ2NCxib29sKSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdGVzdF90dXBsZV93aXRoX3ByaW1pdGl2ZV90eXBlX3JvdXRlQDMKICAgIGVycgoKbWFpbl90ZXN0X3R1cGxlX3dpdGhfcHJpbWl0aXZlX3R5cGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDAwMDA4MAogICAgbG9nCiAgICBwdXNoaW50IDEKICAgIHJldHVybgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CzEbQQAogARyKdeaNhoAjgEAAQAxGRQxGBBEgA0VH3x1AAAAAAAAAACAsIEBQzEZFDEYFBBD","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the TuplesContract contract + */ +export type TuplesContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'test_tuple_with_primitive_type()(uint64,bool)': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'test_tuple_with_primitive_type()(uint64,bool)': [] + } +} + +/** + * The return type for each method + */ +export type TuplesContractReturns = { + 'test_tuple_with_primitive_type()(uint64,bool)': [bigint, boolean] +} + +/** + * Defines the types of available calls and state of the TuplesContract smart contract. + */ +export type TuplesContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'test_tuple_with_primitive_type()(uint64,bool)' | 'test_tuple_with_primitive_type', { + argsObj: TuplesContractArgs['obj']['test_tuple_with_primitive_type()(uint64,bool)'] + argsTuple: TuplesContractArgs['tuple']['test_tuple_with_primitive_type()(uint64,bool)'] + returns: TuplesContractReturns['test_tuple_with_primitive_type()(uint64,bool)'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type TuplesContractSignatures = keyof TuplesContractTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type TuplesContractNonVoidMethodSignatures = keyof TuplesContractTypes['methods'] extends infer T ? T extends keyof TuplesContractTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the TuplesContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = TuplesContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the TuplesContract smart contract to the method's return type + */ +export type MethodReturn = TuplesContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type TuplesContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type TuplesContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: TuplesContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the TuplesContract smart contract + */ +export abstract class TuplesContractParamsFactory { + /** + * Constructs a no op call for the test_tuple_with_primitive_type()(uint64,bool) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static testTupleWithPrimitiveType(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'test_tuple_with_primitive_type()(uint64,bool)' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } +} + +/** + * A factory to create and deploy one or more instance of the TuplesContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class TuplesContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `TuplesContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new TuplesContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new TuplesContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the TuplesContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: TuplesContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new TuplesContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the TuplesContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the TuplesContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the TuplesContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new TuplesContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the TuplesContract smart contract + */ +export class TuplesContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `TuplesContractClient` + * + * @param appClient An `AppClient` instance which has been created with the TuplesContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `TuplesContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `TuplesContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new TuplesContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `TuplesContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new TuplesContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the TuplesContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the TuplesContract smart contract using the `test_tuple_with_primitive_type()(uint64,bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + testTupleWithPrimitiveType: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(TuplesContractParamsFactory.testTupleWithPrimitiveType(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the TuplesContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the TuplesContract smart contract using the `test_tuple_with_primitive_type()(uint64,bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + testTupleWithPrimitiveType: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(TuplesContractParamsFactory.testTupleWithPrimitiveType(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the TuplesContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the TuplesContract smart contract using the `test_tuple_with_primitive_type()(uint64,bool)` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + testTupleWithPrimitiveType: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(TuplesContractParamsFactory.testTupleWithPrimitiveType(params)) + return {...result, return: result.return as unknown as (undefined | TuplesContractReturns['test_tuple_with_primitive_type()(uint64,bool)'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new TuplesContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current TuplesContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): TuplesContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a test_tuple_with_primitive_type()(uint64,bool) method call against the TuplesContract contract + */ + testTupleWithPrimitiveType(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.testTupleWithPrimitiveType(params))) + return this + }, + /** + * Add a clear state call to the TuplesContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as TuplesContractComposer + } +} +export type TuplesContractComposer = { + /** + * Calls the test_tuple_with_primitive_type()(uint64,bool) ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + testTupleWithPrimitiveType(params?: CallParams): TuplesContractComposer<[...TReturns, TuplesContractReturns['test_tuple_with_primitive_type()(uint64,bool)'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the TuplesContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): TuplesContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): TuplesContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type TuplesContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/contracts/VerifierContract.ts b/examples/p-py/projects/p-py-frontend/src/contracts/VerifierContract.ts new file mode 100644 index 0000000..9633b90 --- /dev/null +++ b/examples/p-py/projects/p-py-frontend/src/contracts/VerifierContract.ts @@ -0,0 +1,554 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^10 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi' +import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact' +import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client' +import { Address, encodeAddress } from '@algorandfoundation/algokit-utils' +import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client' +import { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer' + +export const APP_SPEC: Arc56Contract = {"name":"VerifierContract","structs":{},"methods":[{"name":"verify","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[56],"errorMessage":"Txn must be pay"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvdmVyaWZpZXIucHk6MTEKICAgIC8vIGNsYXNzIFZlcmlmaWVyQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDUKICAgIHB1c2hieXRlcyAweDY1YTlhZWNjIC8vIG1ldGhvZCAidmVyaWZ5KCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfcm91dGVAMwogICAgZXJyCgptYWluX3ZlcmlmeV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2R5bmFtaWNfaXR4bl9ncm91cC92ZXJpZmllci5weToxMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydAogICAgYiB2ZXJpZnkKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVANToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLmR5bmFtaWNfaXR4bl9ncm91cC52ZXJpZmllci5WZXJpZmllckNvbnRyYWN0LnZlcmlmeVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvdmVyaWZpZXIucHk6MTQKICAgIC8vIGZvciBpIGluIHVyYW5nZShUeG4uZ3JvdXBfaW5kZXgpOgogICAgdHhuIEdyb3VwSW5kZXgKICAgIHB1c2hpbnQgMAoKdmVyaWZ5X2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9keW5hbWljX2l0eG5fZ3JvdXAvdmVyaWZpZXIucHk6MTQKICAgIC8vIGZvciBpIGluIHVyYW5nZShUeG4uZ3JvdXBfaW5kZXgpOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogdmVyaWZ5X2FmdGVyX2ZvckA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL3ZlcmlmaWVyLnB5OjE2CiAgICAvLyBhc3NlcnQgdHhuLnR5cGUgPT0gVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQsICJUeG4gbXVzdCBiZSBwYXkiCiAgICBkdXBuIDIKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIFR4biBtdXN0IGJlIHBheQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2R5bmFtaWNfaXR4bl9ncm91cC92ZXJpZmllci5weToxNAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKFR4bi5ncm91cF9pbmRleCk6CiAgICBwdXNoaW50IDEKICAgICsKICAgIGJ1cnkgMQogICAgYiB2ZXJpZnlfZm9yX2hlYWRlckAyCgp2ZXJpZnlfYWZ0ZXJfZm9yQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvZHluYW1pY19pdHhuX2dyb3VwL3ZlcmlmaWVyLnB5OjEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CzEbQQAYgARlqa7MNhoAjgEAAQAxGRQxGBBEQgAIMRkUMRgUEEMxFoEASUsCDEEAEEcCOBCBARJEgQEIRQFC/+mBAUM=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the VerifierContract contract + */ +export type VerifierContractArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'verify()void': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'verify()void': [] + } +} + +/** + * The return type for each method + */ +export type VerifierContractReturns = { + 'verify()void': void +} + +/** + * Defines the types of available calls and state of the VerifierContract smart contract. + */ +export type VerifierContractTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'verify()void' | 'verify', { + argsObj: VerifierContractArgs['obj']['verify()void'] + argsTuple: VerifierContractArgs['tuple']['verify()void'] + returns: VerifierContractReturns['verify()void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type VerifierContractSignatures = keyof VerifierContractTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the VerifierContract smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = VerifierContractTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the VerifierContract smart contract to the method's return type + */ +export type MethodReturn = VerifierContractTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type VerifierContractCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type VerifierContractDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: VerifierContractCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the VerifierContract smart contract + */ +export abstract class VerifierContractParamsFactory { + /** + * Constructs a no op call for the verify()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static verify(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'verify()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } +} + +/** + * A factory to create and deploy one or more instance of the VerifierContract smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class VerifierContractFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `VerifierContractFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new VerifierContractClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new VerifierContractClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the VerifierContract smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: VerifierContractDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new VerifierContractClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the VerifierContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the VerifierContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the VerifierContract smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new VerifierContractClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the VerifierContract smart contract + */ +export class VerifierContractClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `VerifierContractClient` + * + * @param appClient An `AppClient` instance which has been created with the VerifierContract app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `VerifierContractClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `VerifierContractClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new VerifierContractClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `VerifierContractClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new VerifierContractClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the VerifierContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the VerifierContract smart contract using the `verify()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + verify: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.params.call(VerifierContractParamsFactory.verify(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the VerifierContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the VerifierContract smart contract using the `verify()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + verify: (params: CallParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + return this.appClient.createTransaction.call(VerifierContractParamsFactory.verify(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the VerifierContract smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the VerifierContract smart contract using the `verify()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + verify: async (params: CallParams & SendParams & { onComplete?: OnApplicationComplete.NoOp } = {args: []}) => { + const result = await this.appClient.send.call(VerifierContractParamsFactory.verify(params)) + return {...result, return: result.return as unknown as (undefined | VerifierContractReturns['verify()void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new VerifierContractClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current VerifierContract app + */ + state = { + } + + public newGroup(composerConfig?: TransactionComposerConfig): VerifierContractComposer { + const client = this + const composer = this.algorand.newGroup(composerConfig) + let promiseChain:Promise = Promise.resolve() + return { + /** + * Add a verify()void method call against the VerifierContract contract + */ + verify(params: CallParams & { onComplete?: OnApplicationComplete.NoOp }) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.verify(params))) + return this + }, + /** + * Add a clear state call to the VerifierContract contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map(val => val.returnValue) + } + } + } as unknown as VerifierContractComposer + } +} +export type VerifierContractComposer = { + /** + * Calls the verify()void ABI method. + * + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + verify(params?: CallParams): VerifierContractComposer<[...TReturns, VerifierContractReturns['verify()void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the VerifierContract smart contract. + * + * @param params Any additional parameters for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): VerifierContractComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): VerifierContractComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type VerifierContractComposerResults = Expand + diff --git a/examples/p-py/projects/p-py-frontend/src/interfaces/network.ts b/examples/p-py/projects/p-py-frontend/src/interfaces/network.ts index a458edc..fdb97ae 100644 --- a/examples/p-py/projects/p-py-frontend/src/interfaces/network.ts +++ b/examples/p-py/projects/p-py-frontend/src/interfaces/network.ts @@ -1,5 +1,4 @@ -import { AlgoClientConfig } from '@algorandfoundation/algokit-utils/types/network-client' -import type { TokenHeader } from 'algosdk/dist/types/client/urlTokenBaseHTTPClient' +import { AlgoClientConfig } from '@algorandfoundation/algokit-utils/network-client' export interface AlgoViteClientConfig extends AlgoClientConfig { /** Base URL of the server e.g. http://localhost, https://testnet-api.algonode.cloud/, etc. */ @@ -7,7 +6,7 @@ export interface AlgoViteClientConfig extends AlgoClientConfig { /** The port to use e.g. 4001, 443, etc. */ port: string | number /** The token to use for API authentication (or undefined if none needed) - can be a string, or an object with the header key => value */ - token: string | TokenHeader + token: string /** String representing current Algorand Network type (testnet/mainnet and etc) */ network: string } @@ -18,7 +17,7 @@ export interface AlgoViteKMDConfig extends AlgoClientConfig { /** The port to use e.g. 4001, 443, etc. */ port: string | number /** The token to use for API authentication (or undefined if none needed) - can be a string, or an object with the header key => value */ - token: string | TokenHeader + token: string /** KMD wallet name */ wallet: string /** KMD wallet password */ diff --git a/examples/p-py/projects/p-py-frontend/tsconfig.json b/examples/p-py/projects/p-py-frontend/tsconfig.json index 5cde02a..855bfc3 100644 --- a/examples/p-py/projects/p-py-frontend/tsconfig.json +++ b/examples/p-py/projects/p-py-frontend/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "target": "ES2020" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, - "module": "ES2022" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + "module": "ESNext" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, "declaration": true /* Generates corresponding '.d.ts' file. */, "declarationMap": true /* Generates a sourcemap for each corresponding '.d.ts' file. */, "sourceMap": true /* Generates corresponding '.map' file. */, @@ -15,7 +15,7 @@ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, "allowJs": false, "allowSyntheticDefaultImports": true, - "moduleResolution": "Node", + "moduleResolution": "Bundler", "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, diff --git a/examples/p-py/projects/p-py-frontend/tsconfig.node.json b/examples/p-py/projects/p-py-frontend/tsconfig.node.json index 9d31e2a..e32f207 100644 --- a/examples/p-py/projects/p-py-frontend/tsconfig.node.json +++ b/examples/p-py/projects/p-py-frontend/tsconfig.node.json @@ -1,8 +1,8 @@ { "compilerOptions": { "composite": true, - "module": "ESNext", - "moduleResolution": "Node", + "module": "NodeNext", + "moduleResolution": "NodeNext", "allowSyntheticDefaultImports": true }, "include": ["vite.config.ts"] diff --git a/examples/p-tls/projects/p-tls-contracts/contracts/clients/CalculatorClient.ts b/examples/p-tls/projects/p-tls-contracts/contracts/clients/CalculatorClient.ts index ef4d4eb..d3674b9 100644 --- a/examples/p-tls/projects/p-tls-contracts/contracts/clients/CalculatorClient.ts +++ b/examples/p-tls/projects/p-tls-contracts/contracts/clients/CalculatorClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"Calculator","desc":"","methods":[{"name":"doMath","desc":"A method that takes two numbers and does either addition or subtraction","args":[{"name":"a","type":"uint64","desc":"The first uint64"},{"name":"b","type":"uint64","desc":"The second uint64"},{"name":"operation","type":"string","desc":"The operation to perform. Can be either 'sum' or 'difference'"}],"returns":{"type":"uint64","desc":"The result of the operation"},"actions":{"create":[],"call":["NoOp"]}},{"name":"hello","desc":"A demonstration method used in the AlgoKit fullstack template.\nGreets the user by name.","args":[{"name":"name","type":"string","desc":"The name of the user to greet."}],"returns":{"type":"string","desc":"A greeting message to the user."},"actions":{"create":[],"call":["NoOp"]}},{"name":"createApplication","args":[],"returns":{"type":"void"},"actions":{"create":["NoOp"],"call":[]}}],"arcs":[4,56],"structs":{},"state":{"schema":{"global":{"bytes":0,"ints":0},"local":{"bytes":0,"ints":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":[],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"teal":1,"source":"contracts/Calculator.algo.ts:3","pc":[0]},{"teal":2,"source":"contracts/Calculator.algo.ts:3","pc":[1,2,3]},{"teal":3,"source":"contracts/Calculator.algo.ts:3","pc":[4,5,6,7,8,9,10]},{"teal":15,"source":"contracts/Calculator.algo.ts:3","pc":[11,12]},{"teal":16,"source":"contracts/Calculator.algo.ts:3","pc":[13]},{"teal":17,"source":"contracts/Calculator.algo.ts:3","pc":[14,15]},{"teal":18,"source":"contracts/Calculator.algo.ts:3","pc":[16]},{"teal":19,"source":"contracts/Calculator.algo.ts:3","pc":[17,18]},{"teal":20,"source":"contracts/Calculator.algo.ts:3","pc":[19]},{"teal":21,"source":"contracts/Calculator.algo.ts:3","pc":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45]},{"teal":25,"source":"contracts/Calculator.algo.ts:3","errorMessage":"The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?","pc":[46]},{"teal":35,"source":"contracts/Calculator.algo.ts:11","pc":[47,48,49]},{"teal":39,"source":"contracts/Calculator.algo.ts:12","pc":[50,51]},{"teal":40,"source":"contracts/Calculator.algo.ts:12","pc":[52,53]},{"teal":41,"source":"contracts/Calculator.algo.ts:12","pc":[54]},{"teal":42,"source":"contracts/Calculator.algo.ts:11","pc":[55]},{"teal":52,"source":"contracts/Calculator.algo.ts:22","pc":[56,57,58]},{"teal":56,"source":"contracts/Calculator.algo.ts:23","pc":[59,60]},{"teal":57,"source":"contracts/Calculator.algo.ts:23","pc":[61,62]},{"teal":58,"source":"contracts/Calculator.algo.ts:23","pc":[63]},{"teal":59,"source":"contracts/Calculator.algo.ts:23","pc":[64,65,66]},{"teal":60,"source":"contracts/Calculator.algo.ts:23","pc":[67,68]},{"teal":61,"source":"contracts/Calculator.algo.ts:23","pc":[69,70]},{"teal":62,"source":"contracts/Calculator.algo.ts:23","pc":[71]},{"teal":63,"source":"contracts/Calculator.algo.ts:23","pc":[72,73,74]},{"teal":66,"source":"contracts/Calculator.algo.ts:23","pc":[75,76]},{"teal":67,"source":"contracts/Calculator.algo.ts:23","pc":[77,78]},{"teal":68,"source":"contracts/Calculator.algo.ts:23","pc":[79]},{"teal":71,"source":"contracts/Calculator.algo.ts:22","pc":[80]},{"teal":76,"source":"contracts/Calculator.algo.ts:35","pc":[81]},{"teal":79,"source":"contracts/Calculator.algo.ts:35","pc":[82,83,84]},{"teal":80,"source":"contracts/Calculator.algo.ts:35","pc":[85,86,87]},{"teal":83,"source":"contracts/Calculator.algo.ts:35","pc":[88,89,90]},{"teal":84,"source":"contracts/Calculator.algo.ts:35","pc":[91]},{"teal":87,"source":"contracts/Calculator.algo.ts:35","pc":[92,93,94]},{"teal":88,"source":"contracts/Calculator.algo.ts:35","pc":[95]},{"teal":91,"source":"contracts/Calculator.algo.ts:35","pc":[96,97,98]},{"teal":92,"source":"contracts/Calculator.algo.ts:35","pc":[99]},{"teal":93,"source":"contracts/Calculator.algo.ts:35","pc":[100]},{"teal":94,"source":"contracts/Calculator.algo.ts:35","pc":[101]},{"teal":95,"source":"contracts/Calculator.algo.ts:35","pc":[102]},{"teal":96,"source":"contracts/Calculator.algo.ts:35","pc":[103]},{"teal":108,"source":"contracts/Calculator.algo.ts:35","pc":[104,105,106]},{"teal":111,"source":"contracts/Calculator.algo.ts:35","pc":[107,108]},{"teal":116,"source":"contracts/Calculator.algo.ts:38","pc":[109,110]},{"teal":117,"source":"contracts/Calculator.algo.ts:38","pc":[111,112,113,114,115]},{"teal":118,"source":"contracts/Calculator.algo.ts:38","pc":[116]},{"teal":119,"source":"contracts/Calculator.algo.ts:38","pc":[117,118,119]},{"teal":124,"source":"contracts/Calculator.algo.ts:39","pc":[120,121]},{"teal":125,"source":"contracts/Calculator.algo.ts:39","pc":[122,123]},{"teal":126,"source":"contracts/Calculator.algo.ts:39","pc":[124,125,126]},{"teal":127,"source":"contracts/Calculator.algo.ts:39","pc":[127,128]},{"teal":128,"source":"contracts/Calculator.algo.ts:38","pc":[129,130,131]},{"teal":133,"source":"contracts/Calculator.algo.ts:40","pc":[132,133]},{"teal":134,"source":"contracts/Calculator.algo.ts:40","pc":[134,135,136,137,138,139,140,141,142,143,144,145]},{"teal":135,"source":"contracts/Calculator.algo.ts:40","pc":[146]},{"teal":136,"source":"contracts/Calculator.algo.ts:40","pc":[147,148,149]},{"teal":141,"source":"contracts/Calculator.algo.ts:41","pc":[150,151]},{"teal":142,"source":"contracts/Calculator.algo.ts:41","pc":[152,153]},{"teal":143,"source":"contracts/Calculator.algo.ts:41","pc":[154,155,156]},{"teal":144,"source":"contracts/Calculator.algo.ts:41","pc":[157,158]},{"teal":145,"source":"contracts/Calculator.algo.ts:40","pc":[159,160,161]},{"teal":149,"source":"contracts/Calculator.algo.ts:42","errorMessage":"Invalid operation","pc":[162]},{"teal":154,"source":"contracts/Calculator.algo.ts:44","pc":[163,164]},{"teal":157,"source":"contracts/Calculator.algo.ts:35","pc":[165,166]},{"teal":158,"source":"contracts/Calculator.algo.ts:35","pc":[167]},{"teal":163,"source":"contracts/Calculator.algo.ts:54","pc":[168]},{"teal":166,"source":"contracts/Calculator.algo.ts:54","pc":[169,170,171]},{"teal":167,"source":"contracts/Calculator.algo.ts:54","pc":[172,173,174]},{"teal":170,"source":"contracts/Calculator.algo.ts:54","pc":[175,176,177]},{"teal":171,"source":"contracts/Calculator.algo.ts:54","pc":[178]},{"teal":172,"source":"contracts/Calculator.algo.ts:54","pc":[179]},{"teal":173,"source":"contracts/Calculator.algo.ts:54","pc":[180]},{"teal":174,"source":"contracts/Calculator.algo.ts:54","pc":[181,182,183]},{"teal":175,"source":"contracts/Calculator.algo.ts:54","pc":[184]},{"teal":176,"source":"contracts/Calculator.algo.ts:54","pc":[185]},{"teal":177,"source":"contracts/Calculator.algo.ts:54","pc":[186]},{"teal":178,"source":"contracts/Calculator.algo.ts:54","pc":[187]},{"teal":179,"source":"contracts/Calculator.algo.ts:54","pc":[188]},{"teal":180,"source":"contracts/Calculator.algo.ts:54","pc":[189]},{"teal":190,"source":"contracts/Calculator.algo.ts:54","pc":[190,191,192]},{"teal":194,"source":"contracts/Calculator.algo.ts:55","pc":[193,194,195,196,197,198,199,200,201]},{"teal":195,"source":"contracts/Calculator.algo.ts:55","pc":[202,203]},{"teal":196,"source":"contracts/Calculator.algo.ts:55","pc":[204]},{"teal":197,"source":"contracts/Calculator.algo.ts:54","pc":[205]},{"teal":200,"source":"contracts/Calculator.algo.ts:3","pc":[206]},{"teal":201,"source":"contracts/Calculator.algo.ts:3","pc":[207]},{"teal":204,"source":"contracts/Calculator.algo.ts:3","pc":[208,209,210,211,212,213]},{"teal":205,"source":"contracts/Calculator.algo.ts:3","pc":[214,215,216]},{"teal":206,"source":"contracts/Calculator.algo.ts:3","pc":[217,218,219,220]},{"teal":209,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for create NoOp","pc":[221]},{"teal":212,"source":"contracts/Calculator.algo.ts:3","pc":[222,223,224,225,226,227]},{"teal":213,"source":"contracts/Calculator.algo.ts:3","pc":[228,229,230,231,232,233]},{"teal":214,"source":"contracts/Calculator.algo.ts:3","pc":[234,235,236]},{"teal":215,"source":"contracts/Calculator.algo.ts:3","pc":[237,238,239,240,241,242]},{"teal":218,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for call NoOp","pc":[243]}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxCmJ5dGVjYmxvY2sgMHgxNTFmN2M3NQoKLy8gVGhpcyBURUFMIHdhcyBnZW5lcmF0ZWQgYnkgVEVBTFNjcmlwdCB2MC4xMDcuMQovLyBodHRwczovL2dpdGh1Yi5jb20vYWxnb3JhbmRmb3VuZGF0aW9uL1RFQUxTY3JpcHQKCi8vIFRoaXMgY29udHJhY3QgaXMgY29tcGxpYW50IHdpdGggYW5kL29yIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBBUkNzOiBbIEFSQzQgXQoKLy8gVGhlIGZvbGxvd2luZyB0ZW4gbGluZXMgb2YgVEVBTCBoYW5kbGUgaW5pdGlhbCBwcm9ncmFtIGZsb3cKLy8gVGhpcyBwYXR0ZXJuIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXN5IGZvciBhbnlvbmUgdG8gcGFyc2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9ncmFtIGFuZCBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBhY3Rpb24gaXMgYWxsb3dlZAovLyBIZXJlLCBhY3Rpb24gcmVmZXJzIHRvIHRoZSBPbkNvbXBsZXRlIGluIGNvbWJpbmF0aW9uIHdpdGggd2hldGhlciB0aGUgYXBwIGlzIGJlaW5nIGNyZWF0ZWQgb3IgY2FsbGVkCi8vIEV2ZXJ5IHBvc3NpYmxlIGFjdGlvbiBmb3IgdGhpcyBjb250cmFjdCBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudAovLyBJZiB0aGUgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29udHJhY3QsIGl0cyByZXNwZWN0aXZlIGJyYW5jaCB3aWxsIGJlICIqTk9UX0lNUExFTUVOVEVEIiB3aGljaCBqdXN0IGNvbnRhaW5zICJlcnIiCnR4biBBcHBsaWNhdGlvbklECiEKcHVzaGludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGdldFN1bShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBzdW0gb2YgdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIHN1bSBvZiBhIGFuZCBiCmdldFN1bToKCXByb3RvIDIgMQoKCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MTIKCS8vIHJldHVybiBhICsgYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCSsKCXJldHN1YgoKLy8gZ2V0RGlmZmVyZW5jZShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGFuZCBiLgpnZXREaWZmZXJlbmNlOgoJcHJvdG8gMiAxCgoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czoyMwoJLy8gcmV0dXJuIGEgPj0gYiA/IGEgLSBiIDogYiAtIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0Cgk+PQoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgktCgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCS0KCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGRvTWF0aCh1aW50NjQsdWludDY0LHN0cmluZyl1aW50NjQKKmFiaV9yb3V0ZV9kb01hdGg6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGVjIDAgLy8gMHgxNTFmN2M3NQoKCS8vIG9wZXJhdGlvbjogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglleHRyYWN0IDIgMAoKCS8vIGI6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIGE6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZG9NYXRoKHVpbnQ2NCx1aW50NjQsc3RyaW5nKXVpbnQ2NAoJY2FsbHN1YiBkb01hdGgKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBkb01hdGgoYTogdWludDY0LCBiOiB1aW50NjQsIG9wZXJhdGlvbjogc3RyaW5nKTogdWludDY0Ci8vCi8vIEEgbWV0aG9kIHRoYXQgdGFrZXMgdHdvIG51bWJlcnMgYW5kIGRvZXMgZWl0aGVyIGFkZGl0aW9uIG9yIHN1YnRyYWN0aW9uCi8vCi8vIEBwYXJhbSBhIFRoZSBmaXJzdCB1aW50NjQKLy8gQHBhcmFtIGIgVGhlIHNlY29uZCB1aW50NjQKLy8gQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIHBlcmZvcm0uIENhbiBiZSBlaXRoZXIgJ3N1bScgb3IgJ2RpZmZlcmVuY2UnCi8vCi8vIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbgpkb01hdGg6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJcHVzaGJ5dGVzIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MzgKCS8vIG9wZXJhdGlvbiA9PT0gJ3N1bScKCWZyYW1lX2RpZyAtMyAvLyBvcGVyYXRpb246IHN0cmluZwoJcHVzaGJ5dGVzIDB4NzM3NTZkIC8vICJzdW0iCgk9PQoJYnogKmlmMF9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czozOQoJLy8gcmVzdWx0ID0gdGhpcy5nZXRTdW0oYSwgYikKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWNhbGxzdWIgZ2V0U3VtCglmcmFtZV9idXJ5IDAgLy8gcmVzdWx0OiB1aW50NjQKCWIgKmlmMF9lbmQKCippZjBfZWxzZWlmMV9jb25kaXRpb246CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQwCgkvLyBvcGVyYXRpb24gPT09ICdkaWZmZXJlbmNlJwoJZnJhbWVfZGlnIC0zIC8vIG9wZXJhdGlvbjogc3RyaW5nCglwdXNoYnl0ZXMgMHg2NDY5NjY2NjY1NzI2NTZlNjM2NSAvLyAiZGlmZmVyZW5jZSIKCT09CglieiAqaWYwX2Vsc2UKCgkvLyAqaWYwX2Vsc2VpZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czo0MQoJLy8gcmVzdWx0ID0gdGhpcy5nZXREaWZmZXJlbmNlKGEsIGIpCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CgljYWxsc3ViIGdldERpZmZlcmVuY2UKCWZyYW1lX2J1cnkgMCAvLyByZXN1bHQ6IHVpbnQ2NAoJYiAqaWYwX2VuZAoKKmlmMF9lbHNlOgoJLy8gSW52YWxpZCBvcGVyYXRpb24KCWVycgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQ0CgkvLyByZXR1cm4gcmVzdWx0OwoJZnJhbWVfZGlnIDAgLy8gcmVzdWx0OiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gaGVsbG8oc3RyaW5nKXN0cmluZwoqYWJpX3JvdXRlX2hlbGxvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlYyAwIC8vIDB4MTUxZjdjNzUKCgkvLyBuYW1lOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBoZWxsbyhzdHJpbmcpc3RyaW5nCgljYWxsc3ViIGhlbGxvCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGhlbGxvKG5hbWU6IHN0cmluZyk6IHN0cmluZwovLwovLyBBIGRlbW9uc3RyYXRpb24gbWV0aG9kIHVzZWQgaW4gdGhlIEFsZ29LaXQgZnVsbHN0YWNrIHRlbXBsYXRlLgovLyBHcmVldHMgdGhlIHVzZXIgYnkgbmFtZS4KLy8KLy8gQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHVzZXIgdG8gZ3JlZXQuCi8vIEByZXR1cm5zIEEgZ3JlZXRpbmcgbWVzc2FnZSB0byB0aGUgdXNlci4KaGVsbG86Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjU1CgkvLyByZXR1cm4gJ0hlbGxvLCAnICsgbmFtZTsKCXB1c2hieXRlcyAweDQ4NjU2YzZjNmYyYzIwIC8vICJIZWxsbywgIgoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IHN0cmluZwoJY29uY2F0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnRjIDAgLy8gMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CglwdXNoYnl0ZXMgMHhiODQ0N2IzNiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJcHVzaGJ5dGVzIDB4NzZhN2VmMzMgLy8gbWV0aG9kICJkb01hdGgodWludDY0LHVpbnQ2NCxzdHJpbmcpdWludDY0IgoJcHVzaGJ5dGVzIDB4MDJiZWNlMTEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9kb01hdGggKmFiaV9yb3V0ZV9oZWxsbwoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEw"},"byteCode":{"approval":"CiABASYBBBUffHUxGBSBBgsxGQiNDACwAAAAAAAAAAAAAACiAAAAAAAAAAAAAACKAgGL/4v+CImKAgGL/4v+D0EACIv/i/4JQgAFi/6L/wmJKDYaA1cCADYaAhc2GgEXiAAFFlCwIkOKAwGAAIv9gANzdW0SQQAMi/6L/4j/sIwAQgAfi/2ACmRpZmZlcmVuY2USQQAMi/6L/4j/m4wAQgABAIsAjACJKDYaAVcCAIgADEkVFlcGAkxQULAiQ4oBAYAHSGVsbG8sIIv/UIkiQ4AEuER7NjYaAI4B//EAgAR2p+8zgAQCvs4RNhoAjgL/Xv+1AA==","clear":"Cg=="},"compilerInfo":{"compiler":"algod","compilerVersion":{"major":4,"minor":4,"patch":1,"commitHash":"7b607ce4"}}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"Calculator","desc":"","methods":[{"name":"doMath","desc":"A method that takes two numbers and does either addition or subtraction","args":[{"name":"a","type":"uint64","desc":"The first uint64"},{"name":"b","type":"uint64","desc":"The second uint64"},{"name":"operation","type":"string","desc":"The operation to perform. Can be either 'sum' or 'difference'"}],"returns":{"type":"uint64","desc":"The result of the operation"},"actions":{"create":[],"call":["NoOp"]}},{"name":"hello","desc":"A demonstration method used in the AlgoKit fullstack template.\nGreets the user by name.","args":[{"name":"name","type":"string","desc":"The name of the user to greet."}],"returns":{"type":"string","desc":"A greeting message to the user."},"actions":{"create":[],"call":["NoOp"]}},{"name":"createApplication","args":[],"returns":{"type":"void"},"actions":{"create":["NoOp"],"call":[]}}],"arcs":[4,56],"structs":{},"state":{"schema":{"global":{"bytes":0,"ints":0},"local":{"bytes":0,"ints":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":[],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"teal":1,"source":"contracts/Calculator.algo.ts:3","pc":[0]},{"teal":2,"source":"contracts/Calculator.algo.ts:3","pc":[1,2,3]},{"teal":3,"source":"contracts/Calculator.algo.ts:3","pc":[4,5,6,7,8,9,10]},{"teal":15,"source":"contracts/Calculator.algo.ts:3","pc":[11,12]},{"teal":16,"source":"contracts/Calculator.algo.ts:3","pc":[13]},{"teal":17,"source":"contracts/Calculator.algo.ts:3","pc":[14,15]},{"teal":18,"source":"contracts/Calculator.algo.ts:3","pc":[16]},{"teal":19,"source":"contracts/Calculator.algo.ts:3","pc":[17,18]},{"teal":20,"source":"contracts/Calculator.algo.ts:3","pc":[19]},{"teal":21,"source":"contracts/Calculator.algo.ts:3","pc":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45]},{"teal":25,"source":"contracts/Calculator.algo.ts:3","errorMessage":"The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?","pc":[46]},{"teal":35,"source":"contracts/Calculator.algo.ts:11","pc":[47,48,49]},{"teal":39,"source":"contracts/Calculator.algo.ts:12","pc":[50,51]},{"teal":40,"source":"contracts/Calculator.algo.ts:12","pc":[52,53]},{"teal":41,"source":"contracts/Calculator.algo.ts:12","pc":[54]},{"teal":42,"source":"contracts/Calculator.algo.ts:11","pc":[55]},{"teal":52,"source":"contracts/Calculator.algo.ts:22","pc":[56,57,58]},{"teal":56,"source":"contracts/Calculator.algo.ts:23","pc":[59,60]},{"teal":57,"source":"contracts/Calculator.algo.ts:23","pc":[61,62]},{"teal":58,"source":"contracts/Calculator.algo.ts:23","pc":[63]},{"teal":59,"source":"contracts/Calculator.algo.ts:23","pc":[64,65,66]},{"teal":60,"source":"contracts/Calculator.algo.ts:23","pc":[67,68]},{"teal":61,"source":"contracts/Calculator.algo.ts:23","pc":[69,70]},{"teal":62,"source":"contracts/Calculator.algo.ts:23","pc":[71]},{"teal":63,"source":"contracts/Calculator.algo.ts:23","pc":[72,73,74]},{"teal":66,"source":"contracts/Calculator.algo.ts:23","pc":[75,76]},{"teal":67,"source":"contracts/Calculator.algo.ts:23","pc":[77,78]},{"teal":68,"source":"contracts/Calculator.algo.ts:23","pc":[79]},{"teal":71,"source":"contracts/Calculator.algo.ts:22","pc":[80]},{"teal":76,"source":"contracts/Calculator.algo.ts:35","pc":[81]},{"teal":79,"source":"contracts/Calculator.algo.ts:35","pc":[82,83,84]},{"teal":80,"source":"contracts/Calculator.algo.ts:35","pc":[85,86,87]},{"teal":83,"source":"contracts/Calculator.algo.ts:35","pc":[88,89,90]},{"teal":84,"source":"contracts/Calculator.algo.ts:35","pc":[91]},{"teal":87,"source":"contracts/Calculator.algo.ts:35","pc":[92,93,94]},{"teal":88,"source":"contracts/Calculator.algo.ts:35","pc":[95]},{"teal":91,"source":"contracts/Calculator.algo.ts:35","pc":[96,97,98]},{"teal":92,"source":"contracts/Calculator.algo.ts:35","pc":[99]},{"teal":93,"source":"contracts/Calculator.algo.ts:35","pc":[100]},{"teal":94,"source":"contracts/Calculator.algo.ts:35","pc":[101]},{"teal":95,"source":"contracts/Calculator.algo.ts:35","pc":[102]},{"teal":96,"source":"contracts/Calculator.algo.ts:35","pc":[103]},{"teal":108,"source":"contracts/Calculator.algo.ts:35","pc":[104,105,106]},{"teal":111,"source":"contracts/Calculator.algo.ts:35","pc":[107,108]},{"teal":116,"source":"contracts/Calculator.algo.ts:38","pc":[109,110]},{"teal":117,"source":"contracts/Calculator.algo.ts:38","pc":[111,112,113,114,115]},{"teal":118,"source":"contracts/Calculator.algo.ts:38","pc":[116]},{"teal":119,"source":"contracts/Calculator.algo.ts:38","pc":[117,118,119]},{"teal":124,"source":"contracts/Calculator.algo.ts:39","pc":[120,121]},{"teal":125,"source":"contracts/Calculator.algo.ts:39","pc":[122,123]},{"teal":126,"source":"contracts/Calculator.algo.ts:39","pc":[124,125,126]},{"teal":127,"source":"contracts/Calculator.algo.ts:39","pc":[127,128]},{"teal":128,"source":"contracts/Calculator.algo.ts:38","pc":[129,130,131]},{"teal":133,"source":"contracts/Calculator.algo.ts:40","pc":[132,133]},{"teal":134,"source":"contracts/Calculator.algo.ts:40","pc":[134,135,136,137,138,139,140,141,142,143,144,145]},{"teal":135,"source":"contracts/Calculator.algo.ts:40","pc":[146]},{"teal":136,"source":"contracts/Calculator.algo.ts:40","pc":[147,148,149]},{"teal":141,"source":"contracts/Calculator.algo.ts:41","pc":[150,151]},{"teal":142,"source":"contracts/Calculator.algo.ts:41","pc":[152,153]},{"teal":143,"source":"contracts/Calculator.algo.ts:41","pc":[154,155,156]},{"teal":144,"source":"contracts/Calculator.algo.ts:41","pc":[157,158]},{"teal":145,"source":"contracts/Calculator.algo.ts:40","pc":[159,160,161]},{"teal":149,"source":"contracts/Calculator.algo.ts:42","errorMessage":"Invalid operation","pc":[162]},{"teal":154,"source":"contracts/Calculator.algo.ts:44","pc":[163,164]},{"teal":157,"source":"contracts/Calculator.algo.ts:35","pc":[165,166]},{"teal":158,"source":"contracts/Calculator.algo.ts:35","pc":[167]},{"teal":163,"source":"contracts/Calculator.algo.ts:54","pc":[168]},{"teal":166,"source":"contracts/Calculator.algo.ts:54","pc":[169,170,171]},{"teal":167,"source":"contracts/Calculator.algo.ts:54","pc":[172,173,174]},{"teal":170,"source":"contracts/Calculator.algo.ts:54","pc":[175,176,177]},{"teal":171,"source":"contracts/Calculator.algo.ts:54","pc":[178]},{"teal":172,"source":"contracts/Calculator.algo.ts:54","pc":[179]},{"teal":173,"source":"contracts/Calculator.algo.ts:54","pc":[180]},{"teal":174,"source":"contracts/Calculator.algo.ts:54","pc":[181,182,183]},{"teal":175,"source":"contracts/Calculator.algo.ts:54","pc":[184]},{"teal":176,"source":"contracts/Calculator.algo.ts:54","pc":[185]},{"teal":177,"source":"contracts/Calculator.algo.ts:54","pc":[186]},{"teal":178,"source":"contracts/Calculator.algo.ts:54","pc":[187]},{"teal":179,"source":"contracts/Calculator.algo.ts:54","pc":[188]},{"teal":180,"source":"contracts/Calculator.algo.ts:54","pc":[189]},{"teal":190,"source":"contracts/Calculator.algo.ts:54","pc":[190,191,192]},{"teal":194,"source":"contracts/Calculator.algo.ts:55","pc":[193,194,195,196,197,198,199,200,201]},{"teal":195,"source":"contracts/Calculator.algo.ts:55","pc":[202,203]},{"teal":196,"source":"contracts/Calculator.algo.ts:55","pc":[204]},{"teal":197,"source":"contracts/Calculator.algo.ts:54","pc":[205]},{"teal":200,"source":"contracts/Calculator.algo.ts:3","pc":[206]},{"teal":201,"source":"contracts/Calculator.algo.ts:3","pc":[207]},{"teal":204,"source":"contracts/Calculator.algo.ts:3","pc":[208,209,210,211,212,213]},{"teal":205,"source":"contracts/Calculator.algo.ts:3","pc":[214,215,216]},{"teal":206,"source":"contracts/Calculator.algo.ts:3","pc":[217,218,219,220]},{"teal":209,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for create NoOp","pc":[221]},{"teal":212,"source":"contracts/Calculator.algo.ts:3","pc":[222,223,224,225,226,227]},{"teal":213,"source":"contracts/Calculator.algo.ts:3","pc":[228,229,230,231,232,233]},{"teal":214,"source":"contracts/Calculator.algo.ts:3","pc":[234,235,236]},{"teal":215,"source":"contracts/Calculator.algo.ts:3","pc":[237,238,239,240,241,242]},{"teal":218,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for call NoOp","pc":[243]}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxCmJ5dGVjYmxvY2sgMHgxNTFmN2M3NQoKLy8gVGhpcyBURUFMIHdhcyBnZW5lcmF0ZWQgYnkgVEVBTFNjcmlwdCB2MC4xMDcuMgovLyBodHRwczovL2dpdGh1Yi5jb20vYWxnb3JhbmRmb3VuZGF0aW9uL1RFQUxTY3JpcHQKCi8vIFRoaXMgY29udHJhY3QgaXMgY29tcGxpYW50IHdpdGggYW5kL29yIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBBUkNzOiBbIEFSQzQgXQoKLy8gVGhlIGZvbGxvd2luZyB0ZW4gbGluZXMgb2YgVEVBTCBoYW5kbGUgaW5pdGlhbCBwcm9ncmFtIGZsb3cKLy8gVGhpcyBwYXR0ZXJuIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXN5IGZvciBhbnlvbmUgdG8gcGFyc2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9ncmFtIGFuZCBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBhY3Rpb24gaXMgYWxsb3dlZAovLyBIZXJlLCBhY3Rpb24gcmVmZXJzIHRvIHRoZSBPbkNvbXBsZXRlIGluIGNvbWJpbmF0aW9uIHdpdGggd2hldGhlciB0aGUgYXBwIGlzIGJlaW5nIGNyZWF0ZWQgb3IgY2FsbGVkCi8vIEV2ZXJ5IHBvc3NpYmxlIGFjdGlvbiBmb3IgdGhpcyBjb250cmFjdCBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudAovLyBJZiB0aGUgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29udHJhY3QsIGl0cyByZXNwZWN0aXZlIGJyYW5jaCB3aWxsIGJlICIqTk9UX0lNUExFTUVOVEVEIiB3aGljaCBqdXN0IGNvbnRhaW5zICJlcnIiCnR4biBBcHBsaWNhdGlvbklECiEKcHVzaGludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGdldFN1bShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBzdW0gb2YgdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIHN1bSBvZiBhIGFuZCBiCmdldFN1bToKCXByb3RvIDIgMQoKCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MTIKCS8vIHJldHVybiBhICsgYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCSsKCXJldHN1YgoKLy8gZ2V0RGlmZmVyZW5jZShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGFuZCBiLgpnZXREaWZmZXJlbmNlOgoJcHJvdG8gMiAxCgoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czoyMwoJLy8gcmV0dXJuIGEgPj0gYiA/IGEgLSBiIDogYiAtIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0Cgk+PQoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgktCgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCS0KCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGRvTWF0aCh1aW50NjQsdWludDY0LHN0cmluZyl1aW50NjQKKmFiaV9yb3V0ZV9kb01hdGg6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGVjIDAgLy8gMHgxNTFmN2M3NQoKCS8vIG9wZXJhdGlvbjogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglleHRyYWN0IDIgMAoKCS8vIGI6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIGE6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZG9NYXRoKHVpbnQ2NCx1aW50NjQsc3RyaW5nKXVpbnQ2NAoJY2FsbHN1YiBkb01hdGgKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBkb01hdGgoYTogdWludDY0LCBiOiB1aW50NjQsIG9wZXJhdGlvbjogc3RyaW5nKTogdWludDY0Ci8vCi8vIEEgbWV0aG9kIHRoYXQgdGFrZXMgdHdvIG51bWJlcnMgYW5kIGRvZXMgZWl0aGVyIGFkZGl0aW9uIG9yIHN1YnRyYWN0aW9uCi8vCi8vIEBwYXJhbSBhIFRoZSBmaXJzdCB1aW50NjQKLy8gQHBhcmFtIGIgVGhlIHNlY29uZCB1aW50NjQKLy8gQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIHBlcmZvcm0uIENhbiBiZSBlaXRoZXIgJ3N1bScgb3IgJ2RpZmZlcmVuY2UnCi8vCi8vIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbgpkb01hdGg6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJcHVzaGJ5dGVzIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MzgKCS8vIG9wZXJhdGlvbiA9PT0gJ3N1bScKCWZyYW1lX2RpZyAtMyAvLyBvcGVyYXRpb246IHN0cmluZwoJcHVzaGJ5dGVzIDB4NzM3NTZkIC8vICJzdW0iCgk9PQoJYnogKmlmMF9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czozOQoJLy8gcmVzdWx0ID0gdGhpcy5nZXRTdW0oYSwgYikKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWNhbGxzdWIgZ2V0U3VtCglmcmFtZV9idXJ5IDAgLy8gcmVzdWx0OiB1aW50NjQKCWIgKmlmMF9lbmQKCippZjBfZWxzZWlmMV9jb25kaXRpb246CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQwCgkvLyBvcGVyYXRpb24gPT09ICdkaWZmZXJlbmNlJwoJZnJhbWVfZGlnIC0zIC8vIG9wZXJhdGlvbjogc3RyaW5nCglwdXNoYnl0ZXMgMHg2NDY5NjY2NjY1NzI2NTZlNjM2NSAvLyAiZGlmZmVyZW5jZSIKCT09CglieiAqaWYwX2Vsc2UKCgkvLyAqaWYwX2Vsc2VpZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czo0MQoJLy8gcmVzdWx0ID0gdGhpcy5nZXREaWZmZXJlbmNlKGEsIGIpCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CgljYWxsc3ViIGdldERpZmZlcmVuY2UKCWZyYW1lX2J1cnkgMCAvLyByZXN1bHQ6IHVpbnQ2NAoJYiAqaWYwX2VuZAoKKmlmMF9lbHNlOgoJLy8gSW52YWxpZCBvcGVyYXRpb24KCWVycgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQ0CgkvLyByZXR1cm4gcmVzdWx0OwoJZnJhbWVfZGlnIDAgLy8gcmVzdWx0OiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gaGVsbG8oc3RyaW5nKXN0cmluZwoqYWJpX3JvdXRlX2hlbGxvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlYyAwIC8vIDB4MTUxZjdjNzUKCgkvLyBuYW1lOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBoZWxsbyhzdHJpbmcpc3RyaW5nCgljYWxsc3ViIGhlbGxvCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGhlbGxvKG5hbWU6IHN0cmluZyk6IHN0cmluZwovLwovLyBBIGRlbW9uc3RyYXRpb24gbWV0aG9kIHVzZWQgaW4gdGhlIEFsZ29LaXQgZnVsbHN0YWNrIHRlbXBsYXRlLgovLyBHcmVldHMgdGhlIHVzZXIgYnkgbmFtZS4KLy8KLy8gQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHVzZXIgdG8gZ3JlZXQuCi8vIEByZXR1cm5zIEEgZ3JlZXRpbmcgbWVzc2FnZSB0byB0aGUgdXNlci4KaGVsbG86Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjU1CgkvLyByZXR1cm4gJ0hlbGxvLCAnICsgbmFtZTsKCXB1c2hieXRlcyAweDQ4NjU2YzZjNmYyYzIwIC8vICJIZWxsbywgIgoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IHN0cmluZwoJY29uY2F0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnRjIDAgLy8gMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CglwdXNoYnl0ZXMgMHhiODQ0N2IzNiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJcHVzaGJ5dGVzIDB4NzZhN2VmMzMgLy8gbWV0aG9kICJkb01hdGgodWludDY0LHVpbnQ2NCxzdHJpbmcpdWludDY0IgoJcHVzaGJ5dGVzIDB4MDJiZWNlMTEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9kb01hdGggKmFiaV9yb3V0ZV9oZWxsbwoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEw"},"byteCode":{"approval":"CiABASYBBBUffHUxGBSBBgsxGQiNDACwAAAAAAAAAAAAAACiAAAAAAAAAAAAAACKAgGL/4v+CImKAgGL/4v+D0EACIv/i/4JQgAFi/6L/wmJKDYaA1cCADYaAhc2GgEXiAAFFlCwIkOKAwGAAIv9gANzdW0SQQAMi/6L/4j/sIwAQgAfi/2ACmRpZmZlcmVuY2USQQAMi/6L/4j/m4wAQgABAIsAjACJKDYaAVcCAIgADEkVFlcGAkxQULAiQ4oBAYAHSGVsbG8sIIv/UIkiQ4AEuER7NjYaAI4B//EAgAR2p+8zgAQCvs4RNhoAjgL/Xv+1AA==","clear":"Cg=="},"compilerInfo":{"compiler":"algod","compilerVersion":{"major":4,"minor":4,"patch":1,"commitHash":"7b607ce4"}}} as unknown as Arc56Contract /** * A state record containing binary data diff --git a/examples/p-tls/projects/p-tls-frontend/src/components/AppCalls.tsx b/examples/p-tls/projects/p-tls-frontend/src/components/AppCalls.tsx index 8a37e8d..a03f337 100644 --- a/examples/p-tls/projects/p-tls-frontend/src/components/AppCalls.tsx +++ b/examples/p-tls/projects/p-tls-frontend/src/components/AppCalls.tsx @@ -4,6 +4,7 @@ import { useState } from 'react' import { CalculatorFactory } from '../contracts/Calculator' import { getAlgodConfigFromViteEnvironment, getIndexerConfigFromViteEnvironment } from '../utils/network/getAlgoClientConfigs' import { AlgorandClient } from '@algorandfoundation/algokit-utils' +import { encodeTransactionRaw } from '@algorandfoundation/algokit-utils/transact' interface AppCallsInterface { openModal: boolean @@ -14,7 +15,7 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { const [loading, setLoading] = useState(false) const [contractInput, setContractInput] = useState('') const { enqueueSnackbar } = useSnackbar() - const { transactionSigner, activeAddress } = useWallet() + const { signTransactions, activeAddress } = useWallet() const algodConfig = getAlgodConfigFromViteEnvironment() const indexerConfig = getIndexerConfigFromViteEnvironment() @@ -22,7 +23,11 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { algodConfig, indexerConfig, }) - algorand.setDefaultSigner(transactionSigner) + algorand.setDefaultSigner(async (txnGroup, indexesToSign) => { + const encoded = txnGroup.map((txn) => encodeTransactionRaw(txn)) + const signed = await signTransactions(encoded, indexesToSign) + return signed.filter((s): s is Uint8Array => s !== null) + }) const sendAppCall = async () => { setLoading(true) diff --git a/examples/p-tls/projects/p-tls-frontend/src/contracts/Calculator.ts b/examples/p-tls/projects/p-tls-frontend/src/contracts/Calculator.ts index cc4657a..01af943 100644 --- a/examples/p-tls/projects/p-tls-frontend/src/contracts/Calculator.ts +++ b/examples/p-tls/projects/p-tls-frontend/src/contracts/Calculator.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"Calculator","desc":"","methods":[{"name":"doMath","desc":"A method that takes two numbers and does either addition or subtraction","args":[{"name":"a","type":"uint64","desc":"The first uint64"},{"name":"b","type":"uint64","desc":"The second uint64"},{"name":"operation","type":"string","desc":"The operation to perform. Can be either 'sum' or 'difference'"}],"returns":{"type":"uint64","desc":"The result of the operation"},"actions":{"create":[],"call":["NoOp"]}},{"name":"hello","desc":"A demonstration method used in the AlgoKit fullstack template.\nGreets the user by name.","args":[{"name":"name","type":"string","desc":"The name of the user to greet."}],"returns":{"type":"string","desc":"A greeting message to the user."},"actions":{"create":[],"call":["NoOp"]}},{"name":"createApplication","args":[],"returns":{"type":"void"},"actions":{"create":["NoOp"],"call":[]}}],"arcs":[4,56],"structs":{},"state":{"schema":{"global":{"bytes":0,"ints":0},"local":{"bytes":0,"ints":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":[],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"teal":1,"source":"contracts/Calculator.algo.ts:3","pc":[0]},{"teal":2,"source":"contracts/Calculator.algo.ts:3","pc":[1,2,3]},{"teal":3,"source":"contracts/Calculator.algo.ts:3","pc":[4,5,6,7,8,9,10]},{"teal":15,"source":"contracts/Calculator.algo.ts:3","pc":[11,12]},{"teal":16,"source":"contracts/Calculator.algo.ts:3","pc":[13]},{"teal":17,"source":"contracts/Calculator.algo.ts:3","pc":[14,15]},{"teal":18,"source":"contracts/Calculator.algo.ts:3","pc":[16]},{"teal":19,"source":"contracts/Calculator.algo.ts:3","pc":[17,18]},{"teal":20,"source":"contracts/Calculator.algo.ts:3","pc":[19]},{"teal":21,"source":"contracts/Calculator.algo.ts:3","pc":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45]},{"teal":25,"source":"contracts/Calculator.algo.ts:3","errorMessage":"The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?","pc":[46]},{"teal":35,"source":"contracts/Calculator.algo.ts:11","pc":[47,48,49]},{"teal":39,"source":"contracts/Calculator.algo.ts:12","pc":[50,51]},{"teal":40,"source":"contracts/Calculator.algo.ts:12","pc":[52,53]},{"teal":41,"source":"contracts/Calculator.algo.ts:12","pc":[54]},{"teal":42,"source":"contracts/Calculator.algo.ts:11","pc":[55]},{"teal":52,"source":"contracts/Calculator.algo.ts:22","pc":[56,57,58]},{"teal":56,"source":"contracts/Calculator.algo.ts:23","pc":[59,60]},{"teal":57,"source":"contracts/Calculator.algo.ts:23","pc":[61,62]},{"teal":58,"source":"contracts/Calculator.algo.ts:23","pc":[63]},{"teal":59,"source":"contracts/Calculator.algo.ts:23","pc":[64,65,66]},{"teal":60,"source":"contracts/Calculator.algo.ts:23","pc":[67,68]},{"teal":61,"source":"contracts/Calculator.algo.ts:23","pc":[69,70]},{"teal":62,"source":"contracts/Calculator.algo.ts:23","pc":[71]},{"teal":63,"source":"contracts/Calculator.algo.ts:23","pc":[72,73,74]},{"teal":66,"source":"contracts/Calculator.algo.ts:23","pc":[75,76]},{"teal":67,"source":"contracts/Calculator.algo.ts:23","pc":[77,78]},{"teal":68,"source":"contracts/Calculator.algo.ts:23","pc":[79]},{"teal":71,"source":"contracts/Calculator.algo.ts:22","pc":[80]},{"teal":76,"source":"contracts/Calculator.algo.ts:35","pc":[81]},{"teal":79,"source":"contracts/Calculator.algo.ts:35","pc":[82,83,84]},{"teal":80,"source":"contracts/Calculator.algo.ts:35","pc":[85,86,87]},{"teal":83,"source":"contracts/Calculator.algo.ts:35","pc":[88,89,90]},{"teal":84,"source":"contracts/Calculator.algo.ts:35","pc":[91]},{"teal":87,"source":"contracts/Calculator.algo.ts:35","pc":[92,93,94]},{"teal":88,"source":"contracts/Calculator.algo.ts:35","pc":[95]},{"teal":91,"source":"contracts/Calculator.algo.ts:35","pc":[96,97,98]},{"teal":92,"source":"contracts/Calculator.algo.ts:35","pc":[99]},{"teal":93,"source":"contracts/Calculator.algo.ts:35","pc":[100]},{"teal":94,"source":"contracts/Calculator.algo.ts:35","pc":[101]},{"teal":95,"source":"contracts/Calculator.algo.ts:35","pc":[102]},{"teal":96,"source":"contracts/Calculator.algo.ts:35","pc":[103]},{"teal":108,"source":"contracts/Calculator.algo.ts:35","pc":[104,105,106]},{"teal":111,"source":"contracts/Calculator.algo.ts:35","pc":[107,108]},{"teal":116,"source":"contracts/Calculator.algo.ts:38","pc":[109,110]},{"teal":117,"source":"contracts/Calculator.algo.ts:38","pc":[111,112,113,114,115]},{"teal":118,"source":"contracts/Calculator.algo.ts:38","pc":[116]},{"teal":119,"source":"contracts/Calculator.algo.ts:38","pc":[117,118,119]},{"teal":124,"source":"contracts/Calculator.algo.ts:39","pc":[120,121]},{"teal":125,"source":"contracts/Calculator.algo.ts:39","pc":[122,123]},{"teal":126,"source":"contracts/Calculator.algo.ts:39","pc":[124,125,126]},{"teal":127,"source":"contracts/Calculator.algo.ts:39","pc":[127,128]},{"teal":128,"source":"contracts/Calculator.algo.ts:38","pc":[129,130,131]},{"teal":133,"source":"contracts/Calculator.algo.ts:40","pc":[132,133]},{"teal":134,"source":"contracts/Calculator.algo.ts:40","pc":[134,135,136,137,138,139,140,141,142,143,144,145]},{"teal":135,"source":"contracts/Calculator.algo.ts:40","pc":[146]},{"teal":136,"source":"contracts/Calculator.algo.ts:40","pc":[147,148,149]},{"teal":141,"source":"contracts/Calculator.algo.ts:41","pc":[150,151]},{"teal":142,"source":"contracts/Calculator.algo.ts:41","pc":[152,153]},{"teal":143,"source":"contracts/Calculator.algo.ts:41","pc":[154,155,156]},{"teal":144,"source":"contracts/Calculator.algo.ts:41","pc":[157,158]},{"teal":145,"source":"contracts/Calculator.algo.ts:40","pc":[159,160,161]},{"teal":149,"source":"contracts/Calculator.algo.ts:42","errorMessage":"Invalid operation","pc":[162]},{"teal":154,"source":"contracts/Calculator.algo.ts:44","pc":[163,164]},{"teal":157,"source":"contracts/Calculator.algo.ts:35","pc":[165,166]},{"teal":158,"source":"contracts/Calculator.algo.ts:35","pc":[167]},{"teal":163,"source":"contracts/Calculator.algo.ts:54","pc":[168]},{"teal":166,"source":"contracts/Calculator.algo.ts:54","pc":[169,170,171]},{"teal":167,"source":"contracts/Calculator.algo.ts:54","pc":[172,173,174]},{"teal":170,"source":"contracts/Calculator.algo.ts:54","pc":[175,176,177]},{"teal":171,"source":"contracts/Calculator.algo.ts:54","pc":[178]},{"teal":172,"source":"contracts/Calculator.algo.ts:54","pc":[179]},{"teal":173,"source":"contracts/Calculator.algo.ts:54","pc":[180]},{"teal":174,"source":"contracts/Calculator.algo.ts:54","pc":[181,182,183]},{"teal":175,"source":"contracts/Calculator.algo.ts:54","pc":[184]},{"teal":176,"source":"contracts/Calculator.algo.ts:54","pc":[185]},{"teal":177,"source":"contracts/Calculator.algo.ts:54","pc":[186]},{"teal":178,"source":"contracts/Calculator.algo.ts:54","pc":[187]},{"teal":179,"source":"contracts/Calculator.algo.ts:54","pc":[188]},{"teal":180,"source":"contracts/Calculator.algo.ts:54","pc":[189]},{"teal":190,"source":"contracts/Calculator.algo.ts:54","pc":[190,191,192]},{"teal":194,"source":"contracts/Calculator.algo.ts:55","pc":[193,194,195,196,197,198,199,200,201]},{"teal":195,"source":"contracts/Calculator.algo.ts:55","pc":[202,203]},{"teal":196,"source":"contracts/Calculator.algo.ts:55","pc":[204]},{"teal":197,"source":"contracts/Calculator.algo.ts:54","pc":[205]},{"teal":200,"source":"contracts/Calculator.algo.ts:3","pc":[206]},{"teal":201,"source":"contracts/Calculator.algo.ts:3","pc":[207]},{"teal":204,"source":"contracts/Calculator.algo.ts:3","pc":[208,209,210,211,212,213]},{"teal":205,"source":"contracts/Calculator.algo.ts:3","pc":[214,215,216]},{"teal":206,"source":"contracts/Calculator.algo.ts:3","pc":[217,218,219,220]},{"teal":209,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for create NoOp","pc":[221]},{"teal":212,"source":"contracts/Calculator.algo.ts:3","pc":[222,223,224,225,226,227]},{"teal":213,"source":"contracts/Calculator.algo.ts:3","pc":[228,229,230,231,232,233]},{"teal":214,"source":"contracts/Calculator.algo.ts:3","pc":[234,235,236]},{"teal":215,"source":"contracts/Calculator.algo.ts:3","pc":[237,238,239,240,241,242]},{"teal":218,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for call NoOp","pc":[243]}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxCmJ5dGVjYmxvY2sgMHgxNTFmN2M3NQoKLy8gVGhpcyBURUFMIHdhcyBnZW5lcmF0ZWQgYnkgVEVBTFNjcmlwdCB2MC4xMDcuMQovLyBodHRwczovL2dpdGh1Yi5jb20vYWxnb3JhbmRmb3VuZGF0aW9uL1RFQUxTY3JpcHQKCi8vIFRoaXMgY29udHJhY3QgaXMgY29tcGxpYW50IHdpdGggYW5kL29yIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBBUkNzOiBbIEFSQzQgXQoKLy8gVGhlIGZvbGxvd2luZyB0ZW4gbGluZXMgb2YgVEVBTCBoYW5kbGUgaW5pdGlhbCBwcm9ncmFtIGZsb3cKLy8gVGhpcyBwYXR0ZXJuIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXN5IGZvciBhbnlvbmUgdG8gcGFyc2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9ncmFtIGFuZCBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBhY3Rpb24gaXMgYWxsb3dlZAovLyBIZXJlLCBhY3Rpb24gcmVmZXJzIHRvIHRoZSBPbkNvbXBsZXRlIGluIGNvbWJpbmF0aW9uIHdpdGggd2hldGhlciB0aGUgYXBwIGlzIGJlaW5nIGNyZWF0ZWQgb3IgY2FsbGVkCi8vIEV2ZXJ5IHBvc3NpYmxlIGFjdGlvbiBmb3IgdGhpcyBjb250cmFjdCBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudAovLyBJZiB0aGUgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29udHJhY3QsIGl0cyByZXNwZWN0aXZlIGJyYW5jaCB3aWxsIGJlICIqTk9UX0lNUExFTUVOVEVEIiB3aGljaCBqdXN0IGNvbnRhaW5zICJlcnIiCnR4biBBcHBsaWNhdGlvbklECiEKcHVzaGludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGdldFN1bShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBzdW0gb2YgdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIHN1bSBvZiBhIGFuZCBiCmdldFN1bToKCXByb3RvIDIgMQoKCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MTIKCS8vIHJldHVybiBhICsgYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCSsKCXJldHN1YgoKLy8gZ2V0RGlmZmVyZW5jZShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGFuZCBiLgpnZXREaWZmZXJlbmNlOgoJcHJvdG8gMiAxCgoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czoyMwoJLy8gcmV0dXJuIGEgPj0gYiA/IGEgLSBiIDogYiAtIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0Cgk+PQoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgktCgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCS0KCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGRvTWF0aCh1aW50NjQsdWludDY0LHN0cmluZyl1aW50NjQKKmFiaV9yb3V0ZV9kb01hdGg6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGVjIDAgLy8gMHgxNTFmN2M3NQoKCS8vIG9wZXJhdGlvbjogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglleHRyYWN0IDIgMAoKCS8vIGI6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIGE6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZG9NYXRoKHVpbnQ2NCx1aW50NjQsc3RyaW5nKXVpbnQ2NAoJY2FsbHN1YiBkb01hdGgKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBkb01hdGgoYTogdWludDY0LCBiOiB1aW50NjQsIG9wZXJhdGlvbjogc3RyaW5nKTogdWludDY0Ci8vCi8vIEEgbWV0aG9kIHRoYXQgdGFrZXMgdHdvIG51bWJlcnMgYW5kIGRvZXMgZWl0aGVyIGFkZGl0aW9uIG9yIHN1YnRyYWN0aW9uCi8vCi8vIEBwYXJhbSBhIFRoZSBmaXJzdCB1aW50NjQKLy8gQHBhcmFtIGIgVGhlIHNlY29uZCB1aW50NjQKLy8gQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIHBlcmZvcm0uIENhbiBiZSBlaXRoZXIgJ3N1bScgb3IgJ2RpZmZlcmVuY2UnCi8vCi8vIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbgpkb01hdGg6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJcHVzaGJ5dGVzIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MzgKCS8vIG9wZXJhdGlvbiA9PT0gJ3N1bScKCWZyYW1lX2RpZyAtMyAvLyBvcGVyYXRpb246IHN0cmluZwoJcHVzaGJ5dGVzIDB4NzM3NTZkIC8vICJzdW0iCgk9PQoJYnogKmlmMF9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czozOQoJLy8gcmVzdWx0ID0gdGhpcy5nZXRTdW0oYSwgYikKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWNhbGxzdWIgZ2V0U3VtCglmcmFtZV9idXJ5IDAgLy8gcmVzdWx0OiB1aW50NjQKCWIgKmlmMF9lbmQKCippZjBfZWxzZWlmMV9jb25kaXRpb246CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQwCgkvLyBvcGVyYXRpb24gPT09ICdkaWZmZXJlbmNlJwoJZnJhbWVfZGlnIC0zIC8vIG9wZXJhdGlvbjogc3RyaW5nCglwdXNoYnl0ZXMgMHg2NDY5NjY2NjY1NzI2NTZlNjM2NSAvLyAiZGlmZmVyZW5jZSIKCT09CglieiAqaWYwX2Vsc2UKCgkvLyAqaWYwX2Vsc2VpZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czo0MQoJLy8gcmVzdWx0ID0gdGhpcy5nZXREaWZmZXJlbmNlKGEsIGIpCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CgljYWxsc3ViIGdldERpZmZlcmVuY2UKCWZyYW1lX2J1cnkgMCAvLyByZXN1bHQ6IHVpbnQ2NAoJYiAqaWYwX2VuZAoKKmlmMF9lbHNlOgoJLy8gSW52YWxpZCBvcGVyYXRpb24KCWVycgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQ0CgkvLyByZXR1cm4gcmVzdWx0OwoJZnJhbWVfZGlnIDAgLy8gcmVzdWx0OiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gaGVsbG8oc3RyaW5nKXN0cmluZwoqYWJpX3JvdXRlX2hlbGxvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlYyAwIC8vIDB4MTUxZjdjNzUKCgkvLyBuYW1lOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBoZWxsbyhzdHJpbmcpc3RyaW5nCgljYWxsc3ViIGhlbGxvCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGhlbGxvKG5hbWU6IHN0cmluZyk6IHN0cmluZwovLwovLyBBIGRlbW9uc3RyYXRpb24gbWV0aG9kIHVzZWQgaW4gdGhlIEFsZ29LaXQgZnVsbHN0YWNrIHRlbXBsYXRlLgovLyBHcmVldHMgdGhlIHVzZXIgYnkgbmFtZS4KLy8KLy8gQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHVzZXIgdG8gZ3JlZXQuCi8vIEByZXR1cm5zIEEgZ3JlZXRpbmcgbWVzc2FnZSB0byB0aGUgdXNlci4KaGVsbG86Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjU1CgkvLyByZXR1cm4gJ0hlbGxvLCAnICsgbmFtZTsKCXB1c2hieXRlcyAweDQ4NjU2YzZjNmYyYzIwIC8vICJIZWxsbywgIgoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IHN0cmluZwoJY29uY2F0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnRjIDAgLy8gMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CglwdXNoYnl0ZXMgMHhiODQ0N2IzNiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJcHVzaGJ5dGVzIDB4NzZhN2VmMzMgLy8gbWV0aG9kICJkb01hdGgodWludDY0LHVpbnQ2NCxzdHJpbmcpdWludDY0IgoJcHVzaGJ5dGVzIDB4MDJiZWNlMTEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9kb01hdGggKmFiaV9yb3V0ZV9oZWxsbwoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEw"},"byteCode":{"approval":"CiABASYBBBUffHUxGBSBBgsxGQiNDACwAAAAAAAAAAAAAACiAAAAAAAAAAAAAACKAgGL/4v+CImKAgGL/4v+D0EACIv/i/4JQgAFi/6L/wmJKDYaA1cCADYaAhc2GgEXiAAFFlCwIkOKAwGAAIv9gANzdW0SQQAMi/6L/4j/sIwAQgAfi/2ACmRpZmZlcmVuY2USQQAMi/6L/4j/m4wAQgABAIsAjACJKDYaAVcCAIgADEkVFlcGAkxQULAiQ4oBAYAHSGVsbG8sIIv/UIkiQ4AEuER7NjYaAI4B//EAgAR2p+8zgAQCvs4RNhoAjgL/Xv+1AA==","clear":"Cg=="},"compilerInfo":{"compiler":"algod","compilerVersion":{"major":4,"minor":4,"patch":1,"commitHash":"7b607ce4"}}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"Calculator","desc":"","methods":[{"name":"doMath","desc":"A method that takes two numbers and does either addition or subtraction","args":[{"name":"a","type":"uint64","desc":"The first uint64"},{"name":"b","type":"uint64","desc":"The second uint64"},{"name":"operation","type":"string","desc":"The operation to perform. Can be either 'sum' or 'difference'"}],"returns":{"type":"uint64","desc":"The result of the operation"},"actions":{"create":[],"call":["NoOp"]}},{"name":"hello","desc":"A demonstration method used in the AlgoKit fullstack template.\nGreets the user by name.","args":[{"name":"name","type":"string","desc":"The name of the user to greet."}],"returns":{"type":"string","desc":"A greeting message to the user."},"actions":{"create":[],"call":["NoOp"]}},{"name":"createApplication","args":[],"returns":{"type":"void"},"actions":{"create":["NoOp"],"call":[]}}],"arcs":[4,56],"structs":{},"state":{"schema":{"global":{"bytes":0,"ints":0},"local":{"bytes":0,"ints":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":[],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"teal":1,"source":"contracts/Calculator.algo.ts:3","pc":[0]},{"teal":2,"source":"contracts/Calculator.algo.ts:3","pc":[1,2,3]},{"teal":3,"source":"contracts/Calculator.algo.ts:3","pc":[4,5,6,7,8,9,10]},{"teal":15,"source":"contracts/Calculator.algo.ts:3","pc":[11,12]},{"teal":16,"source":"contracts/Calculator.algo.ts:3","pc":[13]},{"teal":17,"source":"contracts/Calculator.algo.ts:3","pc":[14,15]},{"teal":18,"source":"contracts/Calculator.algo.ts:3","pc":[16]},{"teal":19,"source":"contracts/Calculator.algo.ts:3","pc":[17,18]},{"teal":20,"source":"contracts/Calculator.algo.ts:3","pc":[19]},{"teal":21,"source":"contracts/Calculator.algo.ts:3","pc":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45]},{"teal":25,"source":"contracts/Calculator.algo.ts:3","errorMessage":"The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?","pc":[46]},{"teal":35,"source":"contracts/Calculator.algo.ts:11","pc":[47,48,49]},{"teal":39,"source":"contracts/Calculator.algo.ts:12","pc":[50,51]},{"teal":40,"source":"contracts/Calculator.algo.ts:12","pc":[52,53]},{"teal":41,"source":"contracts/Calculator.algo.ts:12","pc":[54]},{"teal":42,"source":"contracts/Calculator.algo.ts:11","pc":[55]},{"teal":52,"source":"contracts/Calculator.algo.ts:22","pc":[56,57,58]},{"teal":56,"source":"contracts/Calculator.algo.ts:23","pc":[59,60]},{"teal":57,"source":"contracts/Calculator.algo.ts:23","pc":[61,62]},{"teal":58,"source":"contracts/Calculator.algo.ts:23","pc":[63]},{"teal":59,"source":"contracts/Calculator.algo.ts:23","pc":[64,65,66]},{"teal":60,"source":"contracts/Calculator.algo.ts:23","pc":[67,68]},{"teal":61,"source":"contracts/Calculator.algo.ts:23","pc":[69,70]},{"teal":62,"source":"contracts/Calculator.algo.ts:23","pc":[71]},{"teal":63,"source":"contracts/Calculator.algo.ts:23","pc":[72,73,74]},{"teal":66,"source":"contracts/Calculator.algo.ts:23","pc":[75,76]},{"teal":67,"source":"contracts/Calculator.algo.ts:23","pc":[77,78]},{"teal":68,"source":"contracts/Calculator.algo.ts:23","pc":[79]},{"teal":71,"source":"contracts/Calculator.algo.ts:22","pc":[80]},{"teal":76,"source":"contracts/Calculator.algo.ts:35","pc":[81]},{"teal":79,"source":"contracts/Calculator.algo.ts:35","pc":[82,83,84]},{"teal":80,"source":"contracts/Calculator.algo.ts:35","pc":[85,86,87]},{"teal":83,"source":"contracts/Calculator.algo.ts:35","pc":[88,89,90]},{"teal":84,"source":"contracts/Calculator.algo.ts:35","pc":[91]},{"teal":87,"source":"contracts/Calculator.algo.ts:35","pc":[92,93,94]},{"teal":88,"source":"contracts/Calculator.algo.ts:35","pc":[95]},{"teal":91,"source":"contracts/Calculator.algo.ts:35","pc":[96,97,98]},{"teal":92,"source":"contracts/Calculator.algo.ts:35","pc":[99]},{"teal":93,"source":"contracts/Calculator.algo.ts:35","pc":[100]},{"teal":94,"source":"contracts/Calculator.algo.ts:35","pc":[101]},{"teal":95,"source":"contracts/Calculator.algo.ts:35","pc":[102]},{"teal":96,"source":"contracts/Calculator.algo.ts:35","pc":[103]},{"teal":108,"source":"contracts/Calculator.algo.ts:35","pc":[104,105,106]},{"teal":111,"source":"contracts/Calculator.algo.ts:35","pc":[107,108]},{"teal":116,"source":"contracts/Calculator.algo.ts:38","pc":[109,110]},{"teal":117,"source":"contracts/Calculator.algo.ts:38","pc":[111,112,113,114,115]},{"teal":118,"source":"contracts/Calculator.algo.ts:38","pc":[116]},{"teal":119,"source":"contracts/Calculator.algo.ts:38","pc":[117,118,119]},{"teal":124,"source":"contracts/Calculator.algo.ts:39","pc":[120,121]},{"teal":125,"source":"contracts/Calculator.algo.ts:39","pc":[122,123]},{"teal":126,"source":"contracts/Calculator.algo.ts:39","pc":[124,125,126]},{"teal":127,"source":"contracts/Calculator.algo.ts:39","pc":[127,128]},{"teal":128,"source":"contracts/Calculator.algo.ts:38","pc":[129,130,131]},{"teal":133,"source":"contracts/Calculator.algo.ts:40","pc":[132,133]},{"teal":134,"source":"contracts/Calculator.algo.ts:40","pc":[134,135,136,137,138,139,140,141,142,143,144,145]},{"teal":135,"source":"contracts/Calculator.algo.ts:40","pc":[146]},{"teal":136,"source":"contracts/Calculator.algo.ts:40","pc":[147,148,149]},{"teal":141,"source":"contracts/Calculator.algo.ts:41","pc":[150,151]},{"teal":142,"source":"contracts/Calculator.algo.ts:41","pc":[152,153]},{"teal":143,"source":"contracts/Calculator.algo.ts:41","pc":[154,155,156]},{"teal":144,"source":"contracts/Calculator.algo.ts:41","pc":[157,158]},{"teal":145,"source":"contracts/Calculator.algo.ts:40","pc":[159,160,161]},{"teal":149,"source":"contracts/Calculator.algo.ts:42","errorMessage":"Invalid operation","pc":[162]},{"teal":154,"source":"contracts/Calculator.algo.ts:44","pc":[163,164]},{"teal":157,"source":"contracts/Calculator.algo.ts:35","pc":[165,166]},{"teal":158,"source":"contracts/Calculator.algo.ts:35","pc":[167]},{"teal":163,"source":"contracts/Calculator.algo.ts:54","pc":[168]},{"teal":166,"source":"contracts/Calculator.algo.ts:54","pc":[169,170,171]},{"teal":167,"source":"contracts/Calculator.algo.ts:54","pc":[172,173,174]},{"teal":170,"source":"contracts/Calculator.algo.ts:54","pc":[175,176,177]},{"teal":171,"source":"contracts/Calculator.algo.ts:54","pc":[178]},{"teal":172,"source":"contracts/Calculator.algo.ts:54","pc":[179]},{"teal":173,"source":"contracts/Calculator.algo.ts:54","pc":[180]},{"teal":174,"source":"contracts/Calculator.algo.ts:54","pc":[181,182,183]},{"teal":175,"source":"contracts/Calculator.algo.ts:54","pc":[184]},{"teal":176,"source":"contracts/Calculator.algo.ts:54","pc":[185]},{"teal":177,"source":"contracts/Calculator.algo.ts:54","pc":[186]},{"teal":178,"source":"contracts/Calculator.algo.ts:54","pc":[187]},{"teal":179,"source":"contracts/Calculator.algo.ts:54","pc":[188]},{"teal":180,"source":"contracts/Calculator.algo.ts:54","pc":[189]},{"teal":190,"source":"contracts/Calculator.algo.ts:54","pc":[190,191,192]},{"teal":194,"source":"contracts/Calculator.algo.ts:55","pc":[193,194,195,196,197,198,199,200,201]},{"teal":195,"source":"contracts/Calculator.algo.ts:55","pc":[202,203]},{"teal":196,"source":"contracts/Calculator.algo.ts:55","pc":[204]},{"teal":197,"source":"contracts/Calculator.algo.ts:54","pc":[205]},{"teal":200,"source":"contracts/Calculator.algo.ts:3","pc":[206]},{"teal":201,"source":"contracts/Calculator.algo.ts:3","pc":[207]},{"teal":204,"source":"contracts/Calculator.algo.ts:3","pc":[208,209,210,211,212,213]},{"teal":205,"source":"contracts/Calculator.algo.ts:3","pc":[214,215,216]},{"teal":206,"source":"contracts/Calculator.algo.ts:3","pc":[217,218,219,220]},{"teal":209,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for create NoOp","pc":[221]},{"teal":212,"source":"contracts/Calculator.algo.ts:3","pc":[222,223,224,225,226,227]},{"teal":213,"source":"contracts/Calculator.algo.ts:3","pc":[228,229,230,231,232,233]},{"teal":214,"source":"contracts/Calculator.algo.ts:3","pc":[234,235,236]},{"teal":215,"source":"contracts/Calculator.algo.ts:3","pc":[237,238,239,240,241,242]},{"teal":218,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for call NoOp","pc":[243]}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxCmJ5dGVjYmxvY2sgMHgxNTFmN2M3NQoKLy8gVGhpcyBURUFMIHdhcyBnZW5lcmF0ZWQgYnkgVEVBTFNjcmlwdCB2MC4xMDcuMgovLyBodHRwczovL2dpdGh1Yi5jb20vYWxnb3JhbmRmb3VuZGF0aW9uL1RFQUxTY3JpcHQKCi8vIFRoaXMgY29udHJhY3QgaXMgY29tcGxpYW50IHdpdGggYW5kL29yIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBBUkNzOiBbIEFSQzQgXQoKLy8gVGhlIGZvbGxvd2luZyB0ZW4gbGluZXMgb2YgVEVBTCBoYW5kbGUgaW5pdGlhbCBwcm9ncmFtIGZsb3cKLy8gVGhpcyBwYXR0ZXJuIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXN5IGZvciBhbnlvbmUgdG8gcGFyc2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9ncmFtIGFuZCBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBhY3Rpb24gaXMgYWxsb3dlZAovLyBIZXJlLCBhY3Rpb24gcmVmZXJzIHRvIHRoZSBPbkNvbXBsZXRlIGluIGNvbWJpbmF0aW9uIHdpdGggd2hldGhlciB0aGUgYXBwIGlzIGJlaW5nIGNyZWF0ZWQgb3IgY2FsbGVkCi8vIEV2ZXJ5IHBvc3NpYmxlIGFjdGlvbiBmb3IgdGhpcyBjb250cmFjdCBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudAovLyBJZiB0aGUgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29udHJhY3QsIGl0cyByZXNwZWN0aXZlIGJyYW5jaCB3aWxsIGJlICIqTk9UX0lNUExFTUVOVEVEIiB3aGljaCBqdXN0IGNvbnRhaW5zICJlcnIiCnR4biBBcHBsaWNhdGlvbklECiEKcHVzaGludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGdldFN1bShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBzdW0gb2YgdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIHN1bSBvZiBhIGFuZCBiCmdldFN1bToKCXByb3RvIDIgMQoKCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MTIKCS8vIHJldHVybiBhICsgYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCSsKCXJldHN1YgoKLy8gZ2V0RGlmZmVyZW5jZShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGFuZCBiLgpnZXREaWZmZXJlbmNlOgoJcHJvdG8gMiAxCgoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czoyMwoJLy8gcmV0dXJuIGEgPj0gYiA/IGEgLSBiIDogYiAtIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0Cgk+PQoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgktCgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCS0KCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGRvTWF0aCh1aW50NjQsdWludDY0LHN0cmluZyl1aW50NjQKKmFiaV9yb3V0ZV9kb01hdGg6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGVjIDAgLy8gMHgxNTFmN2M3NQoKCS8vIG9wZXJhdGlvbjogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglleHRyYWN0IDIgMAoKCS8vIGI6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIGE6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZG9NYXRoKHVpbnQ2NCx1aW50NjQsc3RyaW5nKXVpbnQ2NAoJY2FsbHN1YiBkb01hdGgKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBkb01hdGgoYTogdWludDY0LCBiOiB1aW50NjQsIG9wZXJhdGlvbjogc3RyaW5nKTogdWludDY0Ci8vCi8vIEEgbWV0aG9kIHRoYXQgdGFrZXMgdHdvIG51bWJlcnMgYW5kIGRvZXMgZWl0aGVyIGFkZGl0aW9uIG9yIHN1YnRyYWN0aW9uCi8vCi8vIEBwYXJhbSBhIFRoZSBmaXJzdCB1aW50NjQKLy8gQHBhcmFtIGIgVGhlIHNlY29uZCB1aW50NjQKLy8gQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIHBlcmZvcm0uIENhbiBiZSBlaXRoZXIgJ3N1bScgb3IgJ2RpZmZlcmVuY2UnCi8vCi8vIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbgpkb01hdGg6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJcHVzaGJ5dGVzIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MzgKCS8vIG9wZXJhdGlvbiA9PT0gJ3N1bScKCWZyYW1lX2RpZyAtMyAvLyBvcGVyYXRpb246IHN0cmluZwoJcHVzaGJ5dGVzIDB4NzM3NTZkIC8vICJzdW0iCgk9PQoJYnogKmlmMF9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czozOQoJLy8gcmVzdWx0ID0gdGhpcy5nZXRTdW0oYSwgYikKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWNhbGxzdWIgZ2V0U3VtCglmcmFtZV9idXJ5IDAgLy8gcmVzdWx0OiB1aW50NjQKCWIgKmlmMF9lbmQKCippZjBfZWxzZWlmMV9jb25kaXRpb246CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQwCgkvLyBvcGVyYXRpb24gPT09ICdkaWZmZXJlbmNlJwoJZnJhbWVfZGlnIC0zIC8vIG9wZXJhdGlvbjogc3RyaW5nCglwdXNoYnl0ZXMgMHg2NDY5NjY2NjY1NzI2NTZlNjM2NSAvLyAiZGlmZmVyZW5jZSIKCT09CglieiAqaWYwX2Vsc2UKCgkvLyAqaWYwX2Vsc2VpZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czo0MQoJLy8gcmVzdWx0ID0gdGhpcy5nZXREaWZmZXJlbmNlKGEsIGIpCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CgljYWxsc3ViIGdldERpZmZlcmVuY2UKCWZyYW1lX2J1cnkgMCAvLyByZXN1bHQ6IHVpbnQ2NAoJYiAqaWYwX2VuZAoKKmlmMF9lbHNlOgoJLy8gSW52YWxpZCBvcGVyYXRpb24KCWVycgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQ0CgkvLyByZXR1cm4gcmVzdWx0OwoJZnJhbWVfZGlnIDAgLy8gcmVzdWx0OiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gaGVsbG8oc3RyaW5nKXN0cmluZwoqYWJpX3JvdXRlX2hlbGxvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlYyAwIC8vIDB4MTUxZjdjNzUKCgkvLyBuYW1lOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBoZWxsbyhzdHJpbmcpc3RyaW5nCgljYWxsc3ViIGhlbGxvCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGhlbGxvKG5hbWU6IHN0cmluZyk6IHN0cmluZwovLwovLyBBIGRlbW9uc3RyYXRpb24gbWV0aG9kIHVzZWQgaW4gdGhlIEFsZ29LaXQgZnVsbHN0YWNrIHRlbXBsYXRlLgovLyBHcmVldHMgdGhlIHVzZXIgYnkgbmFtZS4KLy8KLy8gQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHVzZXIgdG8gZ3JlZXQuCi8vIEByZXR1cm5zIEEgZ3JlZXRpbmcgbWVzc2FnZSB0byB0aGUgdXNlci4KaGVsbG86Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjU1CgkvLyByZXR1cm4gJ0hlbGxvLCAnICsgbmFtZTsKCXB1c2hieXRlcyAweDQ4NjU2YzZjNmYyYzIwIC8vICJIZWxsbywgIgoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IHN0cmluZwoJY29uY2F0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnRjIDAgLy8gMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CglwdXNoYnl0ZXMgMHhiODQ0N2IzNiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJcHVzaGJ5dGVzIDB4NzZhN2VmMzMgLy8gbWV0aG9kICJkb01hdGgodWludDY0LHVpbnQ2NCxzdHJpbmcpdWludDY0IgoJcHVzaGJ5dGVzIDB4MDJiZWNlMTEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9kb01hdGggKmFiaV9yb3V0ZV9oZWxsbwoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEw"},"byteCode":{"approval":"CiABASYBBBUffHUxGBSBBgsxGQiNDACwAAAAAAAAAAAAAACiAAAAAAAAAAAAAACKAgGL/4v+CImKAgGL/4v+D0EACIv/i/4JQgAFi/6L/wmJKDYaA1cCADYaAhc2GgEXiAAFFlCwIkOKAwGAAIv9gANzdW0SQQAMi/6L/4j/sIwAQgAfi/2ACmRpZmZlcmVuY2USQQAMi/6L/4j/m4wAQgABAIsAjACJKDYaAVcCAIgADEkVFlcGAkxQULAiQ4oBAYAHSGVsbG8sIIv/UIkiQ4AEuER7NjYaAI4B//EAgAR2p+8zgAQCvs4RNhoAjgL/Xv+1AA==","clear":"Cg=="},"compilerInfo":{"compiler":"algod","compilerVersion":{"major":4,"minor":4,"patch":1,"commitHash":"7b607ce4"}}} as unknown as Arc56Contract /** * A state record containing binary data diff --git a/examples/p-ts/projects/p-ts-contracts/.algokit/.copier-answers.yml b/examples/p-ts/projects/p-ts-contracts/.algokit/.copier-answers.yml index 719485c..bec35c4 100644 --- a/examples/p-ts/projects/p-ts-contracts/.algokit/.copier-answers.yml +++ b/examples/p-ts/projects/p-ts-contracts/.algokit/.copier-answers.yml @@ -6,3 +6,4 @@ author_name: None contract_name: hello_world preset_name: production project_name: p-ts-contracts + diff --git a/examples/p-ts/projects/p-ts-contracts/.algokit/generators/create_contract/copier.yaml b/examples/p-ts/projects/p-ts-contracts/.algokit/generators/create_contract/copier.yaml index 67e3776..82f2c4a 100644 --- a/examples/p-ts/projects/p-ts-contracts/.algokit/generators/create_contract/copier.yaml +++ b/examples/p-ts/projects/p-ts-contracts/.algokit/generators/create_contract/copier.yaml @@ -4,12 +4,12 @@ _tasks: contract_name: type: str help: Name of your new contract. - placeholder: 'my-new-contract' - default: 'my-new-contract' + placeholder: "my-new-contract" + default: "my-new-contract" include_tests: type: bool help: Should we include testing files? default: 'yes' -_templates_suffix: '.j2' +_templates_suffix: ".j2" diff --git a/examples/p-ts/projects/p-ts-contracts/.algokit/generators/create_env_file/copier.yaml b/examples/p-ts/projects/p-ts-contracts/.algokit/generators/create_env_file/copier.yaml index dd81a7f..afa2cac 100644 --- a/examples/p-ts/projects/p-ts-contracts/.algokit/generators/create_env_file/copier.yaml +++ b/examples/p-ts/projects/p-ts-contracts/.algokit/generators/create_env_file/copier.yaml @@ -9,41 +9,41 @@ target_network: - testnet - localnet - custom - default: 'localnet' - when: '{{ not use_generic_env }}' + default: "localnet" + when: "{{ not use_generic_env }}" custom_network_name: type: str help: Name of your custom Algorand network. - placeholder: 'custom' + placeholder: "custom" when: "{{ not use_generic_env and target_network == 'custom' }}" is_localnet: type: bool help: Whether to deploy on localnet. - placeholder: 'true' + placeholder: "true" default: "{{ target_network == 'localnet' and not use_generic_env }}" when: 'false' is_testnet: type: bool help: Whether to deploy on testnet. - placeholder: 'true' + placeholder: "true" default: "{{ target_network == 'testnet' and not use_generic_env }}" when: 'false' is_mainnet: type: bool help: Whether to deploy on mainnet. - placeholder: 'true' + placeholder: "true" default: "{{ target_network == 'mainnet' and not use_generic_env }}" when: 'false' is_customnet: type: bool help: Whether to deploy on custom network. - placeholder: 'true' + placeholder: "true" default: "{{ target_network == 'custom' and not use_generic_env }}" when: 'false' -_templates_suffix: '.j2' +_templates_suffix: ".j2" diff --git a/examples/p-ts/projects/p-ts-contracts/.vscode/launch.json b/examples/p-ts/projects/p-ts-contracts/.vscode/launch.json index 002556d..093ebb1 100644 --- a/examples/p-ts/projects/p-ts-contracts/.vscode/launch.json +++ b/examples/p-ts/projects/p-ts-contracts/.vscode/launch.json @@ -45,8 +45,8 @@ "runtimeArgs": ["run", "build"], "cwd": "${workspaceFolder}", "console": "integratedTerminal", - "skipFiles": ["/**", "node_modules/**"] - }, + "skipFiles": ["/**", "node_modules/**"], + }, { "type": "avm", "request": "launch", diff --git a/examples/p-ts/projects/p-ts-contracts/.vscode/settings.json b/examples/p-ts/projects/p-ts-contracts/.vscode/settings.json index e2a31a2..b60a0a2 100644 --- a/examples/p-ts/projects/p-ts-contracts/.vscode/settings.json +++ b/examples/p-ts/projects/p-ts-contracts/.vscode/settings.json @@ -16,4 +16,4 @@ "extensions": [".ts"] }, "eslint.workingDirectories": ["./smart_contracts"] -} + } diff --git a/examples/p-ts/projects/p-ts-contracts/README.md b/examples/p-ts/projects/p-ts-contracts/README.md index 2282623..ae958d7 100644 --- a/examples/p-ts/projects/p-ts-contracts/README.md +++ b/examples/p-ts/projects/p-ts-contracts/README.md @@ -16,18 +16,15 @@ This project has been generated using AlgoKit. See below for default getting sta ### Initial Setup #### 1. Clone the Repository - Start by cloning this repository to your local machine. #### 2. Install Pre-requisites - Ensure the following pre-requisites are installed and properly configured: - **Docker**: Required for running a local Algorand network. - **AlgoKit CLI**: Essential for project setup and operations. Verify installation with `algokit --version`, expecting `2.6.0` or later. #### 3. Bootstrap Your Local Environment - Run the following commands within the project folder: - **Setup Project**: Execute `algokit project bootstrap all` to install dependencies and setup npm dependencies. @@ -37,16 +34,14 @@ Run the following commands within the project folder: ### Development Workflow #### Terminal - Directly manage and interact with your project using AlgoKit commands: 1. **Build Contracts**: `algokit project run build` compiles all smart contracts. You can also specify a specific contract by passing the name of the contract folder as an extra argument. - For example: `algokit project run build -- hello_world` will only build the `hello_world` contract. +For example: `algokit project run build -- hello_world` will only build the `hello_world` contract. 2. **Deploy**: Use `algokit project deploy localnet` to deploy contracts to the local network. You can also specify a specific contract by passing the name of the contract folder as an extra argument. - For example: `algokit project deploy localnet -- hello_world` will only deploy the `hello_world` contract. - -#### VS Code +For example: `algokit project deploy localnet -- hello_world` will only deploy the `hello_world` contract. +#### VS Code For a seamless experience with breakpoint debugging and other features: 1. **Open Project**: In VS Code, open the repository root. @@ -55,7 +50,6 @@ For a seamless experience with breakpoint debugging and other features: - Use `F5` to start debugging. #### JetBrains IDEs - While primarily optimized for VS Code, JetBrains IDEs are supported: 1. **Open Project**: In your JetBrains IDE, open the repository root. @@ -63,14 +57,13 @@ While primarily optimized for VS Code, JetBrains IDEs are supported: 3. **Debugging**: Use `Shift+F10` or `Ctrl+R` to start debugging. Note: Windows users may encounter issues with pre-launch tasks due to a known bug. See [JetBrains forums](https://youtrack.jetbrains.com/issue/IDEA-277486/Shell-script-configuration-cannot-run-as-before-launch-task) for workarounds. ## AlgoKit Workspaces and Project Management - This project supports both standalone and monorepo setups through AlgoKit workspaces. Leverage [`algokit project run`](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/project/run.md) commands for efficient monorepo project orchestration and management across multiple projects within a workspace. ## AlgoKit Generators This template provides a set of [algokit generators](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/generate.md) that allow you to further modify the project instantiated from the template to fit your needs, as well as giving you a base to build your own extensions to invoke via the `algokit generate` command. -### Generate Smart Contract +### Generate Smart Contract By default the template creates a single `HelloWorld` contract under hello_world folder in the `smart_contracts` directory. To add a new contract: @@ -82,7 +75,7 @@ By default the template creates a single `HelloWorld` contract under hello_world ### Generate '.env' files -By default the template instance does not contain any env files to deploy to different networks. Using [`algokit project deploy`](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/project/deploy.md) against `localnet` | `testnet` | `mainnet` will use default values for `algod` and `indexer` unless overwritten via `.env` or `.env.{target_network}`. +By default the template instance does not contain any env files to deploy to different networks. Using [`algokit project deploy`](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/project/deploy.md) against `localnet` | `testnet` | `mainnet` will use default values for `algod` and `indexer` unless overwritten via `.env` or `.env.{target_network}`. To generate a new `.env` or `.env.{target_network}` file, run `algokit generate env-file` @@ -92,6 +85,7 @@ This project is optimized to work with AlgoKit AVM Debugger extension. To activa Refer to the commented header in the `index.ts` file in the `smart_contracts` folder.Since you have opted in to include VSCode launch configurations in your project, you can also use the `Debug TEAL via AlgoKit AVM Debugger` launch configuration to interactively select an available trace file and launch the debug session for your smart contract. + For information on using and setting up the `AlgoKit AVM Debugger` VSCode extension refer [here](https://github.com/algorandfoundation/algokit-avm-vscode-debugger). To install the extension from the VSCode Marketplace, use the following link: [AlgoKit AVM Debugger extension](https://marketplace.visualstudio.com/items?itemName=algorandfoundation.algokit-avm-vscode-debugger).### Continuous Integration / Continuous Deployment (CI/CD) This project uses [GitHub Actions](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions) to define CI/CD workflows, which are located in the [.github/workflows](`../../.github/workflows`) folder. @@ -104,43 +98,41 @@ To define custom `algokit project run` commands refer to [documentation](https:/ #### Setting up GitHub for CI/CD workflow and TestNet deployment -1. Every time you have a change to your smart contract, and when you first initialize the project you need to [build the contract](#initial-setup) and then commit the `smart_contracts/artifacts` folder so the [output stability](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/articles/output_stability.md) tests pass -2. Decide what values you want to use for the `allowUpdate` and `allowDelete` parameters specified in [`deploy-config.ts`](./smart_contracts/hello_world/deploy-config.ts). - When deploying to LocalNet these values are both set to `true` for convenience. But for non-LocalNet networks - they are more conservative and use `false` - These default values will allow the smart contract to be deployed initially, but will not allow the app to be updated or deleted if is changed and the build will instead fail. - To help you decide it may be helpful to read the [AlgoKit Utils app deployment documentation](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/docs/capabilities/app-deploy.md) or the [AlgoKit smart contract deployment architecture](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/architecture-decisions/2023-01-12_smart-contract-deployment.md#upgradeable-and-deletable-contracts). -3. Create a [Github Environment](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#creating-an-environment) named `Test`. - Note: If you have a private repository and don't have GitHub Enterprise then Environments won't work and you'll need to convert the GitHub Action to use a different approach. Ignore this step if you picked `Starter` preset. -4. Create or obtain a mnemonic for an Algorand account for use on TestNet to deploy apps, referred to as the `DEPLOYER` account. -5. Store the mnemonic as a [secret](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#environment-secrets) `DEPLOYER_MNEMONIC` - in the Test environment created in step 3. -6. The account used to deploy the smart contract will require enough funds to create the app, and also fund it. There are two approaches available here: - - Either, ensure the account is funded outside of CI/CD. - In Testnet, funds can be obtained by using the [Algorand TestNet dispenser](https://bank.testnet.algorand.network/) and we recommend provisioning 50 ALGOs. - - Or, fund the account as part of the CI/CD process by using a `DISPENSER_MNEMONIC` GitHub Environment secret to point to a separate `DISPENSER` account that you maintain ALGOs in (similarly, you need to provision ALGOs into this account using the [TestNet dispenser](https://bank.testnet.algorand.network/)). + 1. Every time you have a change to your smart contract, and when you first initialize the project you need to [build the contract](#initial-setup) and then commit the `smart_contracts/artifacts` folder so the [output stability](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/articles/output_stability.md) tests pass + 2. Decide what values you want to use for the `allowUpdate` and `allowDelete` parameters specified in [`deploy-config.ts`](./smart_contracts/hello_world/deploy-config.ts). + When deploying to LocalNet these values are both set to `true` for convenience. But for non-LocalNet networks + they are more conservative and use `false` + These default values will allow the smart contract to be deployed initially, but will not allow the app to be updated or deleted if is changed and the build will instead fail. + To help you decide it may be helpful to read the [AlgoKit Utils app deployment documentation](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/docs/capabilities/app-deploy.md) or the [AlgoKit smart contract deployment architecture](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/architecture-decisions/2023-01-12_smart-contract-deployment.md#upgradeable-and-deletable-contracts). + 3. Create a [Github Environment](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#creating-an-environment) named `Test`. + Note: If you have a private repository and don't have GitHub Enterprise then Environments won't work and you'll need to convert the GitHub Action to use a different approach. Ignore this step if you picked `Starter` preset. + 4. Create or obtain a mnemonic for an Algorand account for use on TestNet to deploy apps, referred to as the `DEPLOYER` account. + 5. Store the mnemonic as a [secret](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#environment-secrets) `DEPLOYER_MNEMONIC` + in the Test environment created in step 3. + 6. The account used to deploy the smart contract will require enough funds to create the app, and also fund it. There are two approaches available here: + * Either, ensure the account is funded outside of CI/CD. + In Testnet, funds can be obtained by using the [Algorand TestNet dispenser](https://bank.testnet.algorand.network/) and we recommend provisioning 50 ALGOs. + * Or, fund the account as part of the CI/CD process by using a `DISPENSER_MNEMONIC` GitHub Environment secret to point to a separate `DISPENSER` account that you maintain ALGOs in (similarly, you need to provision ALGOs into this account using the [TestNet dispenser](https://bank.testnet.algorand.network/)). #### Continuous Integration For pull requests and pushes to `main` branch against this repository the following checks are automatically performed by GitHub Actions: - -- NPM dependencies are audited using [better-npm-audit](https://github.com/jeemok/better-npm-audit#readme) -- Code formatting is performed using [Prettier](https://prettier.io/) -- Linting is checked using [ESLint](https://eslint.org/) + - NPM dependencies are audited using [better-npm-audit](https://github.com/jeemok/better-npm-audit#readme) + - Code formatting is performed using [Prettier](https://prettier.io/) + - Linting is checked using [ESLint](https://eslint.org/) - The base framework for testing is [vitest](https://vitest.dev/), and the project includes two separate kinds of tests: - - `Algorand TypeScript` smart contract unit tests, that are run using [`algorand-typescript-testing`](https://github.com/algorandfoundation/algorand-typescript-testing), which are executed in a Node.js intepreter emulating major AVM behaviour - - End-to-end (e2e) `AppClient` tests that are run against `algokit localnet` and test the behaviour in a real network environment -- Smart contract artifacts are built -- Smart contract artifacts are checked for [output stability](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/articles/output_stability.md). -- Smart contract is deployed to a AlgoKit LocalNet instance + - Smart contract artifacts are built + - Smart contract artifacts are checked for [output stability](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/articles/output_stability.md). + - Smart contract is deployed to a AlgoKit LocalNet instance > NOTE: By default smart contract artifacts are compiled with `--debug-level` set to 0, to change this, modify the compiler invocation under the `build` script in `package.json` #### Continuous Deployment For pushes to `main` branch, after the above checks pass, the following deployment actions are performed: - -- The smart contract(s) are deployed to TestNet using [AlgoNode](https://algonode.io). + - The smart contract(s) are deployed to TestNet using [AlgoNode](https://algonode.io). > Please note deployment is also performed via `algokit deploy` command which can be invoked both via CI as seen on this project, or locally. For more information on how to use `algokit deploy` please see [AlgoKit documentation](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/deploy.md). @@ -158,4 +150,8 @@ This project makes use of Algorand TypeScript to build Algorand smart contracts. - [vitest](https://vitest.dev/): Automated testing. - [better-npm-audit](https://github.com/jeemok/better-npm-audit#readme): Tool for scanning JavaScript / TypeScript environments for packages with known vulnerabilities. + It has also been configured to have a productive dev experience out of the box in [VS Code](https://code.visualstudio.com/), see the [.vscode](./.vscode) folder. + + + diff --git a/examples/p-ts/projects/p-ts-contracts/eslint.config.mjs b/examples/p-ts/projects/p-ts-contracts/eslint.config.mjs index 17227c7..4d2428a 100644 --- a/examples/p-ts/projects/p-ts-contracts/eslint.config.mjs +++ b/examples/p-ts/projects/p-ts-contracts/eslint.config.mjs @@ -2,13 +2,17 @@ import eslint from '@eslint/js' import tseslint from 'typescript-eslint' import globals from 'globals' -export default tseslint.config(eslint.configs.recommended, tseslint.configs.recommended, { - languageOptions: { - globals: { - ...globals.node, +export default tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, + { + languageOptions: { + globals: { + ...globals.node, + }, + }, + rules: { + '@typescript-eslint/explicit-member-accessibility': 'warn', }, }, - rules: { - '@typescript-eslint/explicit-member-accessibility': 'warn', - }, -}) +); diff --git a/examples/p-ts/projects/p-ts-contracts/smart_contracts/hello_world/deploy-config.ts b/examples/p-ts/projects/p-ts-contracts/smart_contracts/hello_world/deploy-config.ts index 6cf7f14..6b9d652 100644 --- a/examples/p-ts/projects/p-ts-contracts/smart_contracts/hello_world/deploy-config.ts +++ b/examples/p-ts/projects/p-ts-contracts/smart_contracts/hello_world/deploy-config.ts @@ -23,7 +23,7 @@ export async function deploy() { }) } - const method = 'hello' + const method = 'hello' const response = await appClient.send.hello({ args: { name: 'world' }, }) diff --git a/examples/p-ts/projects/p-ts-contracts/smart_contracts/index.ts b/examples/p-ts/projects/p-ts-contracts/smart_contracts/index.ts index d152f49..6030d0e 100644 --- a/examples/p-ts/projects/p-ts-contracts/smart_contracts/index.ts +++ b/examples/p-ts/projects/p-ts-contracts/smart_contracts/index.ts @@ -39,12 +39,12 @@ async function getDeployers() { } // execute all the deployers -;(async () => { +(async () => { const contractName = process.argv.length > 2 ? process.argv[2] : undefined const contractDeployers = await getDeployers() - + const filteredDeployers = contractName - ? contractDeployers.filter((deployer) => deployer.name === contractName) + ? contractDeployers.filter(deployer => deployer.name === contractName) : contractDeployers if (contractName && filteredDeployers.length === 0) { diff --git a/examples/p-ts/projects/p-ts-contracts/tsconfig.json b/examples/p-ts/projects/p-ts-contracts/tsconfig.json index a1e51b7..d989075 100644 --- a/examples/p-ts/projects/p-ts-contracts/tsconfig.json +++ b/examples/p-ts/projects/p-ts-contracts/tsconfig.json @@ -17,7 +17,9 @@ "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, - "lib": ["ESNext"] + "lib": [ + "ESNext" + ], }, "include": ["smart_contracts/**/*.ts"], "exclude": ["node_modules", "dist", "coverage"] diff --git a/examples/p-ts/projects/p-ts-contracts/vitest.config.mts b/examples/p-ts/projects/p-ts-contracts/vitest.config.mts index 023dc0d..abb2d2a 100644 --- a/examples/p-ts/projects/p-ts-contracts/vitest.config.mts +++ b/examples/p-ts/projects/p-ts-contracts/vitest.config.mts @@ -4,7 +4,7 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ esbuild: {}, - test: { + test: { testTimeout: 10000, coverage: { provider: 'v8', diff --git a/examples/p-ts/projects/p-ts-frontend/src/components/AppCalls.tsx b/examples/p-ts/projects/p-ts-frontend/src/components/AppCalls.tsx index 1268994..55fb808 100644 --- a/examples/p-ts/projects/p-ts-frontend/src/components/AppCalls.tsx +++ b/examples/p-ts/projects/p-ts-frontend/src/components/AppCalls.tsx @@ -5,6 +5,7 @@ import { HelloWorldFactory } from '../contracts/HelloWorld' import { OnSchemaBreak, OnUpdate } from '@algorandfoundation/algokit-utils/types/app' import { getAlgodConfigFromViteEnvironment, getIndexerConfigFromViteEnvironment } from '../utils/network/getAlgoClientConfigs' import { AlgorandClient } from '@algorandfoundation/algokit-utils' +import { encodeTransactionRaw } from '@algorandfoundation/algokit-utils/transact' interface AppCallsInterface { openModal: boolean @@ -15,7 +16,7 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { const [loading, setLoading] = useState(false) const [contractInput, setContractInput] = useState('') const { enqueueSnackbar } = useSnackbar() - const { transactionSigner, activeAddress } = useWallet() + const { signTransactions, activeAddress } = useWallet() const algodConfig = getAlgodConfigFromViteEnvironment() const indexerConfig = getIndexerConfigFromViteEnvironment() @@ -23,7 +24,11 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { algodConfig, indexerConfig, }) - algorand.setDefaultSigner(transactionSigner) + algorand.setDefaultSigner(async (txnGroup, indexesToSign) => { + const encoded = txnGroup.map((txn) => encodeTransactionRaw(txn)) + const signed = await signTransactions(encoded, indexesToSign) + return signed.filter((s): s is Uint8Array => s !== null) + }) const sendAppCall = async () => { setLoading(true) diff --git a/examples/s-py/projects/s-py-frontend/src/components/AppCalls.tsx b/examples/s-py/projects/s-py-frontend/src/components/AppCalls.tsx index 1268994..55fb808 100644 --- a/examples/s-py/projects/s-py-frontend/src/components/AppCalls.tsx +++ b/examples/s-py/projects/s-py-frontend/src/components/AppCalls.tsx @@ -5,6 +5,7 @@ import { HelloWorldFactory } from '../contracts/HelloWorld' import { OnSchemaBreak, OnUpdate } from '@algorandfoundation/algokit-utils/types/app' import { getAlgodConfigFromViteEnvironment, getIndexerConfigFromViteEnvironment } from '../utils/network/getAlgoClientConfigs' import { AlgorandClient } from '@algorandfoundation/algokit-utils' +import { encodeTransactionRaw } from '@algorandfoundation/algokit-utils/transact' interface AppCallsInterface { openModal: boolean @@ -15,7 +16,7 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { const [loading, setLoading] = useState(false) const [contractInput, setContractInput] = useState('') const { enqueueSnackbar } = useSnackbar() - const { transactionSigner, activeAddress } = useWallet() + const { signTransactions, activeAddress } = useWallet() const algodConfig = getAlgodConfigFromViteEnvironment() const indexerConfig = getIndexerConfigFromViteEnvironment() @@ -23,7 +24,11 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { algodConfig, indexerConfig, }) - algorand.setDefaultSigner(transactionSigner) + algorand.setDefaultSigner(async (txnGroup, indexesToSign) => { + const encoded = txnGroup.map((txn) => encodeTransactionRaw(txn)) + const signed = await signTransactions(encoded, indexesToSign) + return signed.filter((s): s is Uint8Array => s !== null) + }) const sendAppCall = async () => { setLoading(true) diff --git a/examples/s-py/projects/s-py-frontend/src/contracts/HelloWorld.ts b/examples/s-py/projects/s-py-frontend/src/contracts/HelloWorld.ts index 1fc6caf..d5f247a 100644 --- a/examples/s-py/projects/s-py-frontend/src/contracts/HelloWorld.ts +++ b/examples/s-py/projects/s-py-frontend/src/contracts/HelloWorld.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"HelloWorld","structs":{},"methods":[{"name":"hello","args":[{"type":"string","name":"name"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[37],"errorMessage":"OnCompletion must be NoOp && can only call when creating"},{"pc":[26],"errorMessage":"OnCompletion must be NoOp && can only call when not creating"},{"pc":[47],"errorMessage":"invalid array length header"},{"pc":[55],"errorMessage":"invalid number of bytes for arc4.dynamic_array"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo1CiAgICAvLyBjbGFzcyBIZWxsb1dvcmxkKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA1CiAgICBwdXNoYnl0ZXMgMHgwMmJlY2UxMSAvLyBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2hlbGxvX3JvdXRlQDMKICAgIGVycgoKbWFpbl9oZWxsb19yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2hlbGxvX3dvcmxkL2NvbnRyYWN0LnB5OjYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGhlbGxvCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDU6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5oZWxsb193b3JsZC5jb250cmFjdC5IZWxsb1dvcmxkLmhlbGxvW3JvdXRpbmddKCkgLT4gdm9pZDoKaGVsbG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvaGVsbG9fd29ybGQvY29udHJhY3QucHk6NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIHB1c2hpbnQgMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2hlbGxvX3dvcmxkL2NvbnRyYWN0LnB5OjgKICAgIC8vIHJldHVybiAiSGVsbG8sICIgKyBuYW1lCiAgICBwdXNoYnl0ZXMgIkhlbGxvLCAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"},"byteCode":{"approval":"CzEbQQAYgAQCvs4RNhoAjgEAAQAxGRQxGBBEQgALMRkUMRgUEESBAUM2GgFJgQBZgQIISwEVEkRXAgCAB0hlbGxvLCBMUEkVFlcGAkxQgAQVH3x1TFCwgQFD","clear":"C4EBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":5,"minor":4,"patch":0}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"HelloWorld","structs":{},"methods":[{"name":"hello","args":[{"type":"string","name":"name"}],"returns":{"type":"string"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[44],"errorMessage":"invalid array length header"},{"pc":[52],"errorMessage":"invalid number of bytes for arc4.dynamic_array"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo1CiAgICAvLyBjbGFzcyBIZWxsb1dvcmxkKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA1CiAgICBwdXNoYnl0ZXMgMHgwMmJlY2UxMSAvLyBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2hlbGxvX3JvdXRlQDMKICAgIGVycgoKbWFpbl9oZWxsb19yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2hlbGxvX3dvcmxkL2NvbnRyYWN0LnB5OjYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQKICAgIGIgaGVsbG8KCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVANToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmhlbGxvX3dvcmxkLmNvbnRyYWN0LkhlbGxvV29ybGQuaGVsbG9bcm91dGluZ10oKSAtPiB2b2lkOgpoZWxsbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgcHVzaGludCAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo4CiAgICAvLyByZXR1cm4gIkhlbGxvLCAiICsgbmFtZQogICAgcHVzaGJ5dGVzICJIZWxsbywgIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvaGVsbG9fd29ybGQvY29udHJhY3QucHk6NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBwdXNoaW50IDEKICAgIHJldHVybgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CzEbQQAYgAQCvs4RNhoAjgEAAQAxGRQxGBBEQgAIMRkUMRgUEEM2GgFJgQBZgQIISwEVEkRXAgCAB0hlbGxvLCBMUEkVFlcGAkxQgAQVH3x1TFCwgQFD","clear":"C4EBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":5,"minor":7,"patch":1}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data diff --git a/examples/s-tls/projects/s-tls-contracts/contracts/clients/CalculatorClient.ts b/examples/s-tls/projects/s-tls-contracts/contracts/clients/CalculatorClient.ts index ef4d4eb..d3674b9 100644 --- a/examples/s-tls/projects/s-tls-contracts/contracts/clients/CalculatorClient.ts +++ b/examples/s-tls/projects/s-tls-contracts/contracts/clients/CalculatorClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"Calculator","desc":"","methods":[{"name":"doMath","desc":"A method that takes two numbers and does either addition or subtraction","args":[{"name":"a","type":"uint64","desc":"The first uint64"},{"name":"b","type":"uint64","desc":"The second uint64"},{"name":"operation","type":"string","desc":"The operation to perform. Can be either 'sum' or 'difference'"}],"returns":{"type":"uint64","desc":"The result of the operation"},"actions":{"create":[],"call":["NoOp"]}},{"name":"hello","desc":"A demonstration method used in the AlgoKit fullstack template.\nGreets the user by name.","args":[{"name":"name","type":"string","desc":"The name of the user to greet."}],"returns":{"type":"string","desc":"A greeting message to the user."},"actions":{"create":[],"call":["NoOp"]}},{"name":"createApplication","args":[],"returns":{"type":"void"},"actions":{"create":["NoOp"],"call":[]}}],"arcs":[4,56],"structs":{},"state":{"schema":{"global":{"bytes":0,"ints":0},"local":{"bytes":0,"ints":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":[],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"teal":1,"source":"contracts/Calculator.algo.ts:3","pc":[0]},{"teal":2,"source":"contracts/Calculator.algo.ts:3","pc":[1,2,3]},{"teal":3,"source":"contracts/Calculator.algo.ts:3","pc":[4,5,6,7,8,9,10]},{"teal":15,"source":"contracts/Calculator.algo.ts:3","pc":[11,12]},{"teal":16,"source":"contracts/Calculator.algo.ts:3","pc":[13]},{"teal":17,"source":"contracts/Calculator.algo.ts:3","pc":[14,15]},{"teal":18,"source":"contracts/Calculator.algo.ts:3","pc":[16]},{"teal":19,"source":"contracts/Calculator.algo.ts:3","pc":[17,18]},{"teal":20,"source":"contracts/Calculator.algo.ts:3","pc":[19]},{"teal":21,"source":"contracts/Calculator.algo.ts:3","pc":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45]},{"teal":25,"source":"contracts/Calculator.algo.ts:3","errorMessage":"The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?","pc":[46]},{"teal":35,"source":"contracts/Calculator.algo.ts:11","pc":[47,48,49]},{"teal":39,"source":"contracts/Calculator.algo.ts:12","pc":[50,51]},{"teal":40,"source":"contracts/Calculator.algo.ts:12","pc":[52,53]},{"teal":41,"source":"contracts/Calculator.algo.ts:12","pc":[54]},{"teal":42,"source":"contracts/Calculator.algo.ts:11","pc":[55]},{"teal":52,"source":"contracts/Calculator.algo.ts:22","pc":[56,57,58]},{"teal":56,"source":"contracts/Calculator.algo.ts:23","pc":[59,60]},{"teal":57,"source":"contracts/Calculator.algo.ts:23","pc":[61,62]},{"teal":58,"source":"contracts/Calculator.algo.ts:23","pc":[63]},{"teal":59,"source":"contracts/Calculator.algo.ts:23","pc":[64,65,66]},{"teal":60,"source":"contracts/Calculator.algo.ts:23","pc":[67,68]},{"teal":61,"source":"contracts/Calculator.algo.ts:23","pc":[69,70]},{"teal":62,"source":"contracts/Calculator.algo.ts:23","pc":[71]},{"teal":63,"source":"contracts/Calculator.algo.ts:23","pc":[72,73,74]},{"teal":66,"source":"contracts/Calculator.algo.ts:23","pc":[75,76]},{"teal":67,"source":"contracts/Calculator.algo.ts:23","pc":[77,78]},{"teal":68,"source":"contracts/Calculator.algo.ts:23","pc":[79]},{"teal":71,"source":"contracts/Calculator.algo.ts:22","pc":[80]},{"teal":76,"source":"contracts/Calculator.algo.ts:35","pc":[81]},{"teal":79,"source":"contracts/Calculator.algo.ts:35","pc":[82,83,84]},{"teal":80,"source":"contracts/Calculator.algo.ts:35","pc":[85,86,87]},{"teal":83,"source":"contracts/Calculator.algo.ts:35","pc":[88,89,90]},{"teal":84,"source":"contracts/Calculator.algo.ts:35","pc":[91]},{"teal":87,"source":"contracts/Calculator.algo.ts:35","pc":[92,93,94]},{"teal":88,"source":"contracts/Calculator.algo.ts:35","pc":[95]},{"teal":91,"source":"contracts/Calculator.algo.ts:35","pc":[96,97,98]},{"teal":92,"source":"contracts/Calculator.algo.ts:35","pc":[99]},{"teal":93,"source":"contracts/Calculator.algo.ts:35","pc":[100]},{"teal":94,"source":"contracts/Calculator.algo.ts:35","pc":[101]},{"teal":95,"source":"contracts/Calculator.algo.ts:35","pc":[102]},{"teal":96,"source":"contracts/Calculator.algo.ts:35","pc":[103]},{"teal":108,"source":"contracts/Calculator.algo.ts:35","pc":[104,105,106]},{"teal":111,"source":"contracts/Calculator.algo.ts:35","pc":[107,108]},{"teal":116,"source":"contracts/Calculator.algo.ts:38","pc":[109,110]},{"teal":117,"source":"contracts/Calculator.algo.ts:38","pc":[111,112,113,114,115]},{"teal":118,"source":"contracts/Calculator.algo.ts:38","pc":[116]},{"teal":119,"source":"contracts/Calculator.algo.ts:38","pc":[117,118,119]},{"teal":124,"source":"contracts/Calculator.algo.ts:39","pc":[120,121]},{"teal":125,"source":"contracts/Calculator.algo.ts:39","pc":[122,123]},{"teal":126,"source":"contracts/Calculator.algo.ts:39","pc":[124,125,126]},{"teal":127,"source":"contracts/Calculator.algo.ts:39","pc":[127,128]},{"teal":128,"source":"contracts/Calculator.algo.ts:38","pc":[129,130,131]},{"teal":133,"source":"contracts/Calculator.algo.ts:40","pc":[132,133]},{"teal":134,"source":"contracts/Calculator.algo.ts:40","pc":[134,135,136,137,138,139,140,141,142,143,144,145]},{"teal":135,"source":"contracts/Calculator.algo.ts:40","pc":[146]},{"teal":136,"source":"contracts/Calculator.algo.ts:40","pc":[147,148,149]},{"teal":141,"source":"contracts/Calculator.algo.ts:41","pc":[150,151]},{"teal":142,"source":"contracts/Calculator.algo.ts:41","pc":[152,153]},{"teal":143,"source":"contracts/Calculator.algo.ts:41","pc":[154,155,156]},{"teal":144,"source":"contracts/Calculator.algo.ts:41","pc":[157,158]},{"teal":145,"source":"contracts/Calculator.algo.ts:40","pc":[159,160,161]},{"teal":149,"source":"contracts/Calculator.algo.ts:42","errorMessage":"Invalid operation","pc":[162]},{"teal":154,"source":"contracts/Calculator.algo.ts:44","pc":[163,164]},{"teal":157,"source":"contracts/Calculator.algo.ts:35","pc":[165,166]},{"teal":158,"source":"contracts/Calculator.algo.ts:35","pc":[167]},{"teal":163,"source":"contracts/Calculator.algo.ts:54","pc":[168]},{"teal":166,"source":"contracts/Calculator.algo.ts:54","pc":[169,170,171]},{"teal":167,"source":"contracts/Calculator.algo.ts:54","pc":[172,173,174]},{"teal":170,"source":"contracts/Calculator.algo.ts:54","pc":[175,176,177]},{"teal":171,"source":"contracts/Calculator.algo.ts:54","pc":[178]},{"teal":172,"source":"contracts/Calculator.algo.ts:54","pc":[179]},{"teal":173,"source":"contracts/Calculator.algo.ts:54","pc":[180]},{"teal":174,"source":"contracts/Calculator.algo.ts:54","pc":[181,182,183]},{"teal":175,"source":"contracts/Calculator.algo.ts:54","pc":[184]},{"teal":176,"source":"contracts/Calculator.algo.ts:54","pc":[185]},{"teal":177,"source":"contracts/Calculator.algo.ts:54","pc":[186]},{"teal":178,"source":"contracts/Calculator.algo.ts:54","pc":[187]},{"teal":179,"source":"contracts/Calculator.algo.ts:54","pc":[188]},{"teal":180,"source":"contracts/Calculator.algo.ts:54","pc":[189]},{"teal":190,"source":"contracts/Calculator.algo.ts:54","pc":[190,191,192]},{"teal":194,"source":"contracts/Calculator.algo.ts:55","pc":[193,194,195,196,197,198,199,200,201]},{"teal":195,"source":"contracts/Calculator.algo.ts:55","pc":[202,203]},{"teal":196,"source":"contracts/Calculator.algo.ts:55","pc":[204]},{"teal":197,"source":"contracts/Calculator.algo.ts:54","pc":[205]},{"teal":200,"source":"contracts/Calculator.algo.ts:3","pc":[206]},{"teal":201,"source":"contracts/Calculator.algo.ts:3","pc":[207]},{"teal":204,"source":"contracts/Calculator.algo.ts:3","pc":[208,209,210,211,212,213]},{"teal":205,"source":"contracts/Calculator.algo.ts:3","pc":[214,215,216]},{"teal":206,"source":"contracts/Calculator.algo.ts:3","pc":[217,218,219,220]},{"teal":209,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for create NoOp","pc":[221]},{"teal":212,"source":"contracts/Calculator.algo.ts:3","pc":[222,223,224,225,226,227]},{"teal":213,"source":"contracts/Calculator.algo.ts:3","pc":[228,229,230,231,232,233]},{"teal":214,"source":"contracts/Calculator.algo.ts:3","pc":[234,235,236]},{"teal":215,"source":"contracts/Calculator.algo.ts:3","pc":[237,238,239,240,241,242]},{"teal":218,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for call NoOp","pc":[243]}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxCmJ5dGVjYmxvY2sgMHgxNTFmN2M3NQoKLy8gVGhpcyBURUFMIHdhcyBnZW5lcmF0ZWQgYnkgVEVBTFNjcmlwdCB2MC4xMDcuMQovLyBodHRwczovL2dpdGh1Yi5jb20vYWxnb3JhbmRmb3VuZGF0aW9uL1RFQUxTY3JpcHQKCi8vIFRoaXMgY29udHJhY3QgaXMgY29tcGxpYW50IHdpdGggYW5kL29yIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBBUkNzOiBbIEFSQzQgXQoKLy8gVGhlIGZvbGxvd2luZyB0ZW4gbGluZXMgb2YgVEVBTCBoYW5kbGUgaW5pdGlhbCBwcm9ncmFtIGZsb3cKLy8gVGhpcyBwYXR0ZXJuIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXN5IGZvciBhbnlvbmUgdG8gcGFyc2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9ncmFtIGFuZCBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBhY3Rpb24gaXMgYWxsb3dlZAovLyBIZXJlLCBhY3Rpb24gcmVmZXJzIHRvIHRoZSBPbkNvbXBsZXRlIGluIGNvbWJpbmF0aW9uIHdpdGggd2hldGhlciB0aGUgYXBwIGlzIGJlaW5nIGNyZWF0ZWQgb3IgY2FsbGVkCi8vIEV2ZXJ5IHBvc3NpYmxlIGFjdGlvbiBmb3IgdGhpcyBjb250cmFjdCBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudAovLyBJZiB0aGUgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29udHJhY3QsIGl0cyByZXNwZWN0aXZlIGJyYW5jaCB3aWxsIGJlICIqTk9UX0lNUExFTUVOVEVEIiB3aGljaCBqdXN0IGNvbnRhaW5zICJlcnIiCnR4biBBcHBsaWNhdGlvbklECiEKcHVzaGludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGdldFN1bShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBzdW0gb2YgdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIHN1bSBvZiBhIGFuZCBiCmdldFN1bToKCXByb3RvIDIgMQoKCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MTIKCS8vIHJldHVybiBhICsgYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCSsKCXJldHN1YgoKLy8gZ2V0RGlmZmVyZW5jZShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGFuZCBiLgpnZXREaWZmZXJlbmNlOgoJcHJvdG8gMiAxCgoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czoyMwoJLy8gcmV0dXJuIGEgPj0gYiA/IGEgLSBiIDogYiAtIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0Cgk+PQoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgktCgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCS0KCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGRvTWF0aCh1aW50NjQsdWludDY0LHN0cmluZyl1aW50NjQKKmFiaV9yb3V0ZV9kb01hdGg6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGVjIDAgLy8gMHgxNTFmN2M3NQoKCS8vIG9wZXJhdGlvbjogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglleHRyYWN0IDIgMAoKCS8vIGI6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIGE6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZG9NYXRoKHVpbnQ2NCx1aW50NjQsc3RyaW5nKXVpbnQ2NAoJY2FsbHN1YiBkb01hdGgKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBkb01hdGgoYTogdWludDY0LCBiOiB1aW50NjQsIG9wZXJhdGlvbjogc3RyaW5nKTogdWludDY0Ci8vCi8vIEEgbWV0aG9kIHRoYXQgdGFrZXMgdHdvIG51bWJlcnMgYW5kIGRvZXMgZWl0aGVyIGFkZGl0aW9uIG9yIHN1YnRyYWN0aW9uCi8vCi8vIEBwYXJhbSBhIFRoZSBmaXJzdCB1aW50NjQKLy8gQHBhcmFtIGIgVGhlIHNlY29uZCB1aW50NjQKLy8gQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIHBlcmZvcm0uIENhbiBiZSBlaXRoZXIgJ3N1bScgb3IgJ2RpZmZlcmVuY2UnCi8vCi8vIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbgpkb01hdGg6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJcHVzaGJ5dGVzIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MzgKCS8vIG9wZXJhdGlvbiA9PT0gJ3N1bScKCWZyYW1lX2RpZyAtMyAvLyBvcGVyYXRpb246IHN0cmluZwoJcHVzaGJ5dGVzIDB4NzM3NTZkIC8vICJzdW0iCgk9PQoJYnogKmlmMF9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czozOQoJLy8gcmVzdWx0ID0gdGhpcy5nZXRTdW0oYSwgYikKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWNhbGxzdWIgZ2V0U3VtCglmcmFtZV9idXJ5IDAgLy8gcmVzdWx0OiB1aW50NjQKCWIgKmlmMF9lbmQKCippZjBfZWxzZWlmMV9jb25kaXRpb246CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQwCgkvLyBvcGVyYXRpb24gPT09ICdkaWZmZXJlbmNlJwoJZnJhbWVfZGlnIC0zIC8vIG9wZXJhdGlvbjogc3RyaW5nCglwdXNoYnl0ZXMgMHg2NDY5NjY2NjY1NzI2NTZlNjM2NSAvLyAiZGlmZmVyZW5jZSIKCT09CglieiAqaWYwX2Vsc2UKCgkvLyAqaWYwX2Vsc2VpZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czo0MQoJLy8gcmVzdWx0ID0gdGhpcy5nZXREaWZmZXJlbmNlKGEsIGIpCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CgljYWxsc3ViIGdldERpZmZlcmVuY2UKCWZyYW1lX2J1cnkgMCAvLyByZXN1bHQ6IHVpbnQ2NAoJYiAqaWYwX2VuZAoKKmlmMF9lbHNlOgoJLy8gSW52YWxpZCBvcGVyYXRpb24KCWVycgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQ0CgkvLyByZXR1cm4gcmVzdWx0OwoJZnJhbWVfZGlnIDAgLy8gcmVzdWx0OiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gaGVsbG8oc3RyaW5nKXN0cmluZwoqYWJpX3JvdXRlX2hlbGxvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlYyAwIC8vIDB4MTUxZjdjNzUKCgkvLyBuYW1lOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBoZWxsbyhzdHJpbmcpc3RyaW5nCgljYWxsc3ViIGhlbGxvCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGhlbGxvKG5hbWU6IHN0cmluZyk6IHN0cmluZwovLwovLyBBIGRlbW9uc3RyYXRpb24gbWV0aG9kIHVzZWQgaW4gdGhlIEFsZ29LaXQgZnVsbHN0YWNrIHRlbXBsYXRlLgovLyBHcmVldHMgdGhlIHVzZXIgYnkgbmFtZS4KLy8KLy8gQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHVzZXIgdG8gZ3JlZXQuCi8vIEByZXR1cm5zIEEgZ3JlZXRpbmcgbWVzc2FnZSB0byB0aGUgdXNlci4KaGVsbG86Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjU1CgkvLyByZXR1cm4gJ0hlbGxvLCAnICsgbmFtZTsKCXB1c2hieXRlcyAweDQ4NjU2YzZjNmYyYzIwIC8vICJIZWxsbywgIgoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IHN0cmluZwoJY29uY2F0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnRjIDAgLy8gMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CglwdXNoYnl0ZXMgMHhiODQ0N2IzNiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJcHVzaGJ5dGVzIDB4NzZhN2VmMzMgLy8gbWV0aG9kICJkb01hdGgodWludDY0LHVpbnQ2NCxzdHJpbmcpdWludDY0IgoJcHVzaGJ5dGVzIDB4MDJiZWNlMTEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9kb01hdGggKmFiaV9yb3V0ZV9oZWxsbwoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEw"},"byteCode":{"approval":"CiABASYBBBUffHUxGBSBBgsxGQiNDACwAAAAAAAAAAAAAACiAAAAAAAAAAAAAACKAgGL/4v+CImKAgGL/4v+D0EACIv/i/4JQgAFi/6L/wmJKDYaA1cCADYaAhc2GgEXiAAFFlCwIkOKAwGAAIv9gANzdW0SQQAMi/6L/4j/sIwAQgAfi/2ACmRpZmZlcmVuY2USQQAMi/6L/4j/m4wAQgABAIsAjACJKDYaAVcCAIgADEkVFlcGAkxQULAiQ4oBAYAHSGVsbG8sIIv/UIkiQ4AEuER7NjYaAI4B//EAgAR2p+8zgAQCvs4RNhoAjgL/Xv+1AA==","clear":"Cg=="},"compilerInfo":{"compiler":"algod","compilerVersion":{"major":4,"minor":4,"patch":1,"commitHash":"7b607ce4"}}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"Calculator","desc":"","methods":[{"name":"doMath","desc":"A method that takes two numbers and does either addition or subtraction","args":[{"name":"a","type":"uint64","desc":"The first uint64"},{"name":"b","type":"uint64","desc":"The second uint64"},{"name":"operation","type":"string","desc":"The operation to perform. Can be either 'sum' or 'difference'"}],"returns":{"type":"uint64","desc":"The result of the operation"},"actions":{"create":[],"call":["NoOp"]}},{"name":"hello","desc":"A demonstration method used in the AlgoKit fullstack template.\nGreets the user by name.","args":[{"name":"name","type":"string","desc":"The name of the user to greet."}],"returns":{"type":"string","desc":"A greeting message to the user."},"actions":{"create":[],"call":["NoOp"]}},{"name":"createApplication","args":[],"returns":{"type":"void"},"actions":{"create":["NoOp"],"call":[]}}],"arcs":[4,56],"structs":{},"state":{"schema":{"global":{"bytes":0,"ints":0},"local":{"bytes":0,"ints":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":[],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"teal":1,"source":"contracts/Calculator.algo.ts:3","pc":[0]},{"teal":2,"source":"contracts/Calculator.algo.ts:3","pc":[1,2,3]},{"teal":3,"source":"contracts/Calculator.algo.ts:3","pc":[4,5,6,7,8,9,10]},{"teal":15,"source":"contracts/Calculator.algo.ts:3","pc":[11,12]},{"teal":16,"source":"contracts/Calculator.algo.ts:3","pc":[13]},{"teal":17,"source":"contracts/Calculator.algo.ts:3","pc":[14,15]},{"teal":18,"source":"contracts/Calculator.algo.ts:3","pc":[16]},{"teal":19,"source":"contracts/Calculator.algo.ts:3","pc":[17,18]},{"teal":20,"source":"contracts/Calculator.algo.ts:3","pc":[19]},{"teal":21,"source":"contracts/Calculator.algo.ts:3","pc":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45]},{"teal":25,"source":"contracts/Calculator.algo.ts:3","errorMessage":"The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?","pc":[46]},{"teal":35,"source":"contracts/Calculator.algo.ts:11","pc":[47,48,49]},{"teal":39,"source":"contracts/Calculator.algo.ts:12","pc":[50,51]},{"teal":40,"source":"contracts/Calculator.algo.ts:12","pc":[52,53]},{"teal":41,"source":"contracts/Calculator.algo.ts:12","pc":[54]},{"teal":42,"source":"contracts/Calculator.algo.ts:11","pc":[55]},{"teal":52,"source":"contracts/Calculator.algo.ts:22","pc":[56,57,58]},{"teal":56,"source":"contracts/Calculator.algo.ts:23","pc":[59,60]},{"teal":57,"source":"contracts/Calculator.algo.ts:23","pc":[61,62]},{"teal":58,"source":"contracts/Calculator.algo.ts:23","pc":[63]},{"teal":59,"source":"contracts/Calculator.algo.ts:23","pc":[64,65,66]},{"teal":60,"source":"contracts/Calculator.algo.ts:23","pc":[67,68]},{"teal":61,"source":"contracts/Calculator.algo.ts:23","pc":[69,70]},{"teal":62,"source":"contracts/Calculator.algo.ts:23","pc":[71]},{"teal":63,"source":"contracts/Calculator.algo.ts:23","pc":[72,73,74]},{"teal":66,"source":"contracts/Calculator.algo.ts:23","pc":[75,76]},{"teal":67,"source":"contracts/Calculator.algo.ts:23","pc":[77,78]},{"teal":68,"source":"contracts/Calculator.algo.ts:23","pc":[79]},{"teal":71,"source":"contracts/Calculator.algo.ts:22","pc":[80]},{"teal":76,"source":"contracts/Calculator.algo.ts:35","pc":[81]},{"teal":79,"source":"contracts/Calculator.algo.ts:35","pc":[82,83,84]},{"teal":80,"source":"contracts/Calculator.algo.ts:35","pc":[85,86,87]},{"teal":83,"source":"contracts/Calculator.algo.ts:35","pc":[88,89,90]},{"teal":84,"source":"contracts/Calculator.algo.ts:35","pc":[91]},{"teal":87,"source":"contracts/Calculator.algo.ts:35","pc":[92,93,94]},{"teal":88,"source":"contracts/Calculator.algo.ts:35","pc":[95]},{"teal":91,"source":"contracts/Calculator.algo.ts:35","pc":[96,97,98]},{"teal":92,"source":"contracts/Calculator.algo.ts:35","pc":[99]},{"teal":93,"source":"contracts/Calculator.algo.ts:35","pc":[100]},{"teal":94,"source":"contracts/Calculator.algo.ts:35","pc":[101]},{"teal":95,"source":"contracts/Calculator.algo.ts:35","pc":[102]},{"teal":96,"source":"contracts/Calculator.algo.ts:35","pc":[103]},{"teal":108,"source":"contracts/Calculator.algo.ts:35","pc":[104,105,106]},{"teal":111,"source":"contracts/Calculator.algo.ts:35","pc":[107,108]},{"teal":116,"source":"contracts/Calculator.algo.ts:38","pc":[109,110]},{"teal":117,"source":"contracts/Calculator.algo.ts:38","pc":[111,112,113,114,115]},{"teal":118,"source":"contracts/Calculator.algo.ts:38","pc":[116]},{"teal":119,"source":"contracts/Calculator.algo.ts:38","pc":[117,118,119]},{"teal":124,"source":"contracts/Calculator.algo.ts:39","pc":[120,121]},{"teal":125,"source":"contracts/Calculator.algo.ts:39","pc":[122,123]},{"teal":126,"source":"contracts/Calculator.algo.ts:39","pc":[124,125,126]},{"teal":127,"source":"contracts/Calculator.algo.ts:39","pc":[127,128]},{"teal":128,"source":"contracts/Calculator.algo.ts:38","pc":[129,130,131]},{"teal":133,"source":"contracts/Calculator.algo.ts:40","pc":[132,133]},{"teal":134,"source":"contracts/Calculator.algo.ts:40","pc":[134,135,136,137,138,139,140,141,142,143,144,145]},{"teal":135,"source":"contracts/Calculator.algo.ts:40","pc":[146]},{"teal":136,"source":"contracts/Calculator.algo.ts:40","pc":[147,148,149]},{"teal":141,"source":"contracts/Calculator.algo.ts:41","pc":[150,151]},{"teal":142,"source":"contracts/Calculator.algo.ts:41","pc":[152,153]},{"teal":143,"source":"contracts/Calculator.algo.ts:41","pc":[154,155,156]},{"teal":144,"source":"contracts/Calculator.algo.ts:41","pc":[157,158]},{"teal":145,"source":"contracts/Calculator.algo.ts:40","pc":[159,160,161]},{"teal":149,"source":"contracts/Calculator.algo.ts:42","errorMessage":"Invalid operation","pc":[162]},{"teal":154,"source":"contracts/Calculator.algo.ts:44","pc":[163,164]},{"teal":157,"source":"contracts/Calculator.algo.ts:35","pc":[165,166]},{"teal":158,"source":"contracts/Calculator.algo.ts:35","pc":[167]},{"teal":163,"source":"contracts/Calculator.algo.ts:54","pc":[168]},{"teal":166,"source":"contracts/Calculator.algo.ts:54","pc":[169,170,171]},{"teal":167,"source":"contracts/Calculator.algo.ts:54","pc":[172,173,174]},{"teal":170,"source":"contracts/Calculator.algo.ts:54","pc":[175,176,177]},{"teal":171,"source":"contracts/Calculator.algo.ts:54","pc":[178]},{"teal":172,"source":"contracts/Calculator.algo.ts:54","pc":[179]},{"teal":173,"source":"contracts/Calculator.algo.ts:54","pc":[180]},{"teal":174,"source":"contracts/Calculator.algo.ts:54","pc":[181,182,183]},{"teal":175,"source":"contracts/Calculator.algo.ts:54","pc":[184]},{"teal":176,"source":"contracts/Calculator.algo.ts:54","pc":[185]},{"teal":177,"source":"contracts/Calculator.algo.ts:54","pc":[186]},{"teal":178,"source":"contracts/Calculator.algo.ts:54","pc":[187]},{"teal":179,"source":"contracts/Calculator.algo.ts:54","pc":[188]},{"teal":180,"source":"contracts/Calculator.algo.ts:54","pc":[189]},{"teal":190,"source":"contracts/Calculator.algo.ts:54","pc":[190,191,192]},{"teal":194,"source":"contracts/Calculator.algo.ts:55","pc":[193,194,195,196,197,198,199,200,201]},{"teal":195,"source":"contracts/Calculator.algo.ts:55","pc":[202,203]},{"teal":196,"source":"contracts/Calculator.algo.ts:55","pc":[204]},{"teal":197,"source":"contracts/Calculator.algo.ts:54","pc":[205]},{"teal":200,"source":"contracts/Calculator.algo.ts:3","pc":[206]},{"teal":201,"source":"contracts/Calculator.algo.ts:3","pc":[207]},{"teal":204,"source":"contracts/Calculator.algo.ts:3","pc":[208,209,210,211,212,213]},{"teal":205,"source":"contracts/Calculator.algo.ts:3","pc":[214,215,216]},{"teal":206,"source":"contracts/Calculator.algo.ts:3","pc":[217,218,219,220]},{"teal":209,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for create NoOp","pc":[221]},{"teal":212,"source":"contracts/Calculator.algo.ts:3","pc":[222,223,224,225,226,227]},{"teal":213,"source":"contracts/Calculator.algo.ts:3","pc":[228,229,230,231,232,233]},{"teal":214,"source":"contracts/Calculator.algo.ts:3","pc":[234,235,236]},{"teal":215,"source":"contracts/Calculator.algo.ts:3","pc":[237,238,239,240,241,242]},{"teal":218,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for call NoOp","pc":[243]}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxCmJ5dGVjYmxvY2sgMHgxNTFmN2M3NQoKLy8gVGhpcyBURUFMIHdhcyBnZW5lcmF0ZWQgYnkgVEVBTFNjcmlwdCB2MC4xMDcuMgovLyBodHRwczovL2dpdGh1Yi5jb20vYWxnb3JhbmRmb3VuZGF0aW9uL1RFQUxTY3JpcHQKCi8vIFRoaXMgY29udHJhY3QgaXMgY29tcGxpYW50IHdpdGggYW5kL29yIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBBUkNzOiBbIEFSQzQgXQoKLy8gVGhlIGZvbGxvd2luZyB0ZW4gbGluZXMgb2YgVEVBTCBoYW5kbGUgaW5pdGlhbCBwcm9ncmFtIGZsb3cKLy8gVGhpcyBwYXR0ZXJuIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXN5IGZvciBhbnlvbmUgdG8gcGFyc2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9ncmFtIGFuZCBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBhY3Rpb24gaXMgYWxsb3dlZAovLyBIZXJlLCBhY3Rpb24gcmVmZXJzIHRvIHRoZSBPbkNvbXBsZXRlIGluIGNvbWJpbmF0aW9uIHdpdGggd2hldGhlciB0aGUgYXBwIGlzIGJlaW5nIGNyZWF0ZWQgb3IgY2FsbGVkCi8vIEV2ZXJ5IHBvc3NpYmxlIGFjdGlvbiBmb3IgdGhpcyBjb250cmFjdCBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudAovLyBJZiB0aGUgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29udHJhY3QsIGl0cyByZXNwZWN0aXZlIGJyYW5jaCB3aWxsIGJlICIqTk9UX0lNUExFTUVOVEVEIiB3aGljaCBqdXN0IGNvbnRhaW5zICJlcnIiCnR4biBBcHBsaWNhdGlvbklECiEKcHVzaGludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGdldFN1bShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBzdW0gb2YgdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIHN1bSBvZiBhIGFuZCBiCmdldFN1bToKCXByb3RvIDIgMQoKCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MTIKCS8vIHJldHVybiBhICsgYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCSsKCXJldHN1YgoKLy8gZ2V0RGlmZmVyZW5jZShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGFuZCBiLgpnZXREaWZmZXJlbmNlOgoJcHJvdG8gMiAxCgoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czoyMwoJLy8gcmV0dXJuIGEgPj0gYiA/IGEgLSBiIDogYiAtIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0Cgk+PQoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgktCgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCS0KCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGRvTWF0aCh1aW50NjQsdWludDY0LHN0cmluZyl1aW50NjQKKmFiaV9yb3V0ZV9kb01hdGg6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGVjIDAgLy8gMHgxNTFmN2M3NQoKCS8vIG9wZXJhdGlvbjogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglleHRyYWN0IDIgMAoKCS8vIGI6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIGE6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZG9NYXRoKHVpbnQ2NCx1aW50NjQsc3RyaW5nKXVpbnQ2NAoJY2FsbHN1YiBkb01hdGgKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBkb01hdGgoYTogdWludDY0LCBiOiB1aW50NjQsIG9wZXJhdGlvbjogc3RyaW5nKTogdWludDY0Ci8vCi8vIEEgbWV0aG9kIHRoYXQgdGFrZXMgdHdvIG51bWJlcnMgYW5kIGRvZXMgZWl0aGVyIGFkZGl0aW9uIG9yIHN1YnRyYWN0aW9uCi8vCi8vIEBwYXJhbSBhIFRoZSBmaXJzdCB1aW50NjQKLy8gQHBhcmFtIGIgVGhlIHNlY29uZCB1aW50NjQKLy8gQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIHBlcmZvcm0uIENhbiBiZSBlaXRoZXIgJ3N1bScgb3IgJ2RpZmZlcmVuY2UnCi8vCi8vIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbgpkb01hdGg6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJcHVzaGJ5dGVzIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MzgKCS8vIG9wZXJhdGlvbiA9PT0gJ3N1bScKCWZyYW1lX2RpZyAtMyAvLyBvcGVyYXRpb246IHN0cmluZwoJcHVzaGJ5dGVzIDB4NzM3NTZkIC8vICJzdW0iCgk9PQoJYnogKmlmMF9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czozOQoJLy8gcmVzdWx0ID0gdGhpcy5nZXRTdW0oYSwgYikKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWNhbGxzdWIgZ2V0U3VtCglmcmFtZV9idXJ5IDAgLy8gcmVzdWx0OiB1aW50NjQKCWIgKmlmMF9lbmQKCippZjBfZWxzZWlmMV9jb25kaXRpb246CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQwCgkvLyBvcGVyYXRpb24gPT09ICdkaWZmZXJlbmNlJwoJZnJhbWVfZGlnIC0zIC8vIG9wZXJhdGlvbjogc3RyaW5nCglwdXNoYnl0ZXMgMHg2NDY5NjY2NjY1NzI2NTZlNjM2NSAvLyAiZGlmZmVyZW5jZSIKCT09CglieiAqaWYwX2Vsc2UKCgkvLyAqaWYwX2Vsc2VpZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czo0MQoJLy8gcmVzdWx0ID0gdGhpcy5nZXREaWZmZXJlbmNlKGEsIGIpCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CgljYWxsc3ViIGdldERpZmZlcmVuY2UKCWZyYW1lX2J1cnkgMCAvLyByZXN1bHQ6IHVpbnQ2NAoJYiAqaWYwX2VuZAoKKmlmMF9lbHNlOgoJLy8gSW52YWxpZCBvcGVyYXRpb24KCWVycgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQ0CgkvLyByZXR1cm4gcmVzdWx0OwoJZnJhbWVfZGlnIDAgLy8gcmVzdWx0OiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gaGVsbG8oc3RyaW5nKXN0cmluZwoqYWJpX3JvdXRlX2hlbGxvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlYyAwIC8vIDB4MTUxZjdjNzUKCgkvLyBuYW1lOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBoZWxsbyhzdHJpbmcpc3RyaW5nCgljYWxsc3ViIGhlbGxvCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGhlbGxvKG5hbWU6IHN0cmluZyk6IHN0cmluZwovLwovLyBBIGRlbW9uc3RyYXRpb24gbWV0aG9kIHVzZWQgaW4gdGhlIEFsZ29LaXQgZnVsbHN0YWNrIHRlbXBsYXRlLgovLyBHcmVldHMgdGhlIHVzZXIgYnkgbmFtZS4KLy8KLy8gQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHVzZXIgdG8gZ3JlZXQuCi8vIEByZXR1cm5zIEEgZ3JlZXRpbmcgbWVzc2FnZSB0byB0aGUgdXNlci4KaGVsbG86Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjU1CgkvLyByZXR1cm4gJ0hlbGxvLCAnICsgbmFtZTsKCXB1c2hieXRlcyAweDQ4NjU2YzZjNmYyYzIwIC8vICJIZWxsbywgIgoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IHN0cmluZwoJY29uY2F0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnRjIDAgLy8gMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CglwdXNoYnl0ZXMgMHhiODQ0N2IzNiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJcHVzaGJ5dGVzIDB4NzZhN2VmMzMgLy8gbWV0aG9kICJkb01hdGgodWludDY0LHVpbnQ2NCxzdHJpbmcpdWludDY0IgoJcHVzaGJ5dGVzIDB4MDJiZWNlMTEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9kb01hdGggKmFiaV9yb3V0ZV9oZWxsbwoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEw"},"byteCode":{"approval":"CiABASYBBBUffHUxGBSBBgsxGQiNDACwAAAAAAAAAAAAAACiAAAAAAAAAAAAAACKAgGL/4v+CImKAgGL/4v+D0EACIv/i/4JQgAFi/6L/wmJKDYaA1cCADYaAhc2GgEXiAAFFlCwIkOKAwGAAIv9gANzdW0SQQAMi/6L/4j/sIwAQgAfi/2ACmRpZmZlcmVuY2USQQAMi/6L/4j/m4wAQgABAIsAjACJKDYaAVcCAIgADEkVFlcGAkxQULAiQ4oBAYAHSGVsbG8sIIv/UIkiQ4AEuER7NjYaAI4B//EAgAR2p+8zgAQCvs4RNhoAjgL/Xv+1AA==","clear":"Cg=="},"compilerInfo":{"compiler":"algod","compilerVersion":{"major":4,"minor":4,"patch":1,"commitHash":"7b607ce4"}}} as unknown as Arc56Contract /** * A state record containing binary data diff --git a/examples/s-tls/projects/s-tls-frontend/src/components/AppCalls.tsx b/examples/s-tls/projects/s-tls-frontend/src/components/AppCalls.tsx index 8a37e8d..a03f337 100644 --- a/examples/s-tls/projects/s-tls-frontend/src/components/AppCalls.tsx +++ b/examples/s-tls/projects/s-tls-frontend/src/components/AppCalls.tsx @@ -4,6 +4,7 @@ import { useState } from 'react' import { CalculatorFactory } from '../contracts/Calculator' import { getAlgodConfigFromViteEnvironment, getIndexerConfigFromViteEnvironment } from '../utils/network/getAlgoClientConfigs' import { AlgorandClient } from '@algorandfoundation/algokit-utils' +import { encodeTransactionRaw } from '@algorandfoundation/algokit-utils/transact' interface AppCallsInterface { openModal: boolean @@ -14,7 +15,7 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { const [loading, setLoading] = useState(false) const [contractInput, setContractInput] = useState('') const { enqueueSnackbar } = useSnackbar() - const { transactionSigner, activeAddress } = useWallet() + const { signTransactions, activeAddress } = useWallet() const algodConfig = getAlgodConfigFromViteEnvironment() const indexerConfig = getIndexerConfigFromViteEnvironment() @@ -22,7 +23,11 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { algodConfig, indexerConfig, }) - algorand.setDefaultSigner(transactionSigner) + algorand.setDefaultSigner(async (txnGroup, indexesToSign) => { + const encoded = txnGroup.map((txn) => encodeTransactionRaw(txn)) + const signed = await signTransactions(encoded, indexesToSign) + return signed.filter((s): s is Uint8Array => s !== null) + }) const sendAppCall = async () => { setLoading(true) diff --git a/examples/s-tls/projects/s-tls-frontend/src/contracts/Calculator.ts b/examples/s-tls/projects/s-tls-frontend/src/contracts/Calculator.ts index cc4657a..01af943 100644 --- a/examples/s-tls/projects/s-tls-frontend/src/contracts/Calculator.ts +++ b/examples/s-tls/projects/s-tls-frontend/src/contracts/Calculator.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"Calculator","desc":"","methods":[{"name":"doMath","desc":"A method that takes two numbers and does either addition or subtraction","args":[{"name":"a","type":"uint64","desc":"The first uint64"},{"name":"b","type":"uint64","desc":"The second uint64"},{"name":"operation","type":"string","desc":"The operation to perform. Can be either 'sum' or 'difference'"}],"returns":{"type":"uint64","desc":"The result of the operation"},"actions":{"create":[],"call":["NoOp"]}},{"name":"hello","desc":"A demonstration method used in the AlgoKit fullstack template.\nGreets the user by name.","args":[{"name":"name","type":"string","desc":"The name of the user to greet."}],"returns":{"type":"string","desc":"A greeting message to the user."},"actions":{"create":[],"call":["NoOp"]}},{"name":"createApplication","args":[],"returns":{"type":"void"},"actions":{"create":["NoOp"],"call":[]}}],"arcs":[4,56],"structs":{},"state":{"schema":{"global":{"bytes":0,"ints":0},"local":{"bytes":0,"ints":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":[],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"teal":1,"source":"contracts/Calculator.algo.ts:3","pc":[0]},{"teal":2,"source":"contracts/Calculator.algo.ts:3","pc":[1,2,3]},{"teal":3,"source":"contracts/Calculator.algo.ts:3","pc":[4,5,6,7,8,9,10]},{"teal":15,"source":"contracts/Calculator.algo.ts:3","pc":[11,12]},{"teal":16,"source":"contracts/Calculator.algo.ts:3","pc":[13]},{"teal":17,"source":"contracts/Calculator.algo.ts:3","pc":[14,15]},{"teal":18,"source":"contracts/Calculator.algo.ts:3","pc":[16]},{"teal":19,"source":"contracts/Calculator.algo.ts:3","pc":[17,18]},{"teal":20,"source":"contracts/Calculator.algo.ts:3","pc":[19]},{"teal":21,"source":"contracts/Calculator.algo.ts:3","pc":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45]},{"teal":25,"source":"contracts/Calculator.algo.ts:3","errorMessage":"The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?","pc":[46]},{"teal":35,"source":"contracts/Calculator.algo.ts:11","pc":[47,48,49]},{"teal":39,"source":"contracts/Calculator.algo.ts:12","pc":[50,51]},{"teal":40,"source":"contracts/Calculator.algo.ts:12","pc":[52,53]},{"teal":41,"source":"contracts/Calculator.algo.ts:12","pc":[54]},{"teal":42,"source":"contracts/Calculator.algo.ts:11","pc":[55]},{"teal":52,"source":"contracts/Calculator.algo.ts:22","pc":[56,57,58]},{"teal":56,"source":"contracts/Calculator.algo.ts:23","pc":[59,60]},{"teal":57,"source":"contracts/Calculator.algo.ts:23","pc":[61,62]},{"teal":58,"source":"contracts/Calculator.algo.ts:23","pc":[63]},{"teal":59,"source":"contracts/Calculator.algo.ts:23","pc":[64,65,66]},{"teal":60,"source":"contracts/Calculator.algo.ts:23","pc":[67,68]},{"teal":61,"source":"contracts/Calculator.algo.ts:23","pc":[69,70]},{"teal":62,"source":"contracts/Calculator.algo.ts:23","pc":[71]},{"teal":63,"source":"contracts/Calculator.algo.ts:23","pc":[72,73,74]},{"teal":66,"source":"contracts/Calculator.algo.ts:23","pc":[75,76]},{"teal":67,"source":"contracts/Calculator.algo.ts:23","pc":[77,78]},{"teal":68,"source":"contracts/Calculator.algo.ts:23","pc":[79]},{"teal":71,"source":"contracts/Calculator.algo.ts:22","pc":[80]},{"teal":76,"source":"contracts/Calculator.algo.ts:35","pc":[81]},{"teal":79,"source":"contracts/Calculator.algo.ts:35","pc":[82,83,84]},{"teal":80,"source":"contracts/Calculator.algo.ts:35","pc":[85,86,87]},{"teal":83,"source":"contracts/Calculator.algo.ts:35","pc":[88,89,90]},{"teal":84,"source":"contracts/Calculator.algo.ts:35","pc":[91]},{"teal":87,"source":"contracts/Calculator.algo.ts:35","pc":[92,93,94]},{"teal":88,"source":"contracts/Calculator.algo.ts:35","pc":[95]},{"teal":91,"source":"contracts/Calculator.algo.ts:35","pc":[96,97,98]},{"teal":92,"source":"contracts/Calculator.algo.ts:35","pc":[99]},{"teal":93,"source":"contracts/Calculator.algo.ts:35","pc":[100]},{"teal":94,"source":"contracts/Calculator.algo.ts:35","pc":[101]},{"teal":95,"source":"contracts/Calculator.algo.ts:35","pc":[102]},{"teal":96,"source":"contracts/Calculator.algo.ts:35","pc":[103]},{"teal":108,"source":"contracts/Calculator.algo.ts:35","pc":[104,105,106]},{"teal":111,"source":"contracts/Calculator.algo.ts:35","pc":[107,108]},{"teal":116,"source":"contracts/Calculator.algo.ts:38","pc":[109,110]},{"teal":117,"source":"contracts/Calculator.algo.ts:38","pc":[111,112,113,114,115]},{"teal":118,"source":"contracts/Calculator.algo.ts:38","pc":[116]},{"teal":119,"source":"contracts/Calculator.algo.ts:38","pc":[117,118,119]},{"teal":124,"source":"contracts/Calculator.algo.ts:39","pc":[120,121]},{"teal":125,"source":"contracts/Calculator.algo.ts:39","pc":[122,123]},{"teal":126,"source":"contracts/Calculator.algo.ts:39","pc":[124,125,126]},{"teal":127,"source":"contracts/Calculator.algo.ts:39","pc":[127,128]},{"teal":128,"source":"contracts/Calculator.algo.ts:38","pc":[129,130,131]},{"teal":133,"source":"contracts/Calculator.algo.ts:40","pc":[132,133]},{"teal":134,"source":"contracts/Calculator.algo.ts:40","pc":[134,135,136,137,138,139,140,141,142,143,144,145]},{"teal":135,"source":"contracts/Calculator.algo.ts:40","pc":[146]},{"teal":136,"source":"contracts/Calculator.algo.ts:40","pc":[147,148,149]},{"teal":141,"source":"contracts/Calculator.algo.ts:41","pc":[150,151]},{"teal":142,"source":"contracts/Calculator.algo.ts:41","pc":[152,153]},{"teal":143,"source":"contracts/Calculator.algo.ts:41","pc":[154,155,156]},{"teal":144,"source":"contracts/Calculator.algo.ts:41","pc":[157,158]},{"teal":145,"source":"contracts/Calculator.algo.ts:40","pc":[159,160,161]},{"teal":149,"source":"contracts/Calculator.algo.ts:42","errorMessage":"Invalid operation","pc":[162]},{"teal":154,"source":"contracts/Calculator.algo.ts:44","pc":[163,164]},{"teal":157,"source":"contracts/Calculator.algo.ts:35","pc":[165,166]},{"teal":158,"source":"contracts/Calculator.algo.ts:35","pc":[167]},{"teal":163,"source":"contracts/Calculator.algo.ts:54","pc":[168]},{"teal":166,"source":"contracts/Calculator.algo.ts:54","pc":[169,170,171]},{"teal":167,"source":"contracts/Calculator.algo.ts:54","pc":[172,173,174]},{"teal":170,"source":"contracts/Calculator.algo.ts:54","pc":[175,176,177]},{"teal":171,"source":"contracts/Calculator.algo.ts:54","pc":[178]},{"teal":172,"source":"contracts/Calculator.algo.ts:54","pc":[179]},{"teal":173,"source":"contracts/Calculator.algo.ts:54","pc":[180]},{"teal":174,"source":"contracts/Calculator.algo.ts:54","pc":[181,182,183]},{"teal":175,"source":"contracts/Calculator.algo.ts:54","pc":[184]},{"teal":176,"source":"contracts/Calculator.algo.ts:54","pc":[185]},{"teal":177,"source":"contracts/Calculator.algo.ts:54","pc":[186]},{"teal":178,"source":"contracts/Calculator.algo.ts:54","pc":[187]},{"teal":179,"source":"contracts/Calculator.algo.ts:54","pc":[188]},{"teal":180,"source":"contracts/Calculator.algo.ts:54","pc":[189]},{"teal":190,"source":"contracts/Calculator.algo.ts:54","pc":[190,191,192]},{"teal":194,"source":"contracts/Calculator.algo.ts:55","pc":[193,194,195,196,197,198,199,200,201]},{"teal":195,"source":"contracts/Calculator.algo.ts:55","pc":[202,203]},{"teal":196,"source":"contracts/Calculator.algo.ts:55","pc":[204]},{"teal":197,"source":"contracts/Calculator.algo.ts:54","pc":[205]},{"teal":200,"source":"contracts/Calculator.algo.ts:3","pc":[206]},{"teal":201,"source":"contracts/Calculator.algo.ts:3","pc":[207]},{"teal":204,"source":"contracts/Calculator.algo.ts:3","pc":[208,209,210,211,212,213]},{"teal":205,"source":"contracts/Calculator.algo.ts:3","pc":[214,215,216]},{"teal":206,"source":"contracts/Calculator.algo.ts:3","pc":[217,218,219,220]},{"teal":209,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for create NoOp","pc":[221]},{"teal":212,"source":"contracts/Calculator.algo.ts:3","pc":[222,223,224,225,226,227]},{"teal":213,"source":"contracts/Calculator.algo.ts:3","pc":[228,229,230,231,232,233]},{"teal":214,"source":"contracts/Calculator.algo.ts:3","pc":[234,235,236]},{"teal":215,"source":"contracts/Calculator.algo.ts:3","pc":[237,238,239,240,241,242]},{"teal":218,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for call NoOp","pc":[243]}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxCmJ5dGVjYmxvY2sgMHgxNTFmN2M3NQoKLy8gVGhpcyBURUFMIHdhcyBnZW5lcmF0ZWQgYnkgVEVBTFNjcmlwdCB2MC4xMDcuMQovLyBodHRwczovL2dpdGh1Yi5jb20vYWxnb3JhbmRmb3VuZGF0aW9uL1RFQUxTY3JpcHQKCi8vIFRoaXMgY29udHJhY3QgaXMgY29tcGxpYW50IHdpdGggYW5kL29yIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBBUkNzOiBbIEFSQzQgXQoKLy8gVGhlIGZvbGxvd2luZyB0ZW4gbGluZXMgb2YgVEVBTCBoYW5kbGUgaW5pdGlhbCBwcm9ncmFtIGZsb3cKLy8gVGhpcyBwYXR0ZXJuIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXN5IGZvciBhbnlvbmUgdG8gcGFyc2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9ncmFtIGFuZCBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBhY3Rpb24gaXMgYWxsb3dlZAovLyBIZXJlLCBhY3Rpb24gcmVmZXJzIHRvIHRoZSBPbkNvbXBsZXRlIGluIGNvbWJpbmF0aW9uIHdpdGggd2hldGhlciB0aGUgYXBwIGlzIGJlaW5nIGNyZWF0ZWQgb3IgY2FsbGVkCi8vIEV2ZXJ5IHBvc3NpYmxlIGFjdGlvbiBmb3IgdGhpcyBjb250cmFjdCBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudAovLyBJZiB0aGUgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29udHJhY3QsIGl0cyByZXNwZWN0aXZlIGJyYW5jaCB3aWxsIGJlICIqTk9UX0lNUExFTUVOVEVEIiB3aGljaCBqdXN0IGNvbnRhaW5zICJlcnIiCnR4biBBcHBsaWNhdGlvbklECiEKcHVzaGludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGdldFN1bShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBzdW0gb2YgdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIHN1bSBvZiBhIGFuZCBiCmdldFN1bToKCXByb3RvIDIgMQoKCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MTIKCS8vIHJldHVybiBhICsgYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCSsKCXJldHN1YgoKLy8gZ2V0RGlmZmVyZW5jZShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGFuZCBiLgpnZXREaWZmZXJlbmNlOgoJcHJvdG8gMiAxCgoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czoyMwoJLy8gcmV0dXJuIGEgPj0gYiA/IGEgLSBiIDogYiAtIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0Cgk+PQoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgktCgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCS0KCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGRvTWF0aCh1aW50NjQsdWludDY0LHN0cmluZyl1aW50NjQKKmFiaV9yb3V0ZV9kb01hdGg6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGVjIDAgLy8gMHgxNTFmN2M3NQoKCS8vIG9wZXJhdGlvbjogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglleHRyYWN0IDIgMAoKCS8vIGI6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIGE6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZG9NYXRoKHVpbnQ2NCx1aW50NjQsc3RyaW5nKXVpbnQ2NAoJY2FsbHN1YiBkb01hdGgKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBkb01hdGgoYTogdWludDY0LCBiOiB1aW50NjQsIG9wZXJhdGlvbjogc3RyaW5nKTogdWludDY0Ci8vCi8vIEEgbWV0aG9kIHRoYXQgdGFrZXMgdHdvIG51bWJlcnMgYW5kIGRvZXMgZWl0aGVyIGFkZGl0aW9uIG9yIHN1YnRyYWN0aW9uCi8vCi8vIEBwYXJhbSBhIFRoZSBmaXJzdCB1aW50NjQKLy8gQHBhcmFtIGIgVGhlIHNlY29uZCB1aW50NjQKLy8gQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIHBlcmZvcm0uIENhbiBiZSBlaXRoZXIgJ3N1bScgb3IgJ2RpZmZlcmVuY2UnCi8vCi8vIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbgpkb01hdGg6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJcHVzaGJ5dGVzIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MzgKCS8vIG9wZXJhdGlvbiA9PT0gJ3N1bScKCWZyYW1lX2RpZyAtMyAvLyBvcGVyYXRpb246IHN0cmluZwoJcHVzaGJ5dGVzIDB4NzM3NTZkIC8vICJzdW0iCgk9PQoJYnogKmlmMF9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czozOQoJLy8gcmVzdWx0ID0gdGhpcy5nZXRTdW0oYSwgYikKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWNhbGxzdWIgZ2V0U3VtCglmcmFtZV9idXJ5IDAgLy8gcmVzdWx0OiB1aW50NjQKCWIgKmlmMF9lbmQKCippZjBfZWxzZWlmMV9jb25kaXRpb246CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQwCgkvLyBvcGVyYXRpb24gPT09ICdkaWZmZXJlbmNlJwoJZnJhbWVfZGlnIC0zIC8vIG9wZXJhdGlvbjogc3RyaW5nCglwdXNoYnl0ZXMgMHg2NDY5NjY2NjY1NzI2NTZlNjM2NSAvLyAiZGlmZmVyZW5jZSIKCT09CglieiAqaWYwX2Vsc2UKCgkvLyAqaWYwX2Vsc2VpZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czo0MQoJLy8gcmVzdWx0ID0gdGhpcy5nZXREaWZmZXJlbmNlKGEsIGIpCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CgljYWxsc3ViIGdldERpZmZlcmVuY2UKCWZyYW1lX2J1cnkgMCAvLyByZXN1bHQ6IHVpbnQ2NAoJYiAqaWYwX2VuZAoKKmlmMF9lbHNlOgoJLy8gSW52YWxpZCBvcGVyYXRpb24KCWVycgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQ0CgkvLyByZXR1cm4gcmVzdWx0OwoJZnJhbWVfZGlnIDAgLy8gcmVzdWx0OiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gaGVsbG8oc3RyaW5nKXN0cmluZwoqYWJpX3JvdXRlX2hlbGxvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlYyAwIC8vIDB4MTUxZjdjNzUKCgkvLyBuYW1lOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBoZWxsbyhzdHJpbmcpc3RyaW5nCgljYWxsc3ViIGhlbGxvCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGhlbGxvKG5hbWU6IHN0cmluZyk6IHN0cmluZwovLwovLyBBIGRlbW9uc3RyYXRpb24gbWV0aG9kIHVzZWQgaW4gdGhlIEFsZ29LaXQgZnVsbHN0YWNrIHRlbXBsYXRlLgovLyBHcmVldHMgdGhlIHVzZXIgYnkgbmFtZS4KLy8KLy8gQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHVzZXIgdG8gZ3JlZXQuCi8vIEByZXR1cm5zIEEgZ3JlZXRpbmcgbWVzc2FnZSB0byB0aGUgdXNlci4KaGVsbG86Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjU1CgkvLyByZXR1cm4gJ0hlbGxvLCAnICsgbmFtZTsKCXB1c2hieXRlcyAweDQ4NjU2YzZjNmYyYzIwIC8vICJIZWxsbywgIgoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IHN0cmluZwoJY29uY2F0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnRjIDAgLy8gMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CglwdXNoYnl0ZXMgMHhiODQ0N2IzNiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJcHVzaGJ5dGVzIDB4NzZhN2VmMzMgLy8gbWV0aG9kICJkb01hdGgodWludDY0LHVpbnQ2NCxzdHJpbmcpdWludDY0IgoJcHVzaGJ5dGVzIDB4MDJiZWNlMTEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9kb01hdGggKmFiaV9yb3V0ZV9oZWxsbwoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEw"},"byteCode":{"approval":"CiABASYBBBUffHUxGBSBBgsxGQiNDACwAAAAAAAAAAAAAACiAAAAAAAAAAAAAACKAgGL/4v+CImKAgGL/4v+D0EACIv/i/4JQgAFi/6L/wmJKDYaA1cCADYaAhc2GgEXiAAFFlCwIkOKAwGAAIv9gANzdW0SQQAMi/6L/4j/sIwAQgAfi/2ACmRpZmZlcmVuY2USQQAMi/6L/4j/m4wAQgABAIsAjACJKDYaAVcCAIgADEkVFlcGAkxQULAiQ4oBAYAHSGVsbG8sIIv/UIkiQ4AEuER7NjYaAI4B//EAgAR2p+8zgAQCvs4RNhoAjgL/Xv+1AA==","clear":"Cg=="},"compilerInfo":{"compiler":"algod","compilerVersion":{"major":4,"minor":4,"patch":1,"commitHash":"7b607ce4"}}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"Calculator","desc":"","methods":[{"name":"doMath","desc":"A method that takes two numbers and does either addition or subtraction","args":[{"name":"a","type":"uint64","desc":"The first uint64"},{"name":"b","type":"uint64","desc":"The second uint64"},{"name":"operation","type":"string","desc":"The operation to perform. Can be either 'sum' or 'difference'"}],"returns":{"type":"uint64","desc":"The result of the operation"},"actions":{"create":[],"call":["NoOp"]}},{"name":"hello","desc":"A demonstration method used in the AlgoKit fullstack template.\nGreets the user by name.","args":[{"name":"name","type":"string","desc":"The name of the user to greet."}],"returns":{"type":"string","desc":"A greeting message to the user."},"actions":{"create":[],"call":["NoOp"]}},{"name":"createApplication","args":[],"returns":{"type":"void"},"actions":{"create":["NoOp"],"call":[]}}],"arcs":[4,56],"structs":{},"state":{"schema":{"global":{"bytes":0,"ints":0},"local":{"bytes":0,"ints":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":[],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"teal":1,"source":"contracts/Calculator.algo.ts:3","pc":[0]},{"teal":2,"source":"contracts/Calculator.algo.ts:3","pc":[1,2,3]},{"teal":3,"source":"contracts/Calculator.algo.ts:3","pc":[4,5,6,7,8,9,10]},{"teal":15,"source":"contracts/Calculator.algo.ts:3","pc":[11,12]},{"teal":16,"source":"contracts/Calculator.algo.ts:3","pc":[13]},{"teal":17,"source":"contracts/Calculator.algo.ts:3","pc":[14,15]},{"teal":18,"source":"contracts/Calculator.algo.ts:3","pc":[16]},{"teal":19,"source":"contracts/Calculator.algo.ts:3","pc":[17,18]},{"teal":20,"source":"contracts/Calculator.algo.ts:3","pc":[19]},{"teal":21,"source":"contracts/Calculator.algo.ts:3","pc":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45]},{"teal":25,"source":"contracts/Calculator.algo.ts:3","errorMessage":"The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?","pc":[46]},{"teal":35,"source":"contracts/Calculator.algo.ts:11","pc":[47,48,49]},{"teal":39,"source":"contracts/Calculator.algo.ts:12","pc":[50,51]},{"teal":40,"source":"contracts/Calculator.algo.ts:12","pc":[52,53]},{"teal":41,"source":"contracts/Calculator.algo.ts:12","pc":[54]},{"teal":42,"source":"contracts/Calculator.algo.ts:11","pc":[55]},{"teal":52,"source":"contracts/Calculator.algo.ts:22","pc":[56,57,58]},{"teal":56,"source":"contracts/Calculator.algo.ts:23","pc":[59,60]},{"teal":57,"source":"contracts/Calculator.algo.ts:23","pc":[61,62]},{"teal":58,"source":"contracts/Calculator.algo.ts:23","pc":[63]},{"teal":59,"source":"contracts/Calculator.algo.ts:23","pc":[64,65,66]},{"teal":60,"source":"contracts/Calculator.algo.ts:23","pc":[67,68]},{"teal":61,"source":"contracts/Calculator.algo.ts:23","pc":[69,70]},{"teal":62,"source":"contracts/Calculator.algo.ts:23","pc":[71]},{"teal":63,"source":"contracts/Calculator.algo.ts:23","pc":[72,73,74]},{"teal":66,"source":"contracts/Calculator.algo.ts:23","pc":[75,76]},{"teal":67,"source":"contracts/Calculator.algo.ts:23","pc":[77,78]},{"teal":68,"source":"contracts/Calculator.algo.ts:23","pc":[79]},{"teal":71,"source":"contracts/Calculator.algo.ts:22","pc":[80]},{"teal":76,"source":"contracts/Calculator.algo.ts:35","pc":[81]},{"teal":79,"source":"contracts/Calculator.algo.ts:35","pc":[82,83,84]},{"teal":80,"source":"contracts/Calculator.algo.ts:35","pc":[85,86,87]},{"teal":83,"source":"contracts/Calculator.algo.ts:35","pc":[88,89,90]},{"teal":84,"source":"contracts/Calculator.algo.ts:35","pc":[91]},{"teal":87,"source":"contracts/Calculator.algo.ts:35","pc":[92,93,94]},{"teal":88,"source":"contracts/Calculator.algo.ts:35","pc":[95]},{"teal":91,"source":"contracts/Calculator.algo.ts:35","pc":[96,97,98]},{"teal":92,"source":"contracts/Calculator.algo.ts:35","pc":[99]},{"teal":93,"source":"contracts/Calculator.algo.ts:35","pc":[100]},{"teal":94,"source":"contracts/Calculator.algo.ts:35","pc":[101]},{"teal":95,"source":"contracts/Calculator.algo.ts:35","pc":[102]},{"teal":96,"source":"contracts/Calculator.algo.ts:35","pc":[103]},{"teal":108,"source":"contracts/Calculator.algo.ts:35","pc":[104,105,106]},{"teal":111,"source":"contracts/Calculator.algo.ts:35","pc":[107,108]},{"teal":116,"source":"contracts/Calculator.algo.ts:38","pc":[109,110]},{"teal":117,"source":"contracts/Calculator.algo.ts:38","pc":[111,112,113,114,115]},{"teal":118,"source":"contracts/Calculator.algo.ts:38","pc":[116]},{"teal":119,"source":"contracts/Calculator.algo.ts:38","pc":[117,118,119]},{"teal":124,"source":"contracts/Calculator.algo.ts:39","pc":[120,121]},{"teal":125,"source":"contracts/Calculator.algo.ts:39","pc":[122,123]},{"teal":126,"source":"contracts/Calculator.algo.ts:39","pc":[124,125,126]},{"teal":127,"source":"contracts/Calculator.algo.ts:39","pc":[127,128]},{"teal":128,"source":"contracts/Calculator.algo.ts:38","pc":[129,130,131]},{"teal":133,"source":"contracts/Calculator.algo.ts:40","pc":[132,133]},{"teal":134,"source":"contracts/Calculator.algo.ts:40","pc":[134,135,136,137,138,139,140,141,142,143,144,145]},{"teal":135,"source":"contracts/Calculator.algo.ts:40","pc":[146]},{"teal":136,"source":"contracts/Calculator.algo.ts:40","pc":[147,148,149]},{"teal":141,"source":"contracts/Calculator.algo.ts:41","pc":[150,151]},{"teal":142,"source":"contracts/Calculator.algo.ts:41","pc":[152,153]},{"teal":143,"source":"contracts/Calculator.algo.ts:41","pc":[154,155,156]},{"teal":144,"source":"contracts/Calculator.algo.ts:41","pc":[157,158]},{"teal":145,"source":"contracts/Calculator.algo.ts:40","pc":[159,160,161]},{"teal":149,"source":"contracts/Calculator.algo.ts:42","errorMessage":"Invalid operation","pc":[162]},{"teal":154,"source":"contracts/Calculator.algo.ts:44","pc":[163,164]},{"teal":157,"source":"contracts/Calculator.algo.ts:35","pc":[165,166]},{"teal":158,"source":"contracts/Calculator.algo.ts:35","pc":[167]},{"teal":163,"source":"contracts/Calculator.algo.ts:54","pc":[168]},{"teal":166,"source":"contracts/Calculator.algo.ts:54","pc":[169,170,171]},{"teal":167,"source":"contracts/Calculator.algo.ts:54","pc":[172,173,174]},{"teal":170,"source":"contracts/Calculator.algo.ts:54","pc":[175,176,177]},{"teal":171,"source":"contracts/Calculator.algo.ts:54","pc":[178]},{"teal":172,"source":"contracts/Calculator.algo.ts:54","pc":[179]},{"teal":173,"source":"contracts/Calculator.algo.ts:54","pc":[180]},{"teal":174,"source":"contracts/Calculator.algo.ts:54","pc":[181,182,183]},{"teal":175,"source":"contracts/Calculator.algo.ts:54","pc":[184]},{"teal":176,"source":"contracts/Calculator.algo.ts:54","pc":[185]},{"teal":177,"source":"contracts/Calculator.algo.ts:54","pc":[186]},{"teal":178,"source":"contracts/Calculator.algo.ts:54","pc":[187]},{"teal":179,"source":"contracts/Calculator.algo.ts:54","pc":[188]},{"teal":180,"source":"contracts/Calculator.algo.ts:54","pc":[189]},{"teal":190,"source":"contracts/Calculator.algo.ts:54","pc":[190,191,192]},{"teal":194,"source":"contracts/Calculator.algo.ts:55","pc":[193,194,195,196,197,198,199,200,201]},{"teal":195,"source":"contracts/Calculator.algo.ts:55","pc":[202,203]},{"teal":196,"source":"contracts/Calculator.algo.ts:55","pc":[204]},{"teal":197,"source":"contracts/Calculator.algo.ts:54","pc":[205]},{"teal":200,"source":"contracts/Calculator.algo.ts:3","pc":[206]},{"teal":201,"source":"contracts/Calculator.algo.ts:3","pc":[207]},{"teal":204,"source":"contracts/Calculator.algo.ts:3","pc":[208,209,210,211,212,213]},{"teal":205,"source":"contracts/Calculator.algo.ts:3","pc":[214,215,216]},{"teal":206,"source":"contracts/Calculator.algo.ts:3","pc":[217,218,219,220]},{"teal":209,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for create NoOp","pc":[221]},{"teal":212,"source":"contracts/Calculator.algo.ts:3","pc":[222,223,224,225,226,227]},{"teal":213,"source":"contracts/Calculator.algo.ts:3","pc":[228,229,230,231,232,233]},{"teal":214,"source":"contracts/Calculator.algo.ts:3","pc":[234,235,236]},{"teal":215,"source":"contracts/Calculator.algo.ts:3","pc":[237,238,239,240,241,242]},{"teal":218,"source":"contracts/Calculator.algo.ts:3","errorMessage":"this contract does not implement the given ABI method for call NoOp","pc":[243]}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxCmJ5dGVjYmxvY2sgMHgxNTFmN2M3NQoKLy8gVGhpcyBURUFMIHdhcyBnZW5lcmF0ZWQgYnkgVEVBTFNjcmlwdCB2MC4xMDcuMgovLyBodHRwczovL2dpdGh1Yi5jb20vYWxnb3JhbmRmb3VuZGF0aW9uL1RFQUxTY3JpcHQKCi8vIFRoaXMgY29udHJhY3QgaXMgY29tcGxpYW50IHdpdGggYW5kL29yIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBBUkNzOiBbIEFSQzQgXQoKLy8gVGhlIGZvbGxvd2luZyB0ZW4gbGluZXMgb2YgVEVBTCBoYW5kbGUgaW5pdGlhbCBwcm9ncmFtIGZsb3cKLy8gVGhpcyBwYXR0ZXJuIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXN5IGZvciBhbnlvbmUgdG8gcGFyc2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9ncmFtIGFuZCBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBhY3Rpb24gaXMgYWxsb3dlZAovLyBIZXJlLCBhY3Rpb24gcmVmZXJzIHRvIHRoZSBPbkNvbXBsZXRlIGluIGNvbWJpbmF0aW9uIHdpdGggd2hldGhlciB0aGUgYXBwIGlzIGJlaW5nIGNyZWF0ZWQgb3IgY2FsbGVkCi8vIEV2ZXJ5IHBvc3NpYmxlIGFjdGlvbiBmb3IgdGhpcyBjb250cmFjdCBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudAovLyBJZiB0aGUgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29udHJhY3QsIGl0cyByZXNwZWN0aXZlIGJyYW5jaCB3aWxsIGJlICIqTk9UX0lNUExFTUVOVEVEIiB3aGljaCBqdXN0IGNvbnRhaW5zICJlcnIiCnR4biBBcHBsaWNhdGlvbklECiEKcHVzaGludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGdldFN1bShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBzdW0gb2YgdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIHN1bSBvZiBhIGFuZCBiCmdldFN1bToKCXByb3RvIDIgMQoKCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MTIKCS8vIHJldHVybiBhICsgYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCSsKCXJldHN1YgoKLy8gZ2V0RGlmZmVyZW5jZShhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG51bWJlcnMKLy8KLy8gQHBhcmFtIGEKLy8gQHBhcmFtIGIKLy8gQHJldHVybnMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGFuZCBiLgpnZXREaWZmZXJlbmNlOgoJcHJvdG8gMiAxCgoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czoyMwoJLy8gcmV0dXJuIGEgPj0gYiA/IGEgLSBiIDogYiAtIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0Cgk+PQoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgktCgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCS0KCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGRvTWF0aCh1aW50NjQsdWludDY0LHN0cmluZyl1aW50NjQKKmFiaV9yb3V0ZV9kb01hdGg6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGVjIDAgLy8gMHgxNTFmN2M3NQoKCS8vIG9wZXJhdGlvbjogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglleHRyYWN0IDIgMAoKCS8vIGI6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIGE6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZG9NYXRoKHVpbnQ2NCx1aW50NjQsc3RyaW5nKXVpbnQ2NAoJY2FsbHN1YiBkb01hdGgKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBkb01hdGgoYTogdWludDY0LCBiOiB1aW50NjQsIG9wZXJhdGlvbjogc3RyaW5nKTogdWludDY0Ci8vCi8vIEEgbWV0aG9kIHRoYXQgdGFrZXMgdHdvIG51bWJlcnMgYW5kIGRvZXMgZWl0aGVyIGFkZGl0aW9uIG9yIHN1YnRyYWN0aW9uCi8vCi8vIEBwYXJhbSBhIFRoZSBmaXJzdCB1aW50NjQKLy8gQHBhcmFtIGIgVGhlIHNlY29uZCB1aW50NjQKLy8gQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIHBlcmZvcm0uIENhbiBiZSBlaXRoZXIgJ3N1bScgb3IgJ2RpZmZlcmVuY2UnCi8vCi8vIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbgpkb01hdGg6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJcHVzaGJ5dGVzIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9DYWxjdWxhdG9yLmFsZ28udHM6MzgKCS8vIG9wZXJhdGlvbiA9PT0gJ3N1bScKCWZyYW1lX2RpZyAtMyAvLyBvcGVyYXRpb246IHN0cmluZwoJcHVzaGJ5dGVzIDB4NzM3NTZkIC8vICJzdW0iCgk9PQoJYnogKmlmMF9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czozOQoJLy8gcmVzdWx0ID0gdGhpcy5nZXRTdW0oYSwgYikKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWNhbGxzdWIgZ2V0U3VtCglmcmFtZV9idXJ5IDAgLy8gcmVzdWx0OiB1aW50NjQKCWIgKmlmMF9lbmQKCippZjBfZWxzZWlmMV9jb25kaXRpb246CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQwCgkvLyBvcGVyYXRpb24gPT09ICdkaWZmZXJlbmNlJwoJZnJhbWVfZGlnIC0zIC8vIG9wZXJhdGlvbjogc3RyaW5nCglwdXNoYnl0ZXMgMHg2NDY5NjY2NjY1NzI2NTZlNjM2NSAvLyAiZGlmZmVyZW5jZSIKCT09CglieiAqaWYwX2Vsc2UKCgkvLyAqaWYwX2Vsc2VpZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL0NhbGN1bGF0b3IuYWxnby50czo0MQoJLy8gcmVzdWx0ID0gdGhpcy5nZXREaWZmZXJlbmNlKGEsIGIpCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CgljYWxsc3ViIGdldERpZmZlcmVuY2UKCWZyYW1lX2J1cnkgMCAvLyByZXN1bHQ6IHVpbnQ2NAoJYiAqaWYwX2VuZAoKKmlmMF9lbHNlOgoJLy8gSW52YWxpZCBvcGVyYXRpb24KCWVycgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjQ0CgkvLyByZXR1cm4gcmVzdWx0OwoJZnJhbWVfZGlnIDAgLy8gcmVzdWx0OiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gaGVsbG8oc3RyaW5nKXN0cmluZwoqYWJpX3JvdXRlX2hlbGxvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlYyAwIC8vIDB4MTUxZjdjNzUKCgkvLyBuYW1lOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBoZWxsbyhzdHJpbmcpc3RyaW5nCgljYWxsc3ViIGhlbGxvCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGhlbGxvKG5hbWU6IHN0cmluZyk6IHN0cmluZwovLwovLyBBIGRlbW9uc3RyYXRpb24gbWV0aG9kIHVzZWQgaW4gdGhlIEFsZ29LaXQgZnVsbHN0YWNrIHRlbXBsYXRlLgovLyBHcmVldHMgdGhlIHVzZXIgYnkgbmFtZS4KLy8KLy8gQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHVzZXIgdG8gZ3JlZXQuCi8vIEByZXR1cm5zIEEgZ3JlZXRpbmcgbWVzc2FnZSB0byB0aGUgdXNlci4KaGVsbG86Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvQ2FsY3VsYXRvci5hbGdvLnRzOjU1CgkvLyByZXR1cm4gJ0hlbGxvLCAnICsgbmFtZTsKCXB1c2hieXRlcyAweDQ4NjU2YzZjNmYyYzIwIC8vICJIZWxsbywgIgoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IHN0cmluZwoJY29uY2F0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnRjIDAgLy8gMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CglwdXNoYnl0ZXMgMHhiODQ0N2IzNiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJcHVzaGJ5dGVzIDB4NzZhN2VmMzMgLy8gbWV0aG9kICJkb01hdGgodWludDY0LHVpbnQ2NCxzdHJpbmcpdWludDY0IgoJcHVzaGJ5dGVzIDB4MDJiZWNlMTEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9kb01hdGggKmFiaV9yb3V0ZV9oZWxsbwoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEw"},"byteCode":{"approval":"CiABASYBBBUffHUxGBSBBgsxGQiNDACwAAAAAAAAAAAAAACiAAAAAAAAAAAAAACKAgGL/4v+CImKAgGL/4v+D0EACIv/i/4JQgAFi/6L/wmJKDYaA1cCADYaAhc2GgEXiAAFFlCwIkOKAwGAAIv9gANzdW0SQQAMi/6L/4j/sIwAQgAfi/2ACmRpZmZlcmVuY2USQQAMi/6L/4j/m4wAQgABAIsAjACJKDYaAVcCAIgADEkVFlcGAkxQULAiQ4oBAYAHSGVsbG8sIIv/UIkiQ4AEuER7NjYaAI4B//EAgAR2p+8zgAQCvs4RNhoAjgL/Xv+1AA==","clear":"Cg=="},"compilerInfo":{"compiler":"algod","compilerVersion":{"major":4,"minor":4,"patch":1,"commitHash":"7b607ce4"}}} as unknown as Arc56Contract /** * A state record containing binary data diff --git a/examples/s-ts/projects/s-ts-frontend/src/components/AppCalls.tsx b/examples/s-ts/projects/s-ts-frontend/src/components/AppCalls.tsx index 1268994..55fb808 100644 --- a/examples/s-ts/projects/s-ts-frontend/src/components/AppCalls.tsx +++ b/examples/s-ts/projects/s-ts-frontend/src/components/AppCalls.tsx @@ -5,6 +5,7 @@ import { HelloWorldFactory } from '../contracts/HelloWorld' import { OnSchemaBreak, OnUpdate } from '@algorandfoundation/algokit-utils/types/app' import { getAlgodConfigFromViteEnvironment, getIndexerConfigFromViteEnvironment } from '../utils/network/getAlgoClientConfigs' import { AlgorandClient } from '@algorandfoundation/algokit-utils' +import { encodeTransactionRaw } from '@algorandfoundation/algokit-utils/transact' interface AppCallsInterface { openModal: boolean @@ -15,7 +16,7 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { const [loading, setLoading] = useState(false) const [contractInput, setContractInput] = useState('') const { enqueueSnackbar } = useSnackbar() - const { transactionSigner, activeAddress } = useWallet() + const { signTransactions, activeAddress } = useWallet() const algodConfig = getAlgodConfigFromViteEnvironment() const indexerConfig = getIndexerConfigFromViteEnvironment() @@ -23,7 +24,11 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { algodConfig, indexerConfig, }) - algorand.setDefaultSigner(transactionSigner) + algorand.setDefaultSigner(async (txnGroup, indexesToSign) => { + const encoded = txnGroup.map((txn) => encodeTransactionRaw(txn)) + const signed = await signTransactions(encoded, indexesToSign) + return signed.filter((s): s is Uint8Array => s !== null) + }) const sendAppCall = async () => { setLoading(true) diff --git a/pytest-junit.xml b/pytest-junit.xml new file mode 100644 index 0000000..6b466e9 --- /dev/null +++ b/pytest-junit.xml @@ -0,0 +1,267 @@ +contract_template = 'python' +working_dir = PosixPath('/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template') + + @pytest.mark.parametrize("contract_template", contract_templates) + def test_production_preset(contract_template: str, working_dir: Path) -> None: + response = run_init( + working_dir, + f"p-{short_contract_templates[contract_template]}", + answers=get_answered_questions_from_copier_yaml( + preset_name="production", + deployment_language="python", + contract_template=contract_template, + ), + child_template_default_answer="y", + ) + +> assert response.returncode == 0, response.stdout +E AssertionError: DEBUG: Running ['/usr/bin/git', '-C', '/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template', 'rev-parse', '--is-shallow-repository'] +E DEBUG: Running ['/usr/bin/git', 'clone', '--no-checkout', '/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template', '/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.0pdwuvj0', '--filter=blob:none'] +E DEBUG: Chdir to /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.0pdwuvj0 +E DEBUG: Running ['/usr/bin/git', '-c', 'core.fsmonitor=false', 'checkout', '-f', 'prep/beta-release'] +E DEBUG: Running ['/usr/bin/git', 'submodule', 'update', '--checkout', '--init', '--recursive', '--force'] +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.0pdwuvj0 +E DEBUG: Running ['/usr/bin/git', 'describe', '--tags', '--always'] +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: final clone URL = /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/p-py +E ==== 1/4 - Initializing base template ==== +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/p-py +E WARNING: Failed to get user info from git, please input your 'name' manually or use default placeholder. +E WARNING: Failed to get user info from git, please input your 'email' manually or use default placeholder. +E Starting template copy and render at /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/p-py... +E Unhandled ProcessExecutionError: Unexpected exit code: 128 +E Command line: | /usr/bin/git clone --no-checkout https://github.com/algorandfoundation/algokit-base-template.git /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.yetmhf0g --filter=blob:none +E Stderr: | Cloning into '/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.yetmhf0g'... +E | fatal: unable to access 'https://github.com/algorandfoundation/algokit-base-template.git/': Could not resolve host: github.com +E [PYI-59715:ERROR] Failed to execute script '__main__' due to unhandled exception! +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E Unhandled TaskError: Command 'algokit init -t base -n . --no-git --no-ide --no-bootstrap --no-workspace -a include_readme "no" -a include_algokit_toml "no" -a include_vscode_code_workspace "no" -a include_github_workflow_template "no"' returned non-zero exit status 1. +E [PYI-59668:ERROR] Failed to execute script '__main__' due to unhandled exception! +E +E assert 1 == 0 +E + where 1 = CompletedProcess(args=['algokit', '--verbose', 'init', '--name', 'p-py', '--template-url', '/var/folders/96/k83m8nkj3t...turned non-zero exit status 1.\n[PYI-59668:ERROR] Failed to execute script \'__main__\' due to unhandled exception!\n').returncode + +tests/test_templates.py:288: AssertionErrorcontract_template = 'tealscript' +working_dir = PosixPath('/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template') + + @pytest.mark.parametrize("contract_template", contract_templates) + def test_production_preset(contract_template: str, working_dir: Path) -> None: + response = run_init( + working_dir, + f"p-{short_contract_templates[contract_template]}", + answers=get_answered_questions_from_copier_yaml( + preset_name="production", + deployment_language="python", + contract_template=contract_template, + ), + child_template_default_answer="y", + ) + +> assert response.returncode == 0, response.stdout +E AssertionError: DEBUG: Chdir to /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.v39cv6gu +E DEBUG: Running ['/usr/bin/git', '-c', 'core.fsmonitor=false', 'checkout', '-f', 'prep/beta-release'] +E DEBUG: Running ['/usr/bin/git', 'submodule', 'update', '--checkout', '--init', '--recursive', '--force'] +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.v39cv6gu +E DEBUG: Running ['/usr/bin/git', 'describe', '--tags', '--always'] +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: final clone URL = /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/p-tls +E ==== 1/4 - Initializing base template ==== +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/p-tls +E WARNING: Failed to get user info from git, please input your 'name' manually or use default placeholder. +E WARNING: Failed to get user info from git, please input your 'email' manually or use default placeholder. +E Starting template copy and render at /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/p-tls... +E Unhandled ProcessExecutionError: Unexpected exit code: 128 +E Command line: | /usr/bin/git clone --no-checkout https://github.com/algorandfoundation/algokit-base-template.git /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.ghyu4ug8 --filter=blob:none +E Stderr: | Cloning into '/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.ghyu4ug8'... +E | fatal: unable to access 'https://github.com/algorandfoundation/algokit-base-template.git/': Could not resolve host: github.com +E [PYI-59772:ERROR] Failed to execute script '__main__' due to unhandled exception! +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E Unhandled TaskError: Command 'algokit init -t base -n . --no-git --no-ide --no-bootstrap --no-workspace -a include_readme "no" -a include_algokit_toml "no" -a include_vscode_code_workspace "no" -a include_github_workflow_template "no"' returned non-zero exit status 1. +E [PYI-59725:ERROR] Failed to execute script '__main__' due to unhandled exception! +E +E assert 1 == 0 +E + where 1 = CompletedProcess(args=['algokit', '--verbose', 'init', '--name', 'p-tls', '--template-url', '/var/folders/96/k83m8nkj3...turned non-zero exit status 1.\n[PYI-59725:ERROR] Failed to execute script \'__main__\' due to unhandled exception!\n').returncode + +tests/test_templates.py:288: AssertionErrorcontract_template = 'typescript' +working_dir = PosixPath('/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template') + + @pytest.mark.parametrize("contract_template", contract_templates) + def test_production_preset(contract_template: str, working_dir: Path) -> None: + response = run_init( + working_dir, + f"p-{short_contract_templates[contract_template]}", + answers=get_answered_questions_from_copier_yaml( + preset_name="production", + deployment_language="python", + contract_template=contract_template, + ), + child_template_default_answer="y", + ) + +> assert response.returncode == 0, response.stdout +E AssertionError: DEBUG: Chdir to /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.i3ytp2qd +E DEBUG: Running ['/usr/bin/git', '-c', 'core.fsmonitor=false', 'checkout', '-f', 'prep/beta-release'] +E DEBUG: Running ['/usr/bin/git', 'submodule', 'update', '--checkout', '--init', '--recursive', '--force'] +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.i3ytp2qd +E DEBUG: Running ['/usr/bin/git', 'describe', '--tags', '--always'] +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: final clone URL = /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/p-ts +E ==== 1/4 - Initializing base template ==== +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/p-ts +E WARNING: Failed to get user info from git, please input your 'name' manually or use default placeholder. +E WARNING: Failed to get user info from git, please input your 'email' manually or use default placeholder. +E Starting template copy and render at /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/p-ts... +E Unhandled ProcessExecutionError: Unexpected exit code: 128 +E Command line: | /usr/bin/git clone --no-checkout https://github.com/algorandfoundation/algokit-base-template.git /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.45rezklr --filter=blob:none +E Stderr: | Cloning into '/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.45rezklr'... +E | fatal: unable to access 'https://github.com/algorandfoundation/algokit-base-template.git/': Could not resolve host: github.com +E [PYI-59829:ERROR] Failed to execute script '__main__' due to unhandled exception! +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E Unhandled TaskError: Command 'algokit init -t base -n . --no-git --no-ide --no-bootstrap --no-workspace -a include_readme "no" -a include_algokit_toml "no" -a include_vscode_code_workspace "no" -a include_github_workflow_template "no"' returned non-zero exit status 1. +E [PYI-59782:ERROR] Failed to execute script '__main__' due to unhandled exception! +E +E assert 1 == 0 +E + where 1 = CompletedProcess(args=['algokit', '--verbose', 'init', '--name', 'p-ts', '--template-url', '/var/folders/96/k83m8nkj3t...turned non-zero exit status 1.\n[PYI-59782:ERROR] Failed to execute script \'__main__\' due to unhandled exception!\n').returncode + +tests/test_templates.py:288: AssertionErrorcontract_template = 'python' +working_dir = PosixPath('/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template') + + @pytest.mark.parametrize("contract_template", contract_templates) + def test_starter_preset(contract_template: str, working_dir: Path) -> None: + response = run_init( + working_dir, + f"s-{short_contract_templates[contract_template]}", + answers=get_answered_questions_from_copier_yaml( + preset_name="starter", + deployment_language="typescript", + contract_template=contract_template, + ), + child_template_default_answer="n", + ) + +> assert response.returncode == 0, response.stdout +E AssertionError: DEBUG: Chdir to /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.z4wjkl5s +E DEBUG: Running ['/usr/bin/git', '-c', 'core.fsmonitor=false', 'checkout', '-f', 'prep/beta-release'] +E DEBUG: Running ['/usr/bin/git', 'submodule', 'update', '--checkout', '--init', '--recursive', '--force'] +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.z4wjkl5s +E DEBUG: Running ['/usr/bin/git', 'describe', '--tags', '--always'] +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: final clone URL = /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/s-py +E ==== 1/4 - Initializing base template ==== +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/s-py +E WARNING: Failed to get user info from git, please input your 'name' manually or use default placeholder. +E WARNING: Failed to get user info from git, please input your 'email' manually or use default placeholder. +E Starting template copy and render at /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/s-py... +E Unhandled ProcessExecutionError: Unexpected exit code: 128 +E Command line: | /usr/bin/git clone --no-checkout https://github.com/algorandfoundation/algokit-base-template.git /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.fanwhd7i --filter=blob:none +E Stderr: | Cloning into '/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.fanwhd7i'... +E | fatal: unable to access 'https://github.com/algorandfoundation/algokit-base-template.git/': Could not resolve host: github.com +E [PYI-59887:ERROR] Failed to execute script '__main__' due to unhandled exception! +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E Unhandled TaskError: Command 'algokit init -t base -n . --no-git --no-ide --no-bootstrap --no-workspace -a include_readme "no" -a include_algokit_toml "no" -a include_vscode_code_workspace "no" -a include_github_workflow_template "no"' returned non-zero exit status 1. +E [PYI-59840:ERROR] Failed to execute script '__main__' due to unhandled exception! +E +E assert 1 == 0 +E + where 1 = CompletedProcess(args=['algokit', '--verbose', 'init', '--name', 's-py', '--template-url', '/var/folders/96/k83m8nkj3t...turned non-zero exit status 1.\n[PYI-59840:ERROR] Failed to execute script \'__main__\' due to unhandled exception!\n').returncode + +tests/test_templates.py:304: AssertionErrorcontract_template = 'tealscript' +working_dir = PosixPath('/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template') + + @pytest.mark.parametrize("contract_template", contract_templates) + def test_starter_preset(contract_template: str, working_dir: Path) -> None: + response = run_init( + working_dir, + f"s-{short_contract_templates[contract_template]}", + answers=get_answered_questions_from_copier_yaml( + preset_name="starter", + deployment_language="typescript", + contract_template=contract_template, + ), + child_template_default_answer="n", + ) + +> assert response.returncode == 0, response.stdout +E AssertionError: DEBUG: Chdir to /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.xfp1u9ig +E DEBUG: Running ['/usr/bin/git', '-c', 'core.fsmonitor=false', 'checkout', '-f', 'prep/beta-release'] +E DEBUG: Running ['/usr/bin/git', 'submodule', 'update', '--checkout', '--init', '--recursive', '--force'] +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.xfp1u9ig +E DEBUG: Running ['/usr/bin/git', 'describe', '--tags', '--always'] +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: final clone URL = /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/s-tls +E ==== 1/4 - Initializing base template ==== +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/s-tls +E WARNING: Failed to get user info from git, please input your 'name' manually or use default placeholder. +E WARNING: Failed to get user info from git, please input your 'email' manually or use default placeholder. +E Starting template copy and render at /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/s-tls... +E Unhandled ProcessExecutionError: Unexpected exit code: 128 +E Command line: | /usr/bin/git clone --no-checkout https://github.com/algorandfoundation/algokit-base-template.git /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.mnwppdyj --filter=blob:none +E Stderr: | Cloning into '/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.mnwppdyj'... +E | fatal: unable to access 'https://github.com/algorandfoundation/algokit-base-template.git/': Could not resolve host: github.com +E [PYI-59944:ERROR] Failed to execute script '__main__' due to unhandled exception! +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E Unhandled TaskError: Command 'algokit init -t base -n . --no-git --no-ide --no-bootstrap --no-workspace -a include_readme "no" -a include_algokit_toml "no" -a include_vscode_code_workspace "no" -a include_github_workflow_template "no"' returned non-zero exit status 1. +E [PYI-59897:ERROR] Failed to execute script '__main__' due to unhandled exception! +E +E assert 1 == 0 +E + where 1 = CompletedProcess(args=['algokit', '--verbose', 'init', '--name', 's-tls', '--template-url', '/var/folders/96/k83m8nkj3...turned non-zero exit status 1.\n[PYI-59897:ERROR] Failed to execute script \'__main__\' due to unhandled exception!\n').returncode + +tests/test_templates.py:304: AssertionErrorcontract_template = 'typescript' +working_dir = PosixPath('/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template') + + @pytest.mark.parametrize("contract_template", contract_templates) + def test_starter_preset(contract_template: str, working_dir: Path) -> None: + response = run_init( + working_dir, + f"s-{short_contract_templates[contract_template]}", + answers=get_answered_questions_from_copier_yaml( + preset_name="starter", + deployment_language="typescript", + contract_template=contract_template, + ), + child_template_default_answer="n", + ) + +> assert response.returncode == 0, response.stdout +E AssertionError: DEBUG: Chdir to /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.bc0xynky +E DEBUG: Running ['/usr/bin/git', '-c', 'core.fsmonitor=false', 'checkout', '-f', 'prep/beta-release'] +E DEBUG: Running ['/usr/bin/git', 'submodule', 'update', '--checkout', '--init', '--recursive', '--force'] +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.bc0xynky +E DEBUG: Running ['/usr/bin/git', 'describe', '--tags', '--always'] +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: final clone URL = /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/s-ts +E ==== 1/4 - Initializing base template ==== +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/s-ts +E WARNING: Failed to get user info from git, please input your 'name' manually or use default placeholder. +E WARNING: Failed to get user info from git, please input your 'email' manually or use default placeholder. +E Starting template copy and render at /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples/s-ts... +E Unhandled ProcessExecutionError: Unexpected exit code: 128 +E Command line: | /usr/bin/git clone --no-checkout https://github.com/algorandfoundation/algokit-base-template.git /var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.fz6jg14s --filter=blob:none +E Stderr: | Cloning into '/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/copier._vcs.clone.fz6jg14s'... +E | fatal: unable to access 'https://github.com/algorandfoundation/algokit-base-template.git/': Could not resolve host: github.com +E [PYI-60002:ERROR] Failed to execute script '__main__' due to unhandled exception! +E DEBUG: Chdir to /private/var/folders/96/k83m8nkj3ts72l4jw7378sm80000gn/T/tmpmq4qoksj/template/examples +E Unhandled TaskError: Command 'algokit init -t base -n . --no-git --no-ide --no-bootstrap --no-workspace -a include_readme "no" -a include_algokit_toml "no" -a include_vscode_code_workspace "no" -a include_github_workflow_template "no"' returned non-zero exit status 1. +E [PYI-59954:ERROR] Failed to execute script '__main__' due to unhandled exception! +E +E assert 1 == 0 +E + where 1 = CompletedProcess(args=['algokit', '--verbose', 'init', '--name', 's-ts', '--template-url', '/var/folders/96/k83m8nkj3t...turned non-zero exit status 1.\n[PYI-59954:ERROR] Failed to execute script \'__main__\' due to unhandled exception!\n').returncode + +tests/test_templates.py:304: AssertionError \ No newline at end of file diff --git a/template_content/inject_content/AppCalls.tsx.jinja b/template_content/inject_content/AppCalls.tsx.jinja index 0cf4410..a55510e 100644 --- a/template_content/inject_content/AppCalls.tsx.jinja +++ b/template_content/inject_content/AppCalls.tsx.jinja @@ -9,6 +9,7 @@ import { OnSchemaBreak, OnUpdate } from '@algorandfoundation/algokit-utils/types {%- endif %} import { getAlgodConfigFromViteEnvironment, getIndexerConfigFromViteEnvironment } from '../utils/network/getAlgoClientConfigs' import { AlgorandClient } from '@algorandfoundation/algokit-utils' +import { encodeTransactionRaw } from '@algorandfoundation/algokit-utils/transact' interface AppCallsInterface { openModal: boolean @@ -19,7 +20,7 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { const [loading, setLoading] = useState(false) const [contractInput, setContractInput] = useState('') const { enqueueSnackbar } = useSnackbar() - const { transactionSigner, activeAddress } = useWallet() + const { signTransactions, activeAddress } = useWallet() const algodConfig = getAlgodConfigFromViteEnvironment() const indexerConfig = getIndexerConfigFromViteEnvironment() @@ -27,7 +28,11 @@ const AppCalls = ({ openModal, setModalState }: AppCallsInterface) => { algodConfig, indexerConfig, }) - algorand.setDefaultSigner(transactionSigner) + algorand.setDefaultSigner(async (txnGroup, indexesToSign) => { + const encoded = txnGroup.map((txn) => encodeTransactionRaw(txn)) + const signed = await signTransactions(encoded, indexesToSign) + return signed.filter((s): s is Uint8Array => s !== null) + }) const sendAppCall = async () => { setLoading(true) diff --git a/tests/test_templates.py b/tests/test_templates.py index 60d3670..0953c86 100644 --- a/tests/test_templates.py +++ b/tests/test_templates.py @@ -1,3 +1,4 @@ +import os import re import shutil import subprocess @@ -26,6 +27,8 @@ BUILD_ARGS = ["algokit", "project", "run", "build"] TEST_ARGS = ["algokit", "project", "run", "test"] LINT_ARGS = ["algokit", "project", "run", "lint"] +DEFAULT_CHILD_TEMPLATE_REF = "prep/beta-release" +CONTRACT_TEMPLATES_WITH_BETA_REF = {"python", "typescript"} def _load_copier_yaml(path: Path) -> dict[str, str | bool | dict]: @@ -151,9 +154,7 @@ def run_init( ) process.stdin.write(answer) process.stdin.flush() - time.sleep(0.1) - # Get the output stdout, stderr = process.communicate() @@ -238,6 +239,34 @@ def get_answered_questions_from_copier_yaml( answers["contract_template"] = contract_template answers["ide_vscode"] = "yes" if ide_vscode else "no" + frontend_template_url = os.getenv("FRONTEND_TEMPLATE_URL") + frontend_template_ref = os.getenv( + "FRONTEND_TEMPLATE_REF", DEFAULT_CHILD_TEMPLATE_REF + ) + contract_template_url = os.getenv("CONTRACT_TEMPLATE_URL") + default_contract_template_ref = ( + DEFAULT_CHILD_TEMPLATE_REF + if contract_template in CONTRACT_TEMPLATES_WITH_BETA_REF + else None + ) + contract_template_ref = os.getenv( + "CONTRACT_TEMPLATE_REF", default_contract_template_ref + ) + contract_template_url = os.getenv( + f"{contract_template.upper()}_CONTRACT_TEMPLATE_URL", contract_template_url + ) + contract_template_ref = os.getenv( + f"{contract_template.upper()}_CONTRACT_TEMPLATE_REF", contract_template_ref + ) + if frontend_template_url: + answers["frontend_template_url"] = frontend_template_url + if frontend_template_ref: + answers["frontend_template_ref"] = frontend_template_ref + if contract_template_url: + answers["contract_template_url"] = contract_template_url + if contract_template_ref: + answers["contract_template_ref"] = contract_template_ref + return answers